diff --git a/build.gradle b/build.gradle index 2da2d83..5613c8c 100644 --- a/build.gradle +++ b/build.gradle @@ -60,9 +60,9 @@ dependencies { implementation 'io.github.TogAr2:MinestomPvP:PR62-SNAPSHOT' // Hephaestus engine - implementation("team.unnamed:hephaestus-api:0.2.1-SNAPSHOT") - implementation("team.unnamed:hephaestus-reader-blockbench:0.2.1-SNAPSHOT") - implementation("team.unnamed:hephaestus-runtime-minestom:0.2.1-SNAPSHOT") +// implementation("team.unnamed:hephaestus-api:0.2.1-SNAPSHOT") +// implementation("team.unnamed:hephaestus-reader-blockbench:0.2.1-SNAPSHOT") +// implementation("team.unnamed:hephaestus-runtime-minestom:0.2.1-SNAPSHOT") } tasks { diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/GameList.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/GameList.java index bfe551d..29bad6a 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/GameList.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/GameList.java @@ -6,6 +6,7 @@ import eu.mhsl.minenet.minigames.instance.game.stateless.types.anvilRun.AnvilRun import eu.mhsl.minenet.minigames.instance.game.stateless.types.backrooms.BackroomsFactory; import eu.mhsl.minenet.minigames.instance.game.stateless.types.bedwars.BedwarsFactory; import eu.mhsl.minenet.minigames.instance.game.stateless.types.blockBreakRace.BlockBreakRaceFactory; +import eu.mhsl.minenet.minigames.instance.game.stateless.types.boatRace.BoatRaceFactory; import eu.mhsl.minenet.minigames.instance.game.stateless.types.bowSpleef.BowSpleefFactory; import eu.mhsl.minenet.minigames.instance.game.stateless.types.deathcube.DeathcubeFactory; import eu.mhsl.minenet.minigames.instance.game.stateless.types.elytraRace.ElytraRaceFactory; @@ -44,7 +45,8 @@ public enum GameList { HIGHGROUND(new HighGroundFactory(), GameType.PVP), FASTBRIDGE(new FastbridgeFactory(), GameType.OTHER), BLOCKBREAKRACE(new BlockBreakRaceFactory(), GameType.OTHER), - SPACESNAKE(new SpaceSnakeFactory(), GameType.PVP); + SPACESNAKE(new SpaceSnakeFactory(), GameType.PVP), + BOATRACE(new BoatRaceFactory(), GameType.OTHER); private final GameFactory factory; private final GameType type; diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/boatRace/BoatRace.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/boatRace/BoatRace.java new file mode 100644 index 0000000..2bf826d --- /dev/null +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/boatRace/BoatRace.java @@ -0,0 +1,72 @@ +package eu.mhsl.minenet.minigames.instance.game.stateless.types.boatRace; + +import eu.mhsl.minenet.minigames.instance.Dimension; +import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame; +import eu.mhsl.minenet.minigames.score.FirstWinsScore; +import eu.mhsl.minenet.minigames.score.Score; +import net.minestom.server.MinecraftServer; +import net.minestom.server.coordinate.Pos; +import net.minestom.server.coordinate.Vec; +import net.minestom.server.entity.Entity; +import net.minestom.server.entity.EntityType; +import net.minestom.server.entity.Player; +import net.minestom.server.entity.metadata.monster.BlazeMeta; +import net.minestom.server.entity.metadata.other.BoatMeta; +import net.minestom.server.event.entity.EntityTickEvent; +import net.minestom.server.event.entity.EntityVelocityEvent; +import net.minestom.server.instance.block.Block; +import net.minestom.server.instance.generator.GenerationUnit; +import net.minestom.server.instance.generator.Generator; +import net.minestom.server.registry.DynamicRegistry; +import net.minestom.server.world.DimensionType; +import org.jetbrains.annotations.NotNull; + +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + + +public class BoatRace extends StatelessGame { + public BoatRace() { + super(Dimension.OVERWORLD.key, "boatRace", new FirstWinsScore()); + + setGenerator(new Generator() { + @Override + public void generate(@NotNull GenerationUnit generationUnit) { + generationUnit.modifier().fill( + generationUnit.absoluteStart(), + generationUnit.absoluteEnd().withY(0), + Block.BLUE_ICE + ); + } + }); + + Map desiredBoatVelocity = new ConcurrentHashMap<>(); + + eventNode().addListener(EntityTickEvent.class, event -> { + Entity entity = event.getEntity(); + if (entity.getEntityType() == EntityType.OAK_BOAT) { + Vec desired = desiredBoatVelocity.get(entity.getUuid()); + if (desired != null) { + entity.setVelocity(desired); + } + } + }); + + + } + + @Override + protected boolean onPlayerJoin(Player p) { + Entity boat = new Entity(EntityType.OAK_BOAT); + boat.setInstance(this, this.getSpawn()); + boat.setNoGravity(true); + MinecraftServer.getSchedulerManager().scheduleNextTick(() -> boat.addPassenger(p)); + return super.onPlayerJoin(p); + } + + @Override + public Pos getSpawn() { + return new Pos(0, 1, 0); + } +} diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/boatRace/BoatRaceFactory.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/boatRace/BoatRaceFactory.java new file mode 100644 index 0000000..cdedcaa --- /dev/null +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/boatRace/BoatRaceFactory.java @@ -0,0 +1,21 @@ +package eu.mhsl.minenet.minigames.instance.game.stateless.types.boatRace; + +import eu.mhsl.minenet.minigames.instance.game.Game; +import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory; +import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option; +import eu.mhsl.minenet.minigames.instance.room.Room; +import eu.mhsl.minenet.minigames.message.component.TranslatedComponent; + +import java.util.Map; + +public class BoatRaceFactory implements GameFactory { + @Override + public TranslatedComponent name() { + return TranslatedComponent.byId("game_BoatRace#name"); + } + + @Override + public Game manufacture(Room parent, Map> configuration) throws Exception { + return new BoatRace().setParent(parent); + } +}