Skip to content

Commit

Permalink
feat: read tower presets from resources
Browse files Browse the repository at this point in the history
  • Loading branch information
ZakShearman committed Sep 29, 2024
1 parent 26e3f5d commit 27d459e
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import net.minestom.server.command.builder.CommandContext;
import net.minestom.server.command.builder.arguments.ArgumentLiteral;
import net.minestom.server.command.builder.arguments.ArgumentWord;
import net.minestom.server.command.builder.suggestion.SuggestionEntry;
import net.minestom.server.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
Expand All @@ -21,14 +22,21 @@
import pink.zak.minestom.towerdefence.model.user.GameUser;
import pink.zak.minestom.towerdefence.storage.TowerStorage;

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.Set;

public class TowerPresetCommand extends Command {
private static final Logger LOGGER = LoggerFactory.getLogger(TowerPresetCommand.class);
private static final Gson GSON = new Gson();

private static final List<SuggestionEntry> RESOURCE_ENTRIES = TowerPresetCommand.loadResourceEntries();

private final @NotNull GameHandler gameHandler;
private final @NotNull TowerManager towerManager;
private final @NotNull TowerStorage towerStorage;
Expand All @@ -42,9 +50,16 @@ public TowerPresetCommand(@NotNull GameHandler gameHandler, @NotNull TowerStorag
ArgumentLiteral saveArg = new ArgumentLiteral("save");
ArgumentLiteral loadArg = new ArgumentLiteral("load");
ArgumentWord presetIdArg = new ArgumentWord("presetId");
ArgumentWord presetIdLoadArg = new ArgumentWord("presetId");
presetIdLoadArg.setSuggestionCallback((sender, context, suggestion) -> {
String input = context.get("presetId");

this.getFileSystemEntries().forEach(suggestion::addEntry);
RESOURCE_ENTRIES.forEach(suggestion::addEntry);
});

this.addSyntax(this::executeSave, saveArg, presetIdArg);
this.addSyntax(this::executeLoad, loadArg, presetIdArg);
this.addSyntax(this::executeLoad, loadArg, presetIdLoadArg);
}

private void executeSave(CommandSender sender, CommandContext context) {
Expand Down Expand Up @@ -89,16 +104,28 @@ private void executeLoad(CommandSender sender, CommandContext context) {
}

String presetName = context.get("presetId");
boolean isResource = RESOURCE_ENTRIES.stream().anyMatch(entry -> entry.getEntry().equals(presetName));
String fileName = presetName + ".json";
Path path = Path.of("towerPresets", fileName);
if (!Files.exists(path)) {
sender.sendMessage("Tower preset does not exist.");
return;
}

JsonArray json;
try {
json = GSON.fromJson(Files.newBufferedReader(path), JsonArray.class);
if (isResource) {
try (Reader reader = new InputStreamReader(TowerPresetCommand.class.getClassLoader().getResourceAsStream("towerPresets/" + fileName))) {
json = GSON.fromJson(reader, JsonArray.class);
}
} else {
Path path = Path.of("towerPresets", fileName);
if (!Files.exists(path)) {
sender.sendMessage("Tower preset does not exist.");
return;
}

try (Reader reader = Files.newBufferedReader(path)) {
json = GSON.fromJson(reader, JsonArray.class);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
} catch (Exception e) {
LOGGER.error("Failed to load tower preset", e);
sender.sendMessage("Failed to load tower preset.");
Expand All @@ -112,4 +139,35 @@ private void executeLoad(CommandSender sender, CommandContext context) {
preset.placeTowers(this.towerStorage, this.towerManager, user);
sender.sendMessage(Component.text("Loaded preset %s with %s towers.".formatted(presetName, preset.getTowers().size()), NamedTextColor.GREEN));
}

private static List<SuggestionEntry> loadResourceEntries() {
URL resource = TowerPresetCommand.class.getClassLoader().getResource("towerPresets");
if (resource == null) return List.of();

try (var stream = Files.walk(Path.of(resource.toURI()))) {
return stream
.filter(Files::isRegularFile)
.map(Path::getFileName)
.map(Path::toString)
.map(fileName -> fileName.substring(0, fileName.lastIndexOf('.')))
.map(SuggestionEntry::new)
.toList();
} catch (Exception e) {
throw new RuntimeException(e);
}
}

private List<SuggestionEntry> getFileSystemEntries() {
try (var stream = Files.walk(Path.of("towerPresets"))) {
return stream
.filter(Files::isRegularFile)
.map(Path::getFileName)
.map(Path::toString)
.map(fileName -> fileName.substring(0, fileName.lastIndexOf('.')))
.map(SuggestionEntry::new)
.toList();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
1 change: 1 addition & 0 deletions src/main/resources/towerPresets/archer-stress.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"type":"ARCHER","level":5,"x":-3.5,"y":63.5,"z":-52.5},{"type":"ARCHER","level":5,"x":-21.5,"y":63.5,"z":-55.5},{"type":"ARCHER","level":5,"x":-6.5,"y":63.5,"z":-52.5},{"type":"ARCHER","level":5,"x":35.5,"y":63.5,"z":-50.5},{"type":"ARCHER","level":5,"x":38.5,"y":63.5,"z":-47.5},{"type":"ARCHER","level":5,"x":47.5,"y":63.5,"z":-26.5},{"type":"ARCHER","level":5,"x":26.5,"y":63.5,"z":-12.5},{"type":"ARCHER","level":5,"x":44.5,"y":63.5,"z":-9.5},{"type":"ARCHER","level":5,"x":-34.5,"y":63.5,"z":-12.5},{"type":"BLIZZARD","level":5,"x":9.5,"y":63.5,"z":-38.5},{"type":"ARCHER","level":5,"x":29.5,"y":63.5,"z":-52.5},{"type":"ARCHER","level":5,"x":15.5,"y":63.5,"z":-38.5},{"type":"ARCHER","level":5,"x":35.5,"y":63.5,"z":-44.5},{"type":"ARCHER","level":5,"x":-4.5,"y":63.5,"z":-9.5},{"type":"ARCHER","level":5,"x":4.5,"y":63.5,"z":-32.5},{"type":"ARCHER","level":5,"x":-36.5,"y":63.5,"z":-52.5},{"type":"ARCHER","level":5,"x":53.5,"y":63.5,"z":-26.5},{"type":"ARCHER","level":5,"x":-12.5,"y":63.5,"z":-46.5},{"type":"ARCHER","level":5,"x":1.5,"y":63.5,"z":-20.5},{"type":"ARCHER","level":5,"x":-27.5,"y":63.5,"z":-55.5},{"type":"ARCHER","level":5,"x":35.5,"y":63.5,"z":-29.5},{"type":"ARCHER","level":5,"x":38.5,"y":63.5,"z":-44.5},{"type":"ARCHER","level":5,"x":35.5,"y":63.5,"z":-35.5},{"type":"ARCHER","level":5,"x":-12.5,"y":63.5,"z":-55.5},{"type":"ARCHER","level":5,"x":-24.5,"y":63.5,"z":-55.5},{"type":"ARCHER","level":5,"x":-9.5,"y":63.5,"z":-55.5},{"type":"ARCHER","level":5,"x":18.5,"y":63.5,"z":-27.5},{"type":"ARCHER","level":5,"x":-15.5,"y":63.5,"z":-43.5},{"type":"ARCHER","level":5,"x":17.5,"y":63.5,"z":-12.5},{"type":"BLIZZARD","level":5,"x":-12.5,"y":63.5,"z":-26.5},{"type":"ARCHER","level":5,"x":26.5,"y":63.5,"z":-52.5},{"type":"ARCHER","level":5,"x":4.5,"y":63.5,"z":-26.5},{"type":"ARCHER","level":5,"x":-46.5,"y":63.5,"z":-28.5},{"type":"ARCHER","level":5,"x":1.5,"y":63.5,"z":-32.5},{"type":"ARCHER","level":5,"x":-9.5,"y":63.5,"z":-52.5},{"type":"ARCHER","level":5,"x":35.5,"y":63.5,"z":-41.5},{"type":"ARCHER","level":5,"x":-29.5,"y":63.5,"z":-35.5},{"type":"ARCHER","level":5,"x":18.5,"y":63.5,"z":-36.5},{"type":"ARCHER","level":5,"x":-13.5,"y":63.5,"z":-12.5},{"type":"ARCHER","level":5,"x":-34.5,"y":63.5,"z":-9.5},{"type":"ARCHER","level":5,"x":38.5,"y":63.5,"z":-50.5},{"type":"ARCHER","level":5,"x":-43.5,"y":63.5,"z":-46.5},{"type":"ARCHER","level":5,"x":-10.5,"y":63.5,"z":-12.5},{"type":"ARCHER","level":5,"x":21.5,"y":63.5,"z":-15.5},{"type":"ARCHER","level":5,"x":50.5,"y":63.5,"z":-29.5},{"type":"ARCHER","level":5,"x":38.5,"y":63.5,"z":-32.5},{"type":"ARCHER","level":5,"x":1.5,"y":63.5,"z":-26.5},{"type":"ARCHER","level":5,"x":-1.5,"y":63.5,"z":-12.5},{"type":"ARCHER","level":5,"x":2.5,"y":63.5,"z":-55.5},{"type":"ARCHER","level":5,"x":-0.5,"y":63.5,"z":-55.5},{"type":"ARCHER","level":5,"x":21.5,"y":63.5,"z":-30.5},{"type":"ARCHER","level":5,"x":38.5,"y":63.5,"z":-53.5},{"type":"ARCHER","level":5,"x":56.5,"y":63.5,"z":-26.5},{"type":"ARCHER","level":5,"x":18.5,"y":63.5,"z":-24.5},{"type":"ARCHER","level":5,"x":-31.5,"y":63.5,"z":-12.5},{"type":"ARCHER","level":5,"x":20.5,"y":63.5,"z":-12.5},{"type":"ARCHER","level":5,"x":-30.5,"y":63.5,"z":-55.5},{"type":"ARCHER","level":5,"x":-46.5,"y":63.5,"z":-37.5},{"type":"ARCHER","level":5,"x":17.5,"y":63.5,"z":-55.5},{"type":"ARCHER","level":5,"x":18.5,"y":63.5,"z":-21.5},{"type":"ARCHER","level":5,"x":21.5,"y":63.5,"z":-27.5},{"type":"ARCHER","level":5,"x":-28.5,"y":63.5,"z":-9.5},{"type":"ARCHER","level":5,"x":-12.5,"y":63.5,"z":-52.5},{"type":"ARCHER","level":5,"x":-29.5,"y":63.5,"z":-32.5},{"type":"ARCHER","level":5,"x":1.5,"y":63.5,"z":-11.5},{"type":"ARCHER","level":5,"x":21.5,"y":63.5,"z":-36.5},{"type":"ARCHER","level":5,"x":8.5,"y":63.5,"z":-52.5},{"type":"ARCHER","level":5,"x":35.5,"y":63.5,"z":-12.5},{"type":"ARCHER","level":5,"x":-40.5,"y":63.5,"z":-12.5},{"type":"ARCHER","level":5,"x":15.5,"y":63.5,"z":-35.5},{"type":"ARCHER","level":5,"x":20.5,"y":63.5,"z":-9.5},{"type":"ARCHER","level":5,"x":12.5,"y":63.5,"z":-35.5},{"type":"ARCHER","level":5,"x":3.5,"y":63.5,"z":-38.5},{"type":"ARCHER","level":5,"x":-16.5,"y":63.5,"z":-9.5},{"type":"ARCHER","level":5,"x":21.5,"y":63.5,"z":-18.5},{"type":"ARCHER","level":5,"x":-21.5,"y":63.5,"z":-52.5},{"type":"ARCHER","level":5,"x":56.5,"y":63.5,"z":-12.5},{"type":"ARCHER","level":5,"x":-29.5,"y":63.5,"z":-20.5},{"type":"ARCHER","level":5,"x":-19.5,"y":63.5,"z":-9.5},{"type":"ARCHER","level":5,"x":50.5,"y":63.5,"z":-9.5},{"type":"ARCHER","level":5,"x":-43.5,"y":63.5,"z":-34.5},{"type":"ARCHER","level":5,"x":-43.5,"y":63.5,"z":-31.5},{"type":"ARCHER","level":5,"x":23.5,"y":63.5,"z":-9.5},{"type":"ARCHER","level":5,"x":18.5,"y":63.5,"z":-33.5},{"type":"ARCHER","level":5,"x":44.5,"y":63.5,"z":-26.5},{"type":"ARCHER","level":5,"x":-12.5,"y":63.5,"z":-31.5},{"type":"ARCHER","level":5,"x":-7.5,"y":63.5,"z":-9.5},{"type":"ARCHER","level":5,"x":-18.5,"y":63.5,"z":-55.5},{"type":"ARCHER","level":5,"x":-12.5,"y":63.5,"z":-49.5},{"type":"ARCHER","level":5,"x":32.5,"y":63.5,"z":-52.5},{"type":"ARCHER","level":5,"x":-39.5,"y":63.5,"z":-55.5},{"type":"ARCHER","level":5,"x":41.5,"y":63.5,"z":-29.5},{"type":"ARCHER","level":5,"x":32.5,"y":63.5,"z":-55.5},{"type":"ARCHER","level":5,"x":-46.5,"y":63.5,"z":-49.5},{"type":"ARCHER","level":5,"x":4.5,"y":63.5,"z":-29.5},{"type":"ARCHER","level":5,"x":-46.5,"y":63.5,"z":-43.5},{"type":"ARCHER","level":5,"x":38.5,"y":63.5,"z":-41.5},{"type":"ARCHER","level":5,"x":-0.5,"y":63.5,"z":-52.5},{"type":"ARCHER","level":5,"x":-43.5,"y":63.5,"z":-49.5},{"type":"ARCHER","level":5,"x":18.5,"y":63.5,"z":-15.5},{"type":"ARCHER","level":5,"x":-18.5,"y":63.5,"z":-52.5},{"type":"ARCHER","level":5,"x":32.5,"y":63.5,"z":-9.5},{"type":"ARCHER","level":5,"x":44.5,"y":63.5,"z":-12.5},{"type":"ARCHER","level":5,"x":-15.5,"y":63.5,"z":-28.5},{"type":"ARCHER","level":5,"x":-15.5,"y":63.5,"z":-55.5},{"type":"ARCHER","level":5,"x":20.5,"y":63.5,"z":-52.5},{"type":"ARCHER","level":5,"x":5.5,"y":63.5,"z":-52.5},{"type":"ARCHER","level":5,"x":-46.5,"y":63.5,"z":-46.5},{"type":"ARCHER","level":5,"x":50.5,"y":63.5,"z":-26.5},{"type":"ARCHER","level":5,"x":4.5,"y":63.5,"z":-14.5},{"type":"ARCHER","level":5,"x":-22.5,"y":63.5,"z":-9.5},{"type":"ARCHER","level":5,"x":35.5,"y":63.5,"z":-53.5},{"type":"ARCHER","level":5,"x":-4.5,"y":63.5,"z":-12.5},{"type":"ARCHER","level":5,"x":-29.5,"y":63.5,"z":-26.5},{"type":"ARCHER","level":5,"x":56.5,"y":63.5,"z":-9.5},{"type":"ARCHER","level":5,"x":21.5,"y":63.5,"z":-24.5},{"type":"ARCHER","level":5,"x":47.5,"y":63.5,"z":-9.5},{"type":"ARCHER","level":5,"x":-29.5,"y":63.5,"z":-17.5},{"type":"ARCHER","level":5,"x":-36.5,"y":63.5,"z":-55.5},{"type":"ARCHER","level":5,"x":35.5,"y":63.5,"z":-9.5},{"type":"ARCHER","level":5,"x":-37.5,"y":63.5,"z":-9.5},{"type":"ARCHER","level":5,"x":-43.5,"y":63.5,"z":-9.5},{"type":"ARCHER","level":5,"x":11.5,"y":63.5,"z":-55.5},{"type":"ARCHER","level":5,"x":-45.5,"y":63.5,"z":-52.5},{"type":"ARCHER","level":5,"x":11.5,"y":63.5,"z":-52.5},{"type":"ARCHER","level":5,"x":-15.5,"y":63.5,"z":-34.5},{"type":"BLIZZARD","level":5,"x":38.5,"y":63.5,"z":-26.5},{"type":"ARCHER","level":5,"x":38.5,"y":63.5,"z":-38.5},{"type":"ARCHER","level":5,"x":44.5,"y":63.5,"z":-29.5},{"type":"ARCHER","level":5,"x":-1.5,"y":63.5,"z":-9.5},{"type":"BLIZZARD","level":5,"x":-46.5,"y":63.5,"z":-12.5},{"type":"ARCHER","level":5,"x":4.5,"y":63.5,"z":-20.5},{"type":"ARCHER","level":5,"x":1.5,"y":63.5,"z":-14.5},{"type":"ARCHER","level":5,"x":18.5,"y":63.5,"z":-30.5},{"type":"ARCHER","level":5,"x":47.5,"y":63.5,"z":-12.5},{"type":"ARCHER","level":5,"x":21.5,"y":63.5,"z":-33.5},{"type":"ARCHER","level":5,"x":12.5,"y":63.5,"z":-38.5},{"type":"BLIZZARD","level":5,"x":-29.5,"y":63.5,"z":-38.5},{"type":"ARCHER","level":5,"x":56.5,"y":63.5,"z":-29.5},{"type":"ARCHER","level":5,"x":50.5,"y":63.5,"z":-12.5},{"type":"ARCHER","level":5,"x":17.5,"y":63.5,"z":-9.5},{"type":"ARCHER","level":5,"x":35.5,"y":63.5,"z":-38.5},{"type":"ARCHER","level":5,"x":41.5,"y":63.5,"z":-12.5},{"type":"ARCHER","level":5,"x":47.5,"y":63.5,"z":-29.5},{"type":"ARCHER","level":5,"x":-46.5,"y":63.5,"z":-31.5},{"type":"ARCHER","level":5,"x":-12.5,"y":63.5,"z":-37.5},{"type":"ARCHER","level":5,"x":38.5,"y":63.5,"z":-29.5},{"type":"ARCHER","level":5,"x":-43.5,"y":63.5,"z":-37.5},{"type":"ARCHER","level":5,"x":-29.5,"y":63.5,"z":-23.5},{"type":"ARCHER","level":5,"x":8.5,"y":63.5,"z":-55.5},{"type":"ARCHER","level":5,"x":53.5,"y":63.5,"z":-12.5},{"type":"ARCHER","level":5,"x":6.5,"y":63.5,"z":-35.5},{"type":"ARCHER","level":5,"x":-27.5,"y":63.5,"z":-52.5},{"type":"ARCHER","level":5,"x":-15.5,"y":63.5,"z":-37.5},{"type":"ARCHER","level":5,"x":29.5,"y":63.5,"z":-55.5},{"type":"ARCHER","level":5,"x":-30.5,"y":63.5,"z":-52.5},{"type":"ARCHER","level":5,"x":35.5,"y":63.5,"z":-32.5},{"type":"ARCHER","level":5,"x":-37.5,"y":63.5,"z":-12.5},{"type":"ARCHER","level":5,"x":17.5,"y":63.5,"z":-52.5},{"type":"ARCHER","level":5,"x":1.5,"y":63.5,"z":-17.5},{"type":"ARCHER","level":5,"x":-7.5,"y":63.5,"z":-12.5},{"type":"ARCHER","level":5,"x":23.5,"y":63.5,"z":-12.5},{"type":"ARCHER","level":5,"x":-13.5,"y":63.5,"z":-9.5},{"type":"ARCHER","level":5,"x":14.5,"y":63.5,"z":-55.5},{"type":"ARCHER","level":5,"x":-12.5,"y":63.5,"z":-40.5},{"type":"ARCHER","level":5,"x":-46.5,"y":63.5,"z":-40.5},{"type":"ARCHER","level":5,"x":35.5,"y":63.5,"z":-26.5},{"type":"ARCHER","level":5,"x":38.5,"y":63.5,"z":-12.5},{"type":"ARCHER","level":5,"x":-31.5,"y":63.5,"z":-9.5},{"type":"ARCHER","level":5,"x":-28.5,"y":63.5,"z":-12.5},{"type":"ARCHER","level":5,"x":-29.5,"y":63.5,"z":-29.5},{"type":"ARCHER","level":5,"x":26.5,"y":63.5,"z":-9.5},{"type":"ARCHER","level":5,"x":-25.5,"y":63.5,"z":-9.5},{"type":"ARCHER","level":5,"x":-42.5,"y":63.5,"z":-55.5},{"type":"ARCHER","level":5,"x":-46.5,"y":63.5,"z":-34.5},{"type":"ARCHER","level":5,"x":-15.5,"y":63.5,"z":-46.5},{"type":"ARCHER","level":5,"x":-43.5,"y":63.5,"z":-43.5},{"type":"ARCHER","level":5,"x":9.5,"y":63.5,"z":-35.5},{"type":"ARCHER","level":5,"x":4.5,"y":63.5,"z":-23.5},{"type":"ARCHER","level":5,"x":38.5,"y":63.5,"z":-9.5},{"type":"ARCHER","level":5,"x":41.5,"y":63.5,"z":-9.5},{"type":"ARCHER","level":5,"x":23.5,"y":63.5,"z":-55.5},{"type":"ARCHER","level":5,"x":3.5,"y":63.5,"z":-35.5},{"type":"ARCHER","level":5,"x":-40.5,"y":63.5,"z":-9.5},{"type":"ARCHER","level":5,"x":29.5,"y":63.5,"z":-12.5},{"type":"ARCHER","level":5,"x":-19.5,"y":63.5,"z":-12.5},{"type":"ARCHER","level":5,"x":-15.5,"y":63.5,"z":-40.5},{"type":"ARCHER","level":5,"x":14.5,"y":63.5,"z":-52.5},{"type":"ARCHER","level":5,"x":29.5,"y":63.5,"z":-9.5},{"type":"ARCHER","level":5,"x":4.5,"y":63.5,"z":-11.5},{"type":"ARCHER","level":5,"x":-10.5,"y":63.5,"z":-9.5},{"type":"ARCHER","level":5,"x":-43.5,"y":63.5,"z":-40.5},{"type":"ARCHER","level":5,"x":-15.5,"y":63.5,"z":-49.5},{"type":"ARCHER","level":5,"x":-33.5,"y":63.5,"z":-52.5},{"type":"ARCHER","level":5,"x":-22.5,"y":63.5,"z":-12.5},{"type":"ARCHER","level":5,"x":18.5,"y":63.5,"z":-18.5},{"type":"ARCHER","level":5,"x":4.5,"y":63.5,"z":-17.5},{"type":"ARCHER","level":5,"x":41.5,"y":63.5,"z":-26.5},{"type":"ARCHER","level":5,"x":53.5,"y":63.5,"z":-9.5},{"type":"ARCHER","level":5,"x":-6.5,"y":63.5,"z":-55.5},{"type":"ARCHER","level":5,"x":-3.5,"y":63.5,"z":-55.5},{"type":"ARCHER","level":5,"x":-25.5,"y":63.5,"z":-12.5},{"type":"ARCHER","level":5,"x":-45.5,"y":63.5,"z":-55.5},{"type":"ARCHER","level":5,"x":-15.5,"y":63.5,"z":-31.5},{"type":"ARCHER","level":5,"x":1.5,"y":63.5,"z":-29.5},{"type":"ARCHER","level":5,"x":-16.5,"y":63.5,"z":-12.5},{"type":"ARCHER","level":5,"x":38.5,"y":63.5,"z":-35.5},{"type":"ARCHER","level":5,"x":53.5,"y":63.5,"z":-29.5},{"type":"ARCHER","level":5,"x":23.5,"y":63.5,"z":-52.5},{"type":"ARCHER","level":5,"x":-12.5,"y":63.5,"z":-43.5},{"type":"ARCHER","level":5,"x":35.5,"y":63.5,"z":-47.5},{"type":"ARCHER","level":5,"x":26.5,"y":63.5,"z":-55.5},{"type":"ARCHER","level":5,"x":21.5,"y":63.5,"z":-21.5},{"type":"ARCHER","level":5,"x":-12.5,"y":63.5,"z":-34.5},{"type":"ARCHER","level":5,"x":-39.5,"y":63.5,"z":-52.5},{"type":"ARCHER","level":5,"x":5.5,"y":63.5,"z":-55.5},{"type":"ARCHER","level":5,"x":20.5,"y":63.5,"z":-55.5},{"type":"ARCHER","level":5,"x":-43.5,"y":63.5,"z":-28.5},{"type":"ARCHER","level":5,"x":-42.5,"y":63.5,"z":-52.5},{"type":"ARCHER","level":5,"x":-46.5,"y":63.5,"z":-9.5},{"type":"ARCHER","level":5,"x":-15.5,"y":63.5,"z":-52.5},{"type":"ARCHER","level":5,"x":-33.5,"y":63.5,"z":-55.5},{"type":"ARCHER","level":5,"x":1.5,"y":63.5,"z":-23.5},{"type":"ARCHER","level":5,"x":-24.5,"y":63.5,"z":-52.5},{"type":"ARCHER","level":5,"x":6.5,"y":63.5,"z":-38.5},{"type":"ARCHER","level":5,"x":32.5,"y":63.5,"z":-12.5},{"type":"ARCHER","level":5,"x":2.5,"y":63.5,"z":-52.5}]
Loading

0 comments on commit 27d459e

Please sign in to comment.