Game api additions, Refactoring, Translation api edits
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package eu.mhsl.minenet.minigames.instance.room;
|
||||
|
||||
import eu.mhsl.minenet.minigames.Resource;
|
||||
import eu.mhsl.minenet.minigames.instance.MineNetInstance;
|
||||
import eu.mhsl.minenet.minigames.instance.game.Game;
|
||||
import eu.mhsl.minenet.minigames.message.Icon;
|
||||
import eu.mhsl.minenet.minigames.message.type.ChatMessage;
|
||||
@@ -8,7 +9,7 @@ import eu.mhsl.minenet.minigames.util.CommonEventHandles;
|
||||
import eu.mhsl.minenet.minigames.util.MoveInstance;
|
||||
import eu.mhsl.minenet.minigames.instance.Spawnable;
|
||||
import eu.mhsl.minenet.minigames.instance.Dimension;
|
||||
import eu.mhsl.minenet.minigames.instance.hub.HubInstance;
|
||||
import eu.mhsl.minenet.minigames.instance.hub.Hub;
|
||||
import eu.mhsl.minenet.minigames.instance.room.entity.GameSelector;
|
||||
import net.minestom.server.MinecraftServer;
|
||||
import net.minestom.server.coordinate.Pos;
|
||||
@@ -19,21 +20,23 @@ import net.minestom.server.instance.AnvilLoader;
|
||||
import net.minestom.server.instance.InstanceContainer;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class Room extends InstanceContainer implements Spawnable {
|
||||
public class Room extends MineNetInstance implements Spawnable {
|
||||
private static final Map<Player, Room> rooms = new WeakHashMap<>();
|
||||
private static final Logger logger = Logger.getLogger("room");
|
||||
|
||||
public static Room createRoom(Player owner) {
|
||||
System.out.println("Room created by " + owner.getUsername());
|
||||
logger.info("Creating room with owner " + owner.getUsername());
|
||||
setRoom(owner, new Room(owner));
|
||||
return getRoom(owner);
|
||||
}
|
||||
|
||||
public static void deleteRoom(Room room) {
|
||||
System.out.println("Room deleted");
|
||||
logger.info("Deleting room with owner " + room.owner.getUsername());
|
||||
rooms.values().removeAll(Collections.singleton(room)); // remove(room) would only remove the first one
|
||||
room.getAllMembers().forEach(player -> MoveInstance.move(player, HubInstance.INSTANCE));
|
||||
room.getAllMembers().forEach(player -> MoveInstance.move(player, Hub.INSTANCE));
|
||||
MoveInstance.forceCloseInstance(room);
|
||||
}
|
||||
|
||||
@@ -46,6 +49,7 @@ public class Room extends InstanceContainer 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();
|
||||
@@ -54,6 +58,7 @@ public class Room extends InstanceContainer implements Spawnable {
|
||||
}
|
||||
|
||||
public static void unsetRoom(Player p) {
|
||||
logger.info("Unset room for " + p.getUsername());
|
||||
rooms.remove(p);
|
||||
}
|
||||
|
||||
@@ -63,7 +68,7 @@ public class Room extends InstanceContainer implements Spawnable {
|
||||
|
||||
private Player owner;
|
||||
private Room(Player owner) {
|
||||
super(UUID.randomUUID(), Dimension.THE_END.DIMENSION);
|
||||
super(Dimension.THE_END.DIMENSION);
|
||||
MinecraftServer.getInstanceManager().registerInstance(this);
|
||||
setChunkLoader(new AnvilLoader(Resource.LOBBY_MAP.getPath()));
|
||||
|
||||
@@ -82,7 +87,6 @@ public class Room extends InstanceContainer implements Spawnable {
|
||||
this.owner = newOwner;
|
||||
|
||||
this.owner.eventNode().addListener(PlayerDisconnectEvent.class, playerDisconnectEvent -> {
|
||||
System.out.println("Room Leader left room");
|
||||
Player p = playerDisconnectEvent.getPlayer();
|
||||
|
||||
if(p != this.owner) return; // return if the current handling player is really the current owner
|
||||
@@ -100,11 +104,14 @@ public class Room extends InstanceContainer implements Spawnable {
|
||||
new ChatMessage(Icon.ERROR).appendStatic("The room leader left!").send(getAllMembers());
|
||||
new ChatMessage(Icon.SCIENCE).appendStatic(this.owner.getUsername()).appendStatic(" is the new Leader!").send(getAllMembers().stream().filter(player -> player != this.owner).collect(Collectors.toSet()));
|
||||
new ChatMessage(Icon.SUCCESS).appendStatic("You are now the leader.").send(this.owner);
|
||||
|
||||
logger.info("Room owner changed from " + p.getUsername() + " to " + owner.getUsername());
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
public void moveMembersToGame(Game game) {
|
||||
logger.info("Move room group with " + this.getAllMembers().size() + " players to Game " + game.getUniqueId());
|
||||
this.getAllMembers().forEach(player -> {
|
||||
MoveInstance.move(player, game);
|
||||
});
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
package eu.mhsl.minenet.minigames.instance.room.inventory;
|
||||
|
||||
import eu.mhsl.minenet.minigames.shared.inventory.InteractableInventory;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.minestom.server.inventory.InventoryType;
|
||||
|
||||
public class BoardInventory extends InteractableInventory {
|
||||
public BoardInventory() {
|
||||
super(InventoryType.CHEST_3_ROW, Component.text("Brettspiele"));
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package eu.mhsl.minenet.minigames.instance.room.inventory;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.MinigameType;
|
||||
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.shared.inventory.InteractableInventory;
|
||||
@@ -12,11 +13,39 @@ import net.minestom.server.item.Material;
|
||||
|
||||
public class MinigameTypeSelectInventory extends InteractableInventory {
|
||||
public MinigameTypeSelectInventory() {
|
||||
super(InventoryType.CHEST_3_ROW, Component.text("MineNet Servernetzwerk"));
|
||||
super(InventoryType.CHEST_6_ROW, Component.text("MineNet Servernetzwerk"));
|
||||
|
||||
int i = 0;
|
||||
for (MinigameType minigameType : MinigameType.values()) {
|
||||
GameFactory gameFactory = minigameType.getFactory();
|
||||
int typeCount = 0;
|
||||
for (GameType type : GameType.values()) {
|
||||
setClickableItem(
|
||||
ItemStack.builder(type.getIcon())
|
||||
.displayName(type.getTitle().asComponent())
|
||||
.lore(type.getDescription().asComponent())
|
||||
.build(),
|
||||
typeCount,
|
||||
itemClick -> {
|
||||
drawGames(type);
|
||||
}
|
||||
);
|
||||
typeCount++;
|
||||
}
|
||||
|
||||
for(int i = 9; i <= 17; i++) {
|
||||
setDummyItem(Material.CYAN_STAINED_GLASS_PANE, i);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void drawGames(GameType type) {
|
||||
for(int i = 18; i <= 53; i++) {
|
||||
setDummyItem(Material.AIR, i);
|
||||
}
|
||||
int gameCount = 18;
|
||||
for (GameList gameList : GameList.values()) {
|
||||
if(!gameList.getType().equals(type)) continue;
|
||||
|
||||
GameFactory gameFactory = gameList.getFactory();
|
||||
|
||||
setClickableItem(
|
||||
ItemStack.builder(gameFactory.symbol())
|
||||
@@ -24,41 +53,10 @@ public class MinigameTypeSelectInventory extends InteractableInventory {
|
||||
.lore(gameFactory.description())
|
||||
.meta(metaBuilder -> metaBuilder.hideFlag(ItemHideFlag.HIDE_ATTRIBUTES))
|
||||
.build(),
|
||||
i,
|
||||
gameCount,
|
||||
itemClick -> itemClick.getPlayer().openInventory(new GameConfigurationInventory(gameFactory))
|
||||
);
|
||||
i++;
|
||||
gameCount++;
|
||||
}
|
||||
|
||||
// setClickableItem(
|
||||
// ItemStack
|
||||
// .builder(Material.IRON_SWORD)
|
||||
// .displayName(Component.text("PVP Spiele"))
|
||||
// .lore(Component.text("Player versus Player"))
|
||||
// .meta(metaBuilder -> metaBuilder.hideFlag(ItemHideFlag.HIDE_ATTRIBUTES))
|
||||
// .build(),
|
||||
// 11,
|
||||
// itemClick -> itemClick.getPlayer().openInventory(new PvpInventory())
|
||||
// );
|
||||
//
|
||||
// setClickableItem(
|
||||
// ItemStack
|
||||
// .builder(Material.ZOMBIE_HEAD)
|
||||
// .displayName(Component.text("PVE Arenen"))
|
||||
// .lore(Component.text("Player versus Entity"))
|
||||
// .build(),
|
||||
// 13,
|
||||
// itemClick -> itemClick.getPlayer().openInventory(new PveInventory())
|
||||
// );
|
||||
//
|
||||
// setClickableItem(
|
||||
// ItemStack
|
||||
// .builder(Material.BRICK_SLAB)
|
||||
// .displayName(Component.text("Brettspiele"))
|
||||
// .lore(Component.text("Bekannte Brettspieler aller Art"))
|
||||
// .build(),
|
||||
// 15,
|
||||
// itemClick -> itemClick.getPlayer().openInventory(new BoardInventory())
|
||||
// );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
package eu.mhsl.minenet.minigames.instance.room.inventory;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.GameConfigurationInventory;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.types.minerun.MinerunFactory;
|
||||
import eu.mhsl.minenet.minigames.shared.inventory.InteractableInventory;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.types.deathcube.DeathcubeFactory;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.types.trafficlightrace.TrafficLightRaceFactory;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.minestom.server.inventory.InventoryType;
|
||||
import net.minestom.server.item.ItemStack;
|
||||
import net.minestom.server.item.Material;
|
||||
|
||||
public class PveInventory extends InteractableInventory {
|
||||
public PveInventory() {
|
||||
super(InventoryType.CHEST_3_ROW, Component.text("PVE"));
|
||||
|
||||
setClickableItem(
|
||||
ItemStack.builder(Material.LIGHT_WEIGHTED_PRESSURE_PLATE).displayName(Component.text("Minerun")).lore(Component.text("Jump between ground mines to the finish")).build(),
|
||||
0,
|
||||
itemClick -> {
|
||||
itemClick.getPlayer().openInventory(new GameConfigurationInventory(new MinerunFactory()));
|
||||
}
|
||||
);
|
||||
|
||||
setClickableItem(
|
||||
ItemStack.builder(Material.YELLOW_WOOL).displayName(Component.text("Ampelrennen")).build(),
|
||||
1,
|
||||
itemClick -> {
|
||||
itemClick.getPlayer().openInventory(new GameConfigurationInventory(new TrafficLightRaceFactory()));
|
||||
}
|
||||
);
|
||||
|
||||
setClickableItem(
|
||||
ItemStack.builder(Material.RED_WOOL).displayName(Component.text("Deathcube")).build(),
|
||||
2,
|
||||
itemClick -> {
|
||||
itemClick.getPlayer().openInventory(new GameConfigurationInventory(new DeathcubeFactory()));
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
package eu.mhsl.minenet.minigames.instance.room.inventory;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.GameConfigurationInventory;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.types.stickfight.StickFightFactory;
|
||||
import eu.mhsl.minenet.minigames.shared.inventory.InteractableInventory;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.minestom.server.entity.Player;
|
||||
import net.minestom.server.inventory.InventoryType;
|
||||
import net.minestom.server.inventory.click.ClickType;
|
||||
import net.minestom.server.inventory.condition.InventoryConditionResult;
|
||||
import net.minestom.server.item.ItemStack;
|
||||
import net.minestom.server.item.Material;
|
||||
|
||||
public class PvpInventory extends InteractableInventory {
|
||||
public PvpInventory() {
|
||||
super(InventoryType.CHEST_6_ROW, Component.text("PVP"));
|
||||
|
||||
setClickableItem(ItemStack.of(Material.GOLD_INGOT), 4, itemClick -> {
|
||||
itemClick.getPlayer().openInventory(new GameConfigurationInventory(new StickFightFactory()));
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onClick(Player player, int slot, ClickType clickType, InventoryConditionResult inventoryConditionResult) {
|
||||
super.onClick(player, slot, clickType, inventoryConditionResult);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user