From aac8b9d9773a3161a33ec48df42ec0e4207b2a79 Mon Sep 17 00:00:00 2001 From: Lixfel Date: Sun, 6 Sep 2020 12:04:41 +0200 Subject: [PATCH] Adding sound and autobansystem --- .../spectatesystem/PacketProcessor.java | 60 ++++++++++++------- .../listener/ArenaListener.java | 26 ++++++-- .../spectatesystem/util/WorldLoader.java | 3 - 3 files changed, 59 insertions(+), 30 deletions(-) diff --git a/src/de/steamwar/spectatesystem/PacketProcessor.java b/src/de/steamwar/spectatesystem/PacketProcessor.java index 1023b7c..a6dc24a 100644 --- a/src/de/steamwar/spectatesystem/PacketProcessor.java +++ b/src/de/steamwar/spectatesystem/PacketProcessor.java @@ -33,17 +33,19 @@ import net.md_5.bungee.api.chat.TextComponent; import net.minecraft.server.v1_15_R1.Block; import org.bukkit.*; import org.bukkit.craftbukkit.v1_15_R1.block.data.CraftBlockData; +import org.bukkit.entity.Player; import java.io.EOFException; import java.io.IOException; import java.util.HashMap; import java.util.Map; +import java.util.Objects; import java.util.logging.Level; class PacketProcessor { private static final World world = Bukkit.getWorlds().get(0); - private Map packetCounter = new HashMap<>(); + private final Map packetCounter = new HashMap<>(); private final PacketSource source; @@ -84,18 +86,14 @@ class PacketProcessor { int entityId = source.rInt(); boolean sneaking = source.rBoolean(); - Bukkit.getScheduler().runTask(SpectateSystem.get(), () -> { - REntity.getEntity(entityId).sneak(sneaking); - }); + Bukkit.getScheduler().runTask(SpectateSystem.get(), () -> REntity.getEntity(entityId).sneak(sneaking)); } private void entityAnimation() throws IOException { int entityId = source.rInt(); byte animation = source.rByte(); - Bukkit.getScheduler().runTask(SpectateSystem.get(), () -> { - REntity.getEntity(entityId).animation(animation); - }); + Bukkit.getScheduler().runTask(SpectateSystem.get(), () -> REntity.getEntity(entityId).animation(animation)); } private void tntSpawn() throws IOException { @@ -111,9 +109,7 @@ class PacketProcessor { double dY = source.rDouble(); double dZ = source.rDouble(); - Bukkit.getScheduler().runTask(SpectateSystem.get(), () -> { - REntity.getEntity(entityId).setMotion(dX, dY, dZ); - }); + Bukkit.getScheduler().runTask(SpectateSystem.get(), () -> REntity.getEntity(entityId).setMotion(dX, dY, dZ)); } private void playerItem() throws IOException { @@ -154,10 +150,8 @@ class PacketProcessor { if (Config.TechhiderActive && Config.HiddenBlocks.contains(blockState)) { blockState = Config.ObfuscateWith; } - CraftBlockData craftBlockData = CraftBlockData.fromData(Block.REGISTRY_ID.fromId(blockState)); - Bukkit.getScheduler().runTask(SpectateSystem.get(), () -> { - world.getBlockAt(x, y, z).setBlockData(craftBlockData); - }); + CraftBlockData craftBlockData = CraftBlockData.fromData(Objects.requireNonNull(Block.REGISTRY_ID.fromId(blockState))); + Bukkit.getScheduler().runTask(SpectateSystem.get(), () -> world.getBlockAt(x, y, z).setBlockData(craftBlockData)); } private void particle() throws IOException { @@ -167,9 +161,7 @@ class PacketProcessor { String particleName = source.rString(); - Bukkit.getScheduler().runTask(SpectateSystem.get(), () -> { - world.spawnParticle(Particle.valueOf(particleName), x, y, z, 1); - }); + Bukkit.getScheduler().runTask(SpectateSystem.get(), () -> world.spawnParticle(Particle.valueOf(particleName), x, y, z, 1)); } private void sound() throws IOException { @@ -186,11 +178,12 @@ class PacketProcessor { Sound sound = Sound.valueOf(soundName); SoundCategory sCategory = SoundCategory.valueOf(soundCategory); - Bukkit.getScheduler().runTask(SpectateSystem.get(), () -> { - world.playSound(new Location(world, x, y, z), sound, sCategory, volume, pitch); - }); + Bukkit.getScheduler().runTask(SpectateSystem.get(), () -> world.playSound(new Location(world, x, y, z), sound, sCategory, volume, pitch)); } + private static int debug_block_ignored = 0; + private static int debug_block_unneccesary = 0; + private void shortBlock() throws IOException { int x = Byte.toUnsignedInt(source.rByte()) + Config.ArenaMinX; int y = Byte.toUnsignedInt(source.rByte()); @@ -200,10 +193,29 @@ class PacketProcessor { if (Config.TechhiderActive && Config.HiddenBlocks.contains(blockState)) { blockState = Config.ObfuscateWith; + debug_block_ignored++; } - CraftBlockData craftBlockData = CraftBlockData.fromData(Block.REGISTRY_ID.fromId(blockState)); + CraftBlockData craftBlockData = CraftBlockData.fromData(Objects.requireNonNull(Block.REGISTRY_ID.fromId(blockState))); Bukkit.getScheduler().runTask(SpectateSystem.get(), () -> { - world.getBlockAt(x, y, z).setBlockData(craftBlockData); + org.bukkit.block.Block block = world.getBlockAt(x, y, z); + if(block.getBlockData().matches(craftBlockData)) + debug_block_unneccesary++; + block.setBlockData(craftBlockData); + }); + } + + private void soundAtPlayer() throws IOException { + String soundName = source.rString(); + + float volume = source.rFloat(); + float pitch = source.rFloat(); + + Sound sound = Sound.valueOf(soundName); + + Bukkit.getScheduler().runTask(SpectateSystem.get(), () -> { + for(Player player : Bukkit.getOnlinePlayers()){ + player.playSound(player.getLocation(), sound, volume, pitch); + } }); } @@ -283,6 +295,9 @@ class PacketProcessor { case 0x33: shortBlock(); break; + case 0x34: + soundAtPlayer(); + break; case (byte) 0xA0: send(ChatMessageType.CHAT); break; @@ -324,5 +339,6 @@ class PacketProcessor { for(Map.Entry entry : packetCounter.entrySet()){ System.out.println(Integer.toHexString(entry.getKey()) + " " + entry.getValue()); } + System.out.println("Techhiderupdates: " + debug_block_ignored + ", Unneccesary: " + debug_block_unneccesary); } } diff --git a/src/de/steamwar/spectatesystem/listener/ArenaListener.java b/src/de/steamwar/spectatesystem/listener/ArenaListener.java index 695abc8..707994b 100644 --- a/src/de/steamwar/spectatesystem/listener/ArenaListener.java +++ b/src/de/steamwar/spectatesystem/listener/ArenaListener.java @@ -22,10 +22,10 @@ package de.steamwar.spectatesystem.listener; import de.steamwar.spectatesystem.Config; import de.steamwar.spectatesystem.SpectateSystem; import de.steamwar.spectatesystem.util.Region; -import de.steamwar.spectatesystem.util.WorldLoader; import net.md_5.bungee.api.ChatMessageType; import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.TextComponent; +import org.bukkit.BanList; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.craftbukkit.v1_15_R1.CraftChunk; @@ -41,6 +41,8 @@ import org.bukkit.event.world.ChunkLoadEvent; import org.bukkit.event.world.ChunkUnloadEvent; import org.bukkit.event.world.WorldLoadEvent; +import java.util.logging.Level; + public class ArenaListener extends BasicListener { private static final String DENY_ARENA = "§cDu darfst die Arena nicht verlassen"; @@ -51,10 +53,8 @@ public class ArenaListener extends BasicListener { Location to = event.getTo(); assert to != null; - if(!Region.isIn2DRegion(to, Config.ArenaMinX, Config.ArenaMinZ, Config.ArenaMaxX, Config.ArenaMaxZ) || to.getY() <= Config.underArenaBorder) { + if(!Region.isIn2DRegion(to, Config.ArenaMinX, Config.ArenaMinZ, Config.ArenaMaxX, Config.ArenaMaxZ) || to.getY() <= Config.underArenaBorder) reset(event, DENY_ARENA); - return; - } boolean inArenaY = to.getY() + 1.8 <= Config.upperArenaBorder; boolean inBlueArea = inArenaY && Region.isIn2DRange(to, Config.TeamBlueCornerX, Config.TeamBlueCornerZ, Config.SchemsizeX, Config.SchemsizeZ, Config.BorderFromSchematic); @@ -62,6 +62,21 @@ public class ArenaListener extends BasicListener { if(inBlueArea || inRedArea) reset(event, DENY_TEAM); + + if(inBlueArea) + checkInInnerArea(event.getPlayer(), to, Config.TeamBlueCornerX, Config.TeamBlueCornerZ, Config.BorderFromSchematic - 2, Config.upperArenaBorder - 2); + if(inRedArea) + checkInInnerArea(event.getPlayer(), to, Config.TeamRedCornerX, Config.TeamRedCornerZ, Config.BorderFromSchematic - 2, Config.upperArenaBorder - 2); + } + + private void checkInInnerArea(Player player, Location to, int teamCornerX, int teamCornerZ, int reducedBorderFromSchematic, int reducedUpperBorder){ + boolean inArenaY = to.getY() + 1.8 <= reducedUpperBorder; + boolean inArea = inArenaY && Region.isIn2DRange(to, teamCornerX, teamCornerZ, Config.SchemsizeX, Config.SchemsizeZ, reducedBorderFromSchematic); + if(inArea){ + player.kickPlayer(null); + Bukkit.getBanList(BanList.Type.NAME).addBan(player.getUniqueId().toString(), "Versuchte Spionage.", null, null); + Bukkit.getLogger().log(Level.SEVERE, player.getName() + " ist in einen Teambereich eingedrungen."); + } } private void reset(PlayerMoveEvent event, String message){ @@ -74,6 +89,8 @@ public class ArenaListener extends BasicListener { public void onTpGM3(PlayerTeleportEvent e) { if (e.getCause() == PlayerTeleportEvent.TeleportCause.SPECTATE) { e.setCancelled(true); + if(e.getPlayer().getSpectatorTarget() != null) + e.getPlayer().getSpectatorTarget().eject(); e.getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("§cDu darfst diese Teleportfunktion nicht benutzen!")); Bukkit.getScheduler().runTaskLater(SpectateSystem.get(), () -> e.getPlayer().teleport(e.getFrom()), 2); } @@ -105,7 +122,6 @@ public class ArenaListener extends BasicListener { e.setCancelled(true); BaseComponent[] message = TextComponent.fromLegacyText("§7" + e.getPlayer().getName() + "§8» §7" + e.getMessage()); e.getRecipients().forEach(p -> p.spigot().sendMessage(ChatMessageType.CHAT, message)); - WorldLoader.reloadWorld(); } @EventHandler diff --git a/src/de/steamwar/spectatesystem/util/WorldLoader.java b/src/de/steamwar/spectatesystem/util/WorldLoader.java index 2fdbcba..3dbafd4 100644 --- a/src/de/steamwar/spectatesystem/util/WorldLoader.java +++ b/src/de/steamwar/spectatesystem/util/WorldLoader.java @@ -19,12 +19,10 @@ package de.steamwar.spectatesystem.util; -import de.steamwar.spectatesystem.Config; import de.steamwar.spectatesystem.SpectateSystem; import net.minecraft.server.v1_15_R1.PacketPlayOutMapChunk; import org.bukkit.Bukkit; import org.bukkit.Chunk; -import org.bukkit.Material; import org.bukkit.World; import org.bukkit.craftbukkit.v1_15_R1.CraftChunk; import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer; @@ -44,6 +42,5 @@ public class WorldLoader { ((CraftPlayer)player).getHandle().playerConnection.sendPacket(new PacketPlayOutMapChunk(((CraftChunk)chunk).getHandle(), 65535)); } }); - Bukkit.getScheduler().runTaskLater(SpectateSystem.get(), () -> world.getBlockAt(Config.SpecSpawn).setType(Material.STONE), 100); } }