diff options
| author | syeyoung <cyong06@naver.com> | 2021-05-02 23:54:00 +0900 | 
|---|---|---|
| committer | syeyoung <cyong06@naver.com> | 2021-05-02 23:54:00 +0900 | 
| commit | b083ab1d76bf79970759622fd766fdfcb51e48cd (patch) | |
| tree | 6994e086c17d29d2d96a56f2a7ef916cb4a2e9ca | |
| parent | 24d899045d4d20c9cfcdfd216202ad5a6b110405 (diff) | |
| download | Skyblock-Dungeons-Guide-b083ab1d76bf79970759622fd766fdfcb51e48cd.tar.gz Skyblock-Dungeons-Guide-b083ab1d76bf79970759622fd766fdfcb51e48cd.tar.bz2 Skyblock-Dungeons-Guide-b083ab1d76bf79970759622fd766fdfcb51e48cd.zip | |
waterboard. better.
closechest. letmedisable.
3 files changed, 40 insertions, 11 deletions
| diff --git a/options.txt b/options.txt index 0fb8aaae..c3db92eb 100755 --- a/options.txt +++ b/options.txt @@ -24,7 +24,7 @@ chatLinks:true  chatLinksPrompt:true  chatOpacity:1.0  snooperEnabled:true -fullscreen:false +fullscreen:true  enableVsync:false  useVbo:true  hideServerAddress:false @@ -97,6 +97,7 @@ key_Show recipe for item:19  key_Toggle NEU overlay:0  key_Close NEU panes:0  key_Select Item:-98 +key_Key to Enable Backpack Scrolling:36  key_start editing session:19  key_send and save bombdefuse solution:35  key_navigate to next secret. (Req option enabled at /dg):34 diff --git a/src/main/java/kr/syeyoung/dungeonsguide/features/impl/dungeon/FeaturePressAnyKeyToCloseChest.java b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/dungeon/FeaturePressAnyKeyToCloseChest.java index bc535e2d..799186b1 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/features/impl/dungeon/FeaturePressAnyKeyToCloseChest.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/dungeon/FeaturePressAnyKeyToCloseChest.java @@ -23,6 +23,7 @@ public class FeaturePressAnyKeyToCloseChest extends SimpleFeature implements Key      @Override      public void onKeyInput(GuiScreenEvent.KeyboardInputEvent keyboardInputEvent) {          GuiScreen screen = Minecraft.getMinecraft().currentScreen; +        if (!isEnabled()) return;          if (!e.getDungeonsGuide().getSkyblockStatus().isOnDungeon()) return;          if (screen instanceof GuiChest){ @@ -46,6 +47,7 @@ public class FeaturePressAnyKeyToCloseChest extends SimpleFeature implements Key      @Override      public void onMouseInput(GuiScreenEvent.MouseInputEvent.Pre mouseInputEvent) {          GuiScreen screen = Minecraft.getMinecraft().currentScreen; +        if (!isEnabled()) return;          if (!e.getDungeonsGuide().getSkyblockStatus().isOnDungeon()) return;          if (screen instanceof GuiChest){ 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 d0e4a6e0..dd70023e 100755 --- a/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/WaterBoard.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/WaterBoard.java @@ -9,6 +9,7 @@ import net.minecraft.block.BlockLever;  import net.minecraft.init.Blocks;  import net.minecraft.util.BlockPos;  import net.minecraft.util.EnumFacing; +import net.minecraft.util.Tuple;  import net.minecraft.world.World;  import java.util.*; @@ -95,7 +96,6 @@ public class WaterBoard {                      ends.add(waterNodeEndMap.get(s));                  }                  currentRoute = getBestRoute(ends); -  //                {  //  //                    Set<LeverState> currentState = new HashSet<LeverState>(); @@ -166,7 +166,31 @@ public class WaterBoard {          Set<WaterNode> searched = new HashSet<WaterNode>();          Set<LeverState> waterBlockingStates = new HashSet<LeverState>();          World w = waterPuzzle.getDungeonRoom().getContext().getWorld(); -        toGoDownTo.add(getNodeAt(waterNodeStart.getX(), waterNodeStart.getY() + 1)); +//        toGoDownTo.add(getNodeAt(waterNodeStart.getX(), waterNodeStart.getY() + 1)); +        { +            Queue<Tuple<WaterNode, Boolean>> toGo = new LinkedList<>(); +            toGo.add(new Tuple<>(waterNodeStart, true)); +            toGoDownTo.add(getNodeAt(waterNodeStart.getX(), waterNodeStart.getY() + 1)); +            Set<WaterNode> visited = new HashSet<>(); +            while (!toGo.isEmpty()) { +                Tuple<WaterNode, Boolean> waterNode = toGo.poll(); +                if (waterNode.getFirst() == null) continue; +                if (visited.contains(waterNode.getFirst())) continue; +                if (!waterNode.getFirst().canWaterGoThrough()) continue; +                if (waterNode.getFirst() instanceof WaterNodeEnd) continue; +                visited.add(waterNode.getFirst()); + +                boolean water = waterNode.getFirst().isWaterFilled(w); +                if (water && !waterNode.getSecond()) { +                    toGoDownTo.add(getNodeAt(waterNode.getFirst().getX(), waterNode.getFirst().getY())); +                } + +                int x = waterNode.getFirst().getX(), y = waterNode.getFirst().getY(); +                toGo.add(new Tuple<>(getNodeAt(x+1, y), water)); +                toGo.add(new Tuple<>(getNodeAt(x-1, y), water)); +                toGo.add(new Tuple<>(getNodeAt(x, y+1), water)); +            } +        }          while (!toGoDownTo.isEmpty()) {              WaterNode asd = toGoDownTo.poll();              if (asd == null) continue; @@ -197,12 +221,13 @@ public class WaterBoard {                      if (i != asd.getX())                          followWater = nodehere.isWaterFilled(w) && (down == null || (down.canWaterGoThrough() && leverStates.contains(down.getCondition())));                      r.getNodes().add(nodehere); -                    if (down != null && ((down.canWaterGoThrough() && leverStates.contains(down.getCondition())) || down.isWaterFilled(w))) { -                        toGoDownTo.add(down); -                    }                      if (down != null && down.canWaterGoThrough() && down.getCondition() != null && leverStates.contains(down.getCondition().invert())) {                          waterBlockingStates.add(down.getCondition().invert());                      } +                    if (down != null && ((down.canWaterGoThrough() && leverStates.contains(down.getCondition())) || down.isWaterFilled(w))) { +                        toGoDownTo.add(down); +                        if (!followWater) break; +                    }                  }                  followWater = getNodeAt(asd.getX()  +1, asd.getY()) != null && leverStates.contains(getNodeAt(asd.getX() + 1, asd.getY()).getCondition())                  && getNodeAt(asd.getX()  +2, asd.getY()) != null && leverStates.contains(getNodeAt(asd.getX() + 2, asd.getY()).getCondition()); @@ -217,12 +242,13 @@ public class WaterBoard {                      if (i != asd.getX())                          followWater = nodehere.isWaterFilled(w) && (down == null || (down.canWaterGoThrough() && leverStates.contains(down.getCondition())));                      r.getNodes().add(nodehere); -                    if (down != null && ((down.canWaterGoThrough() && leverStates.contains(down.getCondition())) || down.isWaterFilled(w))) { -                        toGoDownTo.add(down); -                    }                      if (down != null && down.canWaterGoThrough() && down.getCondition() != null && leverStates.contains(down.getCondition().invert())) {                          waterBlockingStates.add(down.getCondition().invert());                      } +                    if (down != null && ((down.canWaterGoThrough() && leverStates.contains(down.getCondition())) || down.isWaterFilled(w))) { +                        toGoDownTo.add(down); +                        if (!followWater) break; +                    }                  }              } else {                  int minDistToDropRight = 9999; @@ -232,7 +258,7 @@ public class WaterBoard {                      if (!nodehere.canWaterGoThrough()) break;                      if (!leverStates.contains(nodehere.getCondition()) && !nodehere.isWaterFilled(w)) break;                      WaterNode down = getNodeAt(i, asd.getY() + 1); -                    if (down != null && ((down.canWaterGoThrough() && leverStates.contains(down.getCondition())) || down.isWaterFilled(w))) { +                    if (down != null && ((down.canWaterGoThrough() && leverStates.contains(down.getCondition())))) {                          int dist = i - asd.getX();                          if (dist < minDistToDropRight)                              minDistToDropRight = dist; @@ -246,7 +272,7 @@ public class WaterBoard {                      if (!nodehere.canWaterGoThrough()) break;                      if (!leverStates.contains(nodehere.getCondition()) && !nodehere.isWaterFilled(w)) break;                      WaterNode down = getNodeAt(i, asd.getY() + 1); -                    if (down != null && ((down.canWaterGoThrough() && leverStates.contains(down.getCondition())) || down.isWaterFilled(w))) { +                    if (down != null && ((down.canWaterGoThrough() && leverStates.contains(down.getCondition())))) {                          int dist = asd.getX() - i;                          if (dist < minDistToDropLeft)                              minDistToDropLeft = dist; | 
