mirror of
https://github.com/RonanPlugins/BetterRTP.git
synced 2025-08-17 09:05:47 +00:00
command event can be cancelled for teleport command + rtp menu testing
This commit is contained in:
parent
bdece2c552
commit
bd07536c0c
@ -10,6 +10,7 @@ import me.SuperRonanCraft.BetterRTPAddons.addons.logger.AddonLogger;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.addons.magicStick.AddonMagicStick;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.addons.partyrtp.AddonParty;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.addons.portals.AddonPortals;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.addons.rtpmenu.AddonRTPMenu;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@ -48,6 +49,7 @@ public class AddonsHandler {
|
||||
EXTRAEFFECTS(new AddonExtraEffects()), //New cosmetica!
|
||||
COMMANDS(new AddonCommands()), //Commands on rtp events
|
||||
PARTY_RTP(new AddonParty()), //Adds parties!
|
||||
RTP_MENU(new AddonRTPMenu()), //Adds /rtp menu
|
||||
;
|
||||
|
||||
final Addon addon;
|
||||
|
@ -1,5 +1,6 @@
|
||||
package me.SuperRonanCraft.BetterRTPAddons.addons.rtpmenu;
|
||||
|
||||
import lombok.Getter;
|
||||
import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommand;
|
||||
import me.SuperRonanCraft.BetterRTP.player.commands.types.CmdTeleport;
|
||||
import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_CommandEvent;
|
||||
@ -15,16 +16,19 @@ import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Objects;
|
||||
|
||||
public class AddonRTPMenu implements Addon, Listener {
|
||||
|
||||
private static String name = "RTPMenu";
|
||||
public static String name = "RTPMenu";
|
||||
private final HashMap<Player, MenuData> playerData = new HashMap<>();
|
||||
|
||||
public MenuData getData(Player p) {
|
||||
if (!playerData.containsKey(p))
|
||||
playerData.put(p, new MenuData());
|
||||
return playerData.getOrDefault(p, null);
|
||||
}
|
||||
|
||||
@ -55,15 +59,16 @@ public class AddonRTPMenu implements Addon, Listener {
|
||||
@EventHandler
|
||||
private void onClick(InventoryClickEvent e) {
|
||||
if (validClick(e)) {
|
||||
e.setCancelled(true);
|
||||
e.getWhoClicked().sendMessage("Menu Inventory!");
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
private void onClick(RTP_CommandEvent e) {
|
||||
if (e.getCmd() instanceof CmdTeleport && e.getCmd() instanceof Player) {
|
||||
private void onTeleport(RTP_CommandEvent e) {
|
||||
if (e.getCmd() instanceof CmdTeleport && e.getSendi() instanceof Player) {
|
||||
e.setCancelled(true);
|
||||
RTPMenu_CreateInventory.createInv((Player) e.getSendi());
|
||||
RTPMenu_CreateInventory.createInv(this, (Player) e.getSendi());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,11 +1,107 @@
|
||||
package me.SuperRonanCraft.BetterRTPAddons.addons.rtpmenu;
|
||||
|
||||
import me.SuperRonanCraft.BetterRTP.BetterRTP;
|
||||
import me.SuperRonanCraft.BetterRTPAddons.util.Files;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class RTPMenu_CreateInventory {
|
||||
|
||||
public static void createInv(Player p) {
|
||||
public static void createInv(AddonRTPMenu pl, Player p) {
|
||||
List<World> bukkit_worlds = Bukkit.getWorlds();
|
||||
List<String> display_worlds = Files.FILETYPE.CONFIG.getStringList(AddonRTPMenu.name + ".Worlds");
|
||||
List<World> actual_worlds = new ArrayList<>();
|
||||
for (int i = 0; i < 10; i++) //add x Junk worlds for testing
|
||||
for (World world : bukkit_worlds) {
|
||||
if (display_worlds.contains(world.getName()))
|
||||
actual_worlds.add(world);
|
||||
}
|
||||
Inventory inv = createInventory(Files.FILETYPE.CONFIG.getString(AddonRTPMenu.name + ".Menu.Title"), Math.floorDiv(actual_worlds.size(), 9) * 9 + 9);
|
||||
|
||||
HashMap<World, Integer> world_slots = centerWorlds(new ArrayList<>(actual_worlds));
|
||||
|
||||
for (Map.Entry<World, Integer> world : world_slots.entrySet()) {
|
||||
int slot = world.getValue();
|
||||
ItemStack item = new ItemStack(Material.MAP, 1);
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
assert meta != null;
|
||||
meta.setDisplayName(world.getKey().getName() + ": " + actual_worlds.size() + " " + world_slots.size());
|
||||
item.setItemMeta(meta);
|
||||
inv.setItem(slot, item);
|
||||
}
|
||||
|
||||
pl.getData(p).setMenuInv(inv);
|
||||
p.openInventory(inv);
|
||||
}
|
||||
|
||||
private static HashMap<World, Integer> centerWorlds(List<World> actual_worlds) {
|
||||
HashMap<World, Integer> map = new HashMap<>();
|
||||
while(actual_worlds.size() >= 9) {
|
||||
map.put(actual_worlds.get(0), map.size());
|
||||
actual_worlds.remove(0);
|
||||
}
|
||||
int slot = map.size();
|
||||
for (int i = 0; i < actual_worlds.size(); i++) {
|
||||
map.put(actual_worlds.get(i), slot + getSlotOffset(actual_worlds.size(), i) + i);
|
||||
}
|
||||
|
||||
return map;
|
||||
}
|
||||
|
||||
private static int getSlotOffset(int gear_to_show, int index) {
|
||||
if (gear_to_show % 2 == 0) { //Is Even
|
||||
switch (gear_to_show) {
|
||||
case 2:
|
||||
switch (index) {
|
||||
case 0: return 3;
|
||||
case 1: return 4;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
switch (index) {
|
||||
case 0:
|
||||
case 1: return 2;
|
||||
case 2:
|
||||
case 3: return 3;
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
switch (index) {
|
||||
case 0:
|
||||
case 1:
|
||||
case 2: return 1;
|
||||
case 3:
|
||||
case 4:
|
||||
case 5: return 2;
|
||||
}
|
||||
break;
|
||||
case 8:
|
||||
if (index > 4) return 1;
|
||||
}
|
||||
} else {
|
||||
switch (gear_to_show) {
|
||||
case 1: return 4;
|
||||
case 3: return 3;
|
||||
case 5: return 2;
|
||||
case 7: return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
private static Inventory createInventory(String title, int size) {
|
||||
title = BetterRTP.getInstance().getText().color(title);
|
||||
return Bukkit.createInventory(null, Math.min(size, 54), title);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -64,6 +64,10 @@ Parties:
|
||||
#Addon RTPMenu (Enable `/rtp` world select menu)
|
||||
RTPMenu:
|
||||
Enabled: false
|
||||
Menu:
|
||||
Title: "Choose World"
|
||||
Items:
|
||||
|
||||
Worlds:
|
||||
- world
|
||||
- world_nether
|
@ -59,7 +59,8 @@ public class Commands {
|
||||
} else {
|
||||
RTP_CommandEvent event = new RTP_CommandEvent(sendi, new CmdTeleport());
|
||||
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||
event.getCmd().execute(sendi, label, args);
|
||||
if (!event.isCancelled())
|
||||
event.getCmd().execute(sendi, label, args);
|
||||
}
|
||||
} else
|
||||
pl.getText().getNoPermission(sendi);
|
||||
|
Loading…
x
Reference in New Issue
Block a user