aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle
diff options
context:
space:
mode:
authorsyeyoung <42869671+cyoung06@users.noreply.github.com>2020-11-29 22:27:11 +0900
committersyeyoung <42869671+cyoung06@users.noreply.github.com>2020-11-29 22:27:11 +0900
commit7150a38e9562395afefafa2adb4c7152a09a9928 (patch)
tree59a07472b8b8361148faa55998b43cbb21bd8293 /src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle
parent8cd3bed0597cd6c452371630d93f4d58b0602bd3 (diff)
downloadSkyblock-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')
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/RoomProcessorWaterPuzzle.java2
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/SwitchData.java15
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/WaterBoard.java16
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/nodes/WaterNodeStart.java5
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/nodes/WaterNodeToggleable.java6
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;