diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..14b697b --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/src/main/java/techcable/minecraft/combattag/Utils.java b/src/main/java/techcable/minecraft/combattag/Utils.java index bc34035..9caf3ae 100644 --- a/src/main/java/techcable/minecraft/combattag/Utils.java +++ b/src/main/java/techcable/minecraft/combattag/Utils.java @@ -86,7 +86,7 @@ public static LivingEntity getRootDamager(Entity damager) { return null; } } - public static String getName(Entity entity) { + public static String getName(LivingEntity entity) { if (entity instanceof HumanEntity) { return ((HumanEntity)entity).getName(); } else { diff --git a/src/main/java/techcable/minecraft/combattag/entity/CombatTagNPC.java b/src/main/java/techcable/minecraft/combattag/entity/CombatTagNPC.java index 27d3867..3deda58 100644 --- a/src/main/java/techcable/minecraft/combattag/entity/CombatTagNPC.java +++ b/src/main/java/techcable/minecraft/combattag/entity/CombatTagNPC.java @@ -28,15 +28,12 @@ @Getter @RequiredArgsConstructor public class CombatTagNPC { - public CombatTagNPC(UUID npcId) { - this(registry.getByUUID(npcId)); - } + private final UUID npcId; - private final NPC npc; private static final NPCRegistry registry = NPCLib.getNPCRegistry("CombatTagReloaded"); public Player getAsPlayer() { - return (Player) npc.getEntity(); + return (Player) getNpc().getEntity(); } public CombatTagPlayer getPlayer() { @@ -45,12 +42,12 @@ public CombatTagPlayer getPlayer() { public void despawn() { syncInventory(); - if (getNpc().isSpawned()) npc.despawn(); + if (getNpc().isSpawned()) getNpc().despawn(); Utils.debug("Despawned npc for " + getPlayer().getName()); } public void spawn(Location toSpawn) { - if (!getNpc().isSpawned()) npc.spawn(toSpawn); + getNpc().spawn(toSpawn); } @@ -69,6 +66,10 @@ public void scheduleDelayedDespawn(long delay, boolean kill) { task.runTaskLater(Utils.getPlugin(), delay); } + public NPC getNpc() { + return registry.getByUUID(getNpcId()); + } + @RequiredArgsConstructor @AllArgsConstructor @Getter @@ -97,7 +98,6 @@ public CombatTagNPC load(UUID key) { }); public static CombatTagNPC getNPC(UUID player) { - Preconditions.checkState(registry.getByUUID(player) != null, "NPC isn't in registry"); return npcCache.get(player); } public static CombatTagNPC createNPC(UUID player) { diff --git a/src/main/java/techcable/minecraft/combattag/event/CombatTagByPlayerEvent.java b/src/main/java/techcable/minecraft/combattag/event/CombatTagByPlayerEvent.java new file mode 100644 index 0000000..5a3846a --- /dev/null +++ b/src/main/java/techcable/minecraft/combattag/event/CombatTagByPlayerEvent.java @@ -0,0 +1,25 @@ +package techcable.minecraft.combattag.event; + +import org.bukkit.entity.Player; + +import techcable.minecraft.combattag.entity.CombatTagPlayer; + +import lombok.*; + +@Getter +public class CombatTagByPlayerEvent extends CombatTagEvent { + @Setter + private boolean tagAttacker = true; + public CombatTagByPlayerEvent(CombatTagPlayer defender, Player attacker) { + super(defender, attacker); + } + + @Override + public Player getAttacker() { + return (Player) super.getAttacker(); + } + + public CombatTagPlayer getCTAttacker() { + return CombatTagPlayer.getPlayer(getAttacker()); + } +} diff --git a/src/main/java/techcable/minecraft/combattag/event/CombatTagEvent.java b/src/main/java/techcable/minecraft/combattag/event/CombatTagEvent.java index aaa48ef..a7eaa78 100644 --- a/src/main/java/techcable/minecraft/combattag/event/CombatTagEvent.java +++ b/src/main/java/techcable/minecraft/combattag/event/CombatTagEvent.java @@ -17,8 +17,6 @@ public class CombatTagEvent extends Event implements Cancellable { private final LivingEntity attacker; @Setter private boolean tagDefender = true; - @Setter - private boolean tagAttacker = true; @Getter private static final HandlerList handlerList = new HandlerList(); @Setter @@ -27,11 +25,4 @@ public class CombatTagEvent extends Event implements Cancellable { public HandlerList getHandlers() { return getHandlerList(); } - public boolean isAttackerPlayer() { - return attacker instanceof Player; - } - public CombatTagPlayer attackerAsPlayer() { - Player attackPlayer = (Player) attacker; - return CombatTagPlayer.getPlayer(attackPlayer.getUniqueId()); - } } diff --git a/src/main/java/techcable/minecraft/combattag/listeners/CompatibilityListener.java b/src/main/java/techcable/minecraft/combattag/listeners/CompatibilityListener.java index c6f1c6a..e332052 100644 --- a/src/main/java/techcable/minecraft/combattag/listeners/CompatibilityListener.java +++ b/src/main/java/techcable/minecraft/combattag/listeners/CompatibilityListener.java @@ -3,12 +3,16 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import techcable.minecraft.combattag.event.CombatTagByPlayerEvent; import techcable.minecraft.combattag.event.CombatTagEvent; public class CompatibilityListener implements Listener { @EventHandler public void onCombatTag(CombatTagEvent event) { if (!event.getDefender().isAuthenticated()) event.setCancelled(true); - if (event.isAttackerPlayer() && !event.attackerAsPlayer().isAuthenticated()) event.setCancelled(true); + } + @EventHandler + public void onCombatTagByPlayer(CombatTagByPlayerEvent event) { + if (!event.getCTAttacker().isAuthenticated()) event.setCancelled(true); } } diff --git a/src/main/java/techcable/minecraft/combattag/listeners/NPCListener.java b/src/main/java/techcable/minecraft/combattag/listeners/NPCListener.java index 69359d8..4de6149 100644 --- a/src/main/java/techcable/minecraft/combattag/listeners/NPCListener.java +++ b/src/main/java/techcable/minecraft/combattag/listeners/NPCListener.java @@ -18,6 +18,7 @@ public class NPCListener implements Listener { public void onCombatLog(CombatLogEvent event) { CombatTagPlayer player = event.getPlayer(); player.createNPC(); + player.getNpc().spawn(player.getLocation()); player.copyToNPC(); if (getSettings().getNpcDespawnTime() > 0) { player.getNpc().scheduleDelayedDespawn(getSettings().getNpcDespawnTime() * 1000, getSettings().isNpcDieAfterTime()); diff --git a/src/main/java/techcable/minecraft/combattag/listeners/PermissionListener.java b/src/main/java/techcable/minecraft/combattag/listeners/PermissionListener.java index bd9b629..6db6e90 100644 --- a/src/main/java/techcable/minecraft/combattag/listeners/PermissionListener.java +++ b/src/main/java/techcable/minecraft/combattag/listeners/PermissionListener.java @@ -4,6 +4,7 @@ import org.bukkit.event.Listener; import techcable.minecraft.combattag.event.CombatLogEvent; +import techcable.minecraft.combattag.event.CombatTagByPlayerEvent; import techcable.minecraft.combattag.event.CombatTagEvent; public class PermissionListener implements Listener { @@ -20,7 +21,10 @@ public void onCombatTag(CombatTagEvent event) { if (event.getDefender().getPlayer().hasPermission(DONT_COMBAT_TAG_PERM)) { event.setTagDefender(false); } - if (event.isAttackerPlayer() && event.attackerAsPlayer().getPlayer().hasPermission(DONT_COMBAT_TAG_PERM)) { + } + @EventHandler + public void onCombatTagByPlayer(CombatTagByPlayerEvent event) { + if (event.getAttacker().hasPermission(DONT_COMBAT_TAG_PERM)) { event.setTagAttacker(false); } } diff --git a/src/main/java/techcable/minecraft/combattag/listeners/PlayerListener.java b/src/main/java/techcable/minecraft/combattag/listeners/PlayerListener.java index 5ee25fd..e5ca3f4 100644 --- a/src/main/java/techcable/minecraft/combattag/listeners/PlayerListener.java +++ b/src/main/java/techcable/minecraft/combattag/listeners/PlayerListener.java @@ -26,6 +26,7 @@ import techcable.minecraft.combattag.Utils; import techcable.minecraft.combattag.entity.CombatTagPlayer; import techcable.minecraft.combattag.event.CombatLogEvent; +import techcable.minecraft.combattag.event.CombatTagByPlayerEvent; import techcable.minecraft.combattag.event.CombatTagEvent; import techcable.minecraft.techutils.TechUtils; @@ -57,14 +58,20 @@ public void onDamage(EntityDamageByEntityEvent event) { CombatTagPlayer defender = CombatTagPlayer.getPlayer(((Player)event.getEntity()).getUniqueId()); LivingEntity attacker = Utils.getRootDamager(event.getDamager()); if (attacker == null) return; - if (!CombatTagAPI.getPlugin().settings.mobTag() && !(attacker instanceof Player)) return; //Attacker is a player and mob tag is set to false - CombatTagEvent logEvent = new CombatTagEvent(defender, attacker); - Utils.fire(logEvent); - if (!logEvent.isCancelled()) { - if (logEvent.isTagDefender()) defender.tag(); - if (logEvent.isAttackerPlayer() && logEvent.isTagAttacker()) { - logEvent.attackerAsPlayer().tag(); - } + if (attacker instanceof Player) { + CombatTagByPlayerEvent tagEvent = new CombatTagByPlayerEvent(defender, (Player)attacker); + if (tagEvent.getDefender().isTagged() && tagEvent.getCTAttacker().isTagged()) return; + Utils.fire(tagEvent); + if (tagEvent.isCancelled()) return; + if (tagEvent.isTagDefender()) defender.tag(); + if (tagEvent.isTagAttacker()) tagEvent.getCTAttacker().tag(); + } else { + if (!Utils.getPlugin().settings.mobTag()) return; + CombatTagEvent tagEvent = new CombatTagEvent(defender, attacker); + if (defender.isTagged()) return; + Utils.fire(tagEvent); + if (tagEvent.isCancelled()) return; + if (tagEvent.isTagDefender()) defender.tag(); } } @EventHandler(priority=EventPriority.MONITOR) diff --git a/src/main/java/techcable/minecraft/combattag/listeners/SettingListener.java b/src/main/java/techcable/minecraft/combattag/listeners/SettingListener.java index 47b17a6..326d387 100644 --- a/src/main/java/techcable/minecraft/combattag/listeners/SettingListener.java +++ b/src/main/java/techcable/minecraft/combattag/listeners/SettingListener.java @@ -18,6 +18,7 @@ import techcable.minecraft.combattag.Utils; import techcable.minecraft.combattag.entity.CombatTagPlayer; +import techcable.minecraft.combattag.event.CombatTagByPlayerEvent; import techcable.minecraft.combattag.event.CombatTagEvent; import lombok.*; @@ -26,20 +27,20 @@ public class SettingListener implements Listener { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onCombatTagMonitor(CombatTagEvent event) { event.getDefender().getPlayer().sendMessage(getSettings().getTagMessageDamaged().replace("[player]", Utils.getName(event.getAttacker()))); - if (getSettings().isSendMessageWhenTagged() && event.isAttackerPlayer()) { - event.attackerAsPlayer().getPlayer().sendMessage(getSettings().getTagMessageDamager().replace("[player]", event.getDefender().getName())); - } if (getSettings().blockFly() && event.getDefender().getPlayer().isFlying()) { event.getDefender().getPlayer().setFlying(false); } } + public void onCombatTagByPlayerMonitor(CombatTagByPlayerEvent event) { + if (getSettings().isSendMessageWhenTagged()) { + event.getAttacker().sendMessage(getSettings().getTagMessageDamager().replace("[player]", event.getDefender().getName())); + } + } + @EventHandler(ignoreCancelled = true) public void onCombatTag(CombatTagEvent event) { - if (event.isAttackerPlayer() && event.attackerAsPlayer().getPlayer().getGameMode().equals(GameMode.CREATIVE) && getSettings().blockCreativeTagging()) { - event.setCancelled(true); // Block creative tagging - } if (getSettings().onlyDamagerTagged()) { event.setTagDefender(false); } @@ -47,9 +48,13 @@ public void onCombatTag(CombatTagEvent event) { event.setCancelled(true); // Block combat tag in disabled worlds } } - + @EventHandler + public void onCombatTagByPlayer(CombatTagByPlayerEvent event) { + if (getSettings().blockCreativeTagging() && event.getAttacker().getGameMode().equals(GameMode.CREATIVE)) { + event.setCancelled(true); + } + } - public Settings getSettings() { return Utils.getPlugin().settings; }