diff options
| author | syeyoung <42869671+cyoung06@users.noreply.github.com> | 2020-11-29 22:27:11 +0900 |
|---|---|---|
| committer | syeyoung <42869671+cyoung06@users.noreply.github.com> | 2020-11-29 22:27:11 +0900 |
| commit | 7150a38e9562395afefafa2adb4c7152a09a9928 (patch) | |
| tree | 59a07472b8b8361148faa55998b43cbb21bd8293 /src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle | |
| parent | 8cd3bed0597cd6c452371630d93f4d58b0602bd3 (diff) | |
| download | Skyblock-Dungeons-Guide-7150a38e9562395afefafa2adb4c7152a09a9928.tar.gz Skyblock-Dungeons-Guide-7150a38e9562395afefafa2adb4c7152a09a9928.tar.bz2 Skyblock-Dungeons-Guide-7150a38e9562395afefafa2adb4c7152a09a9928.zip | |
box puzzle
Diffstat (limited to 'src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle')
5 files changed, 35 insertions, 9 deletions
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/RoomProcessorWaterPuzzle.java b/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/RoomProcessorWaterPuzzle.java index 0eaadf43..a64525a8 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/RoomProcessorWaterPuzzle.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/RoomProcessorWaterPuzzle.java @@ -78,7 +78,7 @@ public class RoomProcessorWaterPuzzle extends GeneralRoomProcessor { for (WaterCondition condition : route.getConditionList()) { if (condition == null) continue; SwitchData switchData = waterBoard.getValidSwitches().get(condition.getBlockId()); - if (switchData.getCurrentState() != condition.isRequiredState()) { + if (switchData.getCurrentState(getDungeonRoom().getContext().getWorld()) != condition.isRequiredState()) { RenderUtils.highlightBlock(switchData.getSwitchLoc(), new Color(0,255,0,50), partialTicks); RenderUtils.drawTextAtWorld(condition.isRequiredState() ? "on":"off",switchData.getSwitchLoc().getX(), switchData.getSwitchLoc().getY(), switchData.getSwitchLoc().getZ(), 0xFF000000,0.1f, false, false, partialTicks); } diff --git a/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/SwitchData.java b/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/SwitchData.java index 79d0060b..79c25f52 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/SwitchData.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/SwitchData.java @@ -3,6 +3,8 @@ package kr.syeyoung.dungeonsguide.roomprocessor.waterpuzzle; import kr.syeyoung.dungeonsguide.DungeonsGuide; import kr.syeyoung.dungeonsguide.SkyblockStatus; import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom; +import kr.syeyoung.dungeonsguide.roomprocessor.waterpuzzle.nodes.WaterNodeStart; +import kr.syeyoung.dungeonsguide.roomprocessor.waterpuzzle.nodes.WaterNodeToggleable; import lombok.AllArgsConstructor; import lombok.Data; import net.minecraft.block.BlockLever; @@ -12,14 +14,19 @@ import net.minecraft.world.World; @Data @AllArgsConstructor public class SwitchData { + private WaterBoard waterBoard; + private BlockPos switchLoc; private BlockPos blockLoc; private String blockId; - public boolean getCurrentState() { - BlockPos switch2 = getSwitchLoc(); - World w= DungeonsGuide.getDungeonsGuide().getSkyblockStatus().getContext().getWorld(); - return w.getBlockState(switch2).getValue(BlockLever.POWERED); + public boolean getCurrentState(World w) { + WaterNode waterNode = waterBoard.getToggleableMap().get(blockId); + if (waterNode instanceof WaterNodeStart) + return ((WaterNodeStart) waterNode).isTriggered(w); + else if (waterNode instanceof WaterNodeToggleable) + return ((WaterNodeToggleable) waterNode).isTriggered(w); + return false; } } diff --git a/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/WaterBoard.java b/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/WaterBoard.java index a2da9b23..56564070 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/WaterBoard.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/WaterBoard.java @@ -38,6 +38,9 @@ public class WaterBoard { private Map<String, WaterNodeEnd> waterNodeEndMap = new HashMap<String, WaterNodeEnd>(); @Getter + private Map<String, WaterNode> toggleableMap = new HashMap<String, WaterNode>(); + + @Getter private Set<String> reqOpen = new HashSet<String>(); @Getter @@ -72,12 +75,12 @@ public class WaterBoard { int data = w.getChunkFromBlockCoords(newPos).getBlockMetadata(newPos); SwitchData sw; - switchData.add(sw = new SwitchData(pos,newPos,id+":"+data)); + switchData.add(sw = new SwitchData(this, pos,newPos,id+":"+data)); validSwitches.put(id+":"+data, sw); } } SwitchData sw; - switchData.add(sw = new SwitchData(lever.getBlockPos(waterPuzzle.getDungeonRoom()),lever.getBlockPos(waterPuzzle.getDungeonRoom()).add(0,-1,0),"mainStream")); + switchData.add(sw = new SwitchData(this, lever.getBlockPos(waterPuzzle.getDungeonRoom()),lever.getBlockPos(waterPuzzle.getDungeonRoom()).add(0,-1,0),"mainStream")); validSwitches.put("mainStream", sw); } @@ -239,9 +242,13 @@ public class WaterBoard { if (validSwitches.containsKey(backId +":"+backData)) { String resId = backId + ":"+backData; node = new WaterNodeToggleable(resId, isSwitchActive(validSwitches.get(resId)), front.getBlockPos(waterPuzzle.getDungeonRoom()),x,y); + + toggleableMap.put(resId, node); } else if (validSwitches.containsKey(frontId +":"+frontData)) { String resId = frontId +":"+frontData; node = new WaterNodeToggleable(resId, !isSwitchActive(validSwitches.get(resId)), front.getBlockPos(waterPuzzle.getDungeonRoom()),x,y); + + toggleableMap.put(resId, node); } else if (frontId == 0 || frontId == 8 || frontId == 9) { if (y == 24) { OffsetPoint pos; @@ -255,9 +262,9 @@ public class WaterBoard { int data= pos.getData(waterPuzzle.getDungeonRoom()); node = new WaterNodeEnd(id+":"+data, front.getBlockPos(waterPuzzle.getDungeonRoom()),x,y); waterNodeEndMap.put(id+":"+data, (WaterNodeEnd) node); - } else if (y == 1) { + } else if (y == 2) { waterNodeStart = (WaterNodeStart) (node = new WaterNodeStart(front.getBlockPos(waterPuzzle.getDungeonRoom()), - frontId != 0 ^ validSwitches.get("mainStream").getCurrentState(),x,y)); + frontId != 0 ^ isSwitchActive(validSwitches.get("mainStream")),x,y)); } else { node = new WaterNodeAir(front.getBlockPos(waterPuzzle.getDungeonRoom()),x,y); } @@ -267,6 +274,7 @@ public class WaterBoard { board[y][x] =node; } } + toggleableMap.put("mainStream", waterNodeStart); } // true if contradiction diff --git a/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/nodes/WaterNodeStart.java b/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/nodes/WaterNodeStart.java index 8ea7ca6c..c8197919 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/nodes/WaterNodeStart.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/nodes/WaterNodeStart.java @@ -32,6 +32,11 @@ public class WaterNodeStart implements WaterNode { return b == Blocks.water || b == Blocks.flowing_water; } + public boolean isTriggered(World w) { + System.out.println("water filled called"); + return isWaterFilled(w); + } + public BlockPos getBlockPos() { return blockPos; diff --git a/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/nodes/WaterNodeToggleable.java b/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/nodes/WaterNodeToggleable.java index 6870f3c4..aeddde9a 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/nodes/WaterNodeToggleable.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/nodes/WaterNodeToggleable.java @@ -35,6 +35,12 @@ public class WaterNodeToggleable implements WaterNode { } private int x,y; + public boolean isTriggered(World w) { + Block b= w.getChunkFromBlockCoords(blockPos).getBlock(blockPos); + + return !(b == Blocks.air || b == Blocks.water || b == Blocks.flowing_water) ^ invert; + } + public BlockPos getBlockPos() { return blockPos; |
