commit 7561d42f417f4f4268be243b62a31f2705e1f4f2 Author: Elias Müller Date: Mon Nov 29 22:14:13 2021 +0100 initial commit diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..287ab5d --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..a008a5e --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..06e8b35 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..797acea --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..e96534f --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/EndlessJumper.iml b/EndlessJumper.iml new file mode 100644 index 0000000..eedae82 --- /dev/null +++ b/EndlessJumper.iml @@ -0,0 +1,13 @@ + + + + + + + MIXIN + ADVENTURE + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..497f8df --- /dev/null +++ b/pom.xml @@ -0,0 +1,40 @@ + + + 4.0.0 + + org.example + EndlessJumper + 1.0-SNAPSHOT + + + 17 + 17 + + + + + spongepowered + https://repo.spongepowered.org/maven + + + jitpack + https://jitpack.io + + + + + + com.github.Minestom + Minestom + 484727d02a + + + org.jboss.shrinkwrap.resolver + shrinkwrap-resolver-depchain + + + + + \ No newline at end of file diff --git a/src/main/java/eu/mhsl/minecraft/endlessjumper/BlockMath.java b/src/main/java/eu/mhsl/minecraft/endlessjumper/BlockMath.java new file mode 100644 index 0000000..c7edf7d --- /dev/null +++ b/src/main/java/eu/mhsl/minecraft/endlessjumper/BlockMath.java @@ -0,0 +1,9 @@ +package eu.mhsl.minecraft.endlessjumper; + +import net.minestom.server.coordinate.Pos; + +public class BlockMath { + public static Pos roundToBlock(Pos p) { + return new Pos(p.blockX(), p.blockY(), p.blockZ()); + } +} diff --git a/src/main/java/eu/mhsl/minecraft/endlessjumper/EndlessJumper.java b/src/main/java/eu/mhsl/minecraft/endlessjumper/EndlessJumper.java new file mode 100644 index 0000000..7a355ea --- /dev/null +++ b/src/main/java/eu/mhsl/minecraft/endlessjumper/EndlessJumper.java @@ -0,0 +1,80 @@ +package eu.mhsl.minecraft.endlessjumper; + +import eu.mhsl.minecraft.endlessjumper.generator.JumpGenerator; +import net.minestom.server.MinecraftServer; +import net.minestom.server.coordinate.Pos; +import net.minestom.server.entity.Player; +import net.minestom.server.entity.PlayerSkin; +import net.minestom.server.event.GlobalEventHandler; +import net.minestom.server.event.player.PlayerDisconnectEvent; +import net.minestom.server.event.player.PlayerLoginEvent; +import net.minestom.server.event.player.PlayerMoveEvent; +import net.minestom.server.instance.InstanceContainer; +import net.minestom.server.instance.InstanceManager; +import net.minestom.server.instance.block.Block; + +import java.util.HashMap; + +public class EndlessJumper { + public static void main(String[] args) { + MinecraftServer server = MinecraftServer.init(); + InstanceManager instanceManager = MinecraftServer.getInstanceManager(); + GlobalEventHandler eventHandler = MinecraftServer.getGlobalEventHandler(); + PlayerSkin skin = PlayerSkin.fromUsername("Notch"); + + HashMap games = new HashMap<>(); + + eventHandler.addListener(PlayerLoginEvent.class, event -> { + final Player p = event.getPlayer(); + p.setRespawnPoint(new Pos(0.5,101.5,0.5)); + + final InstanceContainer world = instanceManager.createInstanceContainer(); + world.setChunkGenerator(new TerrainGenerator()); + + Pos startingAt = new Pos(0,100,0); + world.setBlock(startingAt, Block.DIAMOND_BLOCK); + + world.setTimeRate(0); + world.setTime(18000); + + p.setSkin(skin); + + event.setSpawningInstance(world); + + games.put(p, new JumpGenerator(startingAt, p, world)); + }); + + eventHandler.addListener(PlayerMoveEvent.class, event -> { + Player p = event.getPlayer(); + + if(!games.containsKey(p)) { + event.setCancelled(true); + return; + } + + JumpGenerator generator = games.get(p); + + //reset when falling down + if(p.getPosition().y() < generator.getNextLanding().y()-5 && p.getPosition().y() < generator.getCheckpoint().y()) generator.reset(); + + Pos p1 = BlockMath.roundToBlock(event.getNewPosition().sub(0.0,1.0,0.0)); + Pos p2 = BlockMath.roundToBlock(event.getNewPosition().sub(0.0, 2.0, 0.0)); + + + for(int i = 0; i <= generator.getPreview(); i++) { + Pos target = generator.getBlocks().get(generator.getBlocks().size()-i-1); + if(p1.sameBlock(target) || p2.sameBlock(target)) generator.generateNext(); + } + + + //if(p.getPosition().z() > target.z()+2) generator.highlight(); + }); + + eventHandler.addListener(PlayerDisconnectEvent.class, event -> { + games.remove(event.getPlayer()); + }); + + server.start("0.0.0.0", 25565); + + } +} diff --git a/src/main/java/eu/mhsl/minecraft/endlessjumper/TerrainGenerator.java b/src/main/java/eu/mhsl/minecraft/endlessjumper/TerrainGenerator.java new file mode 100644 index 0000000..9b4c54a --- /dev/null +++ b/src/main/java/eu/mhsl/minecraft/endlessjumper/TerrainGenerator.java @@ -0,0 +1,36 @@ +package eu.mhsl.minecraft.endlessjumper; + +import net.minestom.server.instance.Chunk; +import net.minestom.server.instance.ChunkGenerator; +import net.minestom.server.instance.ChunkPopulator; +import net.minestom.server.instance.batch.ChunkBatch; +import net.minestom.server.instance.block.Block; +import net.minestom.server.world.biomes.Biome; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Arrays; +import java.util.List; + +public class TerrainGenerator implements ChunkGenerator { + @Override + public void generateChunkData(@NotNull ChunkBatch batch, int chunkX, int chunkZ) { + for(byte x = 0; x < Chunk.CHUNK_SIZE_X; x++) { + for(byte z = 0; z < Chunk.CHUNK_SIZE_Z; z++) { + for(byte y = 0; y < 1; y++) { + batch.setBlock(x, y, z, Block.AIR); + } + } + } + } + + @Override + public void fillBiomes(@NotNull Biome[] biomes, int chunkX, int chunkZ) { + Arrays.fill(biomes, Biome.PLAINS); + } + + @Override + public @Nullable List getPopulators() { + return null; + } +} diff --git a/src/main/java/eu/mhsl/minecraft/endlessjumper/generator/BlockPalette.java b/src/main/java/eu/mhsl/minecraft/endlessjumper/generator/BlockPalette.java new file mode 100644 index 0000000..ef3f685 --- /dev/null +++ b/src/main/java/eu/mhsl/minecraft/endlessjumper/generator/BlockPalette.java @@ -0,0 +1,24 @@ +package eu.mhsl.minecraft.endlessjumper.generator; + +import net.minestom.server.instance.block.Block; + +import java.util.ArrayList; +import java.util.Random; + +public class BlockPalette { + public static Block getRandom(int seed) { + Random r = new Random(seed); + ArrayList blocks = new ArrayList<>(); + + blocks.add(Block.COPPER_BLOCK); + blocks.add(Block.CUT_COPPER); + blocks.add(Block.WEATHERED_COPPER); + blocks.add(Block.WEATHERED_CUT_COPPER); + blocks.add(Block.OXIDIZED_COPPER); + blocks.add(Block.OXIDIZED_CUT_COPPER); + + + + return blocks.get(r.nextInt(0, blocks.size())); + } +} diff --git a/src/main/java/eu/mhsl/minecraft/endlessjumper/generator/JumpGenerator.java b/src/main/java/eu/mhsl/minecraft/endlessjumper/generator/JumpGenerator.java new file mode 100644 index 0000000..4c946e6 --- /dev/null +++ b/src/main/java/eu/mhsl/minecraft/endlessjumper/generator/JumpGenerator.java @@ -0,0 +1,113 @@ +package eu.mhsl.minecraft.endlessjumper.generator; + +import net.kyori.adventure.sound.Sound; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.TextColor; +import net.kyori.adventure.title.Title; +import net.minestom.server.coordinate.Pos; +import net.minestom.server.entity.Player; +import net.minestom.server.instance.InstanceContainer; +import net.minestom.server.instance.block.Block; +import net.minestom.server.particle.Particle; +import net.minestom.server.particle.ParticleCreator; +import net.minestom.server.sound.SoundEvent; + +import java.util.ArrayList; +import java.util.Random; + +public class JumpGenerator { + private Player player; + private InstanceContainer world; + private ArrayList blocks = new ArrayList<>(); + private Pos checkpoint; + private Pos starting; + + private int combo = 0; + + private int preview = 2; + + + public JumpGenerator(Pos starting, Player player, InstanceContainer world) { + this.player = player; + this.world = world; + this.starting = starting; + generateStart(starting); + } + + public void generateNext() { + boolean isTenth = this.blocks.size() % 10 == 0; + boolean standingTenth = (this.blocks.size()-this.preview-1) % 10 == 0; + boolean isHundredth = this.blocks.size() % 100 == 0; + + float pitch = 1 + (combo * 0.025f); + this.player.playSound(Sound.sound(SoundEvent.BLOCK_NOTE_BLOCK_PLING, Sound.Source.MASTER, 0.1f, pitch)); + this.player.showTitle(Title.title(Component.text(""), Component.text((combo)+"", TextColor.color(255, 69, 0)))); + this.player.setLevel((this.blocks.size()-this.preview-1)); + + Random r = new Random(); + Pos target = blocks.get(blocks.size()-1).add(r.nextInt(-1, 2), r.nextInt(this.player.getPosition().y() < 80 ? 0 : -1, this.player.getPosition().y() > 120 ? 1 : 2), r.nextInt(3, 5)); + this.world.setBlock(target, isHundredth ? Block.DIAMOND_BLOCK : isTenth ? Block.GOLD_BLOCK : BlockPalette.getRandom((this.blocks.size() / 10))); + + if(standingTenth) { + Pos current = this.blocks.get(this.blocks.size()-this.preview-1); + this.checkpoint = current; + this.player.playSound(Sound.sound(SoundEvent.ENTITY_PLAYER_LEVELUP, Sound.Source.BLOCK, 0.3f, 1f)); + this.player.showTitle(Title.title(Component.text(""), Component.text("Checkpoint", TextColor.color(0, 255, 0)))); + this.player.sendPacket(ParticleCreator.createParticlePacket(Particle.CRIT, current.x()+0.5, current.y()+0.5, current.z()+0.5, 1.5f, 1.5f, 1.5f, 50)); + } + this.world.setBlock(target.add(0, 1 ,0), Block.LIGHT); + this.blocks.add(target); + this.player.sendPacket(ParticleCreator.createParticlePacket(Particle.CRIT, target.x()+0.5, target.y()+0.5, target.z()+0.5, 1, 1, 1, 10)); + this.player.sendPacket(ParticleCreator.createParticlePacket(Particle.FALLING_NECTAR, target.x()+0.5, target.y()+1.5, target.z()+0.5, 0.3f, 0.1f, 0.3f, 10)); + this.combo++; + } + + public Pos getNextLanding() { + return this.blocks.get(this.blocks.size()-(preview+1)); + } + + + public void generateStart(Pos start) { + this.starting = start; + this.checkpoint = start; + this.blocks.add(this.starting); + this.world.setBlock(this.starting, Block.DIAMOND_BLOCK); + for(int i = 0; i <= preview; i++) generateNext(); + } + + public void reset() { + /* + for(Pos p : this.blocks) { + this.world.setBlock(p, Block.AIR); + } + this.blocks.clear(); + */ + this.player.teleport(this.checkpoint.add(0.5, 1, 0.5)); + this.combo = 0; + this.player.showTitle(Title.title(Component.text(""), Component.text(""))); + + //generateStart(last); + this.player.playSound(Sound.sound(SoundEvent.BLOCK_GLASS_BREAK, Sound.Source.BLOCK, 0.3f, 1f)); + + } + + public Pos getCheckpoint() { + return checkpoint; + } + + public Player getPlayer() { + return player; + } + + public InstanceContainer getWorld() { + return world; + } + + public ArrayList getBlocks() { + return blocks; + } + + public int getPreview() { + return preview; + } +} diff --git a/target/classes/eu/mhsl/minecraft/endlessjumper/BlockMath.class b/target/classes/eu/mhsl/minecraft/endlessjumper/BlockMath.class new file mode 100644 index 0000000..3c6db31 Binary files /dev/null and b/target/classes/eu/mhsl/minecraft/endlessjumper/BlockMath.class differ diff --git a/target/classes/eu/mhsl/minecraft/endlessjumper/EndlessJumper.class b/target/classes/eu/mhsl/minecraft/endlessjumper/EndlessJumper.class new file mode 100644 index 0000000..58e750e Binary files /dev/null and b/target/classes/eu/mhsl/minecraft/endlessjumper/EndlessJumper.class differ diff --git a/target/classes/eu/mhsl/minecraft/endlessjumper/TerrainGenerator.class b/target/classes/eu/mhsl/minecraft/endlessjumper/TerrainGenerator.class new file mode 100644 index 0000000..4e45687 Binary files /dev/null and b/target/classes/eu/mhsl/minecraft/endlessjumper/TerrainGenerator.class differ diff --git a/target/classes/eu/mhsl/minecraft/endlessjumper/generator/BlockPalette.class b/target/classes/eu/mhsl/minecraft/endlessjumper/generator/BlockPalette.class new file mode 100644 index 0000000..3c9fe19 Binary files /dev/null and b/target/classes/eu/mhsl/minecraft/endlessjumper/generator/BlockPalette.class differ diff --git a/target/classes/eu/mhsl/minecraft/endlessjumper/generator/JumpGenerator.class b/target/classes/eu/mhsl/minecraft/endlessjumper/generator/JumpGenerator.class new file mode 100644 index 0000000..fff6843 Binary files /dev/null and b/target/classes/eu/mhsl/minecraft/endlessjumper/generator/JumpGenerator.class differ