From afd4159b73ea6fad1245977076b03b949334ea36 Mon Sep 17 00:00:00 2001 From: ToxicStoxm Date: Wed, 3 May 2023 22:18:34 +0200 Subject: [PATCH] 1.5.2 --- pom.xml | 24 +- .../chat/filters/CustomFilter.java | 51 ++ .../x_tornado10/chat/filters/MsgFilter.java | 39 ++ .../InventorySavePointCommand.java | 2 +- .../open_gui_command/OpenGUICommand.java | 151 ++++++ .../java/com/x_tornado10/craftiservi.java | 50 +- .../grapling_hook/GraplingHookListener.java | 109 +++++ .../inventory/InventoryListener.java | 447 ++++++++++++++++++ .../inventory/InventoryOpenListener.java | 44 ++ .../events/listeners/jpads/JumpPads.java | 77 +++ .../x_tornado10/handlers/ConfigHandler.java | 9 + .../x_tornado10/messages/PlayerMessages.java | 22 +- src/main/resources/config.yml | 6 + src/main/resources/plugin.yml | 8 +- 14 files changed, 1028 insertions(+), 11 deletions(-) create mode 100644 src/main/java/com/x_tornado10/chat/filters/CustomFilter.java create mode 100644 src/main/java/com/x_tornado10/chat/filters/MsgFilter.java create mode 100644 src/main/java/com/x_tornado10/commands/open_gui_command/OpenGUICommand.java create mode 100644 src/main/java/com/x_tornado10/events/listeners/grapling_hook/GraplingHookListener.java create mode 100644 src/main/java/com/x_tornado10/events/listeners/inventory/InventoryListener.java create mode 100644 src/main/java/com/x_tornado10/events/listeners/inventory/InventoryOpenListener.java create mode 100644 src/main/java/com/x_tornado10/events/listeners/jpads/JumpPads.java diff --git a/pom.xml b/pom.xml index 58b340d..a1a1a28 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.x_tornado10 craftiservi - 1.5.1 + 1.5.2 jar Craftiservi @@ -41,7 +41,7 @@ false - F:\PVP-Server\plugins\${project.artifactId}-Bukkit-${project.version}.jar + F:\Minecraft-Test-Servers\PVP-Server\plugins\${project.artifactId}-Bukkit-${project.version}.jar @@ -73,5 +73,25 @@ 1.19.2-R0.1-SNAPSHOT provided + + net.kyori + text-api + 3.0.4 + + + net.kyori + text-adapter-bukkit + 3.0.6 + + + org.apache.logging.log4j + log4j-api + 2.20.0 + + + org.apache.logging.log4j + log4j-core + 2.20.0 + diff --git a/src/main/java/com/x_tornado10/chat/filters/CustomFilter.java b/src/main/java/com/x_tornado10/chat/filters/CustomFilter.java new file mode 100644 index 0000000..288e636 --- /dev/null +++ b/src/main/java/com/x_tornado10/chat/filters/CustomFilter.java @@ -0,0 +1,51 @@ +package com.x_tornado10.chat.filters; + +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.core.LogEvent; +import org.apache.logging.log4j.core.Logger; +import org.apache.logging.log4j.core.filter.AbstractFilter; +import org.apache.logging.log4j.message.Message; + +//https://github.com/4drian3d/LogFilter/blob/main/common/src/main/java/me/adrianed/logfilter/common/filter/CustomFilter.java +public abstract class CustomFilter extends AbstractFilter { + protected CustomFilter() {} + + @Override + public Result filter(final LogEvent event){ + return event == null ? Result.NEUTRAL : logResult(event.getMessage().getFormattedMessage()); + } + + @Override + public Result filter(final Logger logger, final Level level, final Marker marker, final Message msg, + final Throwable t) { + Result result = t != null ? logResult(t.getMessage()) : Result.NEUTRAL; + if (msg != null) { + if (result == Result.DENY) return result; + return logResult(msg.getFormattedMessage()); + } + return Result.NEUTRAL; + } + + @Override + public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, + final Object... params) { + return logResult(msg); + } + + @Override + public Result filter(final Logger logger, final Level level, final Marker marker, final Object msg, + final Throwable t) { + Result result = t != null ? logResult(t.getMessage()) : Result.NEUTRAL; + if (msg != null) { + if(result == Result.DENY) return result; + return logResult(msg.toString()); + } + return Result.NEUTRAL; + } + + protected abstract Result logResult(String string); + + public abstract String getName(); + +} diff --git a/src/main/java/com/x_tornado10/chat/filters/MsgFilter.java b/src/main/java/com/x_tornado10/chat/filters/MsgFilter.java new file mode 100644 index 0000000..b581b3b --- /dev/null +++ b/src/main/java/com/x_tornado10/chat/filters/MsgFilter.java @@ -0,0 +1,39 @@ +package com.x_tornado10.chat.filters; + + +import com.x_tornado10.craftiservi; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.core.Logger; + +import java.util.List; + +public final class MsgFilter extends CustomFilter { + + private final craftiservi plugin = craftiservi.getInstance(); + private final List blockedStrings = plugin.getBlockedStrings(); + + public void registerFilter() { + Logger rootLogger = (Logger) LogManager.getRootLogger(); + rootLogger.addFilter(this); + } + + @Override + protected Result logResult(String string) { + + for (String str : blockedStrings) { + + if (string.contains(str)) { + + return Result.DENY; + } + + } + + return Result.NEUTRAL; + } + + @Override + public String getName() { + return null; + } +} \ No newline at end of file diff --git a/src/main/java/com/x_tornado10/commands/inv_save_point/InventorySavePointCommand.java b/src/main/java/com/x_tornado10/commands/inv_save_point/InventorySavePointCommand.java index 170ede0..c50ee28 100644 --- a/src/main/java/com/x_tornado10/commands/inv_save_point/InventorySavePointCommand.java +++ b/src/main/java/com/x_tornado10/commands/inv_save_point/InventorySavePointCommand.java @@ -107,7 +107,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St restore_meta.setDisplayName("§aRestore Inventory"); List restore_lore = new ArrayList<>(); - restore_lore.add("§7Restors the saved Inventory and drops the items of your current inventory!"); + restore_lore.add("§7Restores the saved Inventory and drops the items of your current inventory!"); restore_meta.setLore(restore_lore); restore.setItemMeta(restore_meta); diff --git a/src/main/java/com/x_tornado10/commands/open_gui_command/OpenGUICommand.java b/src/main/java/com/x_tornado10/commands/open_gui_command/OpenGUICommand.java new file mode 100644 index 0000000..2bdb5dc --- /dev/null +++ b/src/main/java/com/x_tornado10/commands/open_gui_command/OpenGUICommand.java @@ -0,0 +1,151 @@ +package com.x_tornado10.commands.open_gui_command; + +import com.x_tornado10.craftiservi; +import com.x_tornado10.logger.Logger; +import com.x_tornado10.messages.PlayerMessages; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +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; + +public class OpenGUICommand implements CommandExecutor { + + private final craftiservi plugin = craftiservi.getInstance(); + private final Logger logger = plugin.getCustomLogger(); + private final PlayerMessages plmsg = plugin.getPlayerMessages(); + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + + if (!(sender instanceof Player)) { + + logger.info("Only Players can run this command!"); + + return true; + } + + Player p = (Player) sender; + + if (args.length == 1) { + + String args0 = args[0]; + String[] parts = args0.split("_"); + + if (parts.length != 2) { + + sendUsage(p); + return true; + + } + + String key = parts[0].trim(); + String sid = parts[1].trim(); + + switch (key) { + case "GUI" -> { + if (isStringInt(sid)) { + + int id = Integer.parseInt(sid); + + HashMap invs_review = plugin.getInvs_review(); + + if (!invs_review.containsKey(id)) { + + plmsg.msg(p, "Invalid GUI_ID! (GUI_" + id + ")"); + break; + + } + + Inventory inv = invs_review.get(id); + + ItemStack approve = new ItemStack(Material.GREEN_CONCRETE); + ItemStack deny = new ItemStack(Material.RED_CONCRETE); + ItemStack gui_id = new ItemStack(Material.BOOK); + + ItemMeta approve_meta = approve.getItemMeta(); + ItemMeta deny_meta = deny.getItemMeta(); + ItemMeta gui_id_meta = gui_id.getItemMeta(); + + String approve_displayname = "§aApprove request"; + String deny_displayname = "§cDeny request"; + String gui_id_dispalyname = "§bGUI_ID"; + + List approve_lore = new ArrayList<>(); + List deny_lore = new ArrayList<>(); + List gui_id_lore = new ArrayList<>(); + + approve_lore.add("§7Approve the request and close this inventory"); + deny_lore.add("§7Deny the request and close this inventory"); + gui_id_lore.add("§7ID: " + id); + + approve_meta.setDisplayName(approve_displayname); + approve_meta.setLore(approve_lore); + + deny_meta.setDisplayName(deny_displayname); + deny_meta.setLore(deny_lore); + + gui_id_meta.setDisplayName(gui_id_dispalyname); + gui_id_meta.setLore(gui_id_lore); + + approve.setItemMeta(approve_meta); + deny.setItemMeta(deny_meta); + gui_id.setItemMeta(gui_id_meta); + + + inv.setItem(53, deny); + inv.setItem(52, approve); + inv.setItem(51, gui_id); + + p.openInventory(inv); + + invs_review.remove(id); + + } else { + + sendUsage(p); + + } + } + case "Placeholder" -> {} + default -> sendUsage(p); + } + + } else { + + sendUsage(p); + + } + + return true; + } + + private void sendUsage(Player p) { + + plmsg.msg(p,"Usage: /opengui GUI_ID"); + + } + + + public boolean isStringInt(String s) + { + try { + + Integer.parseInt(s); + return true; + + } catch (NumberFormatException ex) { + + return false; + + } + } + +} diff --git a/src/main/java/com/x_tornado10/craftiservi.java b/src/main/java/com/x_tornado10/craftiservi.java index 72ef945..5c22529 100644 --- a/src/main/java/com/x_tornado10/craftiservi.java +++ b/src/main/java/com/x_tornado10/craftiservi.java @@ -1,13 +1,19 @@ package com.x_tornado10; +import com.x_tornado10.chat.filters.MsgFilter; import com.x_tornado10.commands.first_join_command.FirstJoinedCommand; import com.x_tornado10.commands.first_join_command.FirstJoinedCommandTabCompletion; import com.x_tornado10.commands.inv_save_point.InventorySavePointCommand; import com.x_tornado10.commands.inv_save_point.InventorySavePointTabCompletion; +import com.x_tornado10.commands.open_gui_command.OpenGUICommand; import com.x_tornado10.commands.xp_save_zone_command.XpSaveZoneCommand; import com.x_tornado10.commands.xp_save_zone_command.XpSaveZoneCommandTabCompletion; import com.x_tornado10.events.listeners.JoinListener; import com.x_tornado10.events.listeners.PlayerMoveListener; +import com.x_tornado10.events.listeners.grapling_hook.GraplingHookListener; +import com.x_tornado10.events.listeners.inventory.InventoryListener; +import com.x_tornado10.events.listeners.inventory.InventoryOpenListener; +import com.x_tornado10.events.listeners.jpads.JumpPads; import com.x_tornado10.files.FileLocations; import com.x_tornado10.handlers.ConfigHandler; import com.x_tornado10.handlers.DataHandler; @@ -16,16 +22,15 @@ import com.x_tornado10.utils.UpdateChecker; import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.World; import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; +import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.util.io.BukkitObjectInputStream; import org.bukkit.util.io.BukkitObjectOutputStream; @@ -45,6 +50,7 @@ public final class craftiservi extends JavaPlugin { private String colorprefix; private ConfigHandler configHandler; private HashMap playerlist; + private PluginManager pm; private DataHandler dataHandler; @@ -58,6 +64,10 @@ public final class craftiservi extends JavaPlugin { private HashMap> playersinsavearea; private HashMap> inv_saves; + private HashMap invs_review = new HashMap<>(); + public static Map FLYING_TIMEOUT = new HashMap(); + + private List blockedStrings; @Override public void onLoad() { @@ -76,6 +86,8 @@ public void onLoad() { playersinsavearea = new HashMap<>(); inv_saves = new HashMap<>(); fl = new FileLocations(); + pm = Bukkit.getPluginManager(); + blockedStrings = new ArrayList<>(); configHandler.updateConfig(); saveConfig(); @@ -164,8 +176,12 @@ public void onEnable() { logger.info("§8------------Debug------------"); logger.info(""); logger.info("Registering classes..."); - Bukkit.getPluginManager().registerEvents(new JoinListener(), this); - Bukkit.getPluginManager().registerEvents(new PlayerMoveListener(), this); + pm.registerEvents(new JoinListener(), this); + pm.registerEvents(new PlayerMoveListener(), this); + pm.registerEvents(new InventoryOpenListener(), this); + pm.registerEvents(new InventoryListener(), this); + pm.registerEvents(new GraplingHookListener(), this); + pm.registerEvents(new JumpPads(), this); logger.info("Listeners..§adone"); logger.info(""); @@ -181,6 +197,18 @@ public void onEnable() { Bukkit.getPluginCommand("invsave").setExecutor(new InventorySavePointCommand()); Bukkit.getPluginCommand("invsave").setTabCompleter(new InventorySavePointTabCompletion()); logger.info("invsave...§adone"); + + Bukkit.getPluginCommand("opengui").setExecutor(new OpenGUICommand()); + logger.info("opengui...§adone"); + logger.info(""); + logger.info("Configuring filters..."); + blockedStrings = configHandler.getBlockedStrings(); + logger.info("MsgFilter...§adone"); + logger.info(""); + logger.info("Applying filters to logger..."); + new MsgFilter().registerFilter(); + logger.info("MsgFilter...§adone"); + logger.info(""); logger.info("§8-----------------------------"); logger.info(""); @@ -796,7 +824,7 @@ public static Inventory fromBase64(String data) throws IOException { int size = dataInput.readInt(); InventoryHolder holder = (InventoryHolder) dataInput.readObject(); //InventoryType type = (InventoryType) dataInput.readObject(); - Inventory inventory = Bukkit.getServer().createInventory(holder, size); + Inventory inventory = Bukkit.getServer().createInventory(null, size); // Read the serialized inventory for (int i = 0; i < inventory.getSize(); i++) { @@ -900,4 +928,16 @@ public HashMap> getPlayersinsavearea() { public HashMap> getInv_saves() { return inv_saves; } + + public HashMap getInvs_review() { + return invs_review; + } + + public String getColorprefix() { + return colorprefix; + } + + public List getBlockedStrings() { + return blockedStrings; + } } diff --git a/src/main/java/com/x_tornado10/events/listeners/grapling_hook/GraplingHookListener.java b/src/main/java/com/x_tornado10/events/listeners/grapling_hook/GraplingHookListener.java new file mode 100644 index 0000000..3b52a32 --- /dev/null +++ b/src/main/java/com/x_tornado10/events/listeners/grapling_hook/GraplingHookListener.java @@ -0,0 +1,109 @@ +package com.x_tornado10.events.listeners.grapling_hook; + +import com.x_tornado10.craftiservi; +import com.x_tornado10.logger.Logger; +import com.x_tornado10.messages.PlayerMessages; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.player.PlayerFishEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.util.Vector; + +import java.util.HashMap; +import java.util.UUID; + +import static com.x_tornado10.craftiservi.FLYING_TIMEOUT; + +public class GraplingHookListener implements Listener { + + private static final HashMap cooldown = new HashMap<>(); + private final long cooldown_value = 50; + + private final craftiservi plugin = craftiservi.getInstance(); + + private Logger logger = plugin.getCustomLogger(); + private final PlayerMessages plmsg = plugin.getPlayerMessages(); + private final int flyingTimeout = 5; + + @EventHandler(priority = EventPriority.HIGHEST) + public void onFish(PlayerFishEvent e) { + + Player p = e.getPlayer(); + ItemStack current = p.getItemInHand(); + ItemMeta current_meta = current.getItemMeta(); + String current_displayname = current_meta.getDisplayName(); + String grappling_hook_dispalyname = "§a§lGrappling Hook"; + UUID pid = p.getUniqueId(); + + if (!current_displayname.equals(grappling_hook_dispalyname)) { + + ItemStack grappling_hook = new ItemStack(Material.FISHING_ROD); + ItemMeta grappling_hook_meta = grappling_hook.getItemMeta(); + grappling_hook_meta.setDisplayName(grappling_hook_dispalyname); + grappling_hook.setItemMeta(grappling_hook_meta); + + p.getInventory().addItem(grappling_hook); + + return; + + } + + if (e.getState() == PlayerFishEvent.State.IN_GROUND || e.getState() == PlayerFishEvent.State.REEL_IN) { + + if (!cooldown.containsKey(pid)) { + + cooldown.put(pid, System.currentTimeMillis()); + + + Location loc1 = p.getLocation(); + Location loc2 = e.getHook().getLocation(); + + Vector v = new Vector(loc2.getX() - loc1.getX(), 1, loc2.getZ() - loc1.getZ()); + p.setVelocity(v); + + FLYING_TIMEOUT.put(p.getUniqueId(), System.currentTimeMillis() + (flyingTimeout * 1000L)); + + return; + } + + long timeElapsed = System.currentTimeMillis() - cooldown.get(pid); + + if (!(timeElapsed >= cooldown_value)) { + + plmsg.msg(p,"§cYou must wait §e120s§c between uses! (" + ((cooldown_value - System.currentTimeMillis()) / 1000) + "," + ((cooldown_value - timeElapsed) % 1000) + "s left)"); + + } else { + + cooldown.put(pid, System.currentTimeMillis()); + + Location loc1 = p.getLocation(); + Location loc2 = e.getHook().getLocation(); + + Vector v = new Vector(loc2.getX() - loc1.getX(), 1, loc2.getZ() - loc1.getZ()); + p.setVelocity(v); + + FLYING_TIMEOUT.put(p.getUniqueId(), System.currentTimeMillis() + (flyingTimeout * 1000L)); + + } + + } + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onDamage(EntityDamageEvent event) { + if (event.getEntity() instanceof Player) { + Player player = (Player) event.getEntity(); + if (FLYING_TIMEOUT.containsKey(player.getUniqueId())) { + if (FLYING_TIMEOUT.get(player.getUniqueId()) < System.currentTimeMillis()) return; + event.setCancelled(true); + } + } + } + +} diff --git a/src/main/java/com/x_tornado10/events/listeners/inventory/InventoryListener.java b/src/main/java/com/x_tornado10/events/listeners/inventory/InventoryListener.java new file mode 100644 index 0000000..36aa96c --- /dev/null +++ b/src/main/java/com/x_tornado10/events/listeners/inventory/InventoryListener.java @@ -0,0 +1,447 @@ +package com.x_tornado10.events.listeners.inventory; + +import com.x_tornado10.craftiservi; +import com.x_tornado10.logger.Logger; +import com.x_tornado10.messages.PlayerMessages; +import net.kyori.text.TextComponent; +import net.kyori.text.adapter.bukkit.TextAdapter; +import net.kyori.text.format.TextColor; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Entity; +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.InventoryMoveItemEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitTask; + +import java.util.*; + +public class InventoryListener implements Listener { + + private final craftiservi plugin = craftiservi.getInstance(); + private final Logger logger = plugin.getCustomLogger(); + private final PlayerMessages plmsg = plugin.getPlayerMessages(); + private final HashMap cooldown = new HashMap<>(); + private boolean cancel = false; + private HashMap playerlist = plugin.getPlayerlist(); + + private final HashMap invs_review = plugin.getInvs_review(); + private HashMap penidng_request = new HashMap<>(); + + @EventHandler + public void onInventoryMoveItemEvent(InventoryMoveItemEvent e) { + + if (isSavedInv(e.getSource()) || isSavedInv(e.getDestination())) { + + e.setCancelled(true); + + } + + } + + @EventHandler + public void onInventoryClickEvent(InventoryClickEvent e) { + + boolean isSaveInv = false; + + for (Map.Entry entry : playerlist.entrySet()) { + + if (e.getView().getTitle().equals(Bukkit.getOfflinePlayer((UUID)entry.getKey()).getName())) { + + isSaveInv = true; + + } + + if (isSaveInv) {break;} + + } + + if (!isSaveInv) { + + return; + + } + + if (e.getClickedInventory() == null || e.getCurrentItem() == null) { + + return; + + } + + Player p = (Player) e.getWhoClicked(); + + int slot = e.getSlot(); + ItemStack item = e.getClickedInventory().getItem(slot); + + ItemMeta item_meta = item.getItemMeta(); + String item_displayname = item_meta.getDisplayName(); + + String displayname = "§aRestore Inventory"; + + if (item_displayname.equals(displayname)) { + + if (!cooldown.containsKey(p.getUniqueId())) { + + cooldown.put(p.getUniqueId(), System.currentTimeMillis()); + + } else { + + long timeElapsed = System.currentTimeMillis() - cooldown.get(p.getUniqueId()); + + if (!(timeElapsed >= 120000)) { + + plmsg.msg(p,"§cYou must wait §e120s§c between uses! (" + ((120000 - timeElapsed) / 1000) + "," + ((120000 - timeElapsed) % 1000) + "s left)"); + p.closeInventory(); + p.playSound(p, Sound.BLOCK_ANVIL_PLACE, 99999999999999999999999999999999999999f, 1f); + e.setCancelled(true); + return; + + } else { + + cooldown.put(p.getUniqueId(), System.currentTimeMillis()); + + } + + } + + int id = invs_review.size() + 1; + invs_review.put(id, e.getInventory()); + + plmsg.msg(p,"Sending Inventory restore request..."); + plmsg.msg(p,"Received request. Please wait!"); + + if (onlineStaff()) { + + final net.kyori.text.TextComponent inv_restore_request_open_inv = net.kyori.text.TextComponent.builder() + .content(plugin.getColorprefix() + plmsg.getLine() + "\n" + plugin.getColorprefix() + "§7" + p.getName() + " requested Inventory restore!\n" + plugin.getColorprefix()) + .color(TextColor.GRAY) + .append(net.kyori.text.TextComponent.builder("[Inventory]\n") + .color(TextColor.AQUA) + .hoverEvent(net.kyori.text.event.HoverEvent + .showText(net.kyori.text.TextComponent.builder() + .content("Click to open Inventory! (GUI_" + id + ")") + .color(TextColor.GRAY) + .build())) + .clickEvent(net.kyori.text.event.ClickEvent.runCommand("/opengui GUI_" + id))) + .append(TextComponent.builder(plugin.getColorprefix() + plmsg.getLine())) + .color(TextColor.GRAY) + .build(); + + for (Player pl : Bukkit.getOnlinePlayers()) { + + if (pl.isOp()) { + + TextAdapter.sendComponent(pl, inv_restore_request_open_inv); + + } + + } + + plmsg.msg(p, "Waiting for approval! (60 sec)"); + penidng_request.put(p.getUniqueId(), id); + run(id, p); + p.playSound(p, Sound.ENTITY_ARROW_HIT_PLAYER, 99999999999999999999999999999999999999f, 1f); + p.closeInventory(); + + } else { + + plmsg.msg(p, "§c§lRequest denied! Please try again later!"); + plmsg.msg(p,"Cause: No Operator online!"); + p.playSound(p, Sound.BLOCK_ANVIL_PLACE, 99999999999999999999999999999999999999f, 1f); + p.closeInventory(); + } + + //restoreInv(p, e.getInventory()); + + } + + + String approve_displayname = "§aApprove request"; + String deny_displayname = "§cDeny request"; + + if (item_displayname.equals(approve_displayname)) { + + cancelrun(); + + Inventory temp = e.getInventory(); + + List gui_id_lore = temp.getItem(51).getItemMeta().getLore(); + + String[] parts = gui_id_lore.get(0).split(":"); + + int id = Integer.parseInt(parts[1].trim()); + + Player pl = Bukkit.getPlayer(e.getView().getTitle()); + + Inventory temp_inv = e.getInventory(); + + restoreInv(pl, temp_inv); + + remove_delayed(id); + + p.playSound(p, Sound.ENTITY_ARROW_HIT_PLAYER, 99999999999999999999999999999999999999f, 1f); + p.closeInventory(); + + for (Player player : Bukkit.getOnlinePlayers()) { + + if (p.isOp()) { + + plmsg.msg_inlines(player,"§e" + p.getName() + " §aapproved §e" + pl.getName() + "'s §aInv request!"); + + } + + } + + plmsg.msg_inlines(pl,"§e" + p.getName() + " §aapproved your Inv request!"); + plmsg.msg(pl, "Restoring inventory..."); + + } + + if (item_displayname.equals(deny_displayname)) { + + cancelrun(); + + Inventory temp = e.getClickedInventory(); + + List gui_id_lore = temp.getItem(51).getItemMeta().getLore(); + + String[] parts = gui_id_lore.get(0).split(":"); + + Player pl = Bukkit.getPlayer(e.getView().getTitle()); + + invs_review.remove(Integer.parseInt(parts[1].trim())); + + p.playSound(p, Sound.BLOCK_ANVIL_PLACE, 99999999999999999999999999999999999999f, 1f); + p.closeInventory(); + + for (Player player : Bukkit.getOnlinePlayers()) { + + if (p.isOp()) { + + plmsg.msg_inlines(player,"§e" + p.getName() + " §cdenied §e" + pl.getName() + "'s §cInv request!"); + + } + + } + + plmsg.msg_inlines(pl,"§e" + p.getName() + " §cdenied your Inv request!"); + + } + + e.setCancelled(true); + + } + + @EventHandler + public void onDisconnect(PlayerQuitEvent e) { + + Player p = e.getPlayer(); + + if (penidng_request.containsKey(p.getUniqueId())) { + + invs_review.remove(penidng_request.get(p.getUniqueId())); + penidng_request.remove(p.getUniqueId()); + + } + + for (Player pl : Bukkit.getOnlinePlayers()) { + + if (pl.isOp()) { + + plmsg.msg_inlines(pl, "§cCanceled Inv request from §e" + p.getName() + "\n" + plugin.getColorprefix() + "Cause: §cDisconnected"); + + } + + } + + } + + private void remove_delayed(int id) { + + BukkitTask remove_delayed = new BukkitRunnable() { + @Override + public void run() { + + invs_review.remove(id); + + cancel(); + + } + }.runTaskTimer(plugin, 10, 20); + + + } + + + private boolean isSavedInv(Inventory inv) { + + String display_name = "§9§lInventorySavePoint Info v1.0"; + + if (inv.getSize() != 54) {return false;} + + ItemStack item = inv.getItem(45); + assert item != null; + ItemMeta item_meta = item.getItemMeta(); + assert item_meta != null; + String item_displayname = item_meta.getDisplayName(); + + return item_displayname.equals(display_name); + + } + + + private void restoreInv(Player p, Inventory inv) { + + List armour_slots = new ArrayList<>(); + List slots = new ArrayList<>(); + ItemStack offhand; + + ItemStack air = new ItemStack(Material.AIR); + + for (int i = 0; i<37; i++) { + + if (inv.getItem(i) == null) { + + slots.add(air); + + } else { + + slots.add(inv.getItem(i)); + + } + + } + + + for (int j = 36; j<40; j++) { + + if (inv.getItem(j) == null) { + + armour_slots.add(air); + + } else { + + armour_slots.add(inv.getItem(j)); + + } + + } + + if (inv.getItem(40) == null) { + + offhand = new ItemStack(Material.AIR); + + } else { + + offhand = inv.getItem(40); + + } + + for (ItemStack slot : p.getInventory()) { + + if (slot != null) { + + p.getWorld().dropItem(p.getLocation(), slot).setPickupDelay(100); + + } + + } + + p.getInventory().clear(); + + p.getInventory().setBoots(armour_slots.get(0)); + p.getInventory().setLeggings(armour_slots.get(1)); + p.getInventory().setChestplate(armour_slots.get(2)); + p.getInventory().setHelmet(armour_slots.get(3)); + + p.getInventory().setItem(40, offhand); + + for (int l = 0; l<37; l++) { + + p.getInventory().addItem(slots.get(l)); + + } + } + + private boolean onlineStaff() { + + for (Player p : Bukkit.getOnlinePlayers()) { + + if (p.isOp()) { + + return true; + + } + + } + + return false; + + } + + + private void run(int id, Player p) { + + BukkitTask run = new BukkitRunnable() { + + @Override + public void run() { + + invs_review.remove(id); + + for (Player pl : Bukkit.getOnlinePlayers()) { + + if (pl.isOp()) { + + plmsg.msg(pl, "§cAutodenied Inv request form " + p.getName()); + + } + + } + + plmsg.msg(p,"Your Inventory restore request was §cauto denied!"); + plmsg.msg(p, "Cause: §cExpired request"); + plmsg.msg(p,"Please try again later!"); + + cancel(); + + } + + + }.runTaskTimer(plugin, 1200, 20); + + + BukkitTask cancelrun = new BukkitRunnable() { + @Override + public void run() { + + if (cancel) { + + run.cancel(); + cancel = false; + + } + + } + + }.runTaskTimer(plugin,0,20); + + + } + + private void cancelrun() { + + cancel = true; + + } + + +} diff --git a/src/main/java/com/x_tornado10/events/listeners/inventory/InventoryOpenListener.java b/src/main/java/com/x_tornado10/events/listeners/inventory/InventoryOpenListener.java new file mode 100644 index 0000000..c6cf71e --- /dev/null +++ b/src/main/java/com/x_tornado10/events/listeners/inventory/InventoryOpenListener.java @@ -0,0 +1,44 @@ +package com.x_tornado10.events.listeners.inventory; + +import com.x_tornado10.craftiservi; +import com.x_tornado10.logger.Logger; +import com.x_tornado10.messages.PlayerMessages; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryOpenEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +public class InventoryOpenListener implements Listener { + + private final craftiservi plugin = craftiservi.getInstance(); + private final Logger logger = plugin.getCustomLogger(); + private final PlayerMessages plmsg = plugin.getPlayerMessages(); + + @EventHandler + public void onInventoryOpen(InventoryOpenEvent e) { + + Player p = (Player) e.getPlayer(); + Inventory i = e.getInventory(); + String display_name = "§9§lInventorySavePoint Info v1.0"; + + if (i.getSize() != 54) {return;} + + ItemStack item = i.getItem(45); + assert item != null; + ItemMeta item_meta = item.getItemMeta(); + assert item_meta != null; + String item_displayname = item_meta.getDisplayName(); + + if (item_displayname.equals(display_name)) { + + p.playSound(p, Sound.ENTITY_PLAYER_LEVELUP, 99999999999999999999999999999999999999f, 1); + + } + + } + +} diff --git a/src/main/java/com/x_tornado10/events/listeners/jpads/JumpPads.java b/src/main/java/com/x_tornado10/events/listeners/jpads/JumpPads.java new file mode 100644 index 0000000..1fc8ad2 --- /dev/null +++ b/src/main/java/com/x_tornado10/events/listeners/jpads/JumpPads.java @@ -0,0 +1,77 @@ +package com.x_tornado10.events.listeners.jpads; + +import com.x_tornado10.events.listeners.PlayerMoveListener; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.util.Vector; + +import java.util.HashMap; +import java.util.UUID; + +import static com.x_tornado10.craftiservi.FLYING_TIMEOUT; + +public class JumpPads implements Listener { + + private HashMap cooldown = new HashMap<>(); + + private final int flyingTimeout = 3; + + @EventHandler + public void onPlayerMove(PlayerMoveEvent e) { + + Player p = e.getPlayer(); + UUID pid = p.getUniqueId(); + + if (p.getLocation().getBlock().getType() == Material.LIGHT_WEIGHTED_PRESSURE_PLATE) { + + if (!cooldown.containsKey(pid)) { + + cooldown.put(pid, System.currentTimeMillis()); + + Vector v = p.getLocation().getDirection().multiply(2.00).setY(1.2); + p.setVelocity(v); + p.playSound(p.getLocation(), Sound.ENTITY_BAT_TAKEOFF, 2f, 1F); + + FLYING_TIMEOUT.put(p.getUniqueId(), System.currentTimeMillis() + (flyingTimeout * 1000L)); + + } else { + + long timeElapsed = System.currentTimeMillis() - cooldown.get(pid); + + if (timeElapsed >= 500) { + + cooldown.put(pid, System.currentTimeMillis()); + + Vector v = p.getLocation().getDirection().multiply(2.00).setY(1.2); + p.setVelocity(v); + p.playSound(p.getLocation(), Sound.ENTITY_BAT_TAKEOFF, 2f, 1F); + + FLYING_TIMEOUT.put(p.getUniqueId(), System.currentTimeMillis() + (flyingTimeout * 1000L)); + + } + + } + + } + + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onDamage(EntityDamageEvent event) { + if (event.getEntity() instanceof Player) { + Player player = (Player) event.getEntity(); + if (FLYING_TIMEOUT.containsKey(player.getUniqueId())) { + if (FLYING_TIMEOUT.get(player.getUniqueId()) < System.currentTimeMillis()) return; + event.setCancelled(true); + } + } + } +} diff --git a/src/main/java/com/x_tornado10/handlers/ConfigHandler.java b/src/main/java/com/x_tornado10/handlers/ConfigHandler.java index ed761bf..29e505f 100644 --- a/src/main/java/com/x_tornado10/handlers/ConfigHandler.java +++ b/src/main/java/com/x_tornado10/handlers/ConfigHandler.java @@ -2,6 +2,9 @@ import org.bukkit.configuration.Configuration; +import java.util.ArrayList; +import java.util.List; + public class ConfigHandler{ private String prefix; @@ -14,6 +17,12 @@ public ConfigHandler (String prefix, Configuration config) { } + public List getBlockedStrings() { + + return new ArrayList<>(config.getStringList("BlockedStrings")); + + } + public void updateConfig() { diff --git a/src/main/java/com/x_tornado10/messages/PlayerMessages.java b/src/main/java/com/x_tornado10/messages/PlayerMessages.java index ae8295d..7c5ee3f 100644 --- a/src/main/java/com/x_tornado10/messages/PlayerMessages.java +++ b/src/main/java/com/x_tornado10/messages/PlayerMessages.java @@ -9,6 +9,8 @@ public class PlayerMessages { private String prefix; + private String line = "§7---------------------------------------§r"; + public PlayerMessages (String prefix) { this.prefix = prefix; @@ -25,10 +27,28 @@ public void msg(ArrayList players, String message) { for (Player player : players) { - player.sendMessage(prefix + "§7" + message + "§r"); + msg(player ,prefix + "§7" + message + "§r"); } } + public void line(Player p) { + + msg(p,line); + + } + + public String getLine() { + return line; + } + + public void msg_inlines(Player p, String message) { + + line(p); + msg(p,message); + line(p); + + } + } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index e69de29..b3ca182 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -0,0 +1,6 @@ +#Strings to block/filter from console and logs +BlockedStrings: + - /msg + - /tell + - /tellraw + - /teammsg \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 0f235e5..4e4b5c5 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -4,7 +4,7 @@ main: com.x_tornado10.craftiservi api-version: 1.19 authors: [ x_Tornado10 ] website: https://www.spigotmc.org/resources/crafti-servi.108546/ -prefix: "Craftiservi" +prefix: "CS" description: This Plugin provides a few useful tools alongside a basic server infrastructure commands: firstjoin: @@ -29,4 +29,8 @@ commands: aliases: - inventorysave - invsavepoint - usage: "Usage: /invsave " \ No newline at end of file + usage: "Usage: /invsave " + opengui: + description: opens guis + permission: craftiservi.command.opengui + usage: "Usage: /opengui GUI_ID" \ No newline at end of file