added LeaveItem and restructured code
This commit is contained in:
parent
d405c3f233
commit
eaccdec4a8
@ -1,5 +1,6 @@
|
|||||||
package eu.mhsl.minecraft.WorldMuseum;
|
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.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;
|
||||||
@ -32,7 +33,8 @@ public class Main extends JavaPlugin {
|
|||||||
new PlayerListener(),
|
new PlayerListener(),
|
||||||
new ChatListener(),
|
new ChatListener(),
|
||||||
// new WorldSelectListener(),
|
// new WorldSelectListener(),
|
||||||
new ViewableWorldListener()
|
new ViewableWorldListener(),
|
||||||
|
new WorldSelector()
|
||||||
);
|
);
|
||||||
listeners.forEach(listener -> Bukkit.getPluginManager().registerEvents(listener, this));
|
listeners.forEach(listener -> Bukkit.getPluginManager().registerEvents(listener, this));
|
||||||
|
|
||||||
|
@ -1,33 +1,35 @@
|
|||||||
package eu.mhsl.minecraft.WorldMuseum.items;
|
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 eu.mhsl.minecraft.WorldMuseum.items.actionItems.WorldSelector;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class ActionItemManager {
|
public class ActionItemManager {
|
||||||
private static ActionItemManager INSTANCE;
|
private static ActionItemManager INSTANCE;
|
||||||
private WorldSelector worldSelector;
|
private final List<IActionItem> actionObjects = new ArrayList<>();
|
||||||
|
|
||||||
|
|
||||||
public ActionItemManager() {
|
public ActionItemManager() {
|
||||||
initItems();
|
initItems();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initItems() {
|
private void initItems() {
|
||||||
worldSelector = new WorldSelector();
|
actionObjects.add(new WorldSelector());
|
||||||
|
actionObjects.add(new LeaveItem());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static ActionItemManager getInstance() {
|
public static ActionItemManager getInstance() {
|
||||||
if (INSTANCE == null) INSTANCE = new ActionItemManager();
|
if (INSTANCE == null) INSTANCE = new ActionItemManager();
|
||||||
return INSTANCE;
|
return INSTANCE;
|
||||||
}
|
}
|
||||||
public void givePlayerItems(Player p) {
|
public void givePlayerItems(Player p) {
|
||||||
p.getInventory().setItem(0, worldSelector.getITEM());
|
actionObjects.forEach(actionObject -> p.getInventory().setItem(actionObject.getItemLocation(), actionObject.getItem()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<IActionItem> getActionObjects() {
|
||||||
public WorldSelector getWorldSelector() {
|
return actionObjects;
|
||||||
return worldSelector;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
|
}
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
@ -6,6 +6,9 @@ import net.kyori.adventure.text.Component;
|
|||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.entity.Player;
|
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.Inventory;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
@ -13,7 +16,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class WorldSelector {
|
public class WorldSelector implements Listener, IActionItem {
|
||||||
private final ItemStack ITEM = generateWorldSelectorItem();
|
private final ItemStack ITEM = generateWorldSelectorItem();
|
||||||
private final Inventory INVENTORY = generateWorldSelectorInventory();
|
private final Inventory INVENTORY = generateWorldSelectorInventory();
|
||||||
|
|
||||||
@ -52,11 +55,30 @@ public class WorldSelector {
|
|||||||
return stack;
|
return stack;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ItemStack getITEM() {
|
@Override
|
||||||
return ITEM;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void action(@NotNull Player player) {
|
public void action(@NotNull Player player) {
|
||||||
player.openInventory(INVENTORY);
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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()
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
@ -15,6 +15,7 @@ import org.bukkit.event.block.BlockPlaceEvent;
|
|||||||
import org.bukkit.event.player.PlayerDropItemEvent;
|
import org.bukkit.event.player.PlayerDropItemEvent;
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
import org.bukkit.event.player.PlayerJoinEvent;
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.potion.PotionEffect;
|
import org.bukkit.potion.PotionEffect;
|
||||||
import org.bukkit.potion.PotionEffectType;
|
import org.bukkit.potion.PotionEffectType;
|
||||||
|
|
||||||
@ -23,7 +24,10 @@ import java.util.Objects;
|
|||||||
public class PlayerListener implements Listener {
|
public class PlayerListener implements Listener {
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onJoin(PlayerJoinEvent event) {
|
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 -> {
|
Main.instance().getWorlds().forEach(world -> {
|
||||||
if (world.isDefaultWorld()) world.addViewer(event.getPlayer());
|
if (world.isDefaultWorld()) world.addViewer(event.getPlayer());
|
||||||
});
|
});
|
||||||
@ -55,12 +59,16 @@ public class PlayerListener implements Listener {
|
|||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onInteract(PlayerInteractEvent event) {
|
public void onInteract(PlayerInteractEvent event) {
|
||||||
ActionItemManager actionItems = ActionItemManager.getInstance();
|
ActionItemManager actionItemManager = ActionItemManager.getInstance();
|
||||||
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
Player p = event.getPlayer();
|
Player p = event.getPlayer();
|
||||||
Action a = event.getAction();
|
Action a = event.getAction();
|
||||||
|
ItemStack item = event.getItem();
|
||||||
if ((a != Action.RIGHT_CLICK_AIR) || (event.getItem() == null)) return;
|
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);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -64,8 +64,8 @@ public class ViewableWorld {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void addViewer(Player player) {
|
public void addViewer(Player player) {
|
||||||
player.setAllowFlight(true);
|
|
||||||
player.teleport(world.getSpawnLocation());
|
player.teleport(world.getSpawnLocation());
|
||||||
|
player.setAllowFlight(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ItemStack getItem() {
|
public ItemStack getItem() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user