added LeaveItem and restructured code

This commit is contained in:
Martin Olischläger 2024-09-21 14:18:12 +02:00
parent d405c3f233
commit eaccdec4a8
8 changed files with 117 additions and 81 deletions

View File

@ -1,5 +1,6 @@
package eu.mhsl.minecraft.WorldMuseum;
import eu.mhsl.minecraft.WorldMuseum.items.actionItems.WorldSelector;
import eu.mhsl.minecraft.WorldMuseum.listener.ChatListener;
import eu.mhsl.minecraft.WorldMuseum.listener.PlayerListener;
import eu.mhsl.minecraft.WorldMuseum.viewableWorld.ViewableWorld;
@ -32,7 +33,8 @@ public class Main extends JavaPlugin {
new PlayerListener(),
new ChatListener(),
// new WorldSelectListener(),
new ViewableWorldListener()
new ViewableWorldListener(),
new WorldSelector()
);
listeners.forEach(listener -> Bukkit.getPluginManager().registerEvents(listener, this));

View File

@ -1,33 +1,35 @@
package eu.mhsl.minecraft.WorldMuseum.items;
import eu.mhsl.minecraft.WorldMuseum.items.actionItems.IActionItem;
import eu.mhsl.minecraft.WorldMuseum.items.actionItems.LeaveItem;
import eu.mhsl.minecraft.WorldMuseum.items.actionItems.WorldSelector;
import org.bukkit.entity.Player;
import java.util.ArrayList;
import java.util.List;
public class ActionItemManager {
private static ActionItemManager INSTANCE;
private WorldSelector worldSelector;
private final List<IActionItem> actionObjects = new ArrayList<>();
public ActionItemManager() {
initItems();
}
private void initItems() {
worldSelector = new WorldSelector();
actionObjects.add(new WorldSelector());
actionObjects.add(new LeaveItem());
}
public static ActionItemManager getInstance() {
if (INSTANCE == null) INSTANCE = new ActionItemManager();
return INSTANCE;
}
public void givePlayerItems(Player p) {
p.getInventory().setItem(0, worldSelector.getITEM());
actionObjects.forEach(actionObject -> p.getInventory().setItem(actionObject.getItemLocation(), actionObject.getItem()));
}
public WorldSelector getWorldSelector() {
return worldSelector;
public List<IActionItem> getActionObjects() {
return actionObjects;
}
}

View File

@ -0,0 +1,11 @@
package eu.mhsl.minecraft.WorldMuseum.items.actionItems;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
public interface IActionItem {
void action(@NotNull Player player);
ItemStack getItem();
int getItemLocation();
}

View File

@ -0,0 +1,53 @@
package eu.mhsl.minecraft.WorldMuseum.items.actionItems;
import eu.mhsl.minecraft.WorldMuseum.Main;
import eu.mhsl.minecraft.WorldMuseum.util.BungeeCord;
import net.kyori.adventure.text.Component;
import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
import java.util.Objects;
public class LeaveItem implements Listener, IActionItem {
private final ItemStack item = generateItem();
private ItemStack generateItem() {
ItemStack item = new ItemStack(Material.RED_BED);
ItemMeta meta = item.getItemMeta();
meta.displayName(Component.text("Leave World Museum"));
item.setItemMeta(meta);
return item;
}
@Override
public void action(@NotNull Player player) {
ConfigurationSection bungeeSettings = Main.instance().getConfig().getConfigurationSection("bungee");
Objects.requireNonNull(bungeeSettings);
if(!(bungeeSettings.getBoolean("enabled", false))) {
player.sendMessage(Component.text("Bungeecord is not enabled. You can't be transpered "));
}
if(!bungeeSettings.getBoolean("returnOnSelectExit")) return;
sendPlayerToExit(player);
}
private void sendPlayerToExit(Player player) {
BungeeCord.connect(player, Main.instance().getConfig().getString("bungee.returnToServer"));
}
@Override
public ItemStack getItem() {
return item;
}
@Override
public int getItemLocation() {
int itemLocation = 8; //Item will be placed in the last hotbar slot
return itemLocation;
}
}

View File

@ -6,6 +6,9 @@ import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
@ -13,7 +16,7 @@ import org.jetbrains.annotations.NotNull;
import java.util.List;
public class WorldSelector {
public class WorldSelector implements Listener, IActionItem {
private final ItemStack ITEM = generateWorldSelectorItem();
private final Inventory INVENTORY = generateWorldSelectorInventory();
@ -52,11 +55,30 @@ public class WorldSelector {
return stack;
}
public ItemStack getITEM() {
return ITEM;
}
@Override
public void action(@NotNull Player player) {
player.openInventory(INVENTORY);
}
@EventHandler
public void onInteract(InventoryClickEvent event) {
event.setCancelled(true);
Main.instance().getWorlds().stream()
.filter(viewableWorld -> viewableWorld.getItem().equals(event.getCurrentItem()))
.findFirst()
.ifPresent(viewableWorld -> viewableWorld.addViewer((Player) event.getWhoClicked()));
}
@Override
public ItemStack getItem() {
return ITEM;
}
@Override
public int getItemLocation() {
int itemLocation = 0; // Item will be placed into the first hotbar slot
return itemLocation;
}
}

View File

@ -1,62 +0,0 @@
package eu.mhsl.minecraft.WorldMuseum.items.worldSelector;
import eu.mhsl.minecraft.WorldMuseum.Main;
import eu.mhsl.minecraft.WorldMuseum.util.BungeeCord;
import org.bukkit.Bukkit;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import java.util.Objects;
public class WorldSelectListener implements Listener {
private void sendPlayerToExit(Player player) {
BungeeCord.connect(player, Main.instance().getConfig().getString("bungee.returnToServer"));
}
@EventHandler
public void onExit(InventoryCloseEvent event) {
if(event.getReason().equals(InventoryCloseEvent.Reason.TELEPORT)) return;
Bukkit.getScheduler().scheduleSyncDelayedTask(
Main.instance(),
() -> event.getPlayer().openInventory(WorldSelectInventory.generateInventory()),
1
);
ConfigurationSection bungeeSettings = Main.instance().getConfig().getConfigurationSection("bungee");
Objects.requireNonNull(bungeeSettings);
if(!event.getReason().equals(InventoryCloseEvent.Reason.PLAYER)) return;
if(!(bungeeSettings.getBoolean("enabled", false))) return;
if(!bungeeSettings.getBoolean("returnOnSelectExit")) return;
sendPlayerToExit((Player) event.getPlayer());
}
@EventHandler
public void onInteract(InventoryClickEvent event) {
event.setCancelled(true);
if(Objects.equals(event.getCurrentItem(), WorldSelectInventory.exitItem()))
sendPlayerToExit((Player) event.getWhoClicked());
Main.instance().getWorlds().stream()
.filter(viewableWorld -> viewableWorld.getItem().equals(event.getCurrentItem()))
.findFirst()
.ifPresent(viewableWorld -> viewableWorld.addViewer((Player) event.getWhoClicked()));
}
@EventHandler
public void onJoin(PlayerJoinEvent event) {
Bukkit.getScheduler().scheduleSyncDelayedTask(
Main.instance(),
() -> event.getPlayer().openInventory(
WorldSelectInventory.generateInventory()
)
);
}
}

View File

@ -15,6 +15,7 @@ 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.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
@ -23,7 +24,10 @@ import java.util.Objects;
public class PlayerListener implements Listener {
@EventHandler
public void onJoin(PlayerJoinEvent event) {
event.getPlayer().setGameMode(GameMode.SURVIVAL);
Player player = event.getPlayer();
player.setGameMode(GameMode.SURVIVAL);
player.setAllowFlight(true);
player.setInvulnerable(true);
Main.instance().getWorlds().forEach(world -> {
if (world.isDefaultWorld()) world.addViewer(event.getPlayer());
});
@ -55,12 +59,16 @@ public class PlayerListener implements Listener {
@EventHandler
public void onInteract(PlayerInteractEvent event) {
ActionItemManager actionItems = ActionItemManager.getInstance();
ActionItemManager actionItemManager = ActionItemManager.getInstance();
event.setCancelled(true);
Player p = event.getPlayer();
Action a = event.getAction();
ItemStack item = event.getItem();
if ((a != Action.RIGHT_CLICK_AIR) || (event.getItem() == null)) return;
if (event.getItem().equals(actionItems.getWorldSelector().getITEM())) actionItems.getWorldSelector().action(p);
actionItemManager.getActionObjects().forEach(object -> {
assert item != null;
if (item.equals(object.getItem())) object.action(p);
});
}
}

View File

@ -64,8 +64,8 @@ public class ViewableWorld {
}
public void addViewer(Player player) {
player.setAllowFlight(true);
player.teleport(world.getSpawnLocation());
player.setAllowFlight(true);
}
public ItemStack getItem() {