public List<PlayerEntity> getPlayers() { List<PlayerEntity> players = new ArrayList<>(); for (GameData x : currentGame.getData()) { if (x instanceof PlayerEntity) { players.add((PlayerEntity) x); } } return players; }
private void buildFullEntityList() { // Keep the chronological ordering for (GameData data : game.getData()) { flatData.add(data); extractData(data); } }
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(); }
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"); }
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; }
public void read(HearthstoneReplay replay) { // read replay file and notify of turns/events etc. if (replay.getGames() == null || replay.getGames().isEmpty()) { return; } // For now support only a single game Game game = replay.getGames().get(0); helper.setGame(game); List<GameData> data = game.getData(); for (GameData gameData : data) { readData(gameData); } }
public static void handle(String timestamp, String data, ParserState state) throws Exception { data = data.trim(); Matcher match = Regexes.SendOptionRegex.matcher(data); if (match.matches()) { String option = match.group(1); String suboption = match.group(2); String target = match.group(3); String position = match.group(4); SendOption sendOption = SendOption.builder().optionIndex(Integer.parseInt(option)) .position(Integer.parseInt(position)).subOption(Integer.parseInt(suboption)) .target(Integer.parseInt(target)).build(); if (state.getNode().getType().isAssignableFrom(Game.class)) ((Game) state.getNode().getObject()).getData().add(sendOption); else throw new Exception("Invalid node " + state.getNode().getType()); } } }
public static void handle(String timestamp, String data, ParserState state) throws Exception { data = data.trim(); Matcher match = Regexes.SendChoicesChoicetypeRegex.matcher(data); if (match.matches()) { String id = match.group(1); String rawType = match.group(2); int type = ChoiceType.parseEnum(rawType); SendChoices sendChoices = new SendChoices(timestamp, new ArrayList<Choice>(), Integer.parseInt(id), type); state.setSendChoices(sendChoices); if (state.getNode().getType().isAssignableFrom(Game.class)) ((Game) state.getNode().getObject()).getData().add(sendChoices); else if (state.getNode().getType().isAssignableFrom(Action.class)) ((Action) state.getNode().getObject()).getData().add(sendChoices); else throw new Exception("Invalid node " + state.getNode().getType()); return; } match = Regexes.SendChoicesEntitiesRegex.matcher(data); if (match.matches()) { int index = Helper.parseEntity(match.group(1), state); int id = Helper.parseEntity(match.group(2), state); Choice choice = new Choice(id, index); state.getSendChoices().getChoices().add(choice); } }
((Game) state.getNode().getObject()).getData().add(cEntities);
((Game) state.getNode().getObject()).getData().add(options);
((Game) state.getNode().getObject()).getData().add(state.getChoices());
private static int getPlayerIdFromName(String data, ParserState state) throws Exception { List<GameData> gameData = state.getCurrentGame().getData(); PlayerEntity firstPlayer = null; for (GameData x : gameData) {
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()); state.setNode(node); pEntity.setId(Integer.parseInt(id)); state.updateCurrentNode(Game.class); state.getCurrentGame().getData().add(pEntity); Node node = new Node(PlayerEntity.class, pEntity, indentLevel, state.getNode()); state.setNode(node); ((Game) state.getNode().getObject()).getData().add(action); ((Game) state.getNode().getObject()).getData().add(action); ((Game) state.getNode().getObject()).getData().add(action); ((Game) state.getNode().getObject()).getData().add(action); ((Game) state.getNode().getObject()).getData().add(action); ((Game) state.getNode().getObject()).getData().add(action); ((Game) state.getNode().getObject()).getData().add(showEntity); ((Game) state.getNode().getObject()).getData().add(changeEntity); ((Game) state.getNode().getObject()).getData().add(hideEntity);
private void updateCurrentPlayer(ParserState state, String rawEntity, Tag tag) throws Exception { List<GameData> data = state.getCurrentGame().getData(); if (tag.getValue() == 0) { try {