Fix itemframes, add /npc debug command, don't lowercase skin names early in skintrait

This commit is contained in:
fullwall 2022-07-15 10:21:44 +08:00
parent f462fe9218
commit 58b53174c8
12 changed files with 87 additions and 89 deletions

View File

@ -39,6 +39,7 @@ import org.bukkit.entity.Rabbit;
import org.bukkit.entity.Villager.Profession;
import org.bukkit.entity.Zombie;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
import org.bukkit.inventory.ItemStack;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
@ -653,6 +654,33 @@ public class NPCCommands {
Messaging.send(sender, msg + '.');
}
@Command(
aliases = { "npc" },
usage = "debug -p(aths) -n(avigation)",
desc = "Display debugging information",
modifiers = { "debug" },
min = 1,
max = 1,
flags = "pn",
permission = "citizens.npc.debug")
@Requirements(ownership = true, selected = true)
public void debug(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
if (args.hasFlag('p')) {
npc.getNavigator().getDefaultParameters().debug(!npc.getNavigator().getDefaultParameters().debug());
Messaging.send(sender, "Path debugging set to " + npc.getNavigator().getDefaultParameters().debug());
} else if (args.hasFlag('n')) {
String output = "Use new finder " + npc.getNavigator().getDefaultParameters().useNewPathfinder();
output += "Distance margin " + npc.getNavigator().getDefaultParameters().distanceMargin() + "(path margin "
+ npc.getNavigator().getDefaultParameters().pathDistanceMargin() + ")<br>";
output += "Teleport if below " + npc.getNavigator().getDefaultParameters().destinationTeleportMargin()
+ " blocks<br>";
output += "Range " + npc.getNavigator().getDefaultParameters().range() + "<br>";
output += "Stuck action " + npc.getNavigator().getDefaultParameters().stuckAction() + "<br>";
output += "Speed " + npc.getNavigator().getDefaultParameters().speed() + "<br>";
Messaging.send(sender, output);
}
}
@Command(
aliases = { "npc" },
usage = "despawn (id)",
@ -1075,7 +1103,7 @@ public class NPCCommands {
((org.bukkit.entity.Item) npc.getEntity()).getItemStack().setType(mat);
break;
case ITEM_FRAME:
((ItemFrame) npc.getEntity()).getItem().setType(mat);
((ItemFrame) npc.getEntity()).setItem(new ItemStack(mat, 1));
break;
default:
break;

View File

@ -185,7 +185,7 @@ public class CitizensNavigator implements Navigator, Runnable {
}
}
if (localParams.destinationTeleportMargin() > 0
&& npcLoc.distance(targetLoc) < localParams.destinationTeleportMargin()) {
&& npcLoc.distance(targetLoc) <= localParams.destinationTeleportMargin()) {
// TODO: easing?
npc.teleport(targetLoc, TeleportCause.PLUGIN);
finished = true;

View File

@ -72,7 +72,8 @@ public class SkinTrait extends Trait {
* @return The skin name if set, or null (i.e. using the NPC's name)
*/
public String getSkinName() {
return filledPlaceholder != null && skinName != null ? filledPlaceholder : skinName;
return filledPlaceholder != null && skinName != null ? filledPlaceholder
: skinName == null ? skinName : skinName.toLowerCase();
}
/**
@ -170,14 +171,8 @@ public class SkinTrait extends Trait {
}
private void setSkinNameInternal(String name) {
skinName = ChatColor.stripColor(name.toLowerCase());
skinName = ChatColor.stripColor(name);
checkPlaceholder(false);
String filled = ChatColor.stripColor(Placeholders.replace(skinName, null, npc).toLowerCase());
if (!filled.equalsIgnoreCase(skinName)) {
filledPlaceholder = filled;
} else {
filledPlaceholder = null;
}
}
/**

View File

@ -8,6 +8,7 @@ import org.bukkit.craftbukkit.v1_11_R1.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_11_R1.entity.CraftItemFrame;
import org.bukkit.entity.Entity;
import org.bukkit.entity.ItemFrame;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
import net.citizensnpcs.api.event.DespawnReason;
@ -111,16 +112,11 @@ public class ItemFrameController extends MobEntityController {
public ItemFrameNPC(EntityItemFrameNPC entity) {
super((CraftServer) Bukkit.getServer(), entity);
this.npc = entity.npc;
Material id = Material.STONE;
int data = npc.data().get(NPC.ITEM_DATA_METADATA, npc.data().get("falling-block-data", 0));
if (npc.data().has(NPC.ITEM_ID_METADATA)) {
id = Material.getMaterial(npc.data().<String> get(NPC.ITEM_ID_METADATA));
}
if (npc.data().has(NPC.ITEM_AMOUNT_METADATA)) {
getItem().setAmount(npc.data().get(NPC.ITEM_AMOUNT_METADATA));
}
getItem().setType(id);
getItem().setDurability((short) data);
int amount = npc.data().get(NPC.ITEM_AMOUNT_METADATA, 1);
Material material = Material.getMaterial(npc.data().<String> get(NPC.ITEM_ID_METADATA, "STONE"));
Number durability = npc.data().<Number> get(NPC.ITEM_DATA_METADATA,
npc.data().<Number> get("falling-block-data", (short) 0));
setItem(new ItemStack(material, amount, durability.shortValue()));
}
@Override

View File

@ -8,6 +8,7 @@ import org.bukkit.craftbukkit.v1_12_R1.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_12_R1.entity.CraftItemFrame;
import org.bukkit.entity.Entity;
import org.bukkit.entity.ItemFrame;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
import net.citizensnpcs.api.event.DespawnReason;
@ -111,16 +112,11 @@ public class ItemFrameController extends MobEntityController {
public ItemFrameNPC(EntityItemFrameNPC entity) {
super((CraftServer) Bukkit.getServer(), entity);
this.npc = entity.npc;
Material id = Material.STONE;
int data = npc.data().get(NPC.ITEM_DATA_METADATA, npc.data().get("falling-block-data", 0));
if (npc.data().has(NPC.ITEM_ID_METADATA)) {
id = Material.getMaterial(npc.data().<String> get(NPC.ITEM_ID_METADATA));
}
if (npc.data().has(NPC.ITEM_AMOUNT_METADATA)) {
getItem().setAmount(npc.data().get(NPC.ITEM_AMOUNT_METADATA));
}
getItem().setType(id);
getItem().setDurability((short) data);
int amount = npc.data().get(NPC.ITEM_AMOUNT_METADATA, 1);
Material material = Material.getMaterial(npc.data().<String> get(NPC.ITEM_ID_METADATA, "STONE"));
Number durability = npc.data().<Number> get(NPC.ITEM_DATA_METADATA,
npc.data().<Number> get("falling-block-data", (short) 0));
setItem(new ItemStack(material, amount, durability.shortValue()));
}
@Override

View File

@ -8,6 +8,7 @@ import org.bukkit.craftbukkit.v1_13_R2.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_13_R2.entity.CraftItemFrame;
import org.bukkit.entity.Entity;
import org.bukkit.entity.ItemFrame;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
import net.citizensnpcs.api.event.DespawnReason;
@ -111,16 +112,11 @@ public class ItemFrameController extends MobEntityController {
public ItemFrameNPC(EntityItemFrameNPC entity) {
super((CraftServer) Bukkit.getServer(), entity);
this.npc = entity.npc;
Material id = Material.STONE;
int data = npc.data().get(NPC.ITEM_DATA_METADATA, npc.data().get("falling-block-data", 0));
if (npc.data().has(NPC.ITEM_ID_METADATA)) {
id = Material.getMaterial(npc.data().<String> get(NPC.ITEM_ID_METADATA));
}
if (npc.data().has(NPC.ITEM_AMOUNT_METADATA)) {
getItem().setAmount(npc.data().get(NPC.ITEM_AMOUNT_METADATA));
}
getItem().setType(id);
getItem().setDurability((short) data);
int amount = npc.data().get(NPC.ITEM_AMOUNT_METADATA, 1);
Material material = Material.getMaterial(npc.data().<String> get(NPC.ITEM_ID_METADATA, "STONE"), false);
Number durability = npc.data().<Number> get(NPC.ITEM_DATA_METADATA,
npc.data().<Number> get("falling-block-data", (short) 0));
setItem(new ItemStack(material, amount, durability.shortValue()));
}
@Override

View File

@ -8,6 +8,7 @@ import org.bukkit.craftbukkit.v1_14_R1.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_14_R1.entity.CraftItemFrame;
import org.bukkit.entity.Entity;
import org.bukkit.entity.ItemFrame;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
import net.citizensnpcs.api.event.DespawnReason;
@ -113,16 +114,11 @@ public class ItemFrameController extends MobEntityController {
public ItemFrameNPC(EntityItemFrameNPC entity) {
super((CraftServer) Bukkit.getServer(), entity);
this.npc = entity.npc;
Material id = Material.STONE;
int data = npc.data().get(NPC.ITEM_DATA_METADATA, npc.data().get("falling-block-data", 0));
if (npc.data().has(NPC.ITEM_ID_METADATA)) {
id = Material.getMaterial(npc.data().<String> get(NPC.ITEM_ID_METADATA));
}
if (npc.data().has(NPC.ITEM_AMOUNT_METADATA)) {
getItem().setAmount(npc.data().get(NPC.ITEM_AMOUNT_METADATA));
}
getItem().setType(id);
getItem().setDurability((short) data);
int amount = npc.data().get(NPC.ITEM_AMOUNT_METADATA, 1);
Material material = Material.getMaterial(npc.data().<String> get(NPC.ITEM_ID_METADATA, "STONE"), false);
Number durability = npc.data().<Number> get(NPC.ITEM_DATA_METADATA,
npc.data().<Number> get("falling-block-data", (short) 0));
setItem(new ItemStack(material, amount, durability.shortValue()));
}
@Override

View File

@ -8,6 +8,7 @@ import org.bukkit.craftbukkit.v1_15_R1.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_15_R1.entity.CraftItemFrame;
import org.bukkit.entity.Entity;
import org.bukkit.entity.ItemFrame;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
import net.citizensnpcs.api.event.DespawnReason;
@ -113,16 +114,11 @@ public class ItemFrameController extends MobEntityController {
public ItemFrameNPC(EntityItemFrameNPC entity) {
super((CraftServer) Bukkit.getServer(), entity);
this.npc = entity.npc;
Material id = Material.STONE;
int data = npc.data().get(NPC.ITEM_DATA_METADATA, npc.data().get("falling-block-data", 0));
if (npc.data().has(NPC.ITEM_ID_METADATA)) {
id = Material.getMaterial(npc.data().<String> get(NPC.ITEM_ID_METADATA));
}
if (npc.data().has(NPC.ITEM_AMOUNT_METADATA)) {
getItem().setAmount(npc.data().get(NPC.ITEM_AMOUNT_METADATA));
}
getItem().setType(id);
getItem().setDurability((short) data);
int amount = npc.data().get(NPC.ITEM_AMOUNT_METADATA, 1);
Material material = Material.getMaterial(npc.data().<String> get(NPC.ITEM_ID_METADATA, "STONE"), false);
Number durability = npc.data().<Number> get(NPC.ITEM_DATA_METADATA,
npc.data().<Number> get("falling-block-data", (short) 0));
setItem(new ItemStack(material, amount, durability.shortValue()));
}
@Override

View File

@ -8,6 +8,7 @@ import org.bukkit.craftbukkit.v1_16_R3.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_16_R3.entity.CraftItemFrame;
import org.bukkit.entity.Entity;
import org.bukkit.entity.ItemFrame;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
import net.citizensnpcs.api.event.DespawnReason;
@ -113,16 +114,11 @@ public class ItemFrameController extends MobEntityController {
public ItemFrameNPC(EntityItemFrameNPC entity) {
super((CraftServer) Bukkit.getServer(), entity);
this.npc = entity.npc;
Material id = Material.STONE;
int data = npc.data().get(NPC.ITEM_DATA_METADATA, npc.data().get("falling-block-data", 0));
if (npc.data().has(NPC.ITEM_ID_METADATA)) {
id = Material.getMaterial(npc.data().<String> get(NPC.ITEM_ID_METADATA));
}
if (npc.data().has(NPC.ITEM_AMOUNT_METADATA)) {
getItem().setAmount(npc.data().get(NPC.ITEM_AMOUNT_METADATA));
}
getItem().setType(id);
getItem().setDurability((short) data);
int amount = npc.data().get(NPC.ITEM_AMOUNT_METADATA, 1);
Material material = Material.getMaterial(npc.data().<String> get(NPC.ITEM_ID_METADATA, "STONE"), false);
Number durability = npc.data().<Number> get(NPC.ITEM_DATA_METADATA,
npc.data().<Number> get("falling-block-data", (short) 0));
setItem(new ItemStack(material, amount, durability.shortValue()));
}
@Override

View File

@ -6,6 +6,7 @@ import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_17_R1.CraftServer;
import org.bukkit.craftbukkit.v1_17_R1.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_17_R1.entity.CraftItemFrame;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
import net.citizensnpcs.api.event.DespawnReason;
@ -112,16 +113,11 @@ public class ItemFrameController extends MobEntityController {
public ItemFrameNPC(EntityItemFrameNPC entity) {
super((CraftServer) Bukkit.getServer(), entity);
this.npc = entity.npc;
Material id = Material.STONE;
int data = npc.data().get(NPC.ITEM_DATA_METADATA, npc.data().get("falling-block-data", 0));
if (npc.data().has(NPC.ITEM_ID_METADATA)) {
id = Material.getMaterial(npc.data().<String> get(NPC.ITEM_ID_METADATA));
}
if (npc.data().has(NPC.ITEM_AMOUNT_METADATA)) {
getItem().setAmount(npc.data().get(NPC.ITEM_AMOUNT_METADATA));
}
getItem().setType(id);
getItem().setDurability((short) data);
int amount = npc.data().get(NPC.ITEM_AMOUNT_METADATA, 1);
Material material = Material.getMaterial(npc.data().<String> get(NPC.ITEM_ID_METADATA, "STONE"), false);
Number durability = npc.data().<Number> get(NPC.ITEM_DATA_METADATA,
npc.data().<Number> get("falling-block-data", (short) 0));
setItem(new ItemStack(material, amount, durability.shortValue()));
}
@Override

View File

@ -6,6 +6,7 @@ import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_18_R2.CraftServer;
import org.bukkit.craftbukkit.v1_18_R2.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_18_R2.entity.CraftItemFrame;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
import net.citizensnpcs.api.event.DespawnReason;
@ -123,9 +124,11 @@ public class ItemFrameController extends MobEntityController {
if (npc.data().has(NPC.ITEM_AMOUNT_METADATA)) {
getItem().setAmount(npc.data().get(NPC.ITEM_AMOUNT_METADATA));
}
getItem().setType(Material.getMaterial(npc.data().<String> get(NPC.ITEM_ID_METADATA, "STONE"), false));
getItem().setDurability(npc.data().<Short> get(NPC.ITEM_DATA_METADATA,
npc.data().<Short> get("falling-block-data", (short) 0)));
int amount = npc.data().get(NPC.ITEM_AMOUNT_METADATA, 1);
Material material = Material.getMaterial(npc.data().<String> get(NPC.ITEM_ID_METADATA, "STONE"), false);
Number durability = npc.data().<Number> get(NPC.ITEM_DATA_METADATA,
npc.data().<Number> get("falling-block-data", (short) 0));
setItem(new ItemStack(material, amount, durability.shortValue()));
}
@Override

View File

@ -6,6 +6,7 @@ import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_19_R1.CraftServer;
import org.bukkit.craftbukkit.v1_19_R1.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_19_R1.entity.CraftItemFrame;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
import net.citizensnpcs.api.event.DespawnReason;
@ -121,12 +122,11 @@ public class ItemFrameController extends MobEntityController {
public ItemFrameNPC(EntityItemFrameNPC entity) {
super((CraftServer) Bukkit.getServer(), entity);
this.npc = entity.npc;
if (npc.data().has(NPC.ITEM_AMOUNT_METADATA)) {
getItem().setAmount(npc.data().get(NPC.ITEM_AMOUNT_METADATA));
}
getItem().setType(Material.getMaterial(npc.data().<String> get(NPC.ITEM_ID_METADATA, "STONE"), false));
getItem().setDurability(npc.data().<Short> get(NPC.ITEM_DATA_METADATA,
npc.data().<Short> get("falling-block-data", (short) 0)));
int amount = npc.data().get(NPC.ITEM_AMOUNT_METADATA, 1);
Material material = Material.getMaterial(npc.data().<String> get(NPC.ITEM_ID_METADATA, "STONE"), false);
Number durability = npc.data().<Number> get(NPC.ITEM_DATA_METADATA,
npc.data().<Number> get("falling-block-data", (short) 0));
setItem(new ItemStack(material, amount, durability.shortValue()));
}
@Override