aboutsummaryrefslogtreecommitdiff
path: root/mod
diff options
context:
space:
mode:
authorWalker Selby <git@walkerselby.com>2023-01-23 16:28:35 -0800
committersyeyoung <cyoung06@naver.com>2023-01-24 16:00:19 +0900
commit1eabe963591bcfdf0936356a49c0981107830655 (patch)
tree663b7f1109acf96a0d2ac8961623325f757e20da /mod
parentc5f07e101c60d1e332e43edf7fc0343feb12483d (diff)
downloadSkyblock-Dungeons-Guide-1eabe963591bcfdf0936356a49c0981107830655.tar.gz
Skyblock-Dungeons-Guide-1eabe963591bcfdf0936356a49c0981107830655.tar.bz2
Skyblock-Dungeons-Guide-1eabe963591bcfdf0936356a49c0981107830655.zip
Adjust isDev check to allow users other than syeyoung to run /saverooms
Make subcommand arguments case insensitive Reorganize into functions for better readability Migrate sender.addChatMessage calls to ChatTransmitter.addToQueue Effectively revert the prior change of .equalsIgnoreCase -> I missed line 84 where arg is arg[0].toLowerCase() Migrate to a switch statement for ease of readability Add tab support
Diffstat (limited to 'mod')
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/commands/CommandDgDebug.java841
-rwxr-xr-xmod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomfinder/DungeonRoomInfoRegistry.java19
2 files changed, 517 insertions, 343 deletions
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/commands/CommandDgDebug.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/commands/CommandDgDebug.java
index 9b0c8af7..c49b6264 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/commands/CommandDgDebug.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/commands/CommandDgDebug.java
@@ -51,6 +51,7 @@ import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.command.CommandBase;
import net.minecraft.command.CommandException;
import net.minecraft.command.ICommandSender;
+import net.minecraft.util.BlockPos;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.Tuple;
import net.minecraftforge.common.MinecraftForge;
@@ -78,396 +79,554 @@ public class CommandDgDebug extends CommandBase {
return "dgdebug";
}
+ //List of subcommands for tab support
+ private static final String[] SUBCOMMANDS = {
+ "scoreboard",
+ "scoreboardclean",
+ "tablist",
+ "mockdungeonstart",
+ "saverooms",
+ "loadrooms",
+ "reloadah",
+ "brand",
+ "pathfind",
+ "process",
+ "check",
+ "reloaddungeon",
+ "partyid",
+ "loc",
+ "saverun",
+ "requeststaticresource",
+ "createfakeroom",
+ "closecontext",
+ "dumpsettings",
+ "readmap",
+ "testgui",
+ "clearprofile"
+ };
+
+ @Override
+ public List<String> addTabCompletionOptions(ICommandSender sender, String[] args, BlockPos pos) {
+ if (args.length == 1) {
+ return CommandBase.getListOfStringsMatchingLastWord(args, SUBCOMMANDS);
+ }
+ return Collections.emptyList();
+ }
+
@Override
public void processCommand(ICommandSender sender, String[] args) throws CommandException {
- if (args.length == 0) return;
- String arg = args[0].toLowerCase();
+ if (args.length == 0) {
+ return;
+ }
+ switch (args[0].toLowerCase()) { //Case Insensitive
+ case "scoreboard":
+ scoreboardCommand();
+ break;
+ case "scoreboardclean":
+ scoreboardCleanCommand();
+ break;
+ case "tablist":
+ tabListCommand();
+ break;
+ case "mockdungeonstart":
+ mockDungeonStartCommand(args);
+ break;
+ case "saverooms":
+ saveRoomsCommand();
+ break;
+ case "loadrooms":
+ loadRoomsCommand();
+ break;
+ case "reloadah":
+ reloadAHCommand();
+ break;
+ case "brand":
+ brandCommand();
+ break;
+ case "pathfind":
+ pathfindCommand(args);
+ break;
+ case "process":
+ processCommand1();
+ break;
+ case "check":
+ checkCommand();
+ break;
+ case "reloaddungeon":
+ reloadDungeonCommand();
+ break;
+ case "partyid":
+ partyIdCommand();
+ break;
+ case "loc":
+ locCommand();
+ break;
+ case "saverun":
+ saveRunCommand();
+ break;
+ case "requeststaticresource":
+ requestStaticResource(args);
+ break;
+ case "createfakeroom": // load schematic
+ createFakeRoomCommand();
+ break;
+ case "closecontext":
+ closeContextCommand();
+ break;
+ case "dumpsettings":
+ dumpSettingsCommand();
+ break;
+ case "readmap":
+ readMapCommand(args);
+ break;
+ case "testgui":
+ testGuiCommand();
+ break;
+ case "clearprofile":
+ clearProfileCommand();
+ break;
+ default:
+ ChatTransmitter.addToQueue(new ChatComponentText("ain't gonna find much anything here"));
+ ChatTransmitter.addToQueue(new ChatComponentText("§eDungeons Guide §7:: §e/dg loadrooms §7-§f Reloads dungeon roomdata."));
+ ChatTransmitter.addToQueue(new ChatComponentText("§eDungeons Guide §7:: §e/dg brand §7-§f View server brand."));
+ ChatTransmitter.addToQueue(new ChatComponentText("§eDungeons Guide §7:: §e/dg info §7-§f View Current DG User info."));
+ ChatTransmitter.addToQueue(new ChatComponentText("§eDungeons Guide §7:: §e/dg saverun §7-§f Save run to be sent to developer."));
+ ChatTransmitter.addToQueue(new ChatComponentText("§eDungeons Guide §7:: §e/dg saverooms §7-§f Saves usergenerated dungeon roomdata."));
+ break;
+ }
+ }
- if ("scoreboard".equals(arg)) {
- for (Score score : ScoreboardManager.INSTANCE.getSidebarObjective().getScores()) {
- ChatTransmitter.addToQueue("LINE: " + score.getVisibleName()+": "+score.getScore());
- }
- } else if ("scoreboardclean".equals(arg)) {
- for (Score score : ScoreboardManager.INSTANCE.getSidebarObjective().getScores()) {
- ChatTransmitter.addToQueue("LINE: " + score.getJustTeam()+": "+score.getScore());
- }
- }else if ("tablist".equals(arg)) {
- for (TabListEntry entry : TabList.INSTANCE.getTabListEntries()) {
- ChatTransmitter.addToQueue(entry.getFormatted()+" "+entry.getEffectiveName()+"("+entry.getPing()+")" + entry.getGameMode());
- }
- ChatTransmitter.addToQueue("VS");
- } else if ("mockdungeonstart".equals(arg)) {
- if (!Minecraft.getMinecraft().isSingleplayer()) {
- ChatTransmitter.addToQueue("This only works in singlepayer", false);
- return;
+ @Override
+ public int getRequiredPermissionLevel() {
+ return 0;
+ }
+
+ //BEGIN COMMANDS FROM ARGS[0]
+
+ private void scoreboardCommand() {
+ for (Score score : ScoreboardManager.INSTANCE.getSidebarObjective().getScores()) {
+ ChatTransmitter.addToQueue("LINE: " + score.getVisibleName() + ": " + score.getScore());
+ }
+ }
+
+ private void scoreboardCleanCommand() {
+ for (Score score : ScoreboardManager.INSTANCE.getSidebarObjective().getScores()) {
+ ChatTransmitter.addToQueue("LINE: " + score.getJustTeam() + ": " + score.getScore());
+ }
+ }
+
+ private void tabListCommand() {
+ for (TabListEntry entry : TabList.INSTANCE.getTabListEntries()) {
+ ChatTransmitter.addToQueue(entry.getFormatted() + " " + entry.getEffectiveName() + "(" + entry.getPing() + ")" + entry.getGamemode());
+ }
+ ChatTransmitter.addToQueue("VS");
+ }
+
+ private void mockDungeonStartCommand(String[] args) {
+ if (!Minecraft.getMinecraft().isSingleplayer()) {
+ ChatTransmitter.addToQueue("This only works in singlepauer", false);
+ return;
+ }
+
+ if (args.length == 2) {
+ int time = Integer.parseInt(args[1]);
+ ChatTransmitter.addToQueue("§r§aDungeon starts in " + time + " seconds.§r", false);
+ return;
+ }
+
+
+ (new Thread(DungeonsGuide.THREAD_GROUP, () -> {
+ try {
+ ChatTransmitter.addToQueue("§r§aDungeon starts in 15 seconds.§r", false);
+ Thread.sleep(6000);
+ ChatTransmitter.addToQueue("§r§aDungeon starts in 10 seconds.§r", false);
+ Thread.sleep(700);
+ ChatTransmitter.addToQueue("§r§aDungeon starts in 5 seconds.§r", false);
+ Thread.sleep(1000);
+ ChatTransmitter.addToQueue("§r§aDungeon starts in 4 seconds.§r", false);
+ Thread.sleep(1000);
+ ChatTransmitter.addToQueue("§r§aDungeon starts in 3 seconds.§r", false);
+ Thread.sleep(1000);
+ ChatTransmitter.addToQueue("§r§aDungeon starts in 2 seconds.§r", false);
+ Thread.sleep(1000);
+ ChatTransmitter.addToQueue("§r§aDungeon starts in 1 seconds.§r", false);
+ } catch (InterruptedException ignored) {
}
+ })).start();
+ }
+
+ private void saveRoomsCommand() {
+ DungeonRoomInfoRegistry.saveAll(Main.getConfigDir());
+ ChatTransmitter.addToQueue(new ChatComponentText("§eDungeons Guide §7:: §fSuccessfully saved user generated roomdata"));
+ }
+
+ private void loadRoomsCommand() {
+ try {
+ DungeonRoomInfoRegistry.loadAll(Main.getConfigDir());
+ ChatTransmitter.addToQueue(new ChatComponentText("§eDungeons Guide §7:: §fSuccessfully loaded roomdatas"));
+ return;
+ } catch (BadPaddingException | InvalidKeyException | InvalidAlgorithmParameterException |
+ NoSuchAlgorithmException | IOException | IllegalBlockSizeException |
+ NoSuchPaddingException e) {
+ e.printStackTrace();
+ }
+ ChatTransmitter.addToQueue(new ChatComponentText("§eDungeons Guide §7:: §cAn error has occurred while loading roomdata"));
+ }
+
+ private void reloadAHCommand() {
+ try {
+ AhUtils.loadAuctions();
+ } catch (CertificateException | NoSuchAlgorithmException | InvalidKeyException |
+ InvalidAlgorithmParameterException | NoSuchPaddingException | BadPaddingException |
+ KeyStoreException | IllegalBlockSizeException | KeyManagementException e) {
+ e.printStackTrace();
+ }
+ ChatTransmitter.addToQueue(new ChatComponentText("§eDungeons Guide §7:: §fReloaded Ah data"));
+ }
+
+ private void brandCommand() {
+ String serverBrand = Minecraft.getMinecraft().thePlayer.getClientBrand();
+ ChatTransmitter.addToQueue(new ChatComponentText("§eDungeons Guide §7:: §e" + serverBrand));
+ }
- if (args.length == 2) {
- int time = Integer.parseInt(args[1]);
- ChatTransmitter.addToQueue("§r§aDungeon starts in " + time + " seconds.§r", false);
+ private void pathfindCommand(String[] args) {
+ try {
+ DungeonContext context = DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext();
+ EntityPlayerSP thePlayer = Minecraft.getMinecraft().thePlayer;
+ if (thePlayer == null) {
return;
}
+ if (context.getBossfightProcessor() != null) {
+ context.getBossfightProcessor().tick();
+ }
+ Point roomPt = context.getScaffoldParser().getDungeonMapLayout().worldPointToRoomPoint(thePlayer.getPosition());
+ DungeonRoom dungeonRoom = context.getScaffoldParser().getRoomMap().get(roomPt);
+ GeneralRoomProcessor grp = (GeneralRoomProcessor) dungeonRoom.getRoomProcessor();
+ grp.pathfind("COMMAND", args[1], args[2], FeatureRegistry.SECRET_LINE_PROPERTIES_GLOBAL.getRouteProperties());
+ } catch (Throwable t) {
+ t.printStackTrace();
+ }
+ }
- (new Thread(DungeonsGuide.THREAD_GROUP, () -> {
- try {
- ChatTransmitter.addToQueue("§r§aDungeon starts in 15 seconds.§r", false);
- Thread.sleep(6000);
- ChatTransmitter.addToQueue("§r§aDungeon starts in 10 seconds.§r", false);
- Thread.sleep(700);
- ChatTransmitter.addToQueue("§r§aDungeon starts in 5 seconds.§r", false);
- Thread.sleep(1000);
- ChatTransmitter.addToQueue("§r§aDungeon starts in 4 seconds.§r", false);
- Thread.sleep(1000);
- ChatTransmitter.addToQueue("§r§aDungeon starts in 3 seconds.§r", false);
- Thread.sleep(1000);
- ChatTransmitter.addToQueue("§r§aDungeon starts in 2 seconds.§r", false);
- Thread.sleep(1000);
- ChatTransmitter.addToQueue("§r§aDungeon starts in 1 seconds.§r", false);
- } catch (InterruptedException ignored) {
- }
- })).start();
- } else if ("saverooms".equals(arg)) {
- DungeonRoomInfoRegistry.saveAll(Main.getConfigDir());
- sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §fSuccessfully saved user generated room data"));
- } else if ("loadrooms".equals(arg)) {
- try {
- DungeonRoomInfoRegistry.loadAll(Main.getConfigDir());
- sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §fSuccessfully loaded room data"));
- return;
- } catch (BadPaddingException | InvalidKeyException | InvalidAlgorithmParameterException |
- NoSuchAlgorithmException | IOException | IllegalBlockSizeException |
- NoSuchPaddingException e) {
- e.printStackTrace();
+ private void processCommand1() {
+ File fileRoot = Main.getConfigDir();
+ File dir = new File(fileRoot, "processorinput");
+ File outsecret = new File(fileRoot, "processoroutsecret");
+ for (File f : dir.listFiles()) {
+ if (!f.getName().endsWith(".roomdata")) {
+ continue;
}
- sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §cAn error has occurred while loading room data"));
- } else if ("reloadah".equals(arg)) {
try {
- AhUtils.loadAuctions();
- } catch (CertificateException | NoSuchAlgorithmException | InvalidKeyException |
- InvalidAlgorithmParameterException | NoSuchPaddingException | BadPaddingException |
- KeyStoreException | IllegalBlockSizeException | KeyManagementException e) {
+ InputStream fis = new FileInputStream(f);
+ ObjectInputStream ois = new ObjectInputStream(fis);
+ DungeonRoomInfo dri = (DungeonRoomInfo) ois.readObject();
+ ois.close();
+ fis.close();
+ dri.setUserMade(false);
+
+ FileOutputStream fos = new FileOutputStream(new File(outsecret, dri.getUuid().toString() + ".roomdata"));
+ ObjectOutputStream oos = new ObjectOutputStream(fos);
+ oos.writeObject(dri);
+ oos.flush();
+ oos.close();
+ } catch (Exception e) {
e.printStackTrace();
}
- sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §fReloaded AH data"));
- } else if ("brand".equals(arg)) {
- String serverBrand = Minecraft.getMinecraft().thePlayer.getClientBrand();
- sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e" + serverBrand));
+ }
+ }
- } else if ("pathfind".equals(arg)) {
- try {
- DungeonContext context = DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext();
- EntityPlayerSP thePlayer = Minecraft.getMinecraft().thePlayer;
- if (thePlayer == null) return;
- if (context.getBossfightProcessor() != null) context.getBossfightProcessor().tick();
- Point roomPt = context.getScaffoldParser().getDungeonMapLayout().worldPointToRoomPoint(thePlayer.getPosition());
-
- DungeonRoom dungeonRoom = context.getScaffoldParser().getRoomMap().get(roomPt);
- GeneralRoomProcessor grp = (GeneralRoomProcessor) dungeonRoom.getRoomProcessor();
- grp.pathfind("COMMAND", args[1], args[2], FeatureRegistry.SECRET_LINE_PROPERTIES_GLOBAL.getRouteProperties());
- } catch (Throwable t) {
- t.printStackTrace();
+ private void checkCommand() {
+ File fileroot = Main.getConfigDir();
+ for (File f : fileroot.listFiles()) {
+ if (!f.getName().endsWith(".roomdata")) {
+ continue;
}
- } else if ("process".equals(arg)) {
- File fileRoot = Main.getConfigDir();
- File dir = new File(fileRoot, "processorinput");
- File outsecret = new File(fileRoot, "processoroutsecret");
- for (File f : dir.listFiles()) {
- if (!f.getName().endsWith(".roomdata")) continue;
- try {
- InputStream fis = new FileInputStream(f);
- ObjectInputStream ois = new ObjectInputStream(fis);
- DungeonRoomInfo dri = (DungeonRoomInfo) ois.readObject();
- ois.close();
- fis.close();
- dri.setUserMade(false);
-
- FileOutputStream fos = new FileOutputStream(new File(outsecret, dri.getUuid().toString() + ".roomdata"));
- ObjectOutputStream oos = new ObjectOutputStream(fos);
- oos.writeObject(dri);
- oos.flush();
- oos.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- } else if ("check".equals(arg)) {
- File fileroot = Main.getConfigDir();
- for (File f : fileroot.listFiles()) {
- if (!f.getName().endsWith(".roomdata")) continue;
- try {
- InputStream fis = new FileInputStream(f);
- ObjectInputStream ois = new ObjectInputStream(fis);
- DungeonRoomInfo dri = (DungeonRoomInfo) ois.readObject();
- ois.close();
- fis.close();
- System.out.println("Starting at " + dri.getName() + " - " + dri.getUuid());
- for (Map.Entry<String, DungeonMechanic> value2 : dri.getMechanics().entrySet()) {
- DungeonMechanic value = value2.getValue();
- if (value instanceof DungeonSecret &&
- (((DungeonSecret) value).getSecretType() == DungeonSecret.SecretType.BAT
- || ((DungeonSecret) value).getSecretType() == DungeonSecret.SecretType.CHEST)
- && ((DungeonSecret) value).getSecretPoint().getY() == 0) {
- OffsetPoint offsetPoint = ((DungeonSecret) value).getSecretPoint();
- if (dri.getBlocks()[offsetPoint.getZ()][offsetPoint.getX()] != -1) {
+ try {
+ InputStream fis = new FileInputStream(f);
+ ObjectInputStream ois = new ObjectInputStream(fis);
+ DungeonRoomInfo dri = (DungeonRoomInfo) ois.readObject();
+ ois.close();
+ fis.close();
+ System.out.println("Starting at " + dri.getName() + " - " + dri.getUuid());
+ for (Map.Entry<String, DungeonMechanic> value2 : dri.getMechanics().entrySet()) {
+ DungeonMechanic value = value2.getValue();
+ if (value instanceof DungeonSecret &&
+ (((DungeonSecret) value).getSecretType() == DungeonSecret.SecretType.BAT
+ || ((DungeonSecret) value).getSecretType() == DungeonSecret.SecretType.CHEST)
+ && ((DungeonSecret) value).getSecretPoint().getY() == 0) {
+ OffsetPoint offsetPoint = ((DungeonSecret) value).getSecretPoint();
+ if (dri.getBlocks()[offsetPoint.getZ()][offsetPoint.getX()] != -1) {
+ dri.getBlocks()[offsetPoint.getZ()][offsetPoint.getX()] = -1;
+ System.out.println("Fixing " + value2.getKey() + " - as secret " + ((DungeonSecret) value).getSecretType() + " - at " + ((DungeonSecret) value).getSecretPoint());
+ }
+ } else if (value instanceof DungeonOnewayDoor) {
+ for (OffsetPoint offsetPoint : ((DungeonOnewayDoor) value).getSecretPoint().getOffsetPointList()) {
+ if (offsetPoint.getY() == 0 && dri.getBlocks()[offsetPoint.getZ()][offsetPoint.getX()] != -1) {
dri.getBlocks()[offsetPoint.getZ()][offsetPoint.getX()] = -1;
- System.out.println("Fixing " + value2.getKey() + " - as secret " + ((DungeonSecret) value).getSecretType() + " - at " + ((DungeonSecret) value).getSecretPoint());
+ System.out.println("Fixing " + value2.getKey() + " - o-door - at " + offsetPoint);
}
- } else if (value instanceof DungeonOnewayDoor) {
- for (OffsetPoint offsetPoint : ((DungeonOnewayDoor) value).getSecretPoint().getOffsetPointList()) {
- if (offsetPoint.getY() == 0 && dri.getBlocks()[offsetPoint.getZ()][offsetPoint.getX()] != -1) {
- dri.getBlocks()[offsetPoint.getZ()][offsetPoint.getX()] = -1;
- System.out.println("Fixing " + value2.getKey() + " - o-door - at " + offsetPoint);
- }
- }
- } else if (value instanceof DungeonDoor) {
- for (OffsetPoint offsetPoint : ((DungeonDoor) value).getSecretPoint().getOffsetPointList()) {
- if (offsetPoint.getY() == 0 && dri.getBlocks()[offsetPoint.getZ()][offsetPoint.getX()] != -1) {
- dri.getBlocks()[offsetPoint.getZ()][offsetPoint.getX()] = -1;
- System.out.println("Fixing " + value2.getKey() + " - door - at " + offsetPoint);
- }
+ }
+ } else if (value instanceof DungeonDoor) {
+ for (OffsetPoint offsetPoint : ((DungeonDoor) value).getSecretPoint().getOffsetPointList()) {
+ if (offsetPoint.getY() == 0 && dri.getBlocks()[offsetPoint.getZ()][offsetPoint.getX()] != -1) {
+ dri.getBlocks()[offsetPoint.getZ()][offsetPoint.getX()] = -1;
+ System.out.println("Fixing " + value2.getKey() + " - door - at " + offsetPoint);
}
- } else if (value instanceof DungeonBreakableWall) {
- for (OffsetPoint offsetPoint : ((DungeonBreakableWall) value).getSecretPoint().getOffsetPointList()) {
- if (offsetPoint.getY() == 0 && dri.getBlocks()[offsetPoint.getZ()][offsetPoint.getX()] != -1) {
- dri.getBlocks()[offsetPoint.getZ()][offsetPoint.getX()] = -1;
- System.out.println("Fixing " + value2.getKey() + " - wall - at " + offsetPoint);
- }
+ }
+ } else if (value instanceof DungeonBreakableWall) {
+ for (OffsetPoint offsetPoint : ((DungeonBreakableWall) value).getSecretPoint().getOffsetPointList()) {
+ if (offsetPoint.getY() == 0 && dri.getBlocks()[offsetPoint.getZ()][offsetPoint.getX()] != -1) {
+ dri.getBlocks()[offsetPoint.getZ()][offsetPoint.getX()] = -1;
+ System.out.println("Fixing " + value2.getKey() + " - wall - at " + offsetPoint);
}
- } else if (value instanceof DungeonTomb) {
- for (OffsetPoint offsetPoint : ((DungeonTomb) value).getSecretPoint().getOffsetPointList()) {
- if (offsetPoint.getY() == 0 && dri.getBlocks()[offsetPoint.getZ()][offsetPoint.getX()] != -1) {
- dri.getBlocks()[offsetPoint.getZ()][offsetPoint.getX()] = -1;
- System.out.println("Fixing " + value2.getKey() + " - crypt - at " + offsetPoint);
- }
+ }
+ } else if (value instanceof DungeonTomb) {
+ for (OffsetPoint offsetPoint : ((DungeonTomb) value).getSecretPoint().getOffsetPointList()) {
+ if (offsetPoint.getY() == 0 && dri.getBlocks()[offsetPoint.getZ()][offsetPoint.getX()] != -1) {
+ dri.getBlocks()[offsetPoint.getZ()][offsetPoint.getX()] = -1;
+ System.out.println("Fixing " + value2.getKey() + " - crypt - at " + offsetPoint);
}
}
}
- FileOutputStream fos = new FileOutputStream(f);
- ObjectOutputStream oos = new ObjectOutputStream(fos);
- oos.writeObject(dri);
- oos.flush();
- oos.close();
- } catch (Exception e) {
- e.printStackTrace();
}
+ FileOutputStream fos = new FileOutputStream(f);
+ ObjectOutputStream oos = new ObjectOutputStream(fos);
+ oos.writeObject(dri);
+ oos.flush();
+ oos.close();
+ } catch (Exception e) {
+ e.printStackTrace();
}
- } else if ("reloaddungeon".equals(arg)) {
- try {
- MinecraftForge.EVENT_BUS.post(new DungeonLeftEvent());
+ }
+ }
+
+ private void reloadDungeonCommand() {
+ try {
+ MinecraftForge.EVENT_BUS.post(new DungeonLeftEvent());
+
+ DungeonsGuide.getDungeonsGuide().getDungeonFacade().setContext(null);
+ MapUtils.clearMap();
+ } catch (Throwable t) {
+ t.printStackTrace();
+ }
+ }
- DungeonsGuide.getDungeonsGuide().getDungeonFacade().setContext(null);
- MapUtils.clearMap();
- } catch (Throwable t) {
- t.printStackTrace();
+ private void partyIdCommand() {
+ ChatTransmitter.addToQueue(new ChatComponentText("§eDungeons Guide §7:: §fInternal Party id: " + Optional.ofNullable(PartyManager.INSTANCE.getPartyContext()).map(PartyContext::getPartyID).orElse(null)));
+ }
+
+ private void locCommand() {
+ ChatTransmitter.addToQueue(new ChatComponentText("§eDungeons Guide §7:: §fYou're in " + SkyblockStatus.locationName));
+ }
+
+ private void saveRunCommand() {
+ try {
+ File f = Main.getConfigDir();
+ File runDir = new File(f, "dungeonruns");
+ runDir.mkdirs();
+
+ File runFile = new File(runDir, UUID.randomUUID() + ".dgrun");
+
+ DungeonContext dungeonContext = DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext();
+ if (dungeonContext == null) {
+ ChatTransmitter.addToQueue(new ChatComponentText("§eDungeons Guide §7:: §cCouldn't find dungeon to save!"));
+ return;
}
- } else if ("partyid".equals(arg)) {
- sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §fInternal Party id: " + Optional.ofNullable(PartyManager.INSTANCE.getPartyContext()).map(PartyContext::getPartyID).orElse(null)));
- } else if ("loc".equals(arg)) {
- sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §fYou're in " + SkyblockStatus.locationName));
- } else if ("saverun".equals(arg)) {
- try {
- File f = Main.getConfigDir();
- File runDir = new File(f, "dungeonruns");
- runDir.mkdirs();
+ DungeonEventHolder dungeonEventHolder = new DungeonEventHolder();
+ dungeonEventHolder.setDate(dungeonContext.getInit());
+ dungeonEventHolder.setPlayers(dungeonContext.getPlayers());
+ dungeonEventHolder.setEventDataList(dungeonContext.getRecorder().getEvents());
- File runFile = new File(runDir, UUID.randomUUID() + ".dgrun");
- DungeonContext dungeonContext = DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext();
- if (dungeonContext == null) {
- sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §cCouldn't find dungeon to save!"));
- return;
- }
- DungeonEventHolder dungeonEventHolder = new DungeonEventHolder();
- dungeonEventHolder.setDate(dungeonContext.getInit());
- dungeonEventHolder.setPlayers(dungeonContext.getPlayers());
- dungeonEventHolder.setEventDataList(dungeonContext.getRecorder().getEvents());
+ ObjectOutputStream oos = new ObjectOutputStream(Files.newOutputStream(runFile.toPath()));
+ oos.writeObject(dungeonEventHolder);
+ oos.flush();
+ oos.close();
+ ChatTransmitter.addToQueue(new ChatComponentText("§eDungeons Guide §7:: §fSuccessfully saved dungeon run to " + runFile.getAbsolutePath()));
+ } catch (Exception e) {
+ ChatTransmitter.addToQueue(new ChatComponentText("§eDungeons Guide §7:: §cAn error occured while writing rundata " + e.getMessage()));
+ e.printStackTrace();
+ }
+ }
+ private void requestStaticResource(String[] args) {
+ UUID uid = UUID.fromString(args[1]);
+ StaticResourceCache.INSTANCE.getResource(uid).thenAccept(a -> {
+ ChatTransmitter.addToQueue(new ChatComponentText(a.getResourceID() + ": " + a.getValue() + ": " + a.isExists()));
+ });
+ }
- ObjectOutputStream oos = new ObjectOutputStream(Files.newOutputStream(runFile.toPath()));
- oos.writeObject(dungeonEventHolder);
- oos.flush();
- oos.close();
- sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §fSuccessfully saved dungeon run to " + runFile.getAbsolutePath()));
- } catch (Exception e) {
- sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §cAn error occurred while writing rundata " + e.getMessage()));
+ private void createFakeRoomCommand() {
+/* File f = new File(Main.getConfigDir(), "schematics/new roonm-b2df250c-4af2-4201-963c-0ee1cb6bd3de-5efb1f0c-c05f-4064-bde7-cad0874fdf39.schematic");
+ NBTTagCompound compound;
+ try {
+ compound = CompressedStreamTools.readCompressed(new FileInputStream(f));
+ } catch (IOException e) {
e.printStackTrace();
+ return;
}
- } else if ("requeststaticresource".equals(arg)) {
- UUID uid = UUID.fromString(args[1]);
- StaticResourceCache.INSTANCE.getResource(uid).thenAccept(a -> {
- sender.addChatMessage(new ChatComponentText(a.getResourceID() + ": " + a.getValue() + ": " + a.isExists()));
- });
- } else if ("createfakeroom".equals(arg)) {// load schematic
-// File f = new File(Main.getConfigDir(), "schematics/new roonm-b2df250c-4af2-4201-963c-0ee1cb6bd3de-5efb1f0c-c05f-4064-bde7-cad0874fdf39.schematic");
-// NBTTagCompound compound;
-// try {
-// compound = CompressedStreamTools.readCompressed(new FileInputStream(f));
-// } catch (IOException e) {
-// e.printStackTrace();
-// return;
-// }
-//
-// byte[] blocks = compound.getByteArray("Blocks");
-// byte[] meta = compound.getByteArray("Data");
-// for (int x = 0; x < compound.getShort("Width"); x++) {
-// for (int y = 0; y < compound.getShort("Height"); y++) {
-// for (int z = 0; z < compound.getShort("Length"); z++) {
-// int index = x + (y * compound.getShort("Length") + z) * compound.getShort("Width");
-// BlockPos pos = new BlockPos(x, y, z);
-// World w = MinecraftServer.getServer().getEntityWorld();
-// w.setBlockState(pos, Block.getBlockById(blocks[index] & 0xFF).getStateFromMeta(meta[index] & 0xFF), 2);
-// }
-// }
-// }
-//
-//
-// DungeonSpecificDataProviderRegistry.doorFinders.put(Pattern.compile("TEST DG"), new DungeonSpecificDataProvider() {
-// @Override
-// public BlockPos findDoor(World w, String dungeonName) {
-// return new BlockPos(0, 0, 0);
-// }
-//
-// @Override
-// public Vector2d findDoorOffset(World w, String dungeonName) {
-// return null;
-// }
-//
-// @Override
-// public BossfightProcessor createBossfightProcessor(World w, String dungeonName) {
-// return null;
-// }
-//
-// @Override
-// public boolean isTrapSpawn(String dungeonName) {
-// return false;
-// }
-//
-// @Override
-// public double secretPercentage(String dungeonName) {
-// return 0;
-// }
-//
-// @Override
-// public int speedSecond(String dungeonName) {
-// return 0;
-// }
-// });
-// DungeonContext.setDungeonName("TEST DG");
-// DungeonContext fakeContext = new DungeonContext(Minecraft.getMinecraft().theWorld);
-// DungeonsGuide.getDungeonsGuide().getDungeonFacade().setContext(fakeContext);
-// DungeonsGuide.getDungeonsGuide().getSkyblockStatus().setForceIsOnDungeon(true);
-// MapPlayerProcessor mapProcessor = fakeContext.getp();
-// mapProcessor.setUnitRoomDimension(new Dimension(16, 16));
-// mapProcessor.setBugged(false);
-// mapProcessor.setDoorDimensions(new Dimension(4, 4));
-// mapProcessor.setTopLeftMapPoint(new Point(0, 0));
-// fakeContext.setDungeonMin(new BlockPos(0, 70, 0));
-//
-// DungeonRoom dungeonRoom = new DungeonRoom(Arrays.asList(new Point(0, 0)), ShortUtils.topLeftifyInt((short) 1), (byte) 63, new BlockPos(0, 70, 0), new BlockPos(31, 70, 31), fakeContext, Collections.emptySet());
-//
-// fakeContext.getDungeonRoomList().add(dungeonRoom);
-// for (Point p : Arrays.asList(new Point(0, 0))) {
-// fakeContext.getRoomMapper().put(p, dungeonRoom);
-// }
-//
-// EditingContext.createEditingContext(dungeonRoom);
-// EditingContext.getEditingContext().openGui(new GuiDungeonRoomEdit(dungeonRoom));
- } else if ("closecontext".equals(arg)) {
- DungeonsGuide.getDungeonsGuide().getSkyblockStatus().setForceIsOnDungeon(false);
- DungeonsGuide.getDungeonsGuide().getDungeonFacade().setContext(null);
- } else if ("dumpsettings".equals(arg)) {
- NestedCategory nestedCategory = new NestedCategory("ROOT");
- for (AbstractFeature abstractFeature : FeatureRegistry.getFeatureList()) {
- String category = abstractFeature.getCategory();
- NestedCategory currentRoot = nestedCategory;
- for (String s : category.split("\\.")) {
- NestedCategory finalCurrentRoot = currentRoot;
- if (currentRoot.children().containsKey(s))
- currentRoot = currentRoot.children().get(s);
- else {
- currentRoot.child(currentRoot = new NestedCategory(finalCurrentRoot.categoryFull() + "." + s));
+ byte[] blocks = compound.getByteArray("Blocks");
+ byte[] meta = compound.getByteArray("Data");
+ for (int x = 0; x < compound.getShort("Width"); x++) {
+ for (int y = 0; y < compound.getShort("Height"); y++) {
+ for (int z = 0; z < compound.getShort("Length"); z++) {
+ int index = x + (y * compound.getShort("Length") + z) * compound.getShort("Width");
+ BlockPos pos = new BlockPos(x, y, z);
+ World w = MinecraftServer.getServer().getEntityWorld();
+ w.setBlockState(pos, Block.getBlockById(blocks[index] & 0xFF).getStateFromMeta(meta[index] & 0xFF), 2);
}
}
}
- StringBuilder stringBuilder = new StringBuilder();
- StringBuilder stringBuilder2 = new StringBuilder();
-
- Stack<Tuple<NestedCategory, Integer>> stak = new Stack<>();
- stak.push(new Tuple<>(nestedCategory, 0));
- Set<NestedCategory> discovered = new HashSet<>();
- while (!stak.isEmpty()) {
- Tuple<NestedCategory, Integer> n = stak.pop();
- if (discovered.contains(n.getFirst())) continue;
- discovered.add(n.getFirst());
- for (Map.Entry<String, NestedCategory> stringNestedCategoryEntry : n.getFirst().children().entrySet()) {
- stak.push(new Tuple<>(stringNestedCategoryEntry.getValue(), n.getSecond() + 1));
+
+ DungeonSpecificDataProviderRegistry.doorFinders.put(Pattern.compile("TEST DG"), new DungeonSpecificDataProvider() {
+ @Override
+ public BlockPos findDoor(World w, String dungeonName) {
+ return new BlockPos(0, 0, 0);
+ }
+
+ @Override
+ public Vector2d findDoorOffset(World w, String dungeonName) {
+ return null;
+ }
+
+ @Override
+ public BossfightProcessor createBossfightProcessor(World w, String dungeonName) {
+ return null;
}
- if (n.getFirst().categoryFull().equals("ROOT")) continue;
+ @Override
+ public boolean isTrapSpawn(String dungeonName) {
+ return false;
+ }
- String prefix = "";
- for (int i = 0; i < n.getSecond() - 1; i++) {
- prefix += " ";
+ @Override
+ public double secretPercentage(String dungeonName) {
+ return 0;
}
- List<AbstractFeature> abstractFeatureList = FeatureRegistry.getFeaturesByCategory().getOrDefault(n.getFirst().categoryFull().substring(5), Collections.emptyList());
- stringBuilder.append(prefix).append("- C ").append(n.getFirst().categoryFull()).append("\n");
- stringBuilder2.append(n.getFirst().categoryFull()).append("\n");
- for (AbstractFeature abstractFeature : abstractFeatureList) {
- stringBuilder.append(prefix).append(" - F ").append(abstractFeature.getName()).append(" / ").append(abstractFeature.getDescription().replace("\n", "$NEW_LINE$")).append("\n");
+ @Override
+ public int speedSecond(String dungeonName) {
+ return 0;
}
+ });
+ DungeonContext.setDungeonName("TEST DG");
+ DungeonContext fakeContext = new DungeonContext(Minecraft.getMinecraft().theWorld);
+ DungeonsGuide.getDungeonsGuide().getDungeonFacade().setContext(fakeContext);
+ DungeonsGuide.getDungeonsGuide().getSkyblockStatus().setForceIsOnDungeon(true);
+ MapPlayerProcessor mapProcessor = fakeContext.getp();
+ mapProcessor.setUnitRoomDimension(new Dimension(16, 16));
+ mapProcessor.setBugged(false);
+ mapProcessor.setDoorDimensions(new Dimension(4, 4));
+ mapProcessor.setTopLeftMapPoint(new Point(0, 0));
+ fakeContext.setDungeonMin(new BlockPos(0, 70, 0));
+
+ DungeonRoom dungeonRoom = new DungeonRoom(Arrays.asList(new Point(0, 0)), ShortUtils.topLeftifyInt((short) 1), (byte) 63, new BlockPos(0, 70, 0), new BlockPos(31, 70, 31), fakeContext, Collections.emptySet());
+
+ fakeContext.getDungeonRoomList().add(dungeonRoom);
+ for (Point p : Arrays.asList(new Point(0, 0))) {
+ fakeContext.getRoomMapper().put(p, dungeonRoom);
}
- System.out.println(stringBuilder.toString());
- System.out.println(stringBuilder2.toString());
- } else if ("readmap".equals(arg)) {
- try {
- int fromX = Integer.parseInt(args[1]);
- int fromY = Integer.parseInt(args[2]);
- sender.addChatMessage(new ChatComponentText(MapUtils.readDigit(MapUtils.getColors(), fromX, fromY) + "-"));
-// int cntY = Integer.parseInt(args[3]);
-// int target = Integer.parseInt(args[4]);
-// StringBuilder sb = new StringBuilder("{");
-// for (int y = fromY; y < fromY + cntY; y++) {
-// int curr = 0;
-// for (int x = fromX; x < fromX+8; x++) {
-// byte clr = MapUtils.getMapColorAt(MapUtils.getColors(), x,y);
-// if (clr == target) curr = (curr << 1) | 1;
-// else curr <<= 1;
-// }
-// sb.append("0x").append(Integer.toHexString(curr).toUpperCase());
-// if (y != fromY + cntY - 1) sb.append(", ");
-// }
-// sb.append("}");
-// System.out.println("\n"+sb.toString());
- } catch (Exception e) {
- e.printStackTrace();
+
+ EditingContext.createEditingContext(dungeonRoom);
+ EditingContext.getEditingContext().openGui(new GuiDungeonRoomEdit(dungeonRoom));*/
+ }
+
+ private void closeContextCommand() {
+ DungeonsGuide.getDungeonsGuide().getSkyblockStatus().setForceIsOnDungeon(false);
+
+ DungeonsGuide.getDungeonsGuide().getDungeonFacade().setContext(null);
+ }
+
+ private void dumpSettingsCommand() {
+ NestedCategory nestedCategory = new NestedCategory("ROOT");
+ for (AbstractFeature abstractFeature : FeatureRegistry.getFeatureList()) {
+ String category = abstractFeature.getCategory();
+ NestedCategory currentRoot = nestedCategory;
+ for (String s : category.split("\\.")) {
+ NestedCategory finalCurrentRoot = currentRoot;
+ if (currentRoot.children().containsKey(s)) {
+ currentRoot = currentRoot.children().get(s);
+ } else {
+ currentRoot.child(currentRoot = new NestedCategory(finalCurrentRoot.categoryFull() + "." + s));
+ }
}
- } else if ("testgui".equals(arg)) {
- GuiScreenAdapter adapter = new GuiScreenAdapter(new TestView());
- new Thread(DungeonsGuide.THREAD_GROUP, () -> {
- Minecraft.getMinecraft().addScheduledTask(() -> {
- Minecraft.getMinecraft().displayGuiScreen(adapter);
- });
- }).start();
- } else if ("clearprofile".equals(arg)) {
- Minecraft.getMinecraft().mcProfiler.clearProfiling();
- } else {
- sender.addChatMessage(new ChatComponentText("ain't gonna find much of anything here"));
- sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg loadrooms §7-§f Reloads dungeon roomdata."));
- sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg brand §7-§f View server brand."));
- sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg info §7-§f View Current DG User info."));
- sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg saverun §7-§f Save run to be sent to developer."));
- sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg saverooms §7-§f Saves user-generated dungeon roomdata."));
}
+
+ StringBuilder stringBuilder = new StringBuilder();
+ StringBuilder stringBuilder2 = new StringBuilder();
+
+ Stack<Tuple<NestedCategory, Integer>> stak = new Stack<>();
+ stak.push(new Tuple<>(nestedCategory, 0));
+ Set<NestedCategory> discovered = new HashSet<>();
+ while (!stak.isEmpty()) {
+ Tuple<NestedCategory, Integer> n = stak.pop();
+ if (discovered.contains(n.getFirst())) {
+ continue;
+ }
+ discovered.add(n.getFirst());
+ for (Map.Entry<String, NestedCategory> stringNestedCategoryEntry : n.getFirst().children().entrySet()) {
+ stak.push(new Tuple<>(stringNestedCategoryEntry.getValue(), n.getSecond() + 1));
+ }
+
+ if (n.getFirst().categoryFull().equals("ROOT")) {
+ continue;
+ }
+
+ String prefix = "";
+ for (int i = 0; i < n.getSecond() - 1; i++) {
+ prefix += " ";
+ }
+
+ List<AbstractFeature> abstractFeatureList = FeatureRegistry.getFeaturesByCategory().getOrDefault(n.getFirst().categoryFull().substring(5), Collections.emptyList());
+ stringBuilder.append(prefix).append("- C ").append(n.getFirst().categoryFull()).append("\n");
+ stringBuilder2.append(n.getFirst().categoryFull()).append("\n");
+ for (AbstractFeature abstractFeature : abstractFeatureList) {
+ stringBuilder.append(prefix).append(" - F ").append(abstractFeature.getName()).append(" / ").append(abstractFeature.getDescription().replace("\n", "$NEW_LINE$")).append("\n");
+ }
+ }
+ System.out.println(stringBuilder.toString());
+ System.out.println(stringBuilder2.toString());
}
+ private void readMapCommand(String[] args) {
+ try {
+ int fromX = Integer.parseInt(args[1]);
+ int fromY = Integer.parseInt(args[2]);
+ ChatTransmitter.addToQueue(new ChatComponentText(MapUtils.readDigit(MapUtils.getColors(), fromX, fromY) + "-"));
+/* int cntY = Integer.parseInt(args[3]);
+ int target = Integer.parseInt(args[4]);
+ StringBuilder sb = new StringBuilder("{");
+ for (int y = fromY; y < fromY + cntY; y++) {
+ int curr = 0;
+ for (int x = fromX; x < fromX+8; x++) {
+ byte clr = MapUtils.getMapColorAt(MapUtils.getColors(), x,y);
+ if (clr == target) curr = (curr << 1) | 1;
+ else curr <<= 1;
+ }
+ sb.append("0x").append(Integer.toHexString(curr).toUpperCase());
+ if (y != fromY + cntY - 1) sb.append(", ");
+ }
+ sb.append("}");
+ System.out.println("\n"+sb.toString());*/
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
- @Override
- public int getRequiredPermissionLevel() {
- return 0;
+ private void testGuiCommand() {
+ GuiScreenAdapter adapter = new GuiScreenAdapter(new TestView());
+ new Thread(DungeonsGuide.THREAD_GROUP, () -> {
+ Minecraft.getMinecraft().addScheduledTask(() -> {
+ Minecraft.getMinecraft().displayGuiScreen(adapter);
+ });
+ }).start();
+ }
+
+ private void clearProfileCommand() {
+ Minecraft.getMinecraft().mcProfiler.clearProfiling();
}
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomfinder/DungeonRoomInfoRegistry.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomfinder/DungeonRoomInfoRegistry.java
index 45e019ff..11d16c42 100755
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomfinder/DungeonRoomInfoRegistry.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomfinder/DungeonRoomInfoRegistry.java
@@ -26,7 +26,7 @@ import lombok.Getter;
import net.minecraft.client.Minecraft;
import org.apache.commons.io.IOUtils;
import org.jetbrains.annotations.NotNull;
-
+import net.minecraft.launchwrapper.Launch;
import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
@@ -37,7 +37,21 @@ import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.*;
+
+
public class DungeonRoomInfoRegistry {
+
+ /**
+ * DEV_USERS is used to check if the user is a dev user.
+ * You do not need to be in this list to use the commands if you are in a dev env.
+ * This lists whitelists users to allow them to use commands when not in a dev env.
+ */
+ private static final List<String> DEV_USERS =
+ Arrays.asList(
+ "e686fe0aab804a71ac7011dc8c2b534c", //syeyoung
+ "a7d6b3f1842548e58acc9a38ab9b86f7" // whalker
+ );
+
@Getter
private static final List<DungeonRoomInfo> registered = new ArrayList<DungeonRoomInfo>();
private static final Map<Short, List<DungeonRoomInfo>> shapeMap = new HashMap<Short, List<DungeonRoomInfo>>();
@@ -98,7 +112,8 @@ public class DungeonRoomInfoRegistry {
public static void saveAll(File dir) {
dir.mkdirs();
- boolean isDev = Minecraft.getMinecraft().getSession().getPlayerID().replace("-","").equals("e686fe0aab804a71ac7011dc8c2b534c");
+ //User is dev if they are in a dev environment or they are on the allowlist DEV_USERS
+ boolean isDev = (boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment") || DEV_USERS.contains(Minecraft.getMinecraft().thePlayer.getUniqueID().toString().replace("-",""));
StringBuilder nameIDString = new StringBuilder("name,uuid,processsor,secrets");
StringBuilder ids = new StringBuilder();
for (DungeonRoomInfo dungeonRoomInfo : registered) {