command event can be cancelled for teleport command + rtp menu testing

This commit is contained in:
RonanCraft 2022-03-09 17:10:19 -05:00
parent bdece2c552
commit bd07536c0c
5 changed files with 114 additions and 6 deletions

View File

@ -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;

View File

@ -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());
}
}

View File

@ -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);
}
}

View File

@ -64,6 +64,10 @@ Parties:
#Addon RTPMenu (Enable `/rtp` world select menu)
RTPMenu:
Enabled: false
Menu:
Title: "Choose World"
Items:
Worlds:
- world
- world_nether

View File

@ -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);