diff options
| author | syeyoung <cyoung06@naver.com> | 2023-01-23 00:12:17 +0900 |
|---|---|---|
| committer | syeyoung <cyoung06@naver.com> | 2023-01-23 00:12:17 +0900 |
| commit | 6f00f738c29dd296fe962c990b0221092d29fb53 (patch) | |
| tree | d2f91965708cdbdbedd50efaac383f34344fe933 /mod/src/main/java/kr | |
| parent | b0d7506511a58190f523ebcfb76a61e6186e1081 (diff) | |
| download | Skyblock-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')
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()); + } |
