added WorldSelectItem to players inventory

This commit is contained in:
Martin Olischläger 2024-09-21 12:49:02 +02:00
parent 7091db6484
commit d405c3f233
8 changed files with 126 additions and 5 deletions

View File

@ -4,7 +4,6 @@ import eu.mhsl.minecraft.WorldMuseum.listener.ChatListener;
import eu.mhsl.minecraft.WorldMuseum.listener.PlayerListener; import eu.mhsl.minecraft.WorldMuseum.listener.PlayerListener;
import eu.mhsl.minecraft.WorldMuseum.viewableWorld.ViewableWorld; import eu.mhsl.minecraft.WorldMuseum.viewableWorld.ViewableWorld;
import eu.mhsl.minecraft.WorldMuseum.viewableWorld.ViewableWorldListener; import eu.mhsl.minecraft.WorldMuseum.viewableWorld.ViewableWorldListener;
import eu.mhsl.minecraft.WorldMuseum.worldSelector.WorldSelectListener;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
@ -32,7 +31,7 @@ public class Main extends JavaPlugin {
List<Listener> listeners = List.of( List<Listener> listeners = List.of(
new PlayerListener(), new PlayerListener(),
new ChatListener(), new ChatListener(),
new WorldSelectListener(), // new WorldSelectListener(),
new ViewableWorldListener() new ViewableWorldListener()
); );
listeners.forEach(listener -> Bukkit.getPluginManager().registerEvents(listener, this)); listeners.forEach(listener -> Bukkit.getPluginManager().registerEvents(listener, this));

View File

@ -0,0 +1,33 @@
package eu.mhsl.minecraft.WorldMuseum.items;
import eu.mhsl.minecraft.WorldMuseum.items.actionItems.WorldSelector;
import org.bukkit.entity.Player;
public class ActionItemManager {
private static ActionItemManager INSTANCE;
private WorldSelector worldSelector;
public ActionItemManager() {
initItems();
}
private void initItems() {
worldSelector = new WorldSelector();
}
public static ActionItemManager getInstance() {
if (INSTANCE == null) INSTANCE = new ActionItemManager();
return INSTANCE;
}
public void givePlayerItems(Player p) {
p.getInventory().setItem(0, worldSelector.getITEM());
}
public WorldSelector getWorldSelector() {
return worldSelector;
}
}

View File

@ -0,0 +1,62 @@
package eu.mhsl.minecraft.WorldMuseum.items.actionItems;
import eu.mhsl.minecraft.WorldMuseum.Main;
import eu.mhsl.minecraft.WorldMuseum.viewableWorld.ViewableWorld;
import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
import java.util.List;
public class WorldSelector {
private final ItemStack ITEM = generateWorldSelectorItem();
private final Inventory INVENTORY = generateWorldSelectorInventory();
private ItemStack generateWorldSelectorItem() {
ItemStack item = new ItemStack(Material.GRASS_BLOCK);
ItemMeta meta = item.getItemMeta();
meta.displayName(Component.text("Worldselector"));
item.setItemMeta(meta);
return item;
}
private Inventory generateWorldSelectorInventory() {
List<ViewableWorld> worlds = Main.instance().getWorlds();
int itemCount = worlds.size() + 1;
int inventoryRows = Math.max(itemCount / 9, 1);
int inventorySize = inventoryRows * 9;
Inventory inventory = Bukkit.createInventory(null, inventorySize, Component.text("Weltenmuseum"));
worlds.stream()
.filter(ViewableWorld::isEnabled)
.forEach(viewableWorld -> inventory.addItem(viewableWorld.getItem()));
boolean canExit = Main.instance().getConfig().getBoolean("bungee.enabled");
if(canExit) inventory.setItem(inventorySize - 1, exitItem());
return inventory;
}
public static ItemStack exitItem() {
ItemStack stack = ItemStack.of(Material.OAK_DOOR);
ItemMeta meta = stack.getItemMeta();
meta.displayName(Component.text("Zurück zum Server"));
meta.setEnchantmentGlintOverride(true);
stack.setItemMeta(meta);
return stack;
}
public ItemStack getITEM() {
return ITEM;
}
public void action(@NotNull Player player) {
player.openInventory(INVENTORY);
}
}

View File

@ -1,4 +1,4 @@
package eu.mhsl.minecraft.WorldMuseum.worldSelector; package eu.mhsl.minecraft.WorldMuseum.items.worldSelector;
import eu.mhsl.minecraft.WorldMuseum.Main; import eu.mhsl.minecraft.WorldMuseum.Main;
import eu.mhsl.minecraft.WorldMuseum.viewableWorld.ViewableWorld; import eu.mhsl.minecraft.WorldMuseum.viewableWorld.ViewableWorld;

View File

@ -1,4 +1,4 @@
package eu.mhsl.minecraft.WorldMuseum.worldSelector; package eu.mhsl.minecraft.WorldMuseum.items.worldSelector;
import eu.mhsl.minecraft.WorldMuseum.Main; import eu.mhsl.minecraft.WorldMuseum.Main;
import eu.mhsl.minecraft.WorldMuseum.util.BungeeCord; import eu.mhsl.minecraft.WorldMuseum.util.BungeeCord;

View File

@ -1,14 +1,19 @@
package eu.mhsl.minecraft.WorldMuseum.listener; package eu.mhsl.minecraft.WorldMuseum.listener;
import eu.mhsl.minecraft.WorldMuseum.Main; import eu.mhsl.minecraft.WorldMuseum.Main;
import eu.mhsl.minecraft.WorldMuseum.items.ActionItemManager;
import net.kyori.adventure.util.Ticks; import net.kyori.adventure.util.Ticks;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.GameMode; import org.bukkit.GameMode;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType; import org.bukkit.potion.PotionEffectType;
@ -25,10 +30,12 @@ public class PlayerListener implements Listener {
event.getPlayer().addPotionEffect( event.getPlayer().addPotionEffect(
new PotionEffect(PotionEffectType.HASTE, PotionEffect.INFINITE_DURATION, 15, false, false, false) new PotionEffect(PotionEffectType.HASTE, PotionEffect.INFINITE_DURATION, 15, false, false, false)
); );
ActionItemManager.getInstance().givePlayerItems(event.getPlayer());
} }
@EventHandler @EventHandler
public void onBreak(BlockBreakEvent event) { public void onBreak(BlockBreakEvent event) {
event.setDropItems(false);
Material material = event.getBlock().getType(); Material material = event.getBlock().getType();
Bukkit.getScheduler().scheduleSyncDelayedTask( Bukkit.getScheduler().scheduleSyncDelayedTask(
Main.instance(), Main.instance(),
@ -40,4 +47,20 @@ public class PlayerListener implements Listener {
public void onPlace(BlockPlaceEvent event) { public void onPlace(BlockPlaceEvent event) {
event.setCancelled(true); event.setCancelled(true);
} }
@EventHandler
public void onDrop(PlayerDropItemEvent event) {
event.setCancelled(true);
}
@EventHandler
public void onInteract(PlayerInteractEvent event) {
ActionItemManager actionItems = ActionItemManager.getInstance();
event.setCancelled(true);
Player p = event.getPlayer();
Action a = event.getAction();
if ((a != Action.RIGHT_CLICK_AIR) || (event.getItem() == null)) return;
if (event.getItem().equals(actionItems.getWorldSelector().getITEM())) actionItems.getWorldSelector().action(p);
}
} }

View File

@ -57,7 +57,6 @@ public class ViewableWorld {
this.world = worldCreator.createWorld(); this.world = worldCreator.createWorld();
Objects.requireNonNull(this.world); Objects.requireNonNull(this.world);
this.world.setAutoSave(false); this.world.setAutoSave(false);
// Bukkit.unloadWorld(this.world, false);
} }
public void unloadWorld() { public void unloadWorld() {

View File

@ -7,6 +7,7 @@ import org.bukkit.event.block.BlockFromToEvent;
import org.bukkit.event.block.BlockGrowEvent; import org.bukkit.event.block.BlockGrowEvent;
import org.bukkit.event.block.BlockRedstoneEvent; import org.bukkit.event.block.BlockRedstoneEvent;
import org.bukkit.event.entity.EntitySpawnEvent; import org.bukkit.event.entity.EntitySpawnEvent;
import org.bukkit.event.world.ChunkUnloadEvent;
public class ViewableWorldListener implements Listener { public class ViewableWorldListener implements Listener {
@EventHandler @EventHandler
@ -29,4 +30,8 @@ public class ViewableWorldListener implements Listener {
public void preventGrowth(BlockGrowEvent event) { public void preventGrowth(BlockGrowEvent event) {
event.setCancelled(true); event.setCancelled(true);
} }
@EventHandler
public void onChunkUnload(ChunkUnloadEvent event) {
event.setSaveChunk(false);
}
} }