mirror of
https://github.com/CitizensDev/Citizens2.git
synced 2025-02-12 18:31:40 +01:00
Fix bug with ClickRedirectTrait and Holograms
This commit is contained in:
parent
7553d36883
commit
a7d9c06581
@ -375,7 +375,7 @@ public class EventListen implements Listener {
|
||||
Player damager = (Player) damageEvent.getDamager();
|
||||
|
||||
if (npc.hasTrait(ClickRedirectTrait.class)) {
|
||||
npc = npc.getTraitNullable(ClickRedirectTrait.class).getRedirectNPC();
|
||||
npc = npc.getTraitNullable(ClickRedirectTrait.class).getRedirectToNPC();
|
||||
if (npc == null)
|
||||
return;
|
||||
}
|
||||
@ -586,7 +586,7 @@ public class EventListen implements Listener {
|
||||
}
|
||||
ClickRedirectTrait crt = npc.getTraitNullable(ClickRedirectTrait.class);
|
||||
if (crt != null) {
|
||||
npc = crt.getRedirectNPC();
|
||||
npc = crt.getRedirectToNPC();
|
||||
}
|
||||
pf = npc.getTraitNullable(PlayerFilter.class);
|
||||
if (pf != null) {
|
||||
@ -648,7 +648,7 @@ public class EventListen implements Listener {
|
||||
return;
|
||||
|
||||
ClickRedirectTrait crt = npc.getTraitNullable(ClickRedirectTrait.class);
|
||||
if (crt != null && (npc = crt.getRedirectNPC()) == null)
|
||||
if (crt != null && (npc = crt.getRedirectToNPC()) == null)
|
||||
return;
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
@ -32,6 +32,7 @@ public class AdminCommands {
|
||||
Messaging.send(sender, " <yellow>-- <green>Author: fullwall");
|
||||
Messaging.send(sender, " <yellow>-- <green><click:open_url:" + plugin.getDescription().getWebsite()
|
||||
+ "><hover:show_text:Citizens website including wiki><u>Website</hover></click> <click:open_url:https://discord.gg/Q6pZGSR><hover:show_text:Citizens Support Discord><u>Support</hover></click>");
|
||||
|
||||
}
|
||||
|
||||
@Command(
|
||||
|
@ -787,9 +787,9 @@ public class NPCCommands {
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (event.isCancelled()) {
|
||||
event.getNPC().destroy();
|
||||
String reason = "Couldn't create NPC.";
|
||||
String reason = "Couldn't create NPC";
|
||||
if (!event.getCancelReason().isEmpty()) {
|
||||
reason += " Reason: " + event.getCancelReason();
|
||||
reason += ": [[" + event.getCancelReason();
|
||||
}
|
||||
throw new CommandException(reason);
|
||||
}
|
||||
@ -2871,7 +2871,7 @@ public class NPCCommands {
|
||||
if (res != null && registry.isNPC(res.getHitEntity())) {
|
||||
NPC hit = registry.getNPC(res.getHitEntity());
|
||||
if (hit.hasTrait(ClickRedirectTrait.class)) {
|
||||
hit = hit.getTraitNullable(ClickRedirectTrait.class).getRedirectNPC();
|
||||
hit = hit.getTraitNullable(ClickRedirectTrait.class).getRedirectToNPC();
|
||||
}
|
||||
callback.run(hit);
|
||||
return;
|
||||
@ -2883,7 +2883,7 @@ public class NPCCommands {
|
||||
o2.getEntity().getLocation().distanceSquared(location)));
|
||||
for (NPC test : search) {
|
||||
if (test.hasTrait(ClickRedirectTrait.class)) {
|
||||
test = test.getTraitNullable(ClickRedirectTrait.class).getRedirectNPC();
|
||||
test = test.getTraitNullable(ClickRedirectTrait.class).getRedirectToNPC();
|
||||
}
|
||||
callback.run(test);
|
||||
break;
|
||||
|
@ -96,7 +96,7 @@ public class AStarNavigationStrategy extends AbstractPathStrategy {
|
||||
Location loc = npc.getEntity().getLocation();
|
||||
Location dest = Util.getCenterLocation(vector.toLocation(loc.getWorld()).getBlock());
|
||||
/* Proper door movement - gets stuck on corners at times
|
||||
|
||||
|
||||
Block block = loc.getWorld().getBlockAt(vector.getBlockX(), vector.getBlockY(), vector.getBlockZ());
|
||||
if (MinecraftBlockExaminer.isDoor(block.getType())) {
|
||||
Door door = (Door) block.getState().getData();
|
||||
|
@ -17,32 +17,37 @@ import net.citizensnpcs.api.util.DataKey;
|
||||
*/
|
||||
@TraitName("clickredirecttrait")
|
||||
public class ClickRedirectTrait extends Trait {
|
||||
private NPC redirectNPC;
|
||||
private NPC redirectTo;
|
||||
|
||||
public ClickRedirectTrait() {
|
||||
super("clickredirecttrait");
|
||||
}
|
||||
|
||||
public ClickRedirectTrait(NPC npc) {
|
||||
public ClickRedirectTrait(NPC redirectTo) {
|
||||
this();
|
||||
redirectNPC = npc;
|
||||
if (redirectNPC != null && redirectNPC.hasTrait(PlayerFilter.class)) {
|
||||
redirectNPC.getOrAddTrait(PlayerFilter.class).addChildNPC(npc);
|
||||
}
|
||||
this.redirectTo = redirectTo;
|
||||
}
|
||||
|
||||
public NPC getRedirectNPC() {
|
||||
return redirectNPC;
|
||||
public NPC getRedirectToNPC() {
|
||||
return redirectTo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void linkToNPC(NPC npc) {
|
||||
super.linkToNPC(npc);
|
||||
if (redirectTo != null && redirectTo.hasTrait(PlayerFilter.class)) {
|
||||
redirectTo.getOrAddTrait(PlayerFilter.class).addChildNPC(npc);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void load(DataKey key) {
|
||||
redirectNPC = CitizensAPI.getNPCRegistry().getByUniqueIdGlobal(UUID.fromString(key.getString("uuid")));
|
||||
redirectTo = CitizensAPI.getNPCRegistry().getByUniqueIdGlobal(UUID.fromString(key.getString("uuid")));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onTraitAdd(NPCAddTraitEvent event) {
|
||||
if (event.getNPC() == redirectNPC && event.getTrait() instanceof PlayerFilter) {
|
||||
if (event.getNPC() == redirectTo && event.getTrait() instanceof PlayerFilter) {
|
||||
((PlayerFilter) event.getTrait()).addChildNPC(npc);
|
||||
}
|
||||
}
|
||||
@ -50,8 +55,8 @@ public class ClickRedirectTrait extends Trait {
|
||||
@Override
|
||||
public void save(DataKey key) {
|
||||
key.removeKey("uuid");
|
||||
if (redirectNPC == null)
|
||||
if (redirectTo == null)
|
||||
return;
|
||||
key.setString("uuid", redirectNPC.getUniqueId().toString());
|
||||
key.setString("uuid", redirectTo.getUniqueId().toString());
|
||||
}
|
||||
}
|
||||
|
@ -454,7 +454,7 @@ public class HologramTrait extends Trait {
|
||||
private boolean rendered;
|
||||
|
||||
@Override
|
||||
protected NPC createNPC(Entity base, String name, Vector3d offset) {
|
||||
protected NPC createNPC(NPC base, String name, Vector3d offset) {
|
||||
NPC npc = registry().createNPC(EntityType.AREA_EFFECT_CLOUD, name);
|
||||
rendered = false;
|
||||
return npc;
|
||||
@ -476,9 +476,9 @@ public class HologramTrait extends Trait {
|
||||
|
||||
public static class ArmorstandRenderer extends SingleEntityHologramRenderer {
|
||||
@Override
|
||||
protected NPC createNPC(Entity base, String name, Vector3d offset) {
|
||||
protected NPC createNPC(NPC base, String name, Vector3d offset) {
|
||||
NPC npc = registry().createNPC(EntityType.ARMOR_STAND, name);
|
||||
npc.getOrAddTrait(ArmorStandTrait.class).setAsHelperEntityWithName(npc);
|
||||
npc.getOrAddTrait(ArmorStandTrait.class).setAsHelperEntityWithName(base);
|
||||
return npc;
|
||||
}
|
||||
|
||||
@ -491,9 +491,9 @@ public class HologramTrait extends Trait {
|
||||
|
||||
public static class ArmorstandVehicleRenderer extends SingleEntityHologramRenderer {
|
||||
@Override
|
||||
protected NPC createNPC(Entity base, String name, Vector3d offset) {
|
||||
protected NPC createNPC(NPC base, String name, Vector3d offset) {
|
||||
NPC npc = registry().createNPC(EntityType.ARMOR_STAND, name);
|
||||
npc.getOrAddTrait(ArmorStandTrait.class).setAsHelperEntityWithName(npc);
|
||||
npc.getOrAddTrait(ArmorStandTrait.class).setAsHelperEntityWithName(base);
|
||||
return npc;
|
||||
}
|
||||
|
||||
@ -692,7 +692,7 @@ public class HologramTrait extends Trait {
|
||||
private Vector3d lastOffset;
|
||||
|
||||
@Override
|
||||
protected NPC createNPC(Entity base, String name, Vector3d offset) {
|
||||
protected NPC createNPC(NPC base, String name, Vector3d offset) {
|
||||
lastOffset = new Vector3d(offset);
|
||||
return registry().createNPC(EntityType.INTERACTION, name);
|
||||
}
|
||||
@ -715,7 +715,7 @@ public class HologramTrait extends Trait {
|
||||
|
||||
public static class ItemDisplayRenderer extends SingleEntityHologramRenderer {
|
||||
@Override
|
||||
protected NPC createNPC(Entity base, String name, Vector3d offset) {
|
||||
protected NPC createNPC(NPC base, String name, Vector3d offset) {
|
||||
Matcher itemMatcher = ITEM_MATCHER.matcher(name);
|
||||
itemMatcher.find();
|
||||
Material material = SpigotUtil.isUsing1_13API() ? Material.matchMaterial(itemMatcher.group(1), false)
|
||||
@ -758,7 +758,7 @@ public class HologramTrait extends Trait {
|
||||
private NPC itemNPC;
|
||||
|
||||
@Override
|
||||
protected NPC createNPC(Entity base, String name, Vector3d offset) {
|
||||
protected NPC createNPC(NPC base, String name, Vector3d offset) {
|
||||
NPC mount = registry().createNPC(EntityType.ARMOR_STAND, "");
|
||||
mount.getOrAddTrait(ArmorStandTrait.class).setAsPointEntity();
|
||||
Matcher itemMatcher = ITEM_MATCHER.matcher(name);
|
||||
@ -783,7 +783,7 @@ public class HologramTrait extends Trait {
|
||||
itemNPC.setItemProvider(() -> stack.clone());
|
||||
}
|
||||
}
|
||||
itemNPC.spawn(base.getLocation());
|
||||
itemNPC.spawn(base.getStoredLocation());
|
||||
itemNPC.getOrAddTrait(MountTrait.class).setMountedOn(mount.getUniqueId());
|
||||
return mount;
|
||||
}
|
||||
@ -827,7 +827,7 @@ public class HologramTrait extends Trait {
|
||||
protected String text;
|
||||
private int viewRange = -1;
|
||||
|
||||
protected abstract NPC createNPC(Entity base, String text, Vector3d offset);
|
||||
protected abstract NPC createNPC(NPC base, String text, Vector3d offset);
|
||||
|
||||
@Override
|
||||
public void destroy() {
|
||||
@ -878,7 +878,7 @@ public class HologramTrait extends Trait {
|
||||
}
|
||||
|
||||
protected void spawnHologram(NPC npc, Vector3d offset) {
|
||||
hologram = createNPC(npc.getEntity(), Placeholders.replace(text, null, npc), offset);
|
||||
hologram = createNPC(npc, Placeholders.replace(text, null, npc), offset);
|
||||
if (!hologram.hasTrait(ClickRedirectTrait.class)) {
|
||||
hologram.addTrait(new ClickRedirectTrait(npc));
|
||||
}
|
||||
@ -933,7 +933,7 @@ public class HologramTrait extends Trait {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected NPC createNPC(Entity base, String name, Vector3d offset) {
|
||||
protected NPC createNPC(NPC base, String name, Vector3d offset) {
|
||||
NPC hologram = registry().createNPC(EntityType.TEXT_DISPLAY, "");
|
||||
hologram.data().set(NPC.Metadata.NAMEPLATE_VISIBLE, false);
|
||||
hologram.data().set(NPC.Metadata.TEXT_DISPLAY_COMPONENT, Messaging.minecraftComponentFromRawMessage(name));
|
||||
|
@ -124,7 +124,7 @@ public class ScoreboardTrait extends Trait {
|
||||
team.removeEntry(name);
|
||||
}
|
||||
};
|
||||
if (reason == DespawnReason.REMOVAL) {
|
||||
if (reason == DespawnReason.REMOVAL || reason == DespawnReason.RELOAD) {
|
||||
cleanup.run();
|
||||
} else {
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(CitizensAPI.getPlugin(), cleanup,
|
||||
|
Loading…
Reference in New Issue
Block a user