public static void setName(ParserState state, int playerId, String playerName) { List<PlayerEntity> players = state.getPlayers(); String oldName = null; for (PlayerEntity entity : players) { if (entity.getPlayerId() == playerId && !playerName.equals(entity.getName())) { oldName = entity.getName(); entity.setName(playerName); } } for (PlayerEntity entity : players) { if (entity.getPlayerId() != playerId) { if (playerName.equals(entity.getName())) { entity.setName(null); } else if (oldName != null) { entity.setName(oldName); } } } // for (GameData x : gameData) { // if (x instanceof PlayerEntity && ((PlayerEntity) x).getPlayerId() == // playerId) { // ((PlayerEntity) x).setName(playerName); // break; // } // } }
public BaseEntity getEntity(int id) { return filterGameData(FullEntity.class, PlayerEntity.class).stream() .map(data -> (BaseEntity) data) .filter(e -> e.getId() == id) .findFirst() .orElse(null); }
private String getPlayerCardId(HearthstoneReplay replay, PlayerEntity player) { List<GameData> data = replay.getGames().get(0).getData(); int playerEntityId = player.getTags().stream().filter(t -> t.getName() == GameTag.HERO_ENTITY.getIntValue()) .findFirst().get().getValue(); FullEntity playerEntity = data.stream().filter(d -> (d instanceof FullEntity)).map(e -> (FullEntity) e) .filter(e -> e.getId() == playerEntityId).findFirst().get(); return playerEntity.getCardId(); }
String id = match.group(1); if (Integer.parseInt(id) != 1) { throw new Exception("Game ID incorrect! " + id); } GameEntity gEntity = new GameEntity(Integer.parseInt(id), new ArrayList<Tag>()); state.getCurrentGame().getData().add(gEntity); Node node = new Node(GameEntity.class, gEntity, indentLevel, state.getNode()); String accountHi = match.group(3); String accountLo = match.group(4); PlayerEntity pEntity = PlayerEntity.builder().accountHi(accountHi).accountLo(accountLo) .playerId(Integer.parseInt(playerId)).build(); pEntity.setTags(new ArrayList<Tag>()); pEntity.setId(Integer.parseInt(id)); state.updateCurrentNode(Game.class); state.getCurrentGame().getData().add(pEntity); int entity = Helper.parseEntity(rawEntity, state); FullEntity fullEntity = new FullEntity(timestamp, cardId, entity, new ArrayList<Tag>()); state.updateCurrentNode(Game.class, Action.class); state.setFirstPlayerId(((PlayerEntity) state.getNode().getObject()).getId()); ((GameEntity) state.getNode().getObject()).getTags().add(tag); ((PlayerEntity) state.getNode().getObject()).getTags().add(tag); ((FullEntity) state.getNode().getObject()).getTags().add(tag);
PlayerEntity firstPlayer = null; for (GameData x : gameData) { if (x instanceof PlayerEntity && ((PlayerEntity) x).getId() == state.getFirstPlayerId()) { firstPlayer = (PlayerEntity) x; break; if (x instanceof PlayerEntity && ((PlayerEntity) x).getId() != state.getFirstPlayerId()) { secondPlayer = (PlayerEntity) x; break; if (data.equals(firstPlayer.getName())) { return firstPlayer.getId(); } if (data.equals(secondPlayer.getName())) { return secondPlayer.getId(); } if (StringUtils.isEmpty(firstPlayer.getName())) { firstPlayer.setName(data); return firstPlayer.getId(); if (StringUtils.isEmpty(secondPlayer.getName())) { secondPlayer.setName(data); return secondPlayer.getId(); if ("UNKNOWN HUMAN PLAYER".equals(firstPlayer.getName()) || "The Innkeeper".equals(firstPlayer.getName())) { firstPlayer.setName(data); return firstPlayer.getId(); if ("UNKNOWN HUMAN PLAYER".equals(secondPlayer.getName()) || "The Innkeeper".equals(secondPlayer.getName())) { secondPlayer.setName(data); return secondPlayer.getId();
private PlayerEntity extractMainPlayer() { List<ShowEntity> showEntities = filterGameData(ShowEntity.class); for (ShowEntity entity : showEntities) { if (StringUtils.isNotEmpty(entity.getCardId()) && getTag(entity.getTags(), GameTag.CARDTYPE) != CardType.ENCHANTMENT.getIntValue()) { int entityId = entity.getEntity(); // The full entity BaseEntity fullEntity = getEntity(entityId); // Now check the CONTROLLER tag int controllerId = getTag(fullEntity.getTags(), GameTag.CONTROLLER); for (PlayerEntity player : getPlayers()) { if (getTag(player.getTags(), GameTag.CONTROLLER) == controllerId) { return player; } } } } return null; }
int ourEntityId = player.getId(); PlayerEntity player1 = players.stream().filter(p -> p.getId() == ourEntityId).findFirst().get(); PlayerEntity player2 = players.stream().filter(p -> p.getId() != ourEntityId).findFirst().get(); meta.setPlayerName(player1.getName()); meta.setPlayerClass(getPlayerClass(replay, player1)); meta.setPlayerCardId(getPlayerCardId(replay, player1)); meta.setOpponentName(player2.getName()); meta.setOpponentClass(getPlayerClass(replay, player2)); meta.setOpponentCardId(getPlayerCardId(replay, player2));
private PlayerEntity extractPuzzlePlayer() { List<PlayerEntity> players = getPlayers(); for (PlayerEntity player : players) { int entityId = getTag(player.getTags(), GameTag.HERO_ENTITY); FullEntity entity = (FullEntity) getEntity(entityId); if (entity == null) { continue; } int functionallyDeadTag = getTag(player.getTags(), GameTag.APPEAR_FUNCTIONALLY_DEAD); if (functionallyDeadTag != -1) { continue; } return player; } return null; }
private int updatePlayerEntity(ParserState state, String rawEntity, Tag tag, int entity) { if (!Utils.isInteger(rawEntity) && !rawEntity.startsWith("[") && !rawEntity.equals("GameEntity")) { if (entity != tag.getValue()) { entity = tag.getValue(); String tmpName = ((PlayerEntity) state.getCurrentGame().getData().get(1)).getName(); ((PlayerEntity) state.getCurrentGame().getData().get(1)) .setName(((PlayerEntity) state.getCurrentGame().getData().get(2)).getName()); ((PlayerEntity) state.getCurrentGame().getData().get(2)).setName(tmpName); for (Object obj : ((Game) state.getNode().getObject()).getData()) { TagChange tChange = obj instanceof TagChange ? (TagChange) obj : null; if (tChange != null) { tChange.setEntity(tChange.getEntity() == 2 ? 3 : 2); } } } } return entity; }
private String getPlayerClass(HearthstoneReplay replay, PlayerEntity player) { List<GameData> data = replay.getGames().get(0).getData(); int playerEntityId = player.getTags().stream().filter(t -> t.getName() == GameTag.HERO_ENTITY.getIntValue()) .findFirst().get().getValue(); FullEntity playerEntity = data.stream().filter(d -> (d instanceof FullEntity)).map(e -> (FullEntity) e) .filter(e -> e.getId() == playerEntityId).findFirst().get(); return cardsList.getDbCards().stream() .filter(c -> playerEntity.getCardId().equalsIgnoreCase(c.getId())) .findFirst() .map(DbCard::getPlayerClass) .map(String::toLowerCase) .orElse("unknown"); }