initial commit

This commit is contained in:
MineTec committed 2021-11-29 22:14:13 +01:00
commit 7561d42f41
18 files changed
+509

No files matched your search

@@ -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());
}
}
@@ -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<Player, JumpGenerator> 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);
}
}
@@ -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<ChunkPopulator> getPopulators() {
return null;
}
}
@@ -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<Block> 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()));
}
}
@@ -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<Pos> 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<Pos> getBlocks() {
return blocks;
}
public int getPreview() {
return preview;
}
}