Rework compass inventory to highlight current world items

This commit is contained in:
Martin Olischläger 2023-04-30 16:37:01 +02:00
parent 93d48712b5
commit 310b1034ae
5 changed files with 39 additions and 55 deletions
src/main/java/eu/mhsl/craftattack/worldmuseum

@ -1,7 +1,7 @@
package eu.mhsl.craftattack.worldmuseum;
import eu.mhsl.craftattack.worldmuseum.commands.GamemodeCommand;
import eu.mhsl.craftattack.worldmuseum.items.BedManager;
import eu.mhsl.craftattack.worldmuseum.items.ItemManager;
import eu.mhsl.craftattack.worldmuseum.temp.GcCommand;
import eu.mhsl.craftattack.worldmuseum.commands.SpawnCommand;
import eu.mhsl.craftattack.worldmuseum.commands.TeleportCommand;
@ -13,7 +13,6 @@ import eu.mhsl.craftattack.worldmuseum.util.NewPlayer;
import eu.mhsl.craftattack.worldmuseum.util.SignHandler;
import eu.mhsl.craftattack.worldmuseum.worlds.World;
import eu.mhsl.craftattack.worldmuseum.worlds.WorldManager;
import eu.mhsl.craftattack.worldmuseum.items.CompassManager;
import net.minestom.server.MinecraftServer;
import net.minestom.server.entity.GameMode;
import net.minestom.server.event.GlobalEventHandler;
@ -46,10 +45,6 @@ public class Main {
config.loadConfig();
World startworld = config.getStart_world();
//CompassManager & GamemodeChanger
CompassManager compassManager = CompassManager.getInstance();
compassManager.loadCommpassManager();
// Add an event callback to specify the spawning instance (and the spawn position)
GlobalEventHandler globalEventHandler = MinecraftServer.getGlobalEventHandler();
@ -87,13 +82,10 @@ public class Main {
player.setRespawnPoint(startworld.getSpawn());
player.setGameMode(GameMode.SURVIVAL);
player.setAllowFlying(true);
player.getInventory().setItemStack(0, compassManager.getCompass());
player.getInventory().setItemStack(8, BedManager.getBedItem());
player.getInventory().setItemStack(0, ItemManager.getCompassItem());
player.getInventory().setItemStack(8, ItemManager.getBedItem());
});
try {
PORT = Integer.parseInt(args[0]);
} catch (Exception e) {

@ -1,34 +0,0 @@
package eu.mhsl.craftattack.worldmuseum.items;
import eu.mhsl.craftattack.worldmuseum.worlds.World;
import eu.mhsl.craftattack.worldmuseum.worlds.WorldManager;
import net.kyori.adventure.text.Component;
import net.minestom.server.inventory.Inventory;
import net.minestom.server.inventory.InventoryType;
import net.minestom.server.item.ItemStack;
import net.minestom.server.item.Material;
public class CompassManager {
static CompassManager instance;
ItemStack compass;
Inventory inventory;
public static CompassManager getInstance() {
if (instance == null) instance = new CompassManager();
return instance;
}
public void loadCommpassManager() {
compass = ItemStack.builder(Material.COMPASS).displayName(Component.text("World-changer")).build();
inventory = new Inventory(InventoryType.CHEST_1_ROW, Component.text("World-changer"));
for (World w : WorldManager.getInstance().getWorlds()) {
inventory.addItemStack(w.getItem());
}
}
public ItemStack getCompass() {
return compass;
}
public Inventory getInventory() {
return inventory;
}
}

@ -4,8 +4,11 @@ import net.kyori.adventure.text.Component;
import net.minestom.server.item.ItemStack;
import net.minestom.server.item.Material;
public class BedManager {
public class ItemManager {
public static ItemStack getBedItem() {
return ItemStack.builder(Material.RED_BED).displayName(Component.text("Spawn-Teleporter")).build();
}
public static ItemStack getCompassItem() {
return ItemStack.builder(Material.COMPASS).displayName(Component.text("World-changer")).build();
}
}

@ -1,12 +1,12 @@
package eu.mhsl.craftattack.worldmuseum.listener;
import eu.mhsl.craftattack.worldmuseum.items.BedManager;
import eu.mhsl.craftattack.worldmuseum.items.ItemManager;
import eu.mhsl.craftattack.worldmuseum.util.NewPlayer;
import eu.mhsl.craftattack.worldmuseum.items.CompassManager;
import eu.mhsl.craftattack.worldmuseum.worlds.World;
import net.kyori.adventure.text.Component;
import net.minestom.server.event.player.PlayerUseItemEvent;
import net.minestom.server.item.ItemStack;
import java.util.function.Consumer;
public class ItemUseListener implements Consumer<PlayerUseItemEvent> {
@ -15,22 +15,21 @@ public class ItemUseListener implements Consumer<PlayerUseItemEvent> {
public void accept(PlayerUseItemEvent playerUseItemEvent) {
NewPlayer p = (NewPlayer) playerUseItemEvent.getPlayer();
ItemStack usedItem = playerUseItemEvent.getItemStack();
CompassManager compassManager = CompassManager.getInstance();
if (usedItem.equals(compassManager.getCompass())) compassUse(p);
else if (usedItem.equals(BedManager.getBedItem())) bedUse(p);
if (usedItem.equals(ItemManager.getCompassItem())) compassUse(p);
else if (usedItem.equals(ItemManager.getBedItem())) bedUse(p);
playerUseItemEvent.setCancelled(true);
}
private void compassUse(NewPlayer p) {
CompassManager compassManager = CompassManager.getInstance();
if (!p.isAllowCompassUsage()) {
long lastUsed = (System.currentTimeMillis() - p.getLastCompassUsage()) / 1000;
p.sendActionBar(Component.text("Du kannst den Kompass erst in " + (15 - lastUsed) + " Sekunden wieder benutzen."));
return;
}
p.openInventory(compassManager.getInventory());
p.openInventory(p.getCompassInventory());
}
private void bedUse(NewPlayer player) {
World world = (World) player.getInstance();
assert world != null;

@ -1,10 +1,17 @@
package eu.mhsl.craftattack.worldmuseum.util;
import eu.mhsl.craftattack.worldmuseum.worlds.World;
import eu.mhsl.craftattack.worldmuseum.worlds.WorldManager;
import net.kyori.adventure.text.Component;
import net.minestom.server.entity.Player;
import net.minestom.server.inventory.Inventory;
import net.minestom.server.inventory.InventoryType;
import net.minestom.server.item.Enchantment;
import net.minestom.server.item.ItemHideFlag;
import net.minestom.server.item.ItemStack;
import net.minestom.server.network.player.PlayerConnection;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.time.Duration;
import java.util.UUID;
@ -32,7 +39,6 @@ public class NewPlayer extends Player {
long difference = 15000; //in Milisec
return UsageDifference >= difference && allowCompassUsage;
}
public void setAllowMovement(boolean allowMovement) {
this.allowMovement = allowMovement;
}
@ -42,5 +48,23 @@ public class NewPlayer extends Player {
public long getLastCompassUsage() {
return lastCompassUsage;
}
public Inventory getCompassInventory() {
Inventory inventory = new Inventory(InventoryType.CHEST_1_ROW, Component.text("World-changer"));
for (World w : WorldManager.getInstance().getWorlds()) {
if (!w.equals(this.getInstance())) {
inventory.addItemStack(w.getItem());
continue;
}
ItemStack itemStack = ItemStack.builder(w.getItem().material())
.displayName(w.getItem().getDisplayName())
.meta(metaBuilder ->
metaBuilder
.enchantment(Enchantment.MENDING, (short) 10)
.hideFlag(ItemHideFlag.HIDE_ENCHANTS))
.build();
inventory.addItemStack(itemStack);
}
return inventory;
}
}