Don't use the bukkit metadata system which is unreliable for respawning entities

This commit is contained in:
fullwall 2021-04-14 19:59:19 +08:00
parent e63f0ccede
commit 777a62036f
2 changed files with 8 additions and 6 deletions

View File

@ -15,7 +15,6 @@ import org.bukkit.event.block.Action;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.metadata.FixedMetadataValue;
import com.google.common.base.Function;
import com.google.common.collect.Iterables;
@ -40,6 +39,7 @@ import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.api.persistence.PersistenceLoader;
import net.citizensnpcs.api.util.DataKey;
import net.citizensnpcs.api.util.Messaging;
import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.trait.waypoint.WaypointProvider.EnumerableWaypointProvider;
import net.citizensnpcs.util.Messages;
import net.citizensnpcs.util.Util;
@ -107,8 +107,7 @@ public class GuidedWaypointProvider implements EnumerableWaypointProvider {
Entity entity = markers.createMarker(element, element.getLocation().clone().add(0, 1, 0));
if (entity == null)
return;
entity.setMetadata("citizens.waypointhashcode",
new FixedMetadataValue(CitizensAPI.getPlugin(), element.hashCode()));
((NPCHolder) entity).getNPC().data().setPersistent("waypointhashcode", element.hashCode());
}
@Override
@ -172,9 +171,12 @@ public class GuidedWaypointProvider implements EnumerableWaypointProvider {
@EventHandler(ignoreCancelled = true)
public void onPlayerInteractEntity(PlayerInteractEntityEvent event) {
if (!event.getRightClicked().hasMetadata("citizens.waypointhashcode") || Util.isOffHand(event))
NPC clicked = CitizensAPI.getNPCRegistry().getNPC(event.getRightClicked());
if (clicked == null || Util.isOffHand(event))
return;
Integer hashcode = clicked.data().get("waypointhashcode");
if (hashcode == null)
return;
int hashcode = event.getRightClicked().getMetadata("citizens.waypointhashcode").get(0).asInt();
Iterator<Waypoint> itr = Iterables.concat(available, helpers).iterator();
while (itr.hasNext()) {
Waypoint point = itr.next();

View File

@ -326,7 +326,7 @@ citizens.editors.waypoints.wander.editing-regions-stop=Exited the region editor.
citizens.editors.waypoints.wander.worldguard-region-not-found=WorldGuard region not found.
citizens.editors.waypoints.wander.worldguard-region-set=WorldGuard region set to [[{0}]].
citizens.editors.waypoints.wander.range-set=Wander range set to xrange [[{0}]] and yrange [[{1}]].
citizens.editors.waypoints.wander.begin=<b>Entered the wander waypoint editor.<br> Type [[xrange <number>]] or [[yrange <number>]] to modify the random wander range. Type [[regions]] to enter the region editor.<br>Type [[delay <ticks>]] to delay the NPC between wanders. Type [[worldguardregion <regionId>]] to restrict movement to a WorldGuard region.
citizens.editors.waypoints.wander.begin=<b>Entered the wander waypoint editor.<br> Type [[xrange <number>]] or [[yrange <number>]] to modify the random wander range. Type [[regions]] to enter the region editor.<br>Type [[delay <ticks>]] to delay the NPC between wanders. Type [[worldguardregion <regionId>]] to restrict movement to a specific WorldGuard region.
citizens.editors.waypoints.wander.end=Exited the wander waypoint editor.
citizens.editors.waypoints.wander.delay-set=Delay between wanders set to [[{0}]] ticks.
citizens.editors.waypoints.wander.invalid-delay=Invalid delay specified.