diff --git a/src/main/java/eu/mhsl/minecraft/endlessjumper/generator/JumpGenerator.java b/src/main/java/eu/mhsl/minecraft/endlessjumper/generator/JumpGenerator.java index 34dd3c6..277dfa6 100644 --- a/src/main/java/eu/mhsl/minecraft/endlessjumper/generator/JumpGenerator.java +++ b/src/main/java/eu/mhsl/minecraft/endlessjumper/generator/JumpGenerator.java @@ -23,6 +23,8 @@ public class JumpGenerator { private Pos starting; private int combo = 0; + // Block, von dem der nächste Sprung startet (bestimmt, ob ein Sprung nach oben möglich ist) + private Block lastBlock = Block.DIAMOND_BLOCK; private final int preview = 3; @@ -55,6 +57,7 @@ public class JumpGenerator { Pos previous = blocks.get(blocks.size()-1); Pos target = previous.add(this.nextOffset(index, r)); Block block = isHundredth ? Block.DIAMOND_BLOCK : isTenth ? Block.GOLD_BLOCK : BlockPalette.getRandom(index, r); + this.lastBlock = block; BlockTransition.animate(this.world, previous, target, block, animationDelayTicks, () -> { this.world.setBlock(target, block); this.world.setBlock(target.add(0, 1, 0), Block.LIGHT); @@ -102,6 +105,9 @@ public class JumpGenerator { if(roll < 0.05 + 0.28 * difficulty && y <= 120) dy = 1; else if(roll > 1 - (0.2 + 0.13 * difficulty) && y >= 80) dy = -1; + // von niedrigen Blöcken (z. B. Endportalrahmen, 13/16 hoch) ist ein Block höher nicht erreichbar + if(dy == 1 && this.lastBlock.collisionShape().relativeEnd().y() < 1) dy = 0; + // weite Sprünge nach oben erst ab mittlerer, diagonal erst ab hoher Schwierigkeit if(dy == 1 && dz == 4 && difficulty < 0.4) dz = 3; if(dy == 1 && dz == 4 && dx != 0 && difficulty < 0.7) dx = 0;