diff --git a/.gitignore b/.gitignore index c30ac86..e77c391 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,3 @@ -# ---> Java -*.gradle - # Compiled class file *.class diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..671af64 --- /dev/null +++ b/build.gradle @@ -0,0 +1,81 @@ + +//for jar packaging see https://github.com/Protonull/BasicMinestomServer/blob/master/build.gradle.kts + +plugins { + id 'java' + id "com.github.johnrengelman.shadow" version "7.1.0" +} + +group 'eu.mhsl.minenet' +version '1.0-SNAPSHOT' + +repositories { + //maven 'https://repo.unnamed.team/repository/unnamed-public/' + + mavenCentral() + google() + + maven { + url 'https://jitpack.io' + } + + maven { + url "https://repo.unnamed.team/repository/unnamed-public/" + } + + maven { + url 'https://oss.sonatype.org/content/repositories/snapshots' + } +} + +dependencies { + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.0' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.9.0' + + //https://jitpack.io/#Minestom/Minestom + //implementation 'com.github.Minestom:Minestom:aa621021e2' + //implementation 'com.github.Minestom.Minestom:Minestom:4f7ff5b474' +// implementation 'com.github.Minestom.Minestom:Minestom:2cdb3911b0' +// implementation 'com.github.Minestom:MinestomDataGenerator:ddde11056e' + implementation 'com.github.waxeria:Minestom:e0427a36f3' + + + //Tools + //implementation 'com.github.Articdive.JNoise:jnoise-core:4.0.0' + implementation 'de.articdive:jnoise:3.0.2' +// implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.4.2' +// implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.4' + implementation 'org.yaml:snakeyaml:2.0' + implementation 'net.md-5:bungeecord-config:1.19-R0.1-SNAPSHOT' + implementation 'org.apache.commons:commons-text:1.10.0' + implementation 'org.spongepowered:configurate-yaml:4.1.2' + + + //PvP + implementation 'com.github.TogAr2:MinestomPvP:35e5661' + //implementation 'com.github.TogAr2:MinestomPvP:135ec9e2b7' + + + // 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") +} + +tasks { + jar { + manifest { + attributes 'Main-Class': 'eu.mhsl.minenet.minigames.Main' + attributes 'Multi-Release': true + } + duplicatesStrategy = 'exclude' + from configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) } + } + build { + dependsOn(shadowJar) + } + shadowJar { + mergeServiceFiles() + archiveClassifier.set("") + } +} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..d8fdc8b --- /dev/null +++ b/settings.gradle @@ -0,0 +1,2 @@ +rootProject.name = 'Minigames' + diff --git a/src/main/java/eu/mhsl/minenet/minigames/Api.java b/src/main/java/eu/mhsl/minenet/minigames/Api.java deleted file mode 100644 index 17e9481..0000000 --- a/src/main/java/eu/mhsl/minenet/minigames/Api.java +++ /dev/null @@ -1,4 +0,0 @@ -package eu.mhsl.minenet.minigames; - -public class Api { -} diff --git a/src/main/java/eu/mhsl/minenet/minigames/api/HttpServer.java b/src/main/java/eu/mhsl/minenet/minigames/api/HttpServer.java new file mode 100644 index 0000000..7a5a457 --- /dev/null +++ b/src/main/java/eu/mhsl/minenet/minigames/api/HttpServer.java @@ -0,0 +1,6 @@ +package eu.mhsl.minenet.minigames.api; + +import static spark.Spark.*; + +public class HttpServer { +} diff --git a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/RoomCommand.java b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/RoomCommand.java index 845cf8a..e9a5cfe 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/command/privileged/RoomCommand.java +++ b/src/main/java/eu/mhsl/minenet/minigames/command/privileged/RoomCommand.java @@ -18,7 +18,7 @@ public class RoomCommand extends PrivilegedCommand { Room.getAllRooms().forEach((roomInstance) -> out .newLine() - .appendStatic("Owner: ").appendStatic(roomInstance.getOwner().getUsername()).newLine() + .appendStatic("Owner: ").appendStatic(roomInstance.getOwner() != null ? roomInstance.getOwner().getUsername() : "none").newLine() .appendStatic("Players: ").appendStatic(String.valueOf(roomInstance.getAllMembers().size())).newLine() .list(roomInstance.getAllMembers().stream().map(Player::getUsername).collect(Collectors.toList())).newLine()); diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/room/Room.java b/src/main/java/eu/mhsl/minenet/minigames/instance/room/Room.java index 36a77fd..59de84f 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/room/Room.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/room/Room.java @@ -25,7 +25,8 @@ import java.util.logging.Logger; import java.util.stream.Collectors; public class Room extends MineNetInstance implements Spawnable { - private static final Map rooms = new WeakHashMap<>(); + private static final Set rooms = new HashSet<>(); + private static final Map players = new WeakHashMap<>(); private static final Logger logger = Logger.getLogger("room"); public static Room createRoom(Player owner) { @@ -34,15 +35,22 @@ public class Room extends MineNetInstance implements Spawnable { return getRoom(owner).orElseThrow(); } + public static Room createOwnerlessRoom() { + Room room = new Room(); + rooms.add(room); + return room; + } + public static void deleteRoom(Room room) { logger.info("Deleting room " + room.uniqueId); - rooms.values().removeAll(Collections.singleton(room)); // remove(room) would only remove the first one + rooms.remove(room); + players.values().removeAll(Collections.singleton(room)); room.getAllMembers().forEach(player -> MoveInstance.move(player, Hub.INSTANCE)); MoveInstance.forceCloseInstance(room); } public static Optional getRoom(Player p) { - return Optional.ofNullable(rooms.get(p)); + return Optional.ofNullable(players.get(p)); } public static void setOwnRoom(Player p) { @@ -50,42 +58,45 @@ public class Room extends MineNetInstance implements Spawnable { } public static void setRoom(Player p, Room room) { - logger.info("Set room for player " + p.getUsername() + " to room by " + room.owner.getUsername()); p.clearEffects(); p.clearTitle(); p.getInventory().clear(); p.setGameMode(GameMode.ADVENTURE); - rooms.put(p, room); + rooms.add(room); + players.put(p, room); MoveInstance.move(p, room); } public static void unsetRoom(Player p) { logger.info("Unset room for " + p.getUsername()); - rooms.remove(p); + players.remove(p); } public static Set getAllRooms() { - return new HashSet<>(rooms.values()); + return rooms; } private Player owner; + public final UUID uuid = UUID.randomUUID(); private GameSelector gameSelector; private Room(Player owner) { super(Dimension.THE_END.DIMENSION); construct(); setOwner(owner); - this.gameSelector = new GameSelector(); - this.gameSelector.setInstance(this, new Pos(0.5, 50, 19.5)); } protected Room() { super(Dimension.THE_END.DIMENSION); + construct(); } private void construct() { MinecraftServer.getInstanceManager().registerInstance(this); setChunkLoader(new AnvilLoader(Resource.LOBBY_MAP.getPath())); + this.gameSelector = new GameSelector(); + this.gameSelector.setInstance(this, new Pos(0.5, 50, 19.5)); + eventNode().addListener(PlayerBlockBreakEvent.class, CommonEventHandles::cancel); eventNode().addListener(PlayerDisconnectEvent.class, playerDisconnectEvent -> unsetRoom(playerDisconnectEvent.getPlayer())); } @@ -128,7 +139,7 @@ public class Room extends MineNetInstance implements Spawnable { } public Set getAllMembers() { - return rooms.keySet().stream() + return players.keySet().stream() .filter(player -> getRoom(player).orElse(null) == this) .collect(Collectors.toSet()); } diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/room/entity/GameSelector.java b/src/main/java/eu/mhsl/minenet/minigames/instance/room/entity/GameSelector.java index aaffde9..7603fe7 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/room/entity/GameSelector.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/room/entity/GameSelector.java @@ -37,10 +37,7 @@ public class GameSelector extends InteractableEntity { if(playerEntityInteractEvent.getPlayer() != room.getOwner()) { abstractVillagerMeta.setHeadShakeTimer(20); - new ChatMessage(Icon.ERROR).appendStatic("Only the room leader can start games!").newLine() - .appendStatic("current leader: ").appendStatic(room.getOwner().getUsername()) - .send(playerEntityInteractEvent.getPlayer()); - + new ChatMessage(Icon.ERROR).appendStatic("Only the room leader can start games!").send(playerEntityInteractEvent.getPlayer()); return; }