Skip to content

Commit

Permalink
Only Fire CombatTagEvent once and Add CombatTagByPlayerEvent
Browse files Browse the repository at this point in the history
  • Loading branch information
Techcable committed Jan 5, 2015
1 parent 390d2c2 commit 2d2d0f6
Show file tree
Hide file tree
Showing 10 changed files with 77 additions and 36 deletions.
4 changes: 4 additions & 0 deletions .settings/org.eclipse.m2e.core.prefs
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
activeProfiles=
eclipse.preferences.version=1
resolveWorkspaceProjects=true
version=1
2 changes: 1 addition & 1 deletion src/main/java/techcable/minecraft/combattag/Utils.java
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand All @@ -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);
}


Expand All @@ -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
Expand Down Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
@@ -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());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.*;
Expand All @@ -26,30 +27,34 @@ 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);
}
if (ArrayUtils.contains(getSettings().getDisallowedWorlds(), event.getDefender().getLocation().getWorld())) {
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;
}
Expand Down

0 comments on commit 2d2d0f6

Please sign in to comment.