Citizens2/main/src/main/java/net/citizensnpcs/trait/ClickRedirectTrait.java

58 lines
1.6 KiB
Java

package net.citizensnpcs.trait;
import java.util.UUID;
import org.bukkit.event.EventHandler;
import net.citizensnpcs.api.CitizensAPI;
import net.citizensnpcs.api.event.NPCAddTraitEvent;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.api.trait.Trait;
import net.citizensnpcs.api.trait.TraitName;
import net.citizensnpcs.api.trait.trait.PlayerFilter;
import net.citizensnpcs.api.util.DataKey;
/**
* Redirects left and right clicks to another {@link NPC}.
*/
@TraitName("clickredirecttrait")
public class ClickRedirectTrait extends Trait {
private NPC redirectNPC;
public ClickRedirectTrait() {
super("clickredirecttrait");
}
public ClickRedirectTrait(NPC npc) {
this();
redirectNPC = npc;
if (redirectNPC != null && redirectNPC.hasTrait(PlayerFilter.class)) {
redirectNPC.getOrAddTrait(PlayerFilter.class).addChildNPC(npc);
}
}
public NPC getRedirectNPC() {
return redirectNPC;
}
@Override
public void load(DataKey key) {
redirectNPC = CitizensAPI.getNPCRegistry().getByUniqueIdGlobal(UUID.fromString(key.getString("uuid")));
}
@EventHandler
public void onTraitAdd(NPCAddTraitEvent event) {
if (event.getNPC() == redirectNPC && event.getTrait() instanceof PlayerFilter) {
((PlayerFilter) event.getTrait()).addChildNPC(npc);
}
}
@Override
public void save(DataKey key) {
key.removeKey("uuid");
if (redirectNPC == null)
return;
key.setString("uuid", redirectNPC.getUniqueId().toString());
}
}