added LeaveItem and restructured code
This commit is contained in:
parent
d405c3f233
commit
eaccdec4a8
@ -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));
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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.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;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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.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);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -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() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user