diff --git a/pom.xml b/pom.xml index f65a2ba..41f34f6 100644 --- a/pom.xml +++ b/pom.xml @@ -20,6 +20,8 @@ org.spigotmc spigot 1.12.2-R0.1-SNAPSHOT + jar + provided com.boydti @@ -31,6 +33,11 @@ worldedit-bukkit 6.1.1-SNAPSHOT + + com.comphenix.protocol + ProtocolLib + 4.3.0 + @@ -52,9 +59,14 @@ true + + dmulloy2-repo + http://repo.dmulloy2.net/content/groups/public/ + + ${project.artifactId} src/main/resources diff --git a/src/main/java/pw/kaboom/extras/Commands.java b/src/main/java/pw/kaboom/extras/Commands.java index 0d5fa4e..af379ed 100644 --- a/src/main/java/pw/kaboom/extras/Commands.java +++ b/src/main/java/pw/kaboom/extras/Commands.java @@ -1,16 +1,42 @@ package pw.kaboom.extras; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; + +import com.destroystokyo.paper.profile.PlayerProfile; + +import com.mojang.authlib.GameProfile; + +import net.minecraft.server.v1_12_R1.PacketPlayInClientCommand; +import net.minecraft.server.v1_12_R1.PacketPlayInClientCommand.EnumClientCommand; +import net.minecraft.server.v1_12_R1.PacketPlayOutEntityDestroy; +import net.minecraft.server.v1_12_R1.PacketPlayOutNamedEntitySpawn; +import net.minecraft.server.v1_12_R1.PacketPlayOutPlayerInfo; +import net.minecraft.server.v1_12_R1.PacketPlayOutPlayerInfo.EnumPlayerInfoAction; + import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.Chunk; import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Particle; +import org.bukkit.Sound; import org.bukkit.World; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; +import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer; + +import org.bukkit.enchantments.Enchantment; + +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + class CommandClearChat implements CommandExecutor { public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { for (int i = 0; i < 100; ++i) { @@ -33,6 +59,23 @@ class CommandConsole implements CommandExecutor { } } +class CommandDestroyEntities implements CommandExecutor { + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + Player player = (Player)sender; + for (World world : Bukkit.getServer().getWorlds()) { + for (Chunk chunk : world.getLoadedChunks()) { + for (Entity entity : chunk.getEntities()) { + if (!entity.getType().equals(EntityType.PLAYER)) { + entity.remove(); + } + } + } + } + player.sendMessage("Successfully destroyed all entities in every world"); + return true; + } +} + class CommandDiscord implements CommandExecutor { public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { Player player = (Player)sender; @@ -42,6 +85,49 @@ class CommandDiscord implements CommandExecutor { } } +class CommandEnchantAll implements CommandExecutor { + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + Player player = (Player)sender; + ItemStack item = player.getItemInHand(); + if (item.getType() == Material.AIR) { + player.sendMessage("Please hold an item in your hand to enchant it"); + } else { + item.addUnsafeEnchantment(Enchantment.ARROW_DAMAGE, 32767); + item.addUnsafeEnchantment(Enchantment.ARROW_FIRE, 32767); + item.addUnsafeEnchantment(Enchantment.ARROW_INFINITE, 32767); + item.addUnsafeEnchantment(Enchantment.ARROW_KNOCKBACK, 32767); + item.addUnsafeEnchantment(Enchantment.BINDING_CURSE, 32767); + item.addUnsafeEnchantment(Enchantment.DAMAGE_ALL, 32767); + item.addUnsafeEnchantment(Enchantment.DAMAGE_ARTHROPODS, 32767); + item.addUnsafeEnchantment(Enchantment.DAMAGE_UNDEAD, 32767); + item.addUnsafeEnchantment(Enchantment.DEPTH_STRIDER, 32767); + item.addUnsafeEnchantment(Enchantment.DIG_SPEED, 32767); + item.addUnsafeEnchantment(Enchantment.DURABILITY, 32767); + item.addUnsafeEnchantment(Enchantment.FIRE_ASPECT, 32767); + item.addUnsafeEnchantment(Enchantment.FROST_WALKER, 32767); + /*item.addUnsafeEnchantment(Enchantment.KNOCKBACK, 32767);*/ + item.addUnsafeEnchantment(Enchantment.LOOT_BONUS_BLOCKS, 32767); + item.addUnsafeEnchantment(Enchantment.LOOT_BONUS_MOBS, 32767); + item.addUnsafeEnchantment(Enchantment.LUCK, 32767); + item.addUnsafeEnchantment(Enchantment.LURE, 32767); + item.addUnsafeEnchantment(Enchantment.MENDING, 32767); + item.addUnsafeEnchantment(Enchantment.OXYGEN, 32767); + item.addUnsafeEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 32767); + item.addUnsafeEnchantment(Enchantment.PROTECTION_EXPLOSIONS, 32767); + item.addUnsafeEnchantment(Enchantment.PROTECTION_FALL, 32767); + item.addUnsafeEnchantment(Enchantment.PROTECTION_FIRE, 32767); + item.addUnsafeEnchantment(Enchantment.PROTECTION_PROJECTILE, 32767); + item.addUnsafeEnchantment(Enchantment.SILK_TOUCH, 32767); + item.addUnsafeEnchantment(Enchantment.SWEEPING_EDGE, 32767); + item.addUnsafeEnchantment(Enchantment.THORNS, 32767); + item.addUnsafeEnchantment(Enchantment.VANISHING_CURSE, 32767); + item.addUnsafeEnchantment(Enchantment.WATER_WORKER, 32767); + player.sendMessage("I killed Tim."); + } + return true; + } +} + class CommandEnd implements CommandExecutor { public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { Player player = (Player)sender; @@ -69,6 +155,38 @@ class CommandHub implements CommandExecutor { } } +class CommandJumpscare implements CommandExecutor { + private void createJumpscare(Player player) { + player.spawnParticle(Particle.MOB_APPEARANCE, player.getLocation(), 4); + for (int i = 0; i < 10; ++i) { + player.playSound(player.getLocation(), Sound.ENTITY_ENDERMEN_SCREAM, 1, 0); + } + } + + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + Player player = (Player)sender; + if (args.length == 0) { + player.sendMessage(ChatColor.RED + "Usage: /" + label + " "); + } else { + if (args[0].equalsIgnoreCase("*") || args[0].equalsIgnoreCase("**")) { + for (Player p: Bukkit.getOnlinePlayers()) { + createJumpscare(p); + } + player.sendMessage("Successfully created jumpscare for every player"); + } else { + Player target = Bukkit.getPlayer(args[0]); + if (target != null) { + createJumpscare(target); + player.sendMessage("Successfully created jumpscare for player \"" + target.getName() + "\""); + } else { + player.sendMessage("Player \"" + target.getName() + "\" not found"); + } + } + } + return true; + } +} + class CommandNether implements CommandExecutor { public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { Player player = (Player)sender; @@ -98,11 +216,11 @@ class CommandPrefix implements CommandExecutor { if (args.length == 0) { player.sendMessage(ChatColor.RED + "Usage: /" + label + " "); } else if (args[0].equalsIgnoreCase("off")) { - main.getConfig().set(player.getName().toString(), null); + main.getConfig().set(player.getUniqueId().toString(), null); main.saveConfig(); player.sendMessage("You no longer have a tag"); } else { - main.getConfig().set(player.getName().toString(), String.join(" ", args)); + main.getConfig().set(player.getUniqueId().toString(), String.join(" ", args)); main.saveConfig(); player.sendMessage("You now have the tag: " + ChatColor.translateAlternateColorCodes('&', String.join(" ", args))); } @@ -136,6 +254,66 @@ class CommandTellraw implements CommandExecutor { } } +class CommandUnloadChunks implements CommandExecutor { + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + Player player = (Player)sender; + for (World world : Bukkit.getServer().getWorlds()) { + for (Chunk chunk : world.getLoadedChunks()) { + chunk.unload(true); + } + } + player.sendMessage("Successfully unloaded unused chunks"); + return true; + } +} + +class CommandUsername implements CommandExecutor { + private void changeName(Player player, String name){ + for (Player otherPlayer: Bukkit.getOnlinePlayers()){ + ((CraftPlayer)otherPlayer).getHandle().playerConnection.sendPacket(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.REMOVE_PLAYER, ((CraftPlayer)player).getHandle())); + + try { + Field nameField = GameProfile.class.getDeclaredField("name"); + nameField.setAccessible(true); + nameField.set(((CraftPlayer)player).getProfile(), name); + } catch (IllegalAccessException | NoSuchFieldException exception) { + exception.printStackTrace(); + } + + ((CraftPlayer)otherPlayer).getHandle().playerConnection.sendPacket(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, ((CraftPlayer)player).getHandle())); + + if (otherPlayer.getUniqueId() != player.getUniqueId()) { + ((CraftPlayer)otherPlayer).getHandle().playerConnection.sendPacket(new PacketPlayOutEntityDestroy(player.getEntityId())); + ((CraftPlayer)otherPlayer).getHandle().playerConnection.sendPacket(new PacketPlayOutNamedEntitySpawn(((CraftPlayer)player).getHandle())); + } + } + } + + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + Player player = (Player)sender; + if (args.length == 0) { + player.sendMessage(ChatColor.RED + "Usage: /" + label + " "); + } else { + String namelong = ChatColor.translateAlternateColorCodes('&', String.join(" ", args)); + String name = namelong.substring(0, Math.min(16, namelong.length())); + + PlayerProfile profile = player.getPlayerProfile(); + profile.setName(name); + profile.complete(); + profile.clearProperties(); + player.setPlayerProfile(profile); + /*Location location = player.getLocation(); + /*changeName(player, name); + /*player.setHealth(0); + player.spigot().respawn(); + player.teleport(location); + /*((CraftPlayer)player).getHandle().playerConnection.sendPacket(new PacketPlayInClientCommand(EnumClientCommand.PERFORM_RESPAWN));*/ + player.sendMessage("Successfully set your username to \"" + name + "\""); + } + return true; + } +} + class CommandVote implements CommandExecutor { public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { Player player = (Player)sender; diff --git a/src/main/java/pw/kaboom/extras/Events.java b/src/main/java/pw/kaboom/extras/Events.java index d690fd3..4eedcf8 100644 --- a/src/main/java/pw/kaboom/extras/Events.java +++ b/src/main/java/pw/kaboom/extras/Events.java @@ -1,11 +1,16 @@ package pw.kaboom.extras; +import com.destroystokyo.paper.event.entity.EntityAddToWorldEvent; + +import com.destroystokyo.paper.profile.PlayerProfile; + import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Chunk; import org.bukkit.Material; import org.bukkit.Location; import org.bukkit.World; +import org.bukkit.WorldBorder; import org.bukkit.block.Block; @@ -21,7 +26,12 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockBurnEvent; +import org.bukkit.event.block.BlockDamageEvent; import org.bukkit.event.block.BlockExplodeEvent; +import org.bukkit.event.block.BlockFadeEvent; +import org.bukkit.event.block.BlockFromToEvent; +import org.bukkit.event.block.BlockGrowEvent; import org.bukkit.event.block.BlockPhysicsEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.block.BlockRedstoneEvent; @@ -29,6 +39,7 @@ import org.bukkit.event.block.BlockRedstoneEvent; import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.EntitySpawnEvent; import org.bukkit.event.entity.ExplosionPrimeEvent; import org.bukkit.event.entity.LingeringPotionSplashEvent; @@ -37,6 +48,7 @@ import org.bukkit.event.entity.PotionSplashEvent; import org.bukkit.event.hanging.HangingPlaceEvent; import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerPreLoginEvent; import org.bukkit.event.player.PlayerBucketEmptyEvent; import org.bukkit.event.player.PlayerChangedWorldEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent; @@ -62,48 +74,16 @@ import com.sk89q.worldedit.event.extent.EditSessionEvent; import com.sk89q.worldedit.util.eventbus.EventHandler.Priority; import com.sk89q.worldedit.util.eventbus.Subscribe; -class EntityKiller extends BukkitRunnable { +class Tick extends BukkitRunnable { public void run() { - double tps = Bukkit.getServer().getTPS()[0]; - if (tps < 14) { - for (World world : Bukkit.getServer().getWorlds()) { - for (Chunk chunk : world.getLoadedChunks()) { - for (Entity e : chunk.getEntities()) { - if (e.getType().equals(EntityType.ARROW) || - e.getType().equals(EntityType.ARROW) || - e.getType().equals(EntityType.DRAGON_FIREBALL) || - e.getType().equals(EntityType.DROPPED_ITEM) || - e.getType().equals(EntityType.EGG) || - e.getType().equals(EntityType.ENDER_CRYSTAL) || - e.getType().equals(EntityType.ENDER_PEARL) || - e.getType().equals(EntityType.ENDER_SIGNAL) || - e.getType().equals(EntityType.EXPERIENCE_ORB) || - e.getType().equals(EntityType.FIREBALL) || - e.getType().equals(EntityType.FIREWORK) || - e.getType().equals(EntityType.MINECART_TNT) || - e.getType().equals(EntityType.PRIMED_TNT) || - e.getType().equals(EntityType.SMALL_FIREBALL) || - e.getType().equals(EntityType.SNOWBALL) || - e.getType().equals(EntityType.SPECTRAL_ARROW) || - e.getType().equals(EntityType.SPLASH_POTION) || - e.getType().equals(EntityType.TIPPED_ARROW)) { - e.remove(); - } - } - } + for (World world : Bukkit.getServer().getWorlds()) { + WorldBorder worldborder = world.getWorldBorder(); + if (worldborder.getSize() != 60000000) { + worldborder.setSize(60000000); + } else if (worldborder.getCenter().getX() != 0 || worldborder.getCenter().getZ() != 0) { + worldborder.setCenter(0, 0); } } - /*for (World world : Bukkit.getServer().getWorlds()) { - for (Chunk chunk : world.getLoadedChunks()) { - for (Entity entity : chunk.getEntities()) { - if (entity.getWorld().getName().equals("world")) { - if (!entity.getType().equals(EntityType.PLAYER)) { - entity.remove(); - } - } - } - } - }*/ } } @@ -113,6 +93,25 @@ class Events implements Listener { this.main = main; } + @EventHandler + void onAsyncPlayerChat(AsyncPlayerChatEvent event) { + Player player = event.getPlayer(); + String message = event.getMessage().substring(0, Math.min(256, event.getMessage().length())); + + if (main.getConfig().getString(player.getUniqueId().toString()) != null) { + String prefix = ChatColor.translateAlternateColorCodes('&', main.getConfig().getString(player.getUniqueId().toString())); + event.setFormat(prefix + ChatColor.RESET + " " + player.getDisplayName().toString() + ChatColor.RESET + ": " + ChatColor.RESET + ChatColor.translateAlternateColorCodes('&', message)); + } else { + if (event.getPlayer().isOp()) { + String prefix = ChatColor.translateAlternateColorCodes('&', "&4&l[&c&lOP&4&l]"); + event.setFormat(prefix + ChatColor.RED + " " + player.getDisplayName().toString() + ChatColor.RESET + ": " + ChatColor.RESET + ChatColor.translateAlternateColorCodes('&', message)); + } else { + String prefix = ChatColor.translateAlternateColorCodes('&', "&8&l[&7&lDeOP&8&l]"); + event.setFormat(prefix + ChatColor.GRAY + " " + player.getDisplayName().toString() + ChatColor.RESET + ": " + ChatColor.RESET + ChatColor.translateAlternateColorCodes('&', message)); + } + } + } + @EventHandler void onBlockBreakEvent(BlockBreakEvent event) { Block block = event.getBlock(); @@ -121,8 +120,57 @@ class Events implements Listener { } } + + @EventHandler + void onBlockBurnEvent(BlockBurnEvent event) { + Block block = event.getBlock(); + if (block.getWorld().getName().equals("world")) { + event.setCancelled(true); + } + } + + @EventHandler + void onBlockDamage(BlockDamageEvent event) { + Block block = event.getBlock(); + if (block.getWorld().getName().equals("world")) { + event.setCancelled(true); + } + } + @EventHandler void onBlockExplode(BlockExplodeEvent event) { + Block block = event.getBlock(); + double tps = Bukkit.getServer().getTPS()[0]; + + event.setYield(0); + + if (block.getWorld().getName().equals("world")) { + event.blockList().clear(); + } + + if (tps < 14) { + event.setCancelled(true); + } + } + + @EventHandler + void onBlockFade(BlockFadeEvent event) { + Block block = event.getBlock(); + if (block.getWorld().getName().equals("world")) { + event.setCancelled(true); + } + } + + @EventHandler + void onBlockFromTo(BlockFromToEvent event) { + Block block = event.getBlock(); + if (block.getWorld().getName().equals("world")) { + event.setCancelled(true); + } + } + + @EventHandler + void onBlockGrow(BlockGrowEvent event) { Block block = event.getBlock(); if (block.getWorld().getName().equals("world")) { event.setCancelled(true); @@ -131,20 +179,23 @@ class Events implements Listener { @EventHandler void onBlockPhysics(BlockPhysicsEvent event) { - /*double tps = Bukkit.getServer().getTPS()[0]; - if (tps < 12) { - if (event.getBlock().getType() == Material.OBSERVER) { - Observer obs = (Observer) event.getBlock().getState().getData(); - if (obs.isPowered()) { - event.getBlock().setType(Material.OBSERVER, true); - } - } - event.setCancelled(true); - }*/ Block block = event.getBlock(); - if (block.getWorld().getName().equals("world") || block.getType() == Material.SOIL) { + if (block.getWorld().getName().equals("world") || + block.getType() == Material.SOIL) { event.setCancelled(true); } + if (block.getType() == Material.LAVA || + block.getType() == Material.STATIONARY_LAVA || + block.getType() == Material.STATIONARY_WATER || + block.getType() == Material.WATER) { + event.setCancelled(true); + /*if (main.physicscount == 5) { + main.physicscount = 0; + } else { + event.setCancelled(true); + main.physicscount = main.physicscount + 1; + }*/ + } } @EventHandler @@ -164,6 +215,33 @@ class Events implements Listener { } } + @EventHandler + void onEntityAddToWorld(EntityAddToWorldEvent event) { + Entity entity = event.getEntity(); + Location entityLocation = entity.getLocation(); + + int onChunk = 0; + for (Entity chunkEntity : entityLocation.getWorld().getEntities()) { + if (entityLocation.getChunk().equals(chunkEntity.getLocation().getChunk())) { + onChunk++; + } + } + + if (onChunk >= 50) { + entity.remove(); + } else if (entity.getType().equals(EntityType.MAGMA_CUBE)) { + MagmaCube magmacube = (MagmaCube) event.getEntity(); + if (magmacube.getSize() > 100) { + magmacube.setSize(100); + } + } else if (entity.getType().equals(EntityType.SLIME)) { + Slime slime = (Slime) event.getEntity(); + if (slime.getSize() > 100) { + slime.setSize(100); + } + } + } + @EventHandler void onEntityChangeBlockEvent(EntityChangeBlockEvent event) { Block block = event.getBlock(); @@ -176,29 +254,29 @@ class Events implements Listener { void onEntityDamage(EntityDamageEvent event) { Entity entity = event.getEntity(); if (entity.getType().equals(EntityType.PLAYER)) { - if (event.getCause().equals(DamageCause.VOID) && entity.getLocation().getY() > -64) { + if (event.getCause().equals(DamageCause.VOID) && entity.getLocation().getY() > -64 || + event.getCause().equals(DamageCause.CUSTOM) || + event.getCause().equals(DamageCause.SUICIDE)) { event.setCancelled(true); } } } - /*@EventHandler + @EventHandler void onEntityExplode(EntityExplodeEvent event) { - Iterator iter = event.blockList().iterator(); - while (iter.hasNext()) { - Block block = iter.next(); - double x = block.getX(); - double y = block.getY(); - double z = block.getZ(); - double spawnx = block.getWorld().getSpawnLocation().getX(); - double spawnz = block.getWorld().getSpawnLocation().getZ(); - if (block.getWorld().getName().equals("world")) { - if ((x > spawnx - 50 && x < spawnx + 50) && (y > 0 && y < 9999) && (z > spawnz - 50 && z < spawnz + 50)) { - iter.remove(); - } - } + Entity entity = event.getEntity(); + double tps = Bukkit.getServer().getTPS()[0]; + + event.setYield(0); + + if (entity.getWorld().getName().equals("world")) { + event.blockList().clear(); } - }*/ + + if (tps < 14) { + event.setCancelled(true); + } + } @EventHandler void onEntitySpawn(EntitySpawnEvent event) { @@ -214,16 +292,6 @@ class Events implements Listener { if (onChunk >= 50) { event.setCancelled(true); - } else if (entity.getType().equals(EntityType.MAGMA_CUBE)) { - MagmaCube magmacube = (MagmaCube) event.getEntity(); - if (magmacube.getSize() > 100) { - magmacube.setSize(100); - } - } else if (entity.getType().equals(EntityType.SLIME)) { - Slime slime = (Slime) event.getEntity(); - if (slime.getSize() > 100) { - slime.setSize(100); - } } } @@ -232,7 +300,7 @@ class Events implements Listener { Entity entity = event.getEntity(); double tps = Bukkit.getServer().getTPS()[0]; - if (entity.getWorld().getName().equals("world") || tps < 14) { + if (tps < 14) { event.setCancelled(true); } else if (event.getRadius() > 20) { event.setRadius(20); @@ -240,7 +308,7 @@ class Events implements Listener { } @EventHandler - void onAreaEffectCloudEffect(LingeringPotionSplashEvent event) { + void onLingeringPotionSplash(LingeringPotionSplashEvent event) { Entity entity = event.getEntity(); if (entity.getWorld().getName().equals("world")) { event.setCancelled(true); @@ -263,25 +331,6 @@ class Events implements Listener { } } - @EventHandler - void onAsyncPlayerChat(AsyncPlayerChatEvent event) { - Player player = event.getPlayer(); - String message = event.getMessage().substring(0, Math.min(256, event.getMessage().length())); - - if (main.getConfig().getString(player.getName().toString()) != null) { - String prefix = ChatColor.translateAlternateColorCodes('&', main.getConfig().getString(player.getName().toString())); - event.setFormat(prefix + ChatColor.RESET + " " + player.getDisplayName().toString() + ChatColor.RESET + ": " + ChatColor.RESET + ChatColor.translateAlternateColorCodes('&', message)); - } else { - if (event.getPlayer().isOp()) { - String prefix = ChatColor.translateAlternateColorCodes('&', "&4&l[&c&lOP&4&l]"); - event.setFormat(prefix + ChatColor.RED + " " + player.getDisplayName().toString() + ChatColor.RESET + ": " + ChatColor.RESET + ChatColor.translateAlternateColorCodes('&', message)); - } else { - String prefix = ChatColor.translateAlternateColorCodes('&', "&8&l[&7&lDeOP&8&l]"); - event.setFormat(prefix + ChatColor.GRAY + " " + player.getDisplayName().toString() + ChatColor.RESET + ": " + ChatColor.RESET + ChatColor.translateAlternateColorCodes('&', message)); - } - } - } - @EventHandler void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { Player player = event.getPlayer(); @@ -294,7 +343,7 @@ class Events implements Listener { void onPlayerChangedWorld(PlayerChangedWorldEvent event) { Player player = event.getPlayer(); String world = player.getLocation().getWorld().getName(); - PermissionAttachment p = main.permissionList.get(player.getUniqueId()); + /*PermissionAttachment p = main.permissionList.get(player.getUniqueId());*/ if (world.equals("world_the_end")) { player.sendTitle(ChatColor.GRAY + "The End", "Return to the hub by typing /hub in chat", 10, 160, 5); @@ -306,7 +355,8 @@ class Events implements Listener { player.sendTitle(ChatColor.DARK_GREEN + "Overworld", "Return to the hub by typing /hub in chat", 10, 160, 5); } - if (world.equals("world")) { +/* if (world.equals("world")) { + p.unsetPermission("DoBlockImage.doblockimage"); p.unsetPermission("essentials.bigtree"); p.unsetPermission("essentials.tree"); p.unsetPermission("minecraft.command.blockdata"); @@ -314,13 +364,14 @@ class Events implements Listener { p.unsetPermission("minecraft.command.fill"); p.unsetPermission("minecraft.command.setblock"); } else { + p.setPermission("DoBlockImage.doblockimage", true); p.setPermission("essentials.bigtree", true); p.setPermission("essentials.tree", true); p.setPermission("minecraft.command.blockdata", true); p.setPermission("minecraft.command.clone", true); p.setPermission("minecraft.command.fill", true); p.setPermission("minecraft.command.setblock", true); - } + }*/ } @EventHandler @@ -328,7 +379,7 @@ class Events implements Listener { String arr[] = event.getMessage().split(" "); String ar[] = event.getMessage().split(" ", 10); - if (arr[0].toLowerCase().equals("//schem") || + /*if (arr[0].toLowerCase().equals("//schem") || arr[0].toLowerCase().equals("//schematic") || arr[0].toLowerCase().equals("/schem") || arr[0].toLowerCase().equals("/schematic") || @@ -339,44 +390,55 @@ class Events implements Listener { if (arr[1].toLowerCase().equals("delete")) { event.setCancelled(true); } - } else if (arr[0].toLowerCase().equals("/minecraft:particle") || + } else */if (arr[0].toLowerCase().equals("/minecraft:particle") || arr[0].toLowerCase().equals("/particle")) { if (arr[9] != null && Integer.parseInt(arr[9]) > 10) { event.setMessage(String.join(" ", arr[0], arr[1], arr[2], arr[3], arr[4], arr[5], arr[6], arr[7], arr[8]) + " 10"); } - } else if (arr[0].toLowerCase().equals("/essentials:esudo") || - arr[0].toLowerCase().equals("/essentials:sudo") || - arr[0].toLowerCase().equals("/esudo") || - arr[0].toLowerCase().equals("/sudo")) { - if (arr[2].toLowerCase().equals("ekill") || - arr[2].toLowerCase().equals("essentials:ekill") || - arr[2].toLowerCase().equals("essentials:esuicide") || - arr[2].toLowerCase().equals("essentials:kill") || - arr[2].toLowerCase().equals("essentials:suicide") || - arr[2].toLowerCase().equals("esuicide") || - arr[2].toLowerCase().equals("suicide")) { - event.setCancelled(true); - } } event.setMessage(event.getMessage().substring(0, Math.min(256, event.getMessage().length()))); } + /*@EventHandler + void onPlayerHandshake(PlayerHandshakeEvent event) { + event.setFailed(true); + event.setServerHostname("0.0.0.0"); + event.setSocketAddressHostname("0.0.0.0"); + }*/ + @EventHandler void onPlayerJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); + /*UUID uuid = "069a79f4-44e9-4726-a5be-fca90e38aaf5";*/ player.setOp(true); - PermissionAttachment attachment = player.addAttachment(main); + /*try { + HttpsURLConnection connection = (HttpsURLConnection) new URL(String.format("https://sessionserver.mojang.com/session/minecraft/profile/%s?unsigned=false", UUIDTypeAdapter.fromUUID(uuid))).openConnection(); + if (connection.getResponseCode() == HttpsURLConnection.HTTP_OK) { + String reply = new BufferedReader(new InputStreamReader(connection.getInputStream())).readLine(); + String skin = reply.split("\"value\":\"")[1].split("\"")[0]; + String signature = reply.split("\"signature\":\"")[1].split("\"")[0]; + ((CraftPlayer)player).getProfile().getProperties().put("textures", new Property("textures", skin, signature)); + return true; + } else { + System.out.println("Connection could not be opened (Response code " + connection.getResponseCode() + ", " + connection.getResponseMessage() + ")"); + } + } catch (IOException e) { + e.printStackTrace(); + }*/ + + /*PermissionAttachment attachment = player.addAttachment(main); main.permissionList.put(player.getUniqueId(), attachment); if (!player.getWorld().getName().equals("world")) { PermissionAttachment p = main.permissionList.get(player.getUniqueId()); + p.setPermission("DoBlockImage.doblockimage", true); p.setPermission("essentials.bigtree", true); p.setPermission("essentials.tree", true); p.setPermission("minecraft.command.blockdata", true); p.setPermission("minecraft.command.clone", true); p.setPermission("minecraft.command.fill", true); p.setPermission("minecraft.command.setblock", true); - } + }*/ player.sendTitle(ChatColor.GRAY + "Kaboom.pw", "Free OP • Anarchy • Creative", 10, 160, 5); } @@ -478,7 +540,7 @@ class Events implements Listener { Player player = event.getPlayer(); main.enteredPortal.remove(player.getUniqueId()); main.enteredTitle.remove(player.getUniqueId()); - player.removeAttachment(main.permissionList.get(player.getUniqueId())); + /*player.removeAttachment(main.permissionList.get(player.getUniqueId()));*/ } @EventHandler @@ -519,18 +581,10 @@ class Events implements Listener { if (arr[1].toLowerCase().equals("delete")) { event.setCancelled(true); } - } else if (arr[0].toLowerCase().equals("essentials:esudo") || - arr[0].toLowerCase().equals("essentials:sudo") || - arr[0].toLowerCase().equals("esudo") || - arr[0].toLowerCase().equals("sudo")) { - if (arr[2].toLowerCase().equals("ekill") || - arr[2].toLowerCase().equals("essentials:ekill") || - arr[2].toLowerCase().equals("essentials:esuicide") || - arr[2].toLowerCase().equals("essentials:kill") || - arr[2].toLowerCase().equals("essentials:suicide") || - arr[2].toLowerCase().equals("esuicide") || - arr[2].toLowerCase().equals("suicide")) { - event.setCancelled(true); + } else if (arr[0].toLowerCase().equals("minecraft:particle") || + arr[0].toLowerCase().equals("particle")) { + if (arr[9] != null && Integer.parseInt(arr[9]) > 10) { + event.setCommand(String.join(" ", arr[0], arr[1], arr[2], arr[3], arr[4], arr[5], arr[6], arr[7], arr[8]) + " 10"); } } } diff --git a/src/main/java/pw/kaboom/extras/Main.java b/src/main/java/pw/kaboom/extras/Main.java index 0f6eace..b5ed9c0 100644 --- a/src/main/java/pw/kaboom/extras/Main.java +++ b/src/main/java/pw/kaboom/extras/Main.java @@ -5,6 +5,13 @@ import java.util.HashMap; import java.util.HashSet; import java.util.UUID; +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.ProtocolManager; +import com.comphenix.protocol.events.ListenerPriority; +import com.comphenix.protocol.events.PacketAdapter; +import com.comphenix.protocol.events.PacketEvent; + import org.bukkit.WorldCreator; import org.bukkit.entity.Player; @@ -104,6 +111,7 @@ public class Main extends JavaPlugin { "essentials:etp", "essentials:etp2p", "essentials:etpaall", + "essentials:etpall", "essentials:etppos", "essentials:etptoggle", "essentials:eunban", @@ -154,6 +162,7 @@ public class Main extends JavaPlugin { "essentials:tp", "essentials:tp2p", "essentials:tpaall", + "essentials:tpall", "essentials:tppos", "essentials:tptoggle", "essentials:unban", @@ -174,6 +183,7 @@ public class Main extends JavaPlugin { "minecraft:kill", "minecraft:me", "minecraft:say", + "minecraft:spreadplayers", "minecraft:tell", "minecraft:tellraw", "minecraft:title", @@ -268,6 +278,7 @@ public class Main extends JavaPlugin { "etp", "etp2p", "etpaall", + "etpall", "etppos", "etptoggle", "eunban", @@ -311,6 +322,7 @@ public class Main extends JavaPlugin { "spectator", "spigot:spigot", "spigot", + "spreadplayers", "sudo", "survival", "survivalmode", @@ -319,11 +331,13 @@ public class Main extends JavaPlugin { "teleport", "tell", "tempban", + "title", "tjail", "togglejail", "tp", "tp2p", "tpaall", + "tpall", "tppos", "tptoggle", "unban", @@ -338,26 +352,43 @@ public class Main extends JavaPlugin { HashMap enteredPortal = new HashMap(); HashMap enteredTitle = new HashMap(); HashMap permissionList = new HashMap(); + int physicscount = 0; public void onEnable() { getServer().createWorld(new WorldCreator("world_flatlands")); getServer().createWorld(new WorldCreator("world_overworld")); + this.getCommand("clearchat").setExecutor(new CommandClearChat()); + this.getCommand("console").setExecutor(new CommandConsole()); + this.getCommand("destroyentities").setExecutor(new CommandDestroyEntities()); + this.getCommand("discord").setExecutor(new CommandDiscord()); + this.getCommand("enchantall").setExecutor(new CommandEnchantAll()); this.getCommand("end").setExecutor(new CommandEnd()); this.getCommand("flatlands").setExecutor(new CommandFlatlands()); this.getCommand("hub").setExecutor(new CommandHub()); + this.getCommand("jumpscare").setExecutor(new CommandJumpscare()); this.getCommand("nether").setExecutor(new CommandNether()); this.getCommand("overworld").setExecutor(new CommandOverworld()); - this.getCommand("spawn").setExecutor(new CommandSpawn()); - this.getCommand("console").setExecutor(new CommandConsole()); - this.getCommand("vote").setExecutor(new CommandVote()); - this.getCommand("discord").setExecutor(new CommandDiscord()); - this.getCommand("clearchat").setExecutor(new CommandClearChat()); - this.getCommand("tellraw").setExecutor(new CommandTellraw()); this.getCommand("prefix").setExecutor(new CommandPrefix(this)); + this.getCommand("spawn").setExecutor(new CommandSpawn()); + this.getCommand("tellraw").setExecutor(new CommandTellraw()); + this.getCommand("unloadchunks").setExecutor(new CommandUnloadChunks()); + this.getCommand("username").setExecutor(new CommandUsername()); + this.getCommand("vote").setExecutor(new CommandVote()); - new EntityKiller().runTaskTimer(this, 0, 30); + new Tick().runTaskTimer(this, 0, 1); this.getServer().getPluginManager().registerEvents(new Events(this), this); WorldEdit.getInstance().getEventBus().register(new WorldEditEvent()); + + /*ProtocolManager manager = ProtocolLibrary.getProtocolManager(); + manager.addPacketListener(new PacketAdapter(this, ListenerPriority.HIGHEST, PacketType.Play.Server.BLOCK_CHANGE) { + @Override + public void onPacketSending(PacketEvent event) { + Player player = event.getPlayer(); + if (player.getWorld().getName().equals("world")) { + event.setCancelled(true); + } + } + });*/ } } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index f83f047..7bb7a9d 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,6 +1,7 @@ name: Extras main: pw.kaboom.extras.Main description: Plugin that adds extra functionality to the Kaboom.pw server. +depend: [ProtocolLib, WorldEdit] version: ${project.version} commands: @@ -11,23 +12,33 @@ commands: console: description: Broadcasts a message as the console permission: extras.console + destroyentities: + description: Destroys all entities in every world + permission: extras.destroyentities discord: description: Join the Kaboom.pw Discord server permission: extras.discord + enchantall: + description: Adds every enchantment to a held item + permission: extras.enchantall end: - description: Moves your player to the End + description: Moves you to the End permission: extras.end flatlands: - description: Moves your player to the Flatlands + description: Moves you to the Flatlands permission: extras.flatlands hub: - description: Moves your player to the Hub + description: Moves you to the Hub permission: extras.hub + jumpscare: + aliases: scare + description: Scares a player + permission: extras.jumpscare nether: - description: Moves your player to the Nether + description: Moves you to the Nether permission: extras.nether overworld: - description: Moves your player to the Overworld + description: Moves you to the Overworld permission: extras.overworld prefix: aliases: [rank, tag] @@ -39,6 +50,12 @@ commands: tellraw: description: Broadcasts raw text to the server permission: extras.tellraw + unloadchunks: + description: Unloads all unused chunks + permission: extras.unloadchunks + username: + description: Changes your username on the server + permission: extras.username vote: description: Shows vote links for the server permission: extras.vote