Add DisguiseInteractEvent which is fired on self-disguise interaction
This commit is contained in:
		| @@ -0,0 +1,65 @@ | |||||||
|  | package me.libraryaddict.disguise.events; | ||||||
|  |  | ||||||
|  | import me.libraryaddict.disguise.disguisetypes.TargetedDisguise; | ||||||
|  | import org.bukkit.entity.Player; | ||||||
|  | import org.bukkit.event.HandlerList; | ||||||
|  | import org.bukkit.event.player.PlayerEvent; | ||||||
|  | import org.bukkit.inventory.EquipmentSlot; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Created by libraryaddict on 13/11/2018. | ||||||
|  |  * <p> | ||||||
|  |  * Invoked when a player interacts with their own self disguise | ||||||
|  |  */ | ||||||
|  | public class DisguiseInteractEvent extends PlayerEvent { | ||||||
|  |     private static final HandlerList handlers = new HandlerList(); | ||||||
|  |  | ||||||
|  |     public static HandlerList getHandlerList() { | ||||||
|  |         return handlers; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private TargetedDisguise disguise; | ||||||
|  |     private EquipmentSlot hand; | ||||||
|  |     private boolean leftClick; | ||||||
|  |  | ||||||
|  |     public DisguiseInteractEvent(TargetedDisguise disguise, EquipmentSlot hand, boolean leftClick) { | ||||||
|  |         super((Player) disguise.getEntity()); | ||||||
|  |  | ||||||
|  |         this.disguise = disguise; | ||||||
|  |         this.hand = hand; | ||||||
|  |         this.leftClick = leftClick; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @return Disguise interacted with | ||||||
|  |      */ | ||||||
|  |     public TargetedDisguise getDisguise() { | ||||||
|  |         return disguise; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @return Returns the hand used, HAND or OFF_HAND | ||||||
|  |      */ | ||||||
|  |     public EquipmentSlot getHand() { | ||||||
|  |         return hand; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @return If the player left clicked (Attacked) | ||||||
|  |      */ | ||||||
|  |     public boolean isLeftClick() { | ||||||
|  |         return leftClick; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @return If the player right clicked (Interacted) | ||||||
|  |      */ | ||||||
|  |     public boolean isRightClick() { | ||||||
|  |         return !isLeftClick(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public HandlerList getHandlers() { | ||||||
|  |         return handlers; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -3,17 +3,23 @@ package me.libraryaddict.disguise.utilities.packetlisteners; | |||||||
| import com.comphenix.protocol.PacketType; | import com.comphenix.protocol.PacketType; | ||||||
| import com.comphenix.protocol.events.ListenerPriority; | import com.comphenix.protocol.events.ListenerPriority; | ||||||
| import com.comphenix.protocol.events.PacketAdapter; | import com.comphenix.protocol.events.PacketAdapter; | ||||||
|  | import com.comphenix.protocol.events.PacketContainer; | ||||||
| import com.comphenix.protocol.events.PacketEvent; | import com.comphenix.protocol.events.PacketEvent; | ||||||
| import com.comphenix.protocol.reflect.StructureModifier; | import com.comphenix.protocol.reflect.StructureModifier; | ||||||
|  | import com.comphenix.protocol.wrappers.EnumWrappers; | ||||||
| import me.libraryaddict.disguise.DisguiseAPI; | import me.libraryaddict.disguise.DisguiseAPI; | ||||||
| import me.libraryaddict.disguise.DisguiseConfig; | import me.libraryaddict.disguise.DisguiseConfig; | ||||||
| import me.libraryaddict.disguise.LibsDisguises; | import me.libraryaddict.disguise.LibsDisguises; | ||||||
| import me.libraryaddict.disguise.disguisetypes.AnimalColor; | import me.libraryaddict.disguise.disguisetypes.AnimalColor; | ||||||
| import me.libraryaddict.disguise.disguisetypes.Disguise; | import me.libraryaddict.disguise.disguisetypes.Disguise; | ||||||
| import me.libraryaddict.disguise.disguisetypes.DisguiseType; | import me.libraryaddict.disguise.disguisetypes.DisguiseType; | ||||||
|  | import me.libraryaddict.disguise.disguisetypes.TargetedDisguise; | ||||||
| import me.libraryaddict.disguise.disguisetypes.watchers.SheepWatcher; | import me.libraryaddict.disguise.disguisetypes.watchers.SheepWatcher; | ||||||
| import me.libraryaddict.disguise.disguisetypes.watchers.WolfWatcher; | import me.libraryaddict.disguise.disguisetypes.watchers.WolfWatcher; | ||||||
|  | import me.libraryaddict.disguise.events.DisguiseInteractEvent; | ||||||
|  | import org.bukkit.Bukkit; | ||||||
| import org.bukkit.entity.*; | import org.bukkit.entity.*; | ||||||
|  | import org.bukkit.inventory.EquipmentSlot; | ||||||
| import org.bukkit.inventory.ItemStack; | import org.bukkit.inventory.ItemStack; | ||||||
|  |  | ||||||
| public class PacketListenerClientInteract extends PacketAdapter { | public class PacketListenerClientInteract extends PacketAdapter { | ||||||
| @@ -26,19 +32,45 @@ public class PacketListenerClientInteract extends PacketAdapter { | |||||||
|         if (event.isCancelled()) |         if (event.isCancelled()) | ||||||
|             return; |             return; | ||||||
|  |  | ||||||
|         try { |  | ||||||
|         Player observer = event.getPlayer(); |         Player observer = event.getPlayer(); | ||||||
|  |  | ||||||
|         if (observer.getName().contains("UNKNOWN[")) // If the player is temporary |         if (observer.getName().contains("UNKNOWN[")) // If the player is temporary | ||||||
|             return; |             return; | ||||||
|  |  | ||||||
|             StructureModifier<Entity> entityModifer = event.getPacket().getEntityModifier(observer.getWorld()); |         PacketContainer packet = event.getPacket(); | ||||||
|  |  | ||||||
|  |         StructureModifier<Entity> entityModifer = packet.getEntityModifier(observer.getWorld()); | ||||||
|  |  | ||||||
|         Entity entity = entityModifer.read(0); |         Entity entity = entityModifer.read(0); | ||||||
|  |  | ||||||
|         if (entity instanceof ExperienceOrb || entity instanceof Item || entity instanceof Arrow || |         if (entity instanceof ExperienceOrb || entity instanceof Item || entity instanceof Arrow || | ||||||
|                 entity == observer) { |                 entity == observer) { | ||||||
|             event.setCancelled(true); |             event.setCancelled(true); | ||||||
|  |         } else if (packet.getIntegers().read(0) == DisguiseAPI.getSelfDisguiseId()) { | ||||||
|  |             // If it's a self-interact | ||||||
|  |             event.setCancelled(true); | ||||||
|  |  | ||||||
|  |             Disguise disguise = DisguiseAPI.getDisguise(observer, observer); | ||||||
|  |  | ||||||
|  |             if (disguise != null) { | ||||||
|  |                 // The type of interact, we don't care the difference with "Interact_At" however as it's not useful | ||||||
|  |                 // for self disguises | ||||||
|  |                 EnumWrappers.EntityUseAction interactType = packet.getEntityUseActions().read(0); | ||||||
|  |                 EquipmentSlot handUsed = EquipmentSlot.HAND; | ||||||
|  |  | ||||||
|  |                 // Attack has a null hand, which throws an error if you attempt to fetch | ||||||
|  |                 if (interactType != EnumWrappers.EntityUseAction.ATTACK) { | ||||||
|  |                     // If the hand used wasn't their main hand | ||||||
|  |                     if (packet.getHands().read(0) == EnumWrappers.Hand.OFF_HAND) { | ||||||
|  |                         handUsed = EquipmentSlot.OFF_HAND; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 DisguiseInteractEvent selfEvent = new DisguiseInteractEvent((TargetedDisguise) disguise, handUsed, | ||||||
|  |                         interactType == EnumWrappers.EntityUseAction.ATTACK); | ||||||
|  |  | ||||||
|  |                 Bukkit.getPluginManager().callEvent(selfEvent); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         for (ItemStack item : new ItemStack[]{observer.getInventory().getItemInMainHand(), |         for (ItemStack item : new ItemStack[]{observer.getInventory().getItemInMainHand(), | ||||||
| @@ -71,8 +103,4 @@ public class PacketListenerClientInteract extends PacketAdapter { | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|         catch (Exception e) { |  | ||||||
|             e.printStackTrace(); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user