aboutsummaryrefslogtreecommitdiff
path: root/mod/src/main/java/kr
diff options
context:
space:
mode:
authorsyeyoung <cyoung06@naver.com>2023-01-23 00:12:17 +0900
committersyeyoung <cyoung06@naver.com>2023-01-23 00:12:17 +0900
commit6f00f738c29dd296fe962c990b0221092d29fb53 (patch)
treed2f91965708cdbdbedd50efaac383f34344fe933 /mod/src/main/java/kr
parentb0d7506511a58190f523ebcfb76a61e6186e1081 (diff)
downloadSkyblock-Dungeons-Guide-6f00f738c29dd296fe962c990b0221092d29fb53.tar.gz
Skyblock-Dungeons-Guide-6f00f738c29dd296fe962c990b0221092d29fb53.tar.bz2
Skyblock-Dungeons-Guide-6f00f738c29dd296fe962c990b0221092d29fb53.zip
- taught dg about procrastination
=> Lazy dungeon building => Fixes #233 => Fixes #264 Signed-off-by: syeyoung <cyoung06@naver.com>
Diffstat (limited to 'mod/src/main/java/kr')
-rwxr-xr-xmod/src/main/java/kr/syeyoung/dungeonsguide/mod/SkyblockStatus.java4
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/commands/CommandDgDebug.java176
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/discord/DiscordIntegrationManager.java2
-rwxr-xr-xmod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/DungeonContext.java168
-rwxr-xr-xmod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/MapProcessor.java543
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/events/DungeonEventRecorder.java58
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/events/impl/DungeonRoomDiscoverEvent.java4
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/events/impl/DungeonRoomMatchEvent.java46
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/map/DungeonMapConstantRetreiver.java139
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/map/DungeonMapData.java139
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/map/DungeonMapLayout.java70
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/map/DungeonRoomScaffoldParser.java265
-rwxr-xr-xmod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/map/MapPlayerProcessor.java177
-rwxr-xr-xmod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomfinder/DungeonRoom.java69
-rwxr-xr-xmod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomfinder/RoomMatcher.java1
-rwxr-xr-xmod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/GeneralRoomProcessor.java4
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/impl/MapUpdateEvent.java35
-rwxr-xr-xmod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/listener/DungeonListener.java249
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/listener/PacketInjector.java1
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/listener/PacketListener.java6
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureDebugTrap.java2
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureRoomCoordDisplay.java9
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureRoomDebugInfo.java5
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureWarningOnPortal.java6
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureCollectScore.java3
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonDeaths.java31
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonMap.java36
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonMilestone.java11
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonRoomName.java8
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonScore.java18
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonSecrets.java15
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureWatcherWarning.java5
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/FeaturePartyReady.java4
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/FeatureActions.java10
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/FeatureSoulRoomWarning.java6
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/mechanicbrowser/FeatureMechanicBrowse.java20
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/parallelUniverse/map/MapDataManager.java49
37 files changed, 1319 insertions, 1075 deletions
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/SkyblockStatus.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/SkyblockStatus.java
index dc48415f..e74b69da 100755
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/SkyblockStatus.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/SkyblockStatus.java
@@ -41,6 +41,8 @@ import java.util.Set;
public class SkyblockStatus {
boolean wasOnHypixel = false;
+ public static String locationName;
+
@SubscribeEvent
public void onTick(TickEvent.ClientTickEvent ev) {
@@ -144,7 +146,7 @@ public class SkyblockStatus {
}
}
if (sc.getJustTeam().startsWith(" §7⏣")) {
- DungeonContext.setDungeonName(strippedLine.trim());
+ locationName = strippedLine.trim();
}
}
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 45eb7dd2..b6742c9c 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
@@ -24,23 +24,17 @@ import kr.syeyoung.dungeonsguide.dungeon.mechanics.*;
import kr.syeyoung.dungeonsguide.dungeon.mechanics.dunegonmechanic.DungeonMechanic;
import kr.syeyoung.dungeonsguide.launcher.Main;
import kr.syeyoung.dungeonsguide.mod.DungeonsGuide;
+import kr.syeyoung.dungeonsguide.mod.SkyblockStatus;
import kr.syeyoung.dungeonsguide.mod.chat.ChatTransmitter;
import kr.syeyoung.dungeonsguide.mod.config.guiconfig.NestedCategory;
import kr.syeyoung.dungeonsguide.mod.dungeon.DungeonContext;
-import kr.syeyoung.dungeonsguide.mod.dungeon.MapProcessor;
-import kr.syeyoung.dungeonsguide.mod.dungeon.doorfinder.DungeonSpecificDataProvider;
-import kr.syeyoung.dungeonsguide.mod.dungeon.doorfinder.DungeonSpecificDataProviderRegistry;
import kr.syeyoung.dungeonsguide.mod.dungeon.events.DungeonEventHolder;
-import kr.syeyoung.dungeonsguide.mod.dungeon.roomedit.EditingContext;
-import kr.syeyoung.dungeonsguide.mod.dungeon.roomedit.gui.GuiDungeonRoomEdit;
import kr.syeyoung.dungeonsguide.mod.dungeon.roomfinder.DungeonRoom;
import kr.syeyoung.dungeonsguide.mod.dungeon.roomfinder.DungeonRoomInfoRegistry;
import kr.syeyoung.dungeonsguide.mod.dungeon.roomprocessor.GeneralRoomProcessor;
-import kr.syeyoung.dungeonsguide.mod.dungeon.roomprocessor.bossfight.BossfightProcessor;
import kr.syeyoung.dungeonsguide.mod.events.impl.DungeonLeftEvent;
import kr.syeyoung.dungeonsguide.mod.features.AbstractFeature;
import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
-import kr.syeyoung.dungeonsguide.mod.features.impl.dungeon.FeatureDungeonMap;
import kr.syeyoung.dungeonsguide.mod.guiv2.GuiScreenAdapter;
import kr.syeyoung.dungeonsguide.mod.guiv2.view.TestView;
import kr.syeyoung.dungeonsguide.mod.parallelUniverse.scoreboard.Score;
@@ -51,30 +45,19 @@ import kr.syeyoung.dungeonsguide.mod.party.PartyContext;
import kr.syeyoung.dungeonsguide.mod.party.PartyManager;
import kr.syeyoung.dungeonsguide.mod.utils.AhUtils;
import kr.syeyoung.dungeonsguide.mod.utils.MapUtils;
-import kr.syeyoung.dungeonsguide.mod.utils.ShortUtils;
-import kr.syeyoung.dungeonsguide.mod.utils.TabListUtil;
import kr.syeyoung.dungeonsguide.mod.wsresource.StaticResourceCache;
-import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityPlayerSP;
-import net.minecraft.client.network.NetworkPlayerInfo;
import net.minecraft.command.CommandBase;
import net.minecraft.command.CommandException;
import net.minecraft.command.ICommandSender;
-import net.minecraft.nbt.CompressedStreamTools;
-import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.scoreboard.ScorePlayerTeam;
-import net.minecraft.server.MinecraftServer;
-import net.minecraft.util.BlockPos;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.Tuple;
-import net.minecraft.world.World;
import net.minecraftforge.common.MinecraftForge;
import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
-import javax.vecmath.Vector2d;
import java.awt.*;
import java.io.*;
import java.nio.file.Files;
@@ -82,7 +65,6 @@ import java.security.*;
import java.security.cert.CertificateException;
import java.util.List;
import java.util.*;
-import java.util.regex.Pattern;
public class CommandDgDebug extends CommandBase {
@Override
@@ -179,9 +161,9 @@ public class CommandDgDebug extends CommandBase {
EntityPlayerSP thePlayer = Minecraft.getMinecraft().thePlayer;
if (thePlayer == null) return;
if (context.getBossfightProcessor() != null) context.getBossfightProcessor().tick();
- Point roomPt = context.getMapProcessor().worldPointToRoomPoint(thePlayer.getPosition());
+ Point roomPt = context.getScaffoldParser().getDungeonMapLayout().worldPointToRoomPoint(thePlayer.getPosition());
- DungeonRoom dungeonRoom = context.getRoomMapper().get(roomPt);
+ 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) {
@@ -283,7 +265,7 @@ public class CommandDgDebug extends CommandBase {
} 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 " + DungeonContext.getDungeonName()));
+ sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §fYou're in " + SkyblockStatus.locationName));
} else if ("saverun".equals(arg)) {
try {
File f = Main.getConfigDir();
@@ -300,7 +282,7 @@ public class CommandDgDebug extends CommandBase {
DungeonEventHolder dungeonEventHolder = new DungeonEventHolder();
dungeonEventHolder.setDate(dungeonContext.getInit());
dungeonEventHolder.setPlayers(dungeonContext.getPlayers());
- dungeonEventHolder.setEventDataList(dungeonContext.getEvents());
+ dungeonEventHolder.setEventDataList(dungeonContext.getRecorder().getEvents());
ObjectOutputStream oos = new ObjectOutputStream(Files.newOutputStream(runFile.toPath()));
@@ -318,80 +300,80 @@ public class CommandDgDebug extends CommandBase {
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);
- MapProcessor mapProcessor = fakeContext.getMapProcessor();
- 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));
+// 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);
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/discord/DiscordIntegrationManager.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/discord/DiscordIntegrationManager.java
index 601783cd..35684242 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/discord/DiscordIntegrationManager.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/discord/DiscordIntegrationManager.java
@@ -199,7 +199,7 @@ public class DiscordIntegrationManager implements IPCListener {
if (!skyblockStatus.isOnHypixel() || !FeatureRegistry.DISCORD_RICHPRESENCE.isEnabled() || (!skyblockStatus.isOnSkyblock() && FeatureRegistry.DISCORD_RICHPRESENCE.<Boolean>getParameter("disablenotskyblock").getValue())) {
sendRichPresence(null);
} else {
- String name = DungeonContext.getDungeonName() == null ? "" : DungeonContext.getDungeonName();
+ String name = SkyblockStatus.locationName == null ? "" : SkyblockStatus.locationName;
if (!skyblockStatus.isOnSkyblock()) name ="Somewhere on Hypixel";
if (name.trim().equals("Your Island")) name = "Private Island";
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/DungeonContext.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/DungeonContext.java
index 8041f6ac..037eb442 100755
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/DungeonContext.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/DungeonContext.java
@@ -22,17 +22,20 @@ package kr.syeyoung.dungeonsguide.mod.dungeon;
import kr.syeyoung.dungeonsguide.mod.chat.ChatTransmitter;
import kr.syeyoung.dungeonsguide.mod.dungeon.doorfinder.DungeonSpecificDataProvider;
import kr.syeyoung.dungeonsguide.mod.dungeon.doorfinder.DungeonSpecificDataProviderRegistry;
-import kr.syeyoung.dungeonsguide.mod.dungeon.events.DungeonEvent;
-import kr.syeyoung.dungeonsguide.mod.dungeon.events.DungeonEventData;
-import kr.syeyoung.dungeonsguide.mod.dungeon.events.impl.DungeonCryptBrokenEvent;
+import kr.syeyoung.dungeonsguide.mod.dungeon.events.DungeonEventRecorder;
import kr.syeyoung.dungeonsguide.mod.dungeon.events.impl.DungeonNodataEvent;
import kr.syeyoung.dungeonsguide.mod.dungeon.events.impl.DungeonPuzzleFailureEvent;
-import kr.syeyoung.dungeonsguide.mod.dungeon.events.impl.DungeonSecretCountChangeEvent;
+import kr.syeyoung.dungeonsguide.mod.dungeon.map.DungeonMapConstantRetreiver;
+import kr.syeyoung.dungeonsguide.mod.dungeon.map.DungeonMapLayout;
+import kr.syeyoung.dungeonsguide.mod.dungeon.map.DungeonRoomScaffoldParser;
+import kr.syeyoung.dungeonsguide.mod.dungeon.map.MapPlayerProcessor;
import kr.syeyoung.dungeonsguide.mod.dungeon.roomfinder.DungeonRoom;
import kr.syeyoung.dungeonsguide.mod.dungeon.roomprocessor.RoomProcessor;
import kr.syeyoung.dungeonsguide.mod.dungeon.roomprocessor.bossfight.BossfightProcessor;
import kr.syeyoung.dungeonsguide.mod.events.impl.BossroomEnterEvent;
+import kr.syeyoung.dungeonsguide.mod.events.impl.MapUpdateEvent;
import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.utils.MapUtils;
import kr.syeyoung.dungeonsguide.mod.utils.TabListUtil;
import kr.syeyoung.dungeonsguide.mod.utils.TextUtils;
import lombok.Getter;
@@ -45,72 +48,52 @@ import net.minecraft.world.World;
import net.minecraftforge.client.event.ClientChatReceivedEvent;
import net.minecraftforge.common.MinecraftForge;
+import javax.vecmath.Vector2d;
import java.awt.*;
import java.util.List;
import java.util.*;
public class DungeonContext {
- /**
- * This is static because its used in the constructor,
- * it means we cannot set the name without having an object,
- * and we cannot create an object without the name
- * so its static :)
- */
@Getter @Setter
- private static String dungeonName;
- @Getter
- @Setter
- public int percentage;
+ private String dungeonName;
@Getter
private final World world;
@Getter
- private final MapProcessor mapProcessor;
-
- @Getter
- @Setter
- private BlockPos dungeonMin;
-
+ private final MapPlayerProcessor mapPlayerMarkerProcessor;
@Getter
- private final Map<Point, DungeonRoom> roomMapper = new HashMap<>();
+ private DungeonRoomScaffoldParser scaffoldParser;
@Getter
- private final List<DungeonRoom> dungeonRoomList = new ArrayList<>();
+ private DungeonEventRecorder recorder = new DungeonEventRecorder();
+
@Getter
private final List<RoomProcessor> globalRoomProcessors = new ArrayList<>();
- @Getter
- private final Map<String, Integer> deaths = new HashMap<>();
- @Getter
- private final List<String[]> milestoneReached = new ArrayList<>();
- @Getter
- @Setter
- private long BossRoomEnterSeconds = -1;
- @Getter
- @Setter
+ // bunch of statistics
+ @Getter @Setter
+ private long bossRoomEnterSeconds = -1;
+ @Getter @Setter
private long init = -1;
- @Getter
- @Setter
+ @Getter @Setter
private BlockPos bossroomSpawnPos = null;
-
@Getter
- @Setter
+ private boolean gotMimic = false;
+
+
+ // general info
+ @Getter @Setter
private boolean trapRoomGen = false;
- @Getter
- private boolean gotMimic = false;
+ @Getter private int maxSpeed = 600;
+ @Getter private double secretPercentage = 1.0;
- private int latestSecretCnt = 0;
- private int latestTotalSecret = 0;
- private int latestCrypts = 0;
+ @Getter @Setter
+ public int percentage;
- @Getter
- private int maxSpeed = 600;
- @Getter
- private double secretPercentage = 1.0;
public void setGotMimic(boolean gotMimic) {
this.gotMimic = gotMimic;
- createEvent(new DungeonNodataEvent("MIMIC_KILLED"));
+ recorder.createEvent(new DungeonNodataEvent("MIMIC_KILLED"));
}
@Getter
@@ -120,40 +103,43 @@ public class DungeonContext {
@Getter
private final Set<String> players = new HashSet<>();
- @Getter
- private final List<DungeonEvent> events = new ArrayList<>();
- public DungeonContext(World world) {
+ private Vector2d doorOffset;
+ private BlockPos door;
+
+ public DungeonContext(String dungeonName, World world) {
+ this.dungeonName = dungeonName;
this.world = world;
- createEvent(new DungeonNodataEvent("DUNGEON_CONTEXT_CREATION"));
- mapProcessor = new MapProcessor(this);
+ recorder.createEvent(new DungeonNodataEvent("DUNGEON_CONTEXT_CREATION"));
+ mapPlayerMarkerProcessor = new MapPlayerProcessor(this);
DungeonSpecificDataProvider doorFinder = DungeonSpecificDataProviderRegistry.getDoorFinder(getDungeonName());
if (doorFinder != null) {
trapRoomGen = doorFinder.isTrapSpawn(getDungeonName());
-
secretPercentage = doorFinder.secretPercentage(getDungeonName());
maxSpeed = doorFinder.speedSecond(getDungeonName());
} else {
- mapProcessor.setBugged(true);
+ throw new IllegalStateException("No door finder found");
}
+
+ doorOffset = doorFinder.findDoorOffset(world, getDungeonName());
+ door = doorFinder.findDoor(world, getDungeonName());
+
+ if (doorOffset == null || door == null) throw new IllegalStateException("?");
+
+
init = System.currentTimeMillis();
}
- public void createEvent(DungeonEventData eventData) {
-// events.add(new DungeonEvent(eventData));
- }
private final Rectangle roomBoundary = new Rectangle(-10, -10, 138, 138);
public void tick() {
-
-
- if (mapProcessor.isInitialized() && BossRoomEnterSeconds == -1 && !roomBoundary.contains(mapProcessor.worldPointToMapPoint(Minecraft.getMinecraft().thePlayer.getPositionVector()))) {
- BossRoomEnterSeconds = FeatureRegistry.DUNGEON_SBTIME.getTimeElapsed() / 1000;
+ if (scaffoldParser != null && bossRoomEnterSeconds == -1 && !roomBoundary.contains(scaffoldParser.getDungeonMapLayout().worldPointToMapPoint(Minecraft.getMinecraft().thePlayer.getPositionVector()))) {
+ bossRoomEnterSeconds = FeatureRegistry.DUNGEON_SBTIME.getTimeElapsed() / 1000;
bossroomSpawnPos = Minecraft.getMinecraft().thePlayer.getPosition();
MinecraftForge.EVENT_BUS.post(new BossroomEnterEvent());
- createEvent(new DungeonNodataEvent("BOSSROOM_ENTER"));
+ recorder.createEvent(new DungeonNodataEvent("BOSSROOM_ENTER"));
DungeonSpecificDataProvider doorFinder = DungeonSpecificDataProviderRegistry.getDoorFinder(getDungeonName());
if (doorFinder != null) {
bossfightProcessor = doorFinder.createBossfightProcessor(world, getDungeonName());
@@ -162,23 +148,55 @@ public class DungeonContext {
}
}
+ if (scaffoldParser != null) {
+ for (DungeonRoom dungeonRoom : scaffoldParser.getDungeonRoomList()) {
+ if (!dungeonRoom.isMatched()) {
+ dungeonRoom.tryRematch();
+ }
+ }
+ }
+
players.clear();
players.addAll(TabListUtil.getPlayersInDungeon());
+ }