diff --git a/FightSystem_API/src/de/steamwar/fightsystem/Config.java b/FightSystem_API/src/de/steamwar/fightsystem/Config.java index 3a03708..1fcf4e8 100644 --- a/FightSystem_API/src/de/steamwar/fightsystem/Config.java +++ b/FightSystem_API/src/de/steamwar/fightsystem/Config.java @@ -347,7 +347,7 @@ public class Config { EventTeamRedID = 0; BothTeamsPublic = true; MaximumTeamMembers = Integer.MAX_VALUE; - SpectateSystem = true; + SpectateSystem = false; } String blueLeader = System.getProperty("blueLeader", null); @@ -384,6 +384,6 @@ public class Config { return ArenaMode.Test.contains(mode); } public static boolean recording(){ - return true;//mode == ArenaMode.EVENT; + return mode == ArenaMode.EVENT; } } diff --git a/FightSystem_Main/src/de/steamwar/fightsystem/listener/Recording.java b/FightSystem_Main/src/de/steamwar/fightsystem/listener/Recording.java index e483e5b..63e4758 100644 --- a/FightSystem_Main/src/de/steamwar/fightsystem/listener/Recording.java +++ b/FightSystem_Main/src/de/steamwar/fightsystem/listener/Recording.java @@ -19,6 +19,12 @@ package de.steamwar.fightsystem.listener; +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.events.PacketAdapter; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; +import com.comphenix.protocol.wrappers.EnumWrappers; import de.steamwar.fightsystem.Config; import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.fight.Fight; @@ -28,6 +34,7 @@ import de.steamwar.fightsystem.record.RecordSystem; import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.StateDependent; import de.steamwar.fightsystem.states.StateDependentListener; +import net.minecraft.server.v1_15_R1.PacketPlayInBlockDig; import org.bukkit.*; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; @@ -35,6 +42,7 @@ import org.bukkit.entity.TNTPrimed; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockPhysicsEvent; import org.bukkit.event.entity.*; import org.bukkit.event.inventory.InventoryClickEvent; @@ -68,6 +76,35 @@ public class Recording implements Listener { despawnTNT(); } }.register(); + + //Bow Listener + ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(FightSystem.getPlugin(), PacketType.Play.Client.BLOCK_PLACE) { + @Override + public void onPacketReceiving(PacketEvent event) { + PacketContainer packet = event.getPacket(); + EnumWrappers.Hand hand = packet.getHands().read(0); + Player p = event.getPlayer(); + + if(!((hand == EnumWrappers.Hand.MAIN_HAND && p.getInventory().getItemInMainHand().getType() == Material.BOW) || + (hand == EnumWrappers.Hand.OFF_HAND && p.getInventory().getItemInOffHand().getType() == Material.BOW))) + return; + + RecordSystem.bowSpan(p, true, hand == EnumWrappers.Hand.MAIN_HAND?1:0); + ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(FightSystem.getPlugin(), PacketType.Play.Client.BLOCK_DIG) { + @Override + public void onPacketReceiving(PacketEvent e) { + if(e.getPlayer() != event.getPlayer()) + return; + + PacketContainer packetDig = e.getPacket(); + if(packetDig.getPlayerDigTypes().read(0) == EnumWrappers.PlayerDigType.RELEASE_USE_ITEM) { + RecordSystem.bowSpan(e.getPlayer(), false, hand == EnumWrappers.Hand.MAIN_HAND?0:1); + ProtocolLibrary.getProtocolManager().removePacketListener(this); + } + } + }); + } + }); } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @@ -110,6 +147,9 @@ public class Recording implements Listener { @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onEntityDamage(EntityDamageEvent e) { + if(e.getCause() == EntityDamageEvent.DamageCause.FIRE_TICK || e.getCause() == EntityDamageEvent.DamageCause.FIRE ||e.getEntity().getFireTicks() > 0) + RecordSystem.setOnFire(e.getEntity(), false); + if(e.getEntityType() != EntityType.PLAYER) return; @@ -118,9 +158,6 @@ public class Recording implements Listener { return; RecordSystem.damageAnimation(p); - - if(e.getCause() == EntityDamageEvent.DamageCause.FIRE_TICK) - RecordSystem.setOnFire(p); } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) diff --git a/FightSystem_Main/src/de/steamwar/fightsystem/record/RecordSystem.java b/FightSystem_Main/src/de/steamwar/fightsystem/record/RecordSystem.java index 74912ff..526e75d 100644 --- a/FightSystem_Main/src/de/steamwar/fightsystem/record/RecordSystem.java +++ b/FightSystem_Main/src/de/steamwar/fightsystem/record/RecordSystem.java @@ -64,9 +64,9 @@ public class RecordSystem { * PlayerItemPacket (0x07) + int EntityId + String item + boolean enchanted + String slot * ArrowSpawnPacket (0x08) + int EntityId * FireballSpawnPacket (0x09) + int EntityId - * BowSpanPacket (0x0A) + int EntityId + boolean hand + * BowSpanPacket (0x0A) + int EntityId + boolean start + int hand * PlayerDamagePacket (0x0B) + int EntityId - * SetOnFire (0x0C) + int EntityId + * SetOnFire (0x0C) + int EntityId + boolean perma * * * BlockPacket (0x30) + pos int, byte, int + int BlockState @@ -166,6 +166,8 @@ public class RecordSystem { public static synchronized void arrowSpawn(Entity e){ Recorder.rByte(0x08); spawnEntity(e); + if(e.getFireTicks() > 0) + setOnFire(e, true); } public static synchronized void fireballSpawn(Entity e){ @@ -173,9 +175,11 @@ public class RecordSystem { spawnEntity(e); } - public static synchronized void bowSpan(Player p) { + public static synchronized void bowSpan(Entity e, boolean start, int hand) { Recorder.rByte(0x0A); - Recorder.rInt(p.getEntityId()); + Recorder.rInt(e.getEntityId()); + Recorder.rBoolean(start); + Recorder.rInt(hand); Recorder.flush(); } @@ -185,9 +189,10 @@ public class RecordSystem { Recorder.flush(); } - public static synchronized void setOnFire(Player p) { + public static synchronized void setOnFire(Entity e, boolean perma) { Recorder.rByte(0x0C); - Recorder.rInt(p.getEntityId()); + Recorder.rInt(e.getEntityId()); + Recorder.rBoolean(perma); Recorder.flush(); }