Added Bedwars
Added ConfigurationHandler for games Further progress
This commit is contained in:
@@ -13,6 +13,8 @@ import java.util.logging.Logger;
|
||||
public enum Resource {
|
||||
HUB_MAP("maps/hub"),
|
||||
LOBBY_MAP("maps/lobby"),
|
||||
|
||||
GAME_MAP("maps/game"),
|
||||
LOCALES("lang");
|
||||
|
||||
private final Path path;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package eu.mhsl.minenet.minigames.command;
|
||||
|
||||
import eu.mhsl.minenet.minigames.command.admin.*;
|
||||
import eu.mhsl.minenet.minigames.command.user.HubCommand;
|
||||
import eu.mhsl.minenet.minigames.command.user.LeaveCommand;
|
||||
import eu.mhsl.minenet.minigames.command.privileged.*;
|
||||
import eu.mhsl.minenet.minigames.command.anonymous.HubCommand;
|
||||
import eu.mhsl.minenet.minigames.command.anonymous.LeaveCommand;
|
||||
import eu.mhsl.minenet.minigames.message.Icon;
|
||||
import eu.mhsl.minenet.minigames.message.type.ChatMessage;
|
||||
import net.minestom.server.MinecraftServer;
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package eu.mhsl.minenet.minigames.command.user;
|
||||
package eu.mhsl.minenet.minigames.command.anonymous;
|
||||
|
||||
import eu.mhsl.minenet.minigames.util.MoveInstance;
|
||||
import eu.mhsl.minenet.minigames.instance.hub.Hub;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package eu.mhsl.minenet.minigames.command.user;
|
||||
package eu.mhsl.minenet.minigames.command.anonymous;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.game.Game;
|
||||
import eu.mhsl.minenet.minigames.instance.room.Room;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package eu.mhsl.minenet.minigames.command.admin;
|
||||
package eu.mhsl.minenet.minigames.command.privileged;
|
||||
|
||||
import eu.mhsl.minenet.minigames.message.Icon;
|
||||
import eu.mhsl.minenet.minigames.message.type.ActionBarMessage;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package eu.mhsl.minenet.minigames.command.admin;
|
||||
package eu.mhsl.minenet.minigames.command.privileged;
|
||||
|
||||
import net.minestom.server.command.builder.Command;
|
||||
import net.minestom.server.coordinate.Vec;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package eu.mhsl.minenet.minigames.command.admin;
|
||||
package eu.mhsl.minenet.minigames.command.privileged;
|
||||
|
||||
import net.minestom.server.command.builder.Command;
|
||||
import net.minestom.server.command.builder.arguments.ArgumentEnum;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package eu.mhsl.minenet.minigames.command.admin;
|
||||
package eu.mhsl.minenet.minigames.command.privileged;
|
||||
|
||||
import eu.mhsl.minenet.minigames.message.type.ChatMessage;
|
||||
import eu.mhsl.minenet.minigames.message.Icon;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package eu.mhsl.minenet.minigames.command.admin;
|
||||
package eu.mhsl.minenet.minigames.command.privileged;
|
||||
|
||||
import eu.mhsl.minenet.minigames.lang.Languages;
|
||||
import eu.mhsl.minenet.minigames.lang.Lang;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package eu.mhsl.minenet.minigames.command.admin;
|
||||
package eu.mhsl.minenet.minigames.command.privileged;
|
||||
|
||||
import eu.mhsl.minenet.minigames.message.Icon;
|
||||
import eu.mhsl.minenet.minigames.message.TranslatableMessage;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package eu.mhsl.minenet.minigames.command.admin;
|
||||
package eu.mhsl.minenet.minigames.command.privileged;
|
||||
|
||||
import eu.mhsl.minenet.minigames.message.type.ChatMessage;
|
||||
import eu.mhsl.minenet.minigames.message.Icon;
|
||||
+3
-1
@@ -9,6 +9,8 @@ import net.minestom.server.MinecraftServer;
|
||||
import net.minestom.server.entity.Player;
|
||||
import net.minestom.server.event.EventListener;
|
||||
import net.minestom.server.event.instance.AddEntityToInstanceEvent;
|
||||
import net.minestom.server.potion.Potion;
|
||||
import net.minestom.server.potion.PotionEffect;
|
||||
import net.minestom.server.timer.ExecutionType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -26,7 +28,7 @@ public class AddEntityToInstanceEventListener implements EventListener<AddEntity
|
||||
new ActionBarMessage().appendStatic(Component.text("Instance: ", NamedTextColor.DARK_GRAY)).appendStatic(event.getInstance().getUniqueId().toString()).send(p);
|
||||
new ChatMessage(Icon.SCIENCE).appendStatic(Component.text(event.getInstance().getUniqueId().toString())).send(p);
|
||||
|
||||
//p.addEffect(new Potion(PotionEffect.BLINDNESS, (byte) 1, 20)); //TODO Uncomment, currently buggy causes disconnect see https://github.com/Minestom/Minestom/discussions/1302
|
||||
p.addEffect(new Potion(PotionEffect.BLINDNESS, (byte) 1, 20)); //TODO Uncomment, currently buggy causes disconnect see https://github.com/Minestom/Minestom/discussions/1302
|
||||
}
|
||||
|
||||
return Result.SUCCESS;
|
||||
|
||||
@@ -24,7 +24,7 @@ public class PlayerLoginHandler implements EventListener<PlayerLoginEvent> {
|
||||
p.setRespawnPoint(Hub.INSTANCE.getSpawn());
|
||||
p.sendMessage(p.getUuid().toString());
|
||||
event.setSpawningInstance(Hub.INSTANCE);
|
||||
SkinCache.applySkin(p);
|
||||
//SkinCache.applySkin(p);
|
||||
|
||||
|
||||
if(p.getUsername().equalsIgnoreCase("minetec"))
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.MineNetInstance;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.GameFactory;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.Option;
|
||||
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.message.Icon;
|
||||
import eu.mhsl.minenet.minigames.message.type.ChatMessage;
|
||||
import eu.mhsl.minenet.minigames.util.CommonEventHandles;
|
||||
import eu.mhsl.minenet.minigames.instance.Spawnable;
|
||||
import eu.mhsl.minenet.minigames.instance.room.Room;
|
||||
@@ -46,11 +48,17 @@ public abstract class Game extends MineNetInstance implements Spawnable {
|
||||
.addListener(ItemDropEvent.class, this::onItemDrop);
|
||||
}
|
||||
|
||||
public static Game initialize(GameFactory factory, List<Option<?>> options, Player owner) {
|
||||
Game game = factory.manufacture(options);
|
||||
Room.getRoom(owner).moveMembersToGame(game);
|
||||
game.load();
|
||||
return game;
|
||||
public static void initialize(GameFactory factory, List<Option<?>> options, Player owner) {
|
||||
try {
|
||||
|
||||
Game game = factory.manufacture(options);
|
||||
Room.getRoom(owner).moveMembersToGame(game);
|
||||
game.load();
|
||||
|
||||
} catch (Exception e) {
|
||||
new ChatMessage(Icon.ERROR).appendStatic("Instance crashed:" + e.getMessage()).send(owner);
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -93,7 +101,10 @@ public abstract class Game extends MineNetInstance implements Spawnable {
|
||||
}, TaskSchedule.seconds(10), TaskSchedule.stop());
|
||||
}
|
||||
|
||||
protected void onLoad(CompletableFuture<Void> callback) {}
|
||||
protected void onLoad(CompletableFuture<Void> callback) {
|
||||
callback.complete(null);
|
||||
}
|
||||
|
||||
protected void onStart() {}
|
||||
protected void onStop() {}
|
||||
protected void onUnload() {}
|
||||
|
||||
@@ -1,17 +1,19 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.GameFactory;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.types.bedwars.BedwarsFactory;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.types.deathcube.DeathcubeFactory;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.types.minerun.MinerunFactory;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.types.stickfight.StickFightFactory;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.types.trafficlightrace.TrafficLightRaceFactory;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.types.bedwars.BedwarsFactory;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.types.deathcube.DeathcubeFactory;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.types.minerun.MinerunFactory;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.types.stickfight.StickFightFactory;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.types.towerdefense.TowerdefenseFactory;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.types.trafficlightrace.TrafficLightRaceFactory;
|
||||
|
||||
public enum GameList {
|
||||
DEATHCUBE(new DeathcubeFactory(), GameType.OTHER),
|
||||
STICKFIGHT(new StickFightFactory(), GameType.PVP),
|
||||
MINERUN(new MinerunFactory(), GameType.PVE),
|
||||
TRAFFICLIGHTRACE(new TrafficLightRaceFactory(), GameType.OTHER),
|
||||
TOWERDEFENSE(new TowerdefenseFactory(), GameType.PVE),
|
||||
BEDWARS(new BedwarsFactory(), GameType.PVP);
|
||||
|
||||
private final GameFactory factory;
|
||||
|
||||
-10
@@ -1,10 +0,0 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.minigame.types.bedwars;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.Dimension;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.Minigame;
|
||||
|
||||
public class Bedwars extends Minigame {
|
||||
public Bedwars() {
|
||||
super(Dimension.OVERWORLD.DIMENSION, "Bedwars");
|
||||
}
|
||||
}
|
||||
+3
-3
@@ -1,4 +1,4 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.minigame;
|
||||
package eu.mhsl.minenet.minigames.instance.game.stateless;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.game.Game;
|
||||
import eu.mhsl.minenet.minigames.message.Countdown;
|
||||
@@ -16,14 +16,14 @@ import net.minestom.server.world.DimensionType;
|
||||
import java.time.Duration;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public class Minigame extends Game {
|
||||
public class StatelessGame extends Game {
|
||||
private final String name;
|
||||
private final Score score = new Score(this);
|
||||
|
||||
private int timeLimit = 0;
|
||||
private int timePlayed = 0;
|
||||
private final boolean preventExit = false;
|
||||
public Minigame(DimensionType dimensionType, String gameName) {
|
||||
public StatelessGame(DimensionType dimensionType, String gameName) {
|
||||
super(dimensionType);
|
||||
|
||||
this.name = gameName;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.minigame.config;
|
||||
package eu.mhsl.minenet.minigames.instance.game.stateless.config;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
+5
-4
@@ -1,9 +1,9 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.minigame.config;
|
||||
package eu.mhsl.minenet.minigames.instance.game.stateless.config;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.game.Game;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.Restriction;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.RestrictionData;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.RestrictionHandler;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.Restriction;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.RestrictionData;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.RestrictionHandler;
|
||||
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
||||
import eu.mhsl.minenet.minigames.shared.inventory.InteractableInventory;
|
||||
import eu.mhsl.minenet.minigames.util.InventoryItemAlignment;
|
||||
@@ -12,6 +12,7 @@ import net.kyori.adventure.sound.Sound;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
import net.minestom.server.MinecraftServer;
|
||||
import net.minestom.server.entity.Player;
|
||||
import net.minestom.server.event.EventListener;
|
||||
import net.minestom.server.event.instance.AddEntityToInstanceEvent;
|
||||
import net.minestom.server.event.instance.RemoveEntityFromInstanceEvent;
|
||||
import net.minestom.server.inventory.InventoryType;
|
||||
+9
-7
@@ -1,7 +1,7 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.minigame.config;
|
||||
package eu.mhsl.minenet.minigames.instance.game.stateless.config;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.Minigame;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.RestrictionHandler;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.RestrictionHandler;
|
||||
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
||||
import net.minestom.server.item.Material;
|
||||
|
||||
@@ -11,7 +11,9 @@ import java.util.Map;
|
||||
|
||||
public interface GameFactory {
|
||||
TranslatedComponent name();
|
||||
ConfigManager configuration();
|
||||
default ConfigManager configuration() {
|
||||
return null;
|
||||
}
|
||||
default RestrictionHandler globalRestrictions() {
|
||||
return new RestrictionHandler();
|
||||
}
|
||||
@@ -23,9 +25,9 @@ public interface GameFactory {
|
||||
return TranslatedComponent.byId("GameFactory#missingDescription");
|
||||
}
|
||||
|
||||
Minigame manufacture(Map<String, Option<?>> configuration);
|
||||
StatelessGame manufacture(Map<String, Option<?>> configuration) throws Exception;
|
||||
|
||||
default Minigame manufacture(List<Option<?>> configuration) {
|
||||
default StatelessGame manufacture(List<Option<?>> configuration) throws Exception {
|
||||
if(configuration == null) return manufacture();
|
||||
|
||||
Map<String, Option<?>> cnf = new HashMap<>();
|
||||
@@ -34,7 +36,7 @@ public interface GameFactory {
|
||||
return manufacture(cnf);
|
||||
}
|
||||
|
||||
default Minigame manufacture() {
|
||||
default StatelessGame manufacture() throws Exception {
|
||||
if(this.configuration() == null) return manufacture(List.of());
|
||||
|
||||
return manufacture(this.configuration().getAll());
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.minigame.config;
|
||||
package eu.mhsl.minenet.minigames.instance.game.stateless.config;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.RestrictionHandler;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.RestrictionHandler;
|
||||
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.minigame.config.common;
|
||||
package eu.mhsl.minenet.minigames.instance.game.stateless.config.common;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.Option;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option;
|
||||
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
||||
import net.minestom.server.item.Material;
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.minigame.config.common;
|
||||
package eu.mhsl.minenet.minigames.instance.game.stateless.config.common;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.Option;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option;
|
||||
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
||||
import net.minestom.server.item.Material;
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction;
|
||||
package eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction;
|
||||
|
||||
|
||||
public interface IRestriction {
|
||||
+2
-2
@@ -1,9 +1,9 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction;
|
||||
package eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction;
|
||||
|
||||
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
||||
|
||||
public record Restriction(TranslatedComponent name, TranslatedComponent description, TranslatedComponent warnMessage,
|
||||
eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.Restriction.Type type) {
|
||||
eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.Restriction.Type type) {
|
||||
public Restriction(TranslatedComponent name, TranslatedComponent description, TranslatedComponent warnMessage, Type type) {
|
||||
this.name = name;
|
||||
this.description = description;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction;
|
||||
package eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.room.Room;
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction;
|
||||
package eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction;
|
||||
|
||||
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
||||
|
||||
+4
-4
@@ -1,8 +1,8 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.common;
|
||||
package eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.common;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.IRestriction;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.Restriction;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.RestrictionData;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.IRestriction;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.Restriction;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.RestrictionData;
|
||||
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
||||
|
||||
public class MaximalPlayeramountGameRestriction implements IRestriction {
|
||||
+4
-4
@@ -1,8 +1,8 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.common;
|
||||
package eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.common;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.IRestriction;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.Restriction;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.RestrictionData;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.IRestriction;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.Restriction;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.RestrictionData;
|
||||
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
||||
|
||||
public class MinimalPlayeramountGameRestriction implements IRestriction {
|
||||
+122
@@ -0,0 +1,122 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.stateless.types.bedwars;
|
||||
|
||||
import eu.mhsl.minenet.minigames.Resource;
|
||||
import eu.mhsl.minenet.minigames.instance.Dimension;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.types.bedwars.data.BedwarsTeam;
|
||||
import eu.mhsl.minenet.minigames.message.type.ActionBarMessage;
|
||||
import eu.mhsl.minenet.minigames.util.MaterialUtil;
|
||||
import eu.mhsl.minenet.minigames.util.Position;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.md_5.bungee.config.Configuration;
|
||||
import net.md_5.bungee.config.ConfigurationProvider;
|
||||
import net.md_5.bungee.config.YamlConfiguration;
|
||||
import net.minestom.server.coordinate.Point;
|
||||
import net.minestom.server.coordinate.Pos;
|
||||
import net.minestom.server.entity.ItemEntity;
|
||||
import net.minestom.server.entity.Player;
|
||||
import net.minestom.server.event.item.ItemDropEvent;
|
||||
import net.minestom.server.event.item.PickupItemEvent;
|
||||
import net.minestom.server.event.player.PlayerBlockBreakEvent;
|
||||
import net.minestom.server.event.player.PlayerBlockPlaceEvent;
|
||||
import net.minestom.server.event.player.PlayerMoveEvent;
|
||||
import net.minestom.server.instance.AnvilLoader;
|
||||
import net.minestom.server.item.ItemStack;
|
||||
import net.minestom.server.item.Material;
|
||||
import net.minestom.server.timer.ExecutionType;
|
||||
import net.minestom.server.timer.TaskSchedule;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
|
||||
public class Bedwars extends StatelessGame {
|
||||
|
||||
List<Point> placedBlocks = new ArrayList<>();
|
||||
List<BedwarsTeam> teams = new ArrayList<>();
|
||||
|
||||
|
||||
public Bedwars() throws IOException {
|
||||
super(Dimension.OVERWORLD.DIMENSION, "Bedwars");
|
||||
setChunkLoader(new AnvilLoader(Resource.GAME_MAP.getPath().resolve("bedwars/test")));
|
||||
|
||||
Configuration config = ConfigurationProvider.getProvider(YamlConfiguration.class).load(Resource.GAME_MAP.getPath().resolve("bedwars/test/config.yml").toFile());
|
||||
List<String> teamNames = config.getStringList("setup.teams");
|
||||
teamNames.forEach(teamName -> {
|
||||
String path = "teams." + teamName;
|
||||
teams.add(new BedwarsTeam(
|
||||
config.getString(path + ".name"),
|
||||
Position.getPosFromCommaSeparated(config.getString(path + ".pos.spawn")),
|
||||
Position.getPosFromCommaSeparated(config.getString(path + ".pos.spawner")),
|
||||
config.getStringList(path + ".pos.bed").stream().map(Position::getPosFromCommaSeparated).toList().toArray(new Pos[0]),
|
||||
MaterialUtil.fromString(config.getString(path + ".material.block"), Material.BLACK_WOOL)
|
||||
));
|
||||
});
|
||||
|
||||
eventNode().addListener(PickupItemEvent.class, pickupItemEvent -> {
|
||||
if(pickupItemEvent.getEntity() instanceof Player p) {
|
||||
p.getInventory().addItemStack(pickupItemEvent.getItemStack());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onItemDrop(@NotNull ItemDropEvent itemDropEvent) {
|
||||
itemDropEvent.setCancelled(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStart() {
|
||||
scheduler().submitTask(() -> {
|
||||
if(!isRunning) return TaskSchedule.stop();
|
||||
|
||||
teams.forEach(bedwarsTeam -> {
|
||||
ItemEntity item = new ItemEntity(ItemStack.of(bedwarsTeam.getBlock()));
|
||||
item.setNoGravity(true);
|
||||
item.setInstance(this, bedwarsTeam.getSpawner());
|
||||
});
|
||||
|
||||
return TaskSchedule.stop();
|
||||
}, ExecutionType.SYNC);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onBlockPlace(@NotNull PlayerBlockPlaceEvent playerBlockPlaceEvent) {
|
||||
placedBlocks.add(playerBlockPlaceEvent.getBlockPosition());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onBlockBreak(@NotNull PlayerBlockBreakEvent playerBlockBreakEvent) {
|
||||
if(!placedBlocks.contains(playerBlockBreakEvent.getBlockPosition())) playerBlockBreakEvent.setCancelled(true);
|
||||
|
||||
teams.forEach(bedwarsTeam -> {
|
||||
if(Arrays.stream(bedwarsTeam.getBed()).anyMatch(pos -> pos.sameBlock(playerBlockBreakEvent.getBlockPosition())))
|
||||
breakBed(bedwarsTeam);
|
||||
});
|
||||
|
||||
if(playerBlockBreakEvent.isCancelled())
|
||||
new ActionBarMessage().appendStatic(Component.text("BLAH")).send(playerBlockBreakEvent.getPlayer());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPlayerMove(@NotNull PlayerMoveEvent playerMoveEvent) {
|
||||
if(playerMoveEvent.getNewPosition().y() < 0) death(playerMoveEvent.getPlayer());
|
||||
}
|
||||
|
||||
private void breakBed(BedwarsTeam team) {
|
||||
team.removeBed();
|
||||
for (Pos blockPos : team.getBed()) {
|
||||
setBlock(blockPos, Material.AIR.block());
|
||||
}
|
||||
}
|
||||
|
||||
private void death(Player p) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pos getSpawn() {
|
||||
return new Pos(0, 13, 0);
|
||||
}
|
||||
}
|
||||
+9
-14
@@ -1,11 +1,11 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.minigame.types.bedwars;
|
||||
package eu.mhsl.minenet.minigames.instance.game.stateless.types.bedwars;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.Minigame;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.ConfigManager;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.GameFactory;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.Option;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.RestrictionHandler;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.common.MinimalPlayeramountGameRestriction;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.ConfigManager;
|
||||
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.game.stateless.config.restriction.RestrictionHandler;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.common.MinimalPlayeramountGameRestriction;
|
||||
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
||||
import net.minestom.server.item.Material;
|
||||
|
||||
@@ -17,15 +17,10 @@ public class BedwarsFactory implements GameFactory {
|
||||
return TranslatedComponent.byId("game_Bedwars#name");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ConfigManager configuration() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RestrictionHandler globalRestrictions() {
|
||||
return new RestrictionHandler()
|
||||
.addRestriction(new MinimalPlayeramountGameRestriction(2));
|
||||
.addRestriction(new MinimalPlayeramountGameRestriction(1));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -39,7 +34,7 @@ public class BedwarsFactory implements GameFactory {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Minigame manufacture(Map<String, Option<?>> configuration) {
|
||||
public StatelessGame manufacture(Map<String, Option<?>> configuration) throws Exception {
|
||||
return new Bedwars();
|
||||
}
|
||||
}
|
||||
+66
@@ -0,0 +1,66 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.stateless.types.bedwars.data;
|
||||
|
||||
import net.minestom.server.coordinate.Pos;
|
||||
import net.minestom.server.entity.Player;
|
||||
import net.minestom.server.item.Material;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class BedwarsTeam {
|
||||
private List<Player> members = new ArrayList<>();
|
||||
|
||||
private final String name;
|
||||
private final Pos spawn;
|
||||
private final Pos spawner;
|
||||
|
||||
private final Pos[] bed;
|
||||
|
||||
private final Material block;
|
||||
|
||||
private boolean hasBed = true;
|
||||
|
||||
public BedwarsTeam(String name, Pos spawn, Pos spawner, Pos[] bed, Material block) {
|
||||
this.name = name;
|
||||
this.spawn = spawn;
|
||||
this.spawner = spawner;
|
||||
this.bed = bed;
|
||||
this.block = block;
|
||||
}
|
||||
|
||||
public void removeBed() {
|
||||
this.hasBed = false;
|
||||
}
|
||||
|
||||
public boolean isHasBed() {
|
||||
return hasBed;
|
||||
}
|
||||
|
||||
public List<Player> getMembers() {
|
||||
return members;
|
||||
}
|
||||
|
||||
public void setMembers(List<Player> members) {
|
||||
this.members = members;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public Pos getSpawn() {
|
||||
return spawn;
|
||||
}
|
||||
|
||||
public Pos getSpawner() {
|
||||
return spawner;
|
||||
}
|
||||
|
||||
public Pos[] getBed() {
|
||||
return bed;
|
||||
}
|
||||
|
||||
public Material getBlock() {
|
||||
return block;
|
||||
}
|
||||
}
|
||||
+14
-4
@@ -1,10 +1,13 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.minigame.types.deathcube;
|
||||
package eu.mhsl.minenet.minigames.instance.game.stateless.types.deathcube;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.Minigame;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
|
||||
import eu.mhsl.minenet.minigames.util.BatchUtil;
|
||||
import eu.mhsl.minenet.minigames.instance.Dimension;
|
||||
import eu.mhsl.minenet.minigames.world.generator.BlockPallet;
|
||||
import eu.mhsl.minenet.minigames.world.generator.terrain.CircularTerrainGenerator;
|
||||
import io.github.bloepiloepi.pvp.config.AttackConfig;
|
||||
import io.github.bloepiloepi.pvp.config.DamageConfig;
|
||||
import io.github.bloepiloepi.pvp.config.PvPConfig;
|
||||
import net.minestom.server.coordinate.Pos;
|
||||
import net.minestom.server.event.player.PlayerMoveEvent;
|
||||
import net.minestom.server.instance.batch.AbsoluteBlockBatch;
|
||||
@@ -12,18 +15,25 @@ import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
class Deathcube extends Minigame {
|
||||
class Deathcube extends StatelessGame {
|
||||
|
||||
final int radius;
|
||||
final int height;
|
||||
final int percentage;
|
||||
|
||||
public Deathcube(int radius, int height, int percentage) {
|
||||
public Deathcube(int radius, int height, int percentage, int pvpEnabled) {
|
||||
super(Dimension.THE_END.DIMENSION, "Deathcube");
|
||||
this.radius = radius;
|
||||
this.height = height + 49;
|
||||
this.percentage = percentage;
|
||||
this.setGenerator(new CircularTerrainGenerator(radius+10, true));
|
||||
|
||||
if(pvpEnabled == 1) eventNode().addChild(
|
||||
PvPConfig.emptyBuilder()
|
||||
.damage(DamageConfig.legacyBuilder().fallDamage(false))
|
||||
.attack(AttackConfig.legacyBuilder().attackCooldown(true))
|
||||
.build().createNode()
|
||||
);
|
||||
System.out.println(radius);
|
||||
}
|
||||
|
||||
+11
-9
@@ -1,10 +1,10 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.minigame.types.deathcube;
|
||||
package eu.mhsl.minenet.minigames.instance.game.stateless.types.deathcube;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.Minigame;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.GameFactory;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.Option;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.ConfigManager;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.common.NumericOption;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
|
||||
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.game.stateless.config.ConfigManager;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.common.NumericOption;
|
||||
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
||||
import net.minestom.server.item.Material;
|
||||
|
||||
@@ -26,12 +26,14 @@ public class DeathcubeFactory implements GameFactory {
|
||||
return new ConfigManager()
|
||||
.addOption(new NumericOption("radius", Material.HEART_OF_THE_SEA, TranslatedComponent.byId("optionCommon#radius"), 10, 20, 30))
|
||||
.addOption(new NumericOption("height", Material.SCAFFOLDING, TranslatedComponent.byId("optionCommon#height"), 10, 30, 50))
|
||||
.addOption(new NumericOption("percentage", Material.COBWEB, TranslatedComponent.byId("game_Deathcube#optionPercentageBlocks"), 5, 7, 9, 11, 13));
|
||||
.addOption(new NumericOption("percentage", Material.COBWEB, TranslatedComponent.byId("game_Deathcube#optionPercentageBlocks"), 5, 7, 9, 11, 13))
|
||||
.addOption(new NumericOption("pvpEnabled", Material.STICK, TranslatedComponent.byId("game_Deathcube#optionPvpEnabled"), 1, 0));
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Minigame manufacture(Map<String, Option<?>> configuration) {
|
||||
return new Deathcube(configuration.get("radius").getAsInt(), configuration.get("height").getAsInt(), configuration.get("percentage").getAsInt());
|
||||
public StatelessGame manufacture(Map<String, Option<?>> configuration) {
|
||||
return new Deathcube(configuration.get("radius").getAsInt(), configuration.get("height").getAsInt(), configuration.get("percentage").getAsInt(), configuration.get("pvpEnabled").getAsInt());
|
||||
}
|
||||
|
||||
@Override
|
||||
+3
-3
@@ -1,6 +1,6 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.minigame.types.minerun;
|
||||
package eu.mhsl.minenet.minigames.instance.game.stateless.types.minerun;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.Minigame;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
|
||||
import eu.mhsl.minenet.minigames.message.type.ActionBarMessage;
|
||||
import eu.mhsl.minenet.minigames.util.BatchUtil;
|
||||
import eu.mhsl.minenet.minigames.util.Intersect;
|
||||
@@ -22,7 +22,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
class Minerun extends Minigame {
|
||||
class Minerun extends StatelessGame {
|
||||
|
||||
private int minePercentage = 50;
|
||||
private int width = 100;
|
||||
+7
-7
@@ -1,10 +1,10 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.minigame.types.minerun;
|
||||
package eu.mhsl.minenet.minigames.instance.game.stateless.types.minerun;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.Minigame;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.ConfigManager;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.GameFactory;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.Option;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.common.NumericOption;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.ConfigManager;
|
||||
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.game.stateless.config.common.NumericOption;
|
||||
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
||||
import net.minestom.server.item.Material;
|
||||
|
||||
@@ -25,7 +25,7 @@ public class MinerunFactory implements GameFactory {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Minigame manufacture(Map<String, Option<?>> configuration) {
|
||||
public StatelessGame manufacture(Map<String, Option<?>> configuration) {
|
||||
return new Minerun(configuration.get("width").getAsInt(), configuration.get("length").getAsInt(), configuration.get("percentage").getAsInt());
|
||||
}
|
||||
|
||||
+10
-10
@@ -1,13 +1,13 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.minigame.types.stickfight;
|
||||
package eu.mhsl.minenet.minigames.instance.game.stateless.types.stickfight;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.Minigame;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.ConfigManager;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.GameFactory;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.Option;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.common.NumericOption;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.RestrictionHandler;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.common.MaximalPlayeramountGameRestriction;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.common.MinimalPlayeramountGameRestriction;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.ConfigManager;
|
||||
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.game.stateless.config.common.NumericOption;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.RestrictionHandler;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.common.MaximalPlayeramountGameRestriction;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.restriction.common.MinimalPlayeramountGameRestriction;
|
||||
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
||||
import net.minestom.server.item.Material;
|
||||
|
||||
@@ -38,7 +38,7 @@ public class StickFightFactory implements GameFactory {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Minigame manufacture(Map<String, Option<?>> configuration) {
|
||||
public StatelessGame manufacture(Map<String, Option<?>> configuration) {
|
||||
return new Stickfight();
|
||||
}
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.minigame.types.stickfight;
|
||||
package eu.mhsl.minenet.minigames.instance.game.stateless.types.stickfight;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.Dimension;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.Minigame;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
|
||||
import eu.mhsl.minenet.minigames.util.BatchUtil;
|
||||
import eu.mhsl.minenet.minigames.world.generator.terrain.CircularTerrainGenerator;
|
||||
import io.github.bloepiloepi.pvp.config.*;
|
||||
@@ -15,7 +15,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public class Stickfight extends Minigame {
|
||||
public class Stickfight extends StatelessGame {
|
||||
public Stickfight() {
|
||||
super(Dimension.OVERWORLD.DIMENSION, "Stickfight");
|
||||
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.stateless.types.towerdefense;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.Dimension;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.types.towerdefense.generator.MazeGenerator;
|
||||
import net.minestom.server.entity.Player;
|
||||
import net.minestom.server.item.ItemStack;
|
||||
import net.minestom.server.item.Material;
|
||||
|
||||
public class Towerdefense extends StatelessGame {
|
||||
public Towerdefense() {
|
||||
super(Dimension.NETHER.DIMENSION, "Towerdefense");
|
||||
|
||||
setGenerator(new MazeGenerator());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean onPlayerJoin(Player p) {
|
||||
p.getInventory().setItemStack(1, ItemStack.of(Material.ARMOR_STAND));
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.stateless.types.towerdefense;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
|
||||
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.message.component.TranslatedComponent;
|
||||
import net.minestom.server.item.Material;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class TowerdefenseFactory implements GameFactory {
|
||||
@Override
|
||||
public TranslatedComponent name() {
|
||||
return TranslatedComponent.byId("game_Towerdefense#name");
|
||||
}
|
||||
@Override
|
||||
public Material symbol() {
|
||||
return Material.ARMOR_STAND;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TranslatedComponent description() {
|
||||
return TranslatedComponent.byId("game_Towerdefense#description");
|
||||
}
|
||||
|
||||
@Override
|
||||
public StatelessGame manufacture(Map<String, Option<?>> configuration) {
|
||||
return new Towerdefense();
|
||||
}
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.stateless.types.towerdefense.generator;
|
||||
|
||||
import net.minestom.server.instance.block.Block;
|
||||
import net.minestom.server.instance.generator.GenerationUnit;
|
||||
import net.minestom.server.instance.generator.Generator;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class MazeGenerator implements Generator {
|
||||
@Override
|
||||
public void generate(@NotNull GenerationUnit unit) {
|
||||
unit.modifier().fillHeight(0, 1, Block.BLACK_WOOL);
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.minigame.types.trafficlightrace;
|
||||
package eu.mhsl.minenet.minigames.instance.game.stateless.types.trafficlightrace;
|
||||
|
||||
import net.minestom.server.item.ItemStack;
|
||||
import net.minestom.server.item.Material;
|
||||
+3
-3
@@ -1,6 +1,6 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.minigame.types.trafficlightrace;
|
||||
package eu.mhsl.minenet.minigames.instance.game.stateless.types.trafficlightrace;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.Minigame;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
|
||||
import eu.mhsl.minenet.minigames.util.BatchUtil;
|
||||
import eu.mhsl.minenet.minigames.instance.Dimension;
|
||||
import net.minestom.server.coordinate.Vec;
|
||||
@@ -13,7 +13,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
class TrafficLightRace extends Minigame {
|
||||
class TrafficLightRace extends StatelessGame {
|
||||
private LightPhase phase = LightPhase.RED;
|
||||
private int phaseCounter = 1;
|
||||
|
||||
+6
-6
@@ -1,9 +1,9 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.minigame.types.trafficlightrace;
|
||||
package eu.mhsl.minenet.minigames.instance.game.stateless.types.trafficlightrace;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.Minigame;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.GameFactory;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.ConfigManager;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.Option;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.ConfigManager;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.Option;
|
||||
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
||||
import net.minestom.server.item.Material;
|
||||
|
||||
@@ -21,7 +21,7 @@ public class TrafficLightRaceFactory implements GameFactory {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Minigame manufacture(Map<String, Option<?>> configuration) {
|
||||
public StatelessGame manufacture(Map<String, Option<?>> configuration) {
|
||||
return new TrafficLightRace();
|
||||
}
|
||||
|
||||
@@ -17,6 +17,9 @@ import net.minestom.server.entity.Player;
|
||||
import net.minestom.server.event.player.PlayerBlockBreakEvent;
|
||||
import net.minestom.server.event.player.PlayerDisconnectEvent;
|
||||
import net.minestom.server.instance.AnvilLoader;
|
||||
import team.unnamed.hephaestus.ModelDataCursor;
|
||||
import team.unnamed.hephaestus.reader.ModelReader;
|
||||
import team.unnamed.hephaestus.reader.blockbench.BBModelReader;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.logging.Logger;
|
||||
@@ -78,6 +81,7 @@ public class Room extends MineNetInstance implements Spawnable {
|
||||
setOwner(owner);
|
||||
|
||||
new GameSelector().setInstance(this, new Pos(0.5, 16, 9.5));
|
||||
|
||||
}
|
||||
|
||||
public Player getOwner() {
|
||||
|
||||
+2
-2
@@ -2,8 +2,8 @@ package eu.mhsl.minenet.minigames.instance.room.inventory;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.game.GameList;
|
||||
import eu.mhsl.minenet.minigames.instance.game.GameType;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.GameConfigurationInventory;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.GameFactory;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameConfigurationInventory;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.config.GameFactory;
|
||||
import eu.mhsl.minenet.minigames.instance.room.Room;
|
||||
import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
|
||||
import eu.mhsl.minenet.minigames.shared.inventory.InteractableInventory;
|
||||
|
||||
@@ -7,6 +7,6 @@ public class DummyLang extends Lang {
|
||||
|
||||
@Override
|
||||
public String getEntry(String key) {
|
||||
return "translation:" + key;
|
||||
return "missingI18n:" + key;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import net.minestom.server.event.entity.EntityAttackEvent;
|
||||
import net.minestom.server.event.instance.AddEntityToInstanceEvent;
|
||||
import net.minestom.server.event.instance.RemoveEntityFromInstanceEvent;
|
||||
import net.minestom.server.event.player.PlayerEntityInteractEvent;
|
||||
import net.minestom.server.event.player.PlayerMoveEvent;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
||||
@@ -24,8 +25,13 @@ public class InteractableEntity extends EntityCreature {
|
||||
|
||||
.addListener(AddEntityToInstanceEvent.class, this::onSpawn)
|
||||
.addListener(RemoveEntityFromInstanceEvent.class, this::onDespawn)
|
||||
.addListener(PlayerEntityInteractEvent.class, this::onInteract)
|
||||
.addListener(PlayerEntityInteractEvent.class, this::onInteract) //TODO Why are some of these listeners not working?
|
||||
|
||||
.addListener(EntityAttackEvent.class, this::onAttack);
|
||||
|
||||
System.out.println(eventNode().getChildren());
|
||||
|
||||
System.out.println(eventNode().getParent().getChildren());
|
||||
}
|
||||
|
||||
private void setInstanceEvent(@NotNull AddEntityToInstanceEvent addEntityToInstanceEvent) {
|
||||
@@ -34,16 +40,19 @@ public class InteractableEntity extends EntityCreature {
|
||||
}
|
||||
|
||||
addEntityToInstanceEvent.getInstance().eventNode()
|
||||
.addListener(PlayerMoveEvent.class, playerMoveEvent -> {
|
||||
//TODO might be expensive
|
||||
if(this.position.distance(playerMoveEvent.getNewPosition()) < 5)
|
||||
this.lookAt(playerMoveEvent.getPlayer());
|
||||
})
|
||||
.addListener(PlayerEntityInteractEvent.class, playerEntityInteractEvent -> {
|
||||
if(playerEntityInteractEvent.getTarget() == this) {
|
||||
onInteract(playerEntityInteractEvent);
|
||||
this.lookAt(playerEntityInteractEvent.getPlayer());
|
||||
}
|
||||
})
|
||||
.addListener(EntityAttackEvent.class, entityAttackEvent -> {
|
||||
if(entityAttackEvent.getTarget() == this) {
|
||||
onAttack(entityAttackEvent);
|
||||
this.lookAt(entityAttackEvent.getEntity());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
package eu.mhsl.minenet.minigames.util;
|
||||
|
||||
import net.minestom.server.item.Material;
|
||||
|
||||
public class MaterialUtil {
|
||||
public static Material fromString(String name, Material def) {
|
||||
return Material.values().stream().filter(material -> material.name().equals(name)).findFirst().orElse(def);
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,26 @@
|
||||
package eu.mhsl.minenet.minigames.util;
|
||||
|
||||
import net.minestom.server.coordinate.Pos;
|
||||
|
||||
import java.util.InputMismatchException;
|
||||
|
||||
public class Position {
|
||||
public static final double PIXEL = 0.0625;
|
||||
|
||||
public static Pos getPosFromCommaSeparated(String input) {
|
||||
String[] coordinates = input.split(",");
|
||||
if(coordinates.length < 3) throw new InputMismatchException("Coordinates have to contain at least x, y and z");
|
||||
float x = Float.parseFloat(coordinates[0]);
|
||||
float y = Float.parseFloat(coordinates[1]);
|
||||
float z = Float.parseFloat(coordinates[2]);
|
||||
|
||||
if(coordinates.length > 4) {
|
||||
float yaw = Float.parseFloat(coordinates[3]);
|
||||
float pitch = Float.parseFloat(coordinates[4]);
|
||||
|
||||
return new Pos(x, y, z, yaw, pitch);
|
||||
}
|
||||
|
||||
return new Pos(x, y, z);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
,elias,ELIAS-PC,03.10.2022 16:40,file:///home/elias/.config/libreoffice/4;
|
||||
,elias,ELIAS-PC,07.01.2023 22:39,file:///home/elias/.config/libreoffice/4;
|
||||
@@ -10,6 +10,13 @@ welcome;Welcome!;Willkommen!
|
||||
back;Back;Zurück
|
||||
forward;Next;Nächste
|
||||
;;
|
||||
ns:tablist#UNUSED;;
|
||||
title;MineNet Network;MineNet Servernetzwerk
|
||||
players;Players;Spieler
|
||||
ram;RAM;RAM
|
||||
tick;TICK;TICK
|
||||
;;
|
||||
;;
|
||||
ns:GameType#;;
|
||||
other;Other games;Andere Spiele
|
||||
other_description;Games which does not fit into other Categories;Spiele welche nicht in die anderen Kategorien passen
|
||||
@@ -29,8 +36,8 @@ join_notFound;Lobby not found: ;Lobby konnte nicht gefunden werden:
|
||||
;;
|
||||
ns:score#;;
|
||||
result;Results;Ergebnisse
|
||||
thanks;Thank you for Playing;Danke für‘s spielen
|
||||
;;
|
||||
thanks;Thank you for Playing;Danke fürs spielen
|
||||
finish;Finish;Fertig
|
||||
;;
|
||||
ns:restriction#;;
|
||||
fail;Some requirements are not met;Bedinungen sind nicht erfüllt
|
||||
@@ -47,13 +54,6 @@ length;Length;Länge
|
||||
height;Height;Höhe
|
||||
radius;Radius;Radius
|
||||
;;
|
||||
;;
|
||||
;;
|
||||
;;
|
||||
;;
|
||||
;;
|
||||
;;
|
||||
;;
|
||||
ns:room#;;
|
||||
invTitle;Select a Minigame;Wähle einen Spielmodus
|
||||
noOption;No options here;Keine Optionen hier
|
||||
@@ -79,3 +79,7 @@ description;Push your opponents off the Bridge;Stoße deine Gegener von der Brü
|
||||
ns:game_TrafficlightRace#;;
|
||||
name;Red light green light;Rotes licht, Grünes licht
|
||||
description;Only go forward if the Trafficlights show green;Gehe nur bei Grün vorran
|
||||
;;
|
||||
ns:game_Towerdefense#;;
|
||||
name;Towerdefense;Towerdefense
|
||||
description;Protect the path ????;??????
|
||||
|
||||
|
@@ -0,0 +1,29 @@
|
||||
setup:
|
||||
teams:
|
||||
- 'blue'
|
||||
- 'orange'
|
||||
|
||||
teams:
|
||||
blue:
|
||||
name: 'blue'
|
||||
pos:
|
||||
spawn: '31.5,11,0.5,90,0'
|
||||
spawner: '31.5,11,0.5'
|
||||
bed:
|
||||
- '32,11,0'
|
||||
- '33,11,0'
|
||||
material:
|
||||
block: 'BLUE_WOOL'
|
||||
bed: 'BLUE_BED'
|
||||
|
||||
orange:
|
||||
name: "orange"
|
||||
pos:
|
||||
spawn: '-31.5,11,0.5,-90,0'
|
||||
spawner: '-31.5,11,0.5'
|
||||
bed:
|
||||
- '-33,11,0'
|
||||
- '-34,11,0'
|
||||
material:
|
||||
block: 'ORANGE_WOOL'
|
||||
bed: 'ORANGE_BED'
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user