Apply a bunch of changes (read description of commit)
- Replace essentials mute check with BanManager mute check - Compact listeners - Add @NotNull to String[] args in commands - Add a /sky message - Add a /skyrtp command - Fix admins breaking floor in box - Improve furnace place message - Compact listener code - Disable withers & delete wither skull land listener - Fix players going above 319 Y level in sky - Optimize listener registration - Add %galaxyboxpvp_hearts% placceholder
This commit is contained in:
20
pom.xml
20
pom.xml
@@ -36,14 +36,14 @@
|
||||
<id>placeholderapi-repo</id>
|
||||
<url>https://repo.extendedclip.com/content/repositories/placeholderapi/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>essentials-releases</id>
|
||||
<url>https://repo.essentialsx.net/releases/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>jitpack.io</id>
|
||||
<url>https://jitpack.io</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>confuser-repo</id>
|
||||
<url>https://ci.frostcast.net/plugin/repository/everything</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
@@ -58,18 +58,18 @@
|
||||
<version>2.11.6</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.essentialsx</groupId>
|
||||
<artifactId>EssentialsX</artifactId>
|
||||
<version>2.21.0</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.booksaw</groupId>
|
||||
<artifactId>BetterTeams</artifactId>
|
||||
<version>4.11.0</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>me.confuser.banmanager</groupId>
|
||||
<artifactId>BanManagerCommon</artifactId>
|
||||
<version>7.9.0</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<properties>
|
||||
<java.version>21</java.version>
|
||||
|
||||
@@ -2,6 +2,8 @@ package xyz.lncvrt.galaxyboxpvp;
|
||||
|
||||
import com.earth2me.essentials.Essentials;
|
||||
import com.earth2me.essentials.User;
|
||||
import me.confuser.banmanager.common.BanManagerPlugin;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.command.TabExecutor;
|
||||
@@ -9,12 +11,14 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.plugin.PluginManager;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.json.simple.parser.JSONParser;
|
||||
import org.json.simple.parser.ParseException;
|
||||
import xyz.lncvrt.galaxyboxpvp.commands.Autocompress;
|
||||
import xyz.lncvrt.galaxyboxpvp.commands.Sky;
|
||||
import xyz.lncvrt.galaxyboxpvp.commands.Skyrtp;
|
||||
import xyz.lncvrt.galaxyboxpvp.events.*;
|
||||
|
||||
import java.io.File;
|
||||
@@ -29,21 +33,12 @@ import java.util.logging.Level;
|
||||
|
||||
public final class GalaxyBoxPvP extends JavaPlugin implements TabExecutor {
|
||||
public final Map<UUID, Boolean> autoCompressStatus = new HashMap<>();
|
||||
private Essentials essentials;
|
||||
public final Map<UUID, Long> skyRTPDelays = new HashMap<>();
|
||||
private final PlaceholderAPIExpansion placeholderAPIExpansion = new PlaceholderAPIExpansion();
|
||||
public final MiniMessage miniMessage = MiniMessage.miniMessage();
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
Plugin essentialsPlugin = Bukkit.getServer().getPluginManager().getPlugin("Essentials");
|
||||
getLogger().info("Essentials detected. Attempting to hook...");
|
||||
if (essentialsPlugin instanceof Essentials) {
|
||||
essentials = (Essentials) essentialsPlugin;
|
||||
getLogger().info("Essentials hooked successfully.");
|
||||
} else {
|
||||
getLogger().info("Essentials failed to hook. Disabling plugin");
|
||||
getServer().getPluginManager().disablePlugin(this);
|
||||
}
|
||||
|
||||
if (placeholderAPIExpansion.register()) {
|
||||
getLogger().info("Successfully registered PlaceholderAPIExpansion!");
|
||||
} else {
|
||||
@@ -65,23 +60,26 @@ public final class GalaxyBoxPvP extends JavaPlugin implements TabExecutor {
|
||||
}
|
||||
|
||||
private void registerEvents() {
|
||||
getServer().getPluginManager().registerEvents(new BlockBreakListener(this), this);
|
||||
getServer().getPluginManager().registerEvents(new BlockPlaceListener(), this);
|
||||
getServer().getPluginManager().registerEvents(new CraftItemListener(), this);
|
||||
getServer().getPluginManager().registerEvents(new EntityPickupItemListener(this), this);
|
||||
getServer().getPluginManager().registerEvents(new FurnaceBurnListener(this), this);
|
||||
getServer().getPluginManager().registerEvents(new FurnaceSmeltListener(this), this);
|
||||
getServer().getPluginManager().registerEvents(new PlayerDropItemListener(this), this);
|
||||
getServer().getPluginManager().registerEvents(new PlayerJoinListener(this), this);
|
||||
getServer().getPluginManager().registerEvents(new PrepareAnvilListener(), this);
|
||||
getServer().getPluginManager().registerEvents(new PrepareItemEnchantListener(), this);
|
||||
getServer().getPluginManager().registerEvents(new ProjectileHitListener(), this);
|
||||
getServer().getPluginManager().registerEvents(new SignChangeListener(this), this);
|
||||
PluginManager pluginManager = getServer().getPluginManager();
|
||||
pluginManager.registerEvents(new BlockBreakListener(this), this);
|
||||
pluginManager.registerEvents(new BlockPlaceListener(this), this);
|
||||
pluginManager.registerEvents(new CraftItemListener(), this);
|
||||
pluginManager.registerEvents(new EntityPickupItemListener(this), this);
|
||||
pluginManager.registerEvents(new EntitySpawnListener(), this);
|
||||
pluginManager.registerEvents(new FurnaceBurnListener(this), this);
|
||||
pluginManager.registerEvents(new FurnaceSmeltListener(this), this);
|
||||
pluginManager.registerEvents(new PlayerDropItemListener(this), this);
|
||||
pluginManager.registerEvents(new PlayerJoinListener(this), this);
|
||||
pluginManager.registerEvents(new PlayerMoveListener(), this);
|
||||
pluginManager.registerEvents(new PrepareAnvilListener(), this);
|
||||
pluginManager.registerEvents(new PrepareItemEnchantListener(), this);
|
||||
pluginManager.registerEvents(new SignChangeListener(this), this);
|
||||
}
|
||||
|
||||
private void registerCommands() {
|
||||
Objects.requireNonNull(getCommand("autocompress")).setExecutor(new Autocompress(this));
|
||||
Objects.requireNonNull(getCommand("sky")).setExecutor(new Sky());
|
||||
Objects.requireNonNull(getCommand("skyrtp")).setExecutor(new Skyrtp(this));
|
||||
}
|
||||
|
||||
public boolean isRestrictedMaterial(Material material) {
|
||||
@@ -194,7 +192,6 @@ public final class GalaxyBoxPvP extends JavaPlugin implements TabExecutor {
|
||||
}
|
||||
|
||||
public boolean isMuted(Player player) {
|
||||
User user = essentials.getUser(player);
|
||||
return user.isMuted();
|
||||
return BanManagerPlugin.getInstance().getPlayerMuteStorage().isMuted(player.getUniqueId());
|
||||
}
|
||||
}
|
||||
@@ -37,6 +37,8 @@ public final class PlaceholderAPIExpansion extends PlaceholderExpansion {
|
||||
@Override
|
||||
public @Nullable String onPlaceholderRequest(Player player, @NotNull String identifier) {
|
||||
switch (identifier) {
|
||||
case "hearts":
|
||||
return String.format("%.1f", player.getHealth() / 2);
|
||||
case "kills":
|
||||
return String.valueOf(player.getStatistic(Statistic.PLAYER_KILLS));
|
||||
case "deaths":
|
||||
|
||||
@@ -15,7 +15,7 @@ import static org.bukkit.ChatColor.RED;
|
||||
public record Autocompress(GalaxyBoxPvP plugin) implements CommandExecutor {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {
|
||||
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String @NotNull [] args) {
|
||||
if (!(sender instanceof Player player)) {
|
||||
sender.sendMessage(RED + "This command can only be executed by a player.");
|
||||
return true;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package xyz.lncvrt.galaxyboxpvp.commands;
|
||||
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
@@ -8,9 +9,10 @@ import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class Sky implements CommandExecutor {
|
||||
@Override
|
||||
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {
|
||||
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String @NotNull [] args) {
|
||||
if (sender instanceof Player player) {
|
||||
player.performCommand("warp sky");
|
||||
player.sendMessage(MiniMessage.miniMessage().deserialize("<green>You can do <b><u><click:suggest_command:'/skyrtp'>/skyrtp</click></u></b> (click the bold text) to randomly teleport around here!"));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
51
src/main/java/xyz/lncvrt/galaxyboxpvp/commands/Skyrtp.java
Normal file
51
src/main/java/xyz/lncvrt/galaxyboxpvp/commands/Skyrtp.java
Normal file
@@ -0,0 +1,51 @@
|
||||
package xyz.lncvrt.galaxyboxpvp.commands;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import xyz.lncvrt.galaxyboxpvp.GalaxyBoxPvP;
|
||||
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
|
||||
public class Skyrtp implements CommandExecutor {
|
||||
private final GalaxyBoxPvP plugin;
|
||||
|
||||
public Skyrtp(GalaxyBoxPvP plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String @NotNull [] args) {
|
||||
if (sender instanceof Player player) {
|
||||
Long last = plugin.skyRTPDelays.get(player.getUniqueId());
|
||||
Long time = System.currentTimeMillis();
|
||||
if (last != null && time - last < 30000) {
|
||||
Long timeLeft = (30000 - (System.currentTimeMillis() - last)) / 1000;
|
||||
player.sendMessage(plugin.miniMessage.deserialize("<red>You can't RTP in the sky world so often, please wait %s second(s)!".formatted(timeLeft)));
|
||||
return true;
|
||||
}
|
||||
World world = plugin.getServer().getWorld("sky");
|
||||
if (world == null) {
|
||||
player.sendMessage(plugin.miniMessage.deserialize("<red>Failed, please try again!"));
|
||||
return true;
|
||||
}
|
||||
int randomX = ThreadLocalRandom.current().nextInt(100, 15000);
|
||||
int randomZ = ThreadLocalRandom.current().nextInt(100, 15000);
|
||||
Location location = new Location(world, randomX, 100, randomZ);
|
||||
Block block = world.getBlockAt(location);
|
||||
if (block.getType() == Material.AIR) {
|
||||
block.setType(Material.GRASS_BLOCK);
|
||||
}
|
||||
player.teleport(location.add(0.5f, 1, 0.5f));
|
||||
player.sendMessage(plugin.miniMessage.deserialize("<green>You have been randomly teleported to <u>%s 100 %s<u>".formatted(randomX, randomZ)));
|
||||
plugin.skyRTPDelays.put(player.getUniqueId(), time);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -17,5 +17,8 @@ public class BlockBreakListener implements Listener {
|
||||
public void onBlockBreak(BlockBreakEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
plugin.convertInventoryItemsPrep(player, player.getUniqueId());
|
||||
if (event.getBlock().getLocation().getY() == 100 && event.getBlock().getWorld().getName().equals("world")) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,36 +1,26 @@
|
||||
package xyz.lncvrt.galaxyboxpvp.events;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.event.ClickEvent;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
import net.kyori.adventure.text.format.TextDecoration;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
import xyz.lncvrt.galaxyboxpvp.GalaxyBoxPvP;
|
||||
|
||||
public class BlockPlaceListener implements Listener {
|
||||
private final GalaxyBoxPvP plugin;
|
||||
|
||||
public BlockPlaceListener(GalaxyBoxPvP plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onBlockPlace(BlockPlaceEvent event) {
|
||||
if (event.getBlockPlaced().getType() == Material.POLISHED_BLACKSTONE_BUTTON) {
|
||||
if (event.getItemInHand().hasItemMeta() && event.getItemInHand().getItemMeta().hasDisplayName()) {
|
||||
event.setCancelled(true); //temp fix
|
||||
}
|
||||
} else if (event.getBlockPlaced().getType() == Material.FURNACE ||
|
||||
event.getBlockPlaced().getType() == Material.FURNACE_MINECART ||
|
||||
event.getBlockPlaced().getType() == Material.BLAST_FURNACE) {
|
||||
Player player = event.getPlayer();
|
||||
|
||||
Component message = Component.text("[TIP] ", NamedTextColor.GREEN)
|
||||
.decorate(TextDecoration.BOLD)
|
||||
.append(Component.text("If you are trying to smelt iron, gold, etc you can use the Smelter Shop. Click ", NamedTextColor.GREEN))
|
||||
.append(Component.text("[HERE]", NamedTextColor.GREEN)
|
||||
.decorate(TextDecoration.UNDERLINED)
|
||||
.clickEvent(ClickEvent.runCommand("/warp smelter")))
|
||||
.append(Component.text(" to teleport to the smelter shop!", NamedTextColor.GREEN));
|
||||
|
||||
player.sendMessage(message);
|
||||
} else if (event.getBlockPlaced().getType() == Material.FURNACE || event.getBlockPlaced().getType() == Material.FURNACE_MINECART || event.getBlockPlaced().getType() == Material.BLAST_FURNACE) {
|
||||
event.getPlayer().sendMessage(plugin.miniMessage.deserialize("<bold><green>[TIP] </green></bold><green>If you are trying to smelt iron, gold, etc you can use the Smelter Shop. Click <underlined><click:run_command:'/warp smelter'>[HERE]</click></underlined> to teleport to the smelter shop!</green>"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,8 +16,6 @@ public class EntityPickupItemListener implements Listener {
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
public void onItemPickup(EntityPickupItemEvent event) {
|
||||
if (event.getEntity() instanceof Player player) {
|
||||
plugin.convertInventoryItemsPrep(player, player.getUniqueId());
|
||||
}
|
||||
if (event.getEntity() instanceof Player player) plugin.convertInventoryItemsPrep(player, player.getUniqueId());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package xyz.lncvrt.galaxyboxpvp.events;
|
||||
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntitySpawnEvent;
|
||||
|
||||
public class EntitySpawnListener implements Listener {
|
||||
@EventHandler
|
||||
public void onEntitySpawnEvent(EntitySpawnEvent event) {
|
||||
if (event.getEntityType() == EntityType.WITHER) event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
@@ -20,9 +20,6 @@ public class FurnaceBurnListener implements Listener {
|
||||
public void onFurnaceBurn(FurnaceBurnEvent event) {
|
||||
Furnace furnace = (Furnace) event.getBlock().getState();
|
||||
Material smelting = Objects.requireNonNull(furnace.getInventory().getSmelting()).getType();
|
||||
|
||||
if (plugin.isRestrictedMaterial(smelting)) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
if (plugin.isRestrictedMaterial(smelting)) event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,9 +16,6 @@ public class FurnaceSmeltListener implements Listener {
|
||||
@EventHandler
|
||||
public void onFurnaceSmelt(FurnaceSmeltEvent event) {
|
||||
Material smelted = event.getSource().getType();
|
||||
|
||||
if (plugin.isRestrictedMaterial(smelted)) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
if (plugin.isRestrictedMaterial(smelted)) event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,10 +22,7 @@ public class PlayerJoinListener implements Listener {
|
||||
Player player = event.getPlayer();
|
||||
UUID playerId = player.getUniqueId();
|
||||
|
||||
if (!plugin.autoCompressStatus.containsKey(playerId)) {
|
||||
plugin.autoCompressStatus.put(playerId, false);
|
||||
}
|
||||
|
||||
if (!plugin.autoCompressStatus.containsKey(playerId)) plugin.autoCompressStatus.put(playerId, false);
|
||||
player.sendMessage("%sWelcome to LncvrtBox, %s! This is a PvP arena gamemode that was originally called LncvrtBox, and is almost a year old! We reset the server for GalaxyNetwork and a fresh start".formatted(GREEN, player.getName()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
package xyz.lncvrt.galaxyboxpvp.events;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerMoveEvent;
|
||||
|
||||
public class PlayerMoveListener implements Listener {
|
||||
@EventHandler
|
||||
private void onSignPlace(PlayerMoveEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
int maxY = player.getWorld().getMaxHeight();
|
||||
if (player.getLocation().getY() >= maxY) {
|
||||
Location newLocation = player.getLocation().clone();
|
||||
newLocation.setY(maxY - 1);
|
||||
player.teleport(newLocation);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,8 +10,6 @@ public class PrepareItemEnchantListener implements Listener {
|
||||
@EventHandler
|
||||
public void onPrepareItemEnchant(PrepareItemEnchantEvent event) {
|
||||
ItemStack item = event.getItem();
|
||||
if (item.getType() == Material.DIAMOND_PICKAXE || item.getType() == Material.NETHERITE_PICKAXE) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
if (item.getType() == Material.DIAMOND_PICKAXE || item.getType() == Material.NETHERITE_PICKAXE) event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,8 +14,6 @@ public class SignChangeListener implements Listener {
|
||||
|
||||
@EventHandler
|
||||
private void onSignPlace(SignChangeEvent event) {
|
||||
if (plugin.isMuted(event.getPlayer())) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
if (plugin.isMuted(event.getPlayer())) event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,3 +13,6 @@ commands:
|
||||
sky:
|
||||
description: Teleports you to sky world
|
||||
usage: /sky
|
||||
skyrtp:
|
||||
description: Teleports you to a random location in sky world
|
||||
usage: /sky
|
||||
Reference in New Issue
Block a user