From 70ac5c919393eee75d9ef02f5113d37c5eef5c91 Mon Sep 17 00:00:00 2001 From: fullwall Date: Sat, 16 Mar 2024 23:10:12 +0800 Subject: [PATCH] Make /npc shop delete (name) output a message, send head yaw packet to just the viewer rather than cached nearby players, bump translations --- .../java/net/citizensnpcs/EventListen.java | 11 +- .../citizensnpcs/commands/NPCCommands.java | 3 +- .../net/citizensnpcs/npc/CitizensNPC.java | 10 +- .../net/citizensnpcs/trait/CommandTrait.java | 10 +- .../net/citizensnpcs/trait/HologramTrait.java | 129 +++++++++++++++++- .../net/citizensnpcs/trait/ShopTrait.java | 7 +- .../citizensnpcs/trait/shop/StoredShops.java | 6 +- .../java/net/citizensnpcs/util/Messages.java | 1 + .../main/java/net/citizensnpcs/util/NMS.java | 1 + main/src/main/resources/de.json | 41 ++++++ main/src/main/resources/en.json | 1 + main/src/main/resources/es.json | 1 - main/src/main/resources/fr.json | 2 - main/src/main/resources/nl.json | 1 - main/src/main/resources/pl.json | 1 - main/src/main/resources/zh-tw.json | 1 - main/src/main/resources/zh.json | 1 - 17 files changed, 188 insertions(+), 39 deletions(-) diff --git a/main/src/main/java/net/citizensnpcs/EventListen.java b/main/src/main/java/net/citizensnpcs/EventListen.java index caed3d8dd..53263186b 100644 --- a/main/src/main/java/net/citizensnpcs/EventListen.java +++ b/main/src/main/java/net/citizensnpcs/EventListen.java @@ -67,6 +67,7 @@ import org.bukkit.util.Vector; import com.google.common.base.Joiner; import com.google.common.base.Predicates; import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.google.common.collect.ListMultimap; import com.google.common.collect.Lists; @@ -484,16 +485,12 @@ public class EventListen implements Listener { private void onNPCPlayerLinkToPlayer(NPCLinkToPlayerEvent event) { Entity tracker = event.getNPC().getEntity(); - Bukkit.getScheduler().scheduleSyncDelayedTask(CitizensAPI.getPlugin(), () -> { - if (!tracker.isValid() || !event.getPlayer().isValid()) - return; - - NMS.sendPositionUpdateNearby(tracker, false, null, null, NMS.getHeadYaw(tracker)); - }, Setting.TABLIST_REMOVE_PACKET_DELAY.asTicks() + 1); boolean resetYaw = event.getNPC().data().get(NPC.Metadata.RESET_YAW_ON_SPAWN, Setting.RESET_YAW_ON_SPAWN.asBoolean()); boolean sendTabRemove = NMS.sendTabListAdd(event.getPlayer(), (Player) tracker); if (!sendTabRemove || !event.getNPC().shouldRemoveFromTabList()) { + NMS.sendPositionUpdate(tracker, ImmutableList.of(event.getPlayer()), false, null, null, + NMS.getHeadYaw(tracker)); if (resetYaw) { Bukkit.getScheduler().scheduleSyncDelayedTask(CitizensAPI.getPlugin(), () -> PlayerAnimation.ARM_SWING.play((Player) tracker, event.getPlayer())); @@ -505,6 +502,8 @@ public class EventListen implements Listener { return; NMS.sendTabListRemove(event.getPlayer(), (Player) tracker); + NMS.sendPositionUpdate(tracker, ImmutableList.of(event.getPlayer()), false, null, null, + NMS.getHeadYaw(tracker)); if (resetYaw) { PlayerAnimation.ARM_SWING.play((Player) tracker, event.getPlayer()); } diff --git a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java index c11539f81..338a979ad 100644 --- a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java +++ b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java @@ -2729,11 +2729,10 @@ public class NPCCommands { throw new CommandUsageException(); if (action.equalsIgnoreCase("delete")) { - if (args.argsLength() != 3) - throw new CommandUsageException(); if (!shop.canEdit(npc, sender)) throw new NoPermissionsException(); shops.deleteShop(shop); + Messaging.sendTr(sender, Messages.SHOP_DELETED, shop.getName()); } else if (action.equalsIgnoreCase("edit")) { if (!shop.canEdit(npc, sender)) throw new NoPermissionsException(); diff --git a/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java b/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java index ae13c7289..d90f81e3b 100644 --- a/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java +++ b/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java @@ -268,17 +268,11 @@ public class CitizensNPC extends AbstractNPC { } @Override - public void setName(String name) { - super.setName(name); - + protected void setNameInternal(String name) { + super.setNameInternal(name); if (requiresNameHologram() && !hasTrait(HologramTrait.class)) { addTrait(HologramTrait.class); } - } - - @Override - protected void setNameInternal(String name) { - super.setNameInternal(name); updateCustomName(); } diff --git a/main/src/main/java/net/citizensnpcs/trait/CommandTrait.java b/main/src/main/java/net/citizensnpcs/trait/CommandTrait.java index f5bfe2673..58184c76a 100644 --- a/main/src/main/java/net/citizensnpcs/trait/CommandTrait.java +++ b/main/src/main/java/net/citizensnpcs/trait/CommandTrait.java @@ -263,7 +263,7 @@ public class CommandTrait extends Trait { return; Runnable task = new Runnable() { - Boolean charged = null; + boolean failedCharge; @Override public void run() { @@ -306,7 +306,7 @@ public class CommandTrait extends Trait { } runCommand(player, hand, command); if (executionMode == ExecutionMode.SEQUENTIAL || executionMode == ExecutionMode.CYCLE - || (charged != null && !charged)) + || failedCharge) break; } } @@ -319,17 +319,17 @@ public class CommandTrait extends Trait { playerTracking.put(player.getUniqueId(), info = new PlayerNPCCommand()); } Transaction charge = null; - if (charged == null) { + if (!failedCharge) { charge = chargeCommandCosts(player, hand, command); if (!charge.isPossible()) { - charged = false; + failedCharge = true; return; } } if (info != null && !info.canUse(CommandTrait.this, player, hand, command)) return; - if (charged == null) { + if (!failedCharge) { charge.run(); } if (temporaryPermissions.size() > 0) { diff --git a/main/src/main/java/net/citizensnpcs/trait/HologramTrait.java b/main/src/main/java/net/citizensnpcs/trait/HologramTrait.java index 8fdc87bcb..a0c6bd872 100644 --- a/main/src/main/java/net/citizensnpcs/trait/HologramTrait.java +++ b/main/src/main/java/net/citizensnpcs/trait/HologramTrait.java @@ -20,6 +20,7 @@ import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; +import org.joml.Vector3d; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; @@ -359,8 +360,8 @@ public class HologramTrait extends Trait { continue; if (line.ticks > 0 && --line.ticks == 0) { - line.removeNPC(); - lines.remove(i--); + lines.remove(i--).removeNPC(); + ; continue; } if (updatePosition && !useDisplayEntities) { @@ -387,9 +388,9 @@ public class HologramTrait extends Trait { root.removeKey("lines"); int i = 0; for (HologramLine line : lines) { - if (!line.persist) { + if (!line.persist) continue; - } + root.setString("lines." + i + ".text", line.text); root.setDouble("lines." + i + ".margin.top", line.mt); root.setDouble("lines." + i + ".margin.bottom", line.mb); @@ -465,10 +466,49 @@ public class HologramTrait extends Trait { reloadLineHolograms(); } + public abstract class AbstractRenderer implements HologramRenderer { + protected NPC npc; + + @Override + public void destroy() { + if (npc != null) { + npc.destroy(); + npc = null; + } + } + + @Override + public void render(Entity base, Vector3d offset) { + if (npc == null) + return; + npc.getEntity().teleport(base.getLocation().clone().add(offset.x, offset.y, offset.z), + TeleportCause.PLUGIN); + } + + protected abstract NPC spawnNPC(Entity base, String text, Vector3d offset); + + @Override + public void updateText(Entity base, String text) { + if (npc == null) + return; + NMS.setCustomName(base, text, text); + } + } + + public class ArmorstandRenderer extends AbstractRenderer { + @Override + protected NPC spawnNPC(Entity base, String name, Vector3d offset) { + NPC hologramNPC = registry.createNPC(EntityType.ARMOR_STAND, name); + hologramNPC.getOrAddTrait(ArmorStandTrait.class).setAsHelperEntityWithName(npc); + return hologramNPC; + } + } + private class HologramLine implements Function { NPC hologram; double mb, mt; boolean persist; + HologramRenderer renderer; String text; int ticks; @@ -496,6 +536,7 @@ public class HologramTrait extends Trait { return; hologram.destroy(); + renderer = null; hologram = null; } @@ -503,6 +544,7 @@ public class HologramTrait extends Trait { this.text = text == null ? "" : text; if (hologram != null) { + // renderer.updateText(hologram, text); String name = Placeholders.replace(text, null, npc); hologram.setName(name); if (Placeholders.containsPlaceholders(text)) { @@ -514,6 +556,29 @@ public class HologramTrait extends Trait { } } + private void spawn(NPC npc, String text, Vector3d offset) { + // hologram = renderer.spawn(npc, text, offset); + if (!hologram.hasTrait(ClickRedirectTrait.class)) { + hologram.addTrait(new ClickRedirectTrait(npc)); + } + hologram.data().set(NPC.Metadata.HOLOGRAM_FOR, npc.getUniqueId().toString()); + if (Setting.PACKET_HOLOGRAMS.asBoolean()) { + hologram.addTrait(PacketNPC.class); + } + if (viewRange != -1) { + hologram.data().set(NPC.Metadata.TRACKING_RANGE, viewRange); + } else if (npc.data().has(NPC.Metadata.TRACKING_RANGE)) { + hologram.data().set(NPC.Metadata.TRACKING_RANGE, npc.data().get(NPC.Metadata.TRACKING_RANGE)); + } + hologram.spawn(npc.getEntity().getLocation().add(offset.x, offset.y, offset.z)); + if (customHologramSupplier != null) { + hologram.data().set(NPC.Metadata.HOLOGRAM_LINE_SUPPLIER, + (Function) p -> customHologramSupplier.apply(text, p)); + } else if (Placeholders.containsPlaceholders(text)) { + hologram.data().set(NPC.Metadata.HOLOGRAM_LINE_SUPPLIER, this); + } + } + public void spawnNPC(double height) { String name = Placeholders.replace(text, null, npc); hologram = createHologram(name, height); @@ -526,6 +591,49 @@ public class HologramTrait extends Trait { } } + public static interface HologramRenderer { + void destroy(); + + void render(Entity base, Vector3d offset); + + void updateText(Entity base, String text); + } + + public class InteractionRenderer extends AbstractRenderer { + public void render(Entity base, String name, Vector3d offset) { + if (this.npc.getEntity().getVehicle() == null) { + HologramTrait.this.npc.getEntity().addPassenger(this.npc.getEntity()); + } + } + + @Override + protected NPC spawnNPC(Entity base, String name, Vector3d offset) { + return registry.createNPC(EntityType.INTERACTION, name); + } + } + + public class ItemRenderer extends AbstractRenderer { + @Override + protected NPC spawnNPC(Entity base, String name, Vector3d offset) { + Matcher itemMatcher = ITEM_MATCHER.matcher(name); + Material item = SpigotUtil.isUsing1_13API() ? Material.matchMaterial(itemMatcher.group(1), false) + : Material.matchMaterial(itemMatcher.group(1)); + ItemStack itemStack = new ItemStack(item, 1); + NPC itemNPC = registry.createNPCUsingItem(EntityType.DROPPED_ITEM, "", itemStack); + itemNPC.data().setPersistent(NPC.Metadata.NAMEPLATE_VISIBLE, false); + if (itemMatcher.group(2) != null) { + if (itemMatcher.group(2).charAt(1) == '{') { + Bukkit.getUnsafe().modifyItemStack(itemStack, itemMatcher.group(2).substring(1)); + itemNPC.setItemProvider(() -> itemStack); + } else { + itemNPC.getOrAddTrait(ScoreboardTrait.class) + .setColor(Util.matchEnum(ChatColor.values(), itemMatcher.group(2).substring(1))); + } + } + return itemNPC; + } + } + public static class TabCompletions implements CompletionsProvider { @Override public Collection getCompletions(CommandContext args, CommandSender sender, NPC npc) { @@ -540,5 +648,18 @@ public class HologramTrait extends Trait { private static List LINE_ARGS = ImmutableList.of("set", "remove", "margintop", "marginbottom"); } + public class TextDisplayRenderer extends AbstractRenderer { + public void render(Entity base, String name, Vector3d offset) { + if (this.npc.getEntity().getVehicle() == null) { + HologramTrait.this.npc.getEntity().addPassenger(this.npc.getEntity()); + } + } + + @Override + protected NPC spawnNPC(Entity base, String name, Vector3d offset) { + return registry.createNPC(EntityType.TEXT_DISPLAY, name); + } + } + private static Pattern ITEM_MATCHER = Pattern.compile(""); } diff --git a/main/src/main/java/net/citizensnpcs/trait/ShopTrait.java b/main/src/main/java/net/citizensnpcs/trait/ShopTrait.java index 178ee1704..97410b1bc 100644 --- a/main/src/main/java/net/citizensnpcs/trait/ShopTrait.java +++ b/main/src/main/java/net/citizensnpcs/trait/ShopTrait.java @@ -69,8 +69,8 @@ import net.citizensnpcs.trait.shop.NPCShopAction; import net.citizensnpcs.trait.shop.NPCShopAction.GUI; import net.citizensnpcs.trait.shop.NPCShopAction.Transaction; import net.citizensnpcs.trait.shop.PermissionAction; -import net.citizensnpcs.trait.shop.StoredShops; import net.citizensnpcs.trait.shop.PermissionAction.PermissionActionGUI; +import net.citizensnpcs.trait.shop.StoredShops; import net.citizensnpcs.util.InventoryMultiplexer; import net.citizensnpcs.util.Util; @@ -823,9 +823,8 @@ public class ShopTrait extends Trait { currentPage = newPage; NPCShopPage page = shop.pages.get(currentPage); if (page.title != null && !page.title.isEmpty()) { - Bukkit.getScheduler().runTaskLater(CitizensAPI.getPlugin(), () -> { - ctx.setTitle(Placeholders.replace(page.title, player)); - }, 1); + Bukkit.getScheduler().runTaskLater(CitizensAPI.getPlugin(), + () -> ctx.setTitle(Placeholders.replace(page.title, player)), 1); } for (int i = 0; i < ctx.getInventory().getSize(); i++) { ctx.getSlot(i).clear(); diff --git a/main/src/main/java/net/citizensnpcs/trait/shop/StoredShops.java b/main/src/main/java/net/citizensnpcs/trait/shop/StoredShops.java index d4b0c7476..655add479 100644 --- a/main/src/main/java/net/citizensnpcs/trait/shop/StoredShops.java +++ b/main/src/main/java/net/citizensnpcs/trait/shop/StoredShops.java @@ -26,10 +26,10 @@ public class StoredShops { if (Messaging.isDebugging()) { Messaging.debug("Deleting shop", shop.getName()); } - if (npcShops.values().contains(shop)) { - npcShops.values().remove(shop); + if (npcShops.containsKey(shop.getName())) { + npcShops.remove(shop.getName()); } else { - globalShops.values().remove(shop); + globalShops.remove(shop.getName()); } } diff --git a/main/src/main/java/net/citizensnpcs/util/Messages.java b/main/src/main/java/net/citizensnpcs/util/Messages.java index 256e063b8..5f1943c27 100644 --- a/main/src/main/java/net/citizensnpcs/util/Messages.java +++ b/main/src/main/java/net/citizensnpcs/util/Messages.java @@ -365,6 +365,7 @@ public class Messages { public static final String SHEARED_SET = "citizens.editors.equipment.sheared-set"; public static final String SHEARED_STOPPED = "citizens.editors.equipment.sheared-stopped"; public static final String SHEEP_COLOR_SET = "citizens.commands.npc.sheep.color-set"; + public static final String SHOP_DELETED = "citizens.commands.npc.shop.deleted"; public static final String SHULKER_COLOR_SET = "citizens.commands.npc.shulker.color-set"; public static final String SHULKER_PEEK_SET = "citizens.commands.npc.shulker.peek-set"; public static final String SITTING_SET = "citizens.commands.npc.sitting.set"; diff --git a/main/src/main/java/net/citizensnpcs/util/NMS.java b/main/src/main/java/net/citizensnpcs/util/NMS.java index 01d79a6eb..62754a5af 100644 --- a/main/src/main/java/net/citizensnpcs/util/NMS.java +++ b/main/src/main/java/net/citizensnpcs/util/NMS.java @@ -771,6 +771,7 @@ public class NMS { public static void sendPositionUpdateNearby(Entity from, boolean position, Float bodyYaw, Float pitch, Float headYaw) { + System.out.println(getNearbyPlayers(from)); sendPositionUpdate(from, getNearbyPlayers(from), position, bodyYaw, pitch, headYaw); } diff --git a/main/src/main/resources/de.json b/main/src/main/resources/de.json index 662704759..be1a3d890 100644 --- a/main/src/main/resources/de.json +++ b/main/src/main/resources/de.json @@ -1,6 +1,7 @@ { "citizens.changed-implementation" : "Implementation von Citizens wurde geändert, Plugin wird deaktiviert.", "citizens.commands.citizens.description" : "Zeigt grundlegende Plugin-Informationen", + "citizens.commands.citizens.reload.description" : "Lade Citizens frisch von der Festplatte, ohne vorheriges Speichern", "citizens.commands.citizens.save.description" : "NPCs speichern", "citizens.commands.citizens.save.help" : "Benutze -a um asynchron (zum Haupt-Thread) zu speichern.", "citizens.commands.console-error" : "Bitte melde diesen Fehler: [Siehe Konsole]", @@ -12,6 +13,7 @@ "citizens.commands.invalid.class" : "Ungültige externe Befehlsklasse.", "citizens.commands.invalid-mobtype" : "{0} ist kein gültiger NPC-Typ.", "citizens.commands.invalid-number" : "Das ist keine gültige ID.", + "citizens.commands.npc.activationrange.description" : "Legt die Aktivierungsreichweite fest", "citizens.commands.npc.activationrange.set" : "Aktivierungsreichweite wurde auf [[{0}]] gesetzt.", "citizens.commands.npc.age.cannot-be-aged" : "Dem NPC-Typ {0} kann kein Alter zugewiesen werden.", "citizens.commands.npc.age.description" : "Legt das Alter eines NPCs fest", @@ -23,6 +25,7 @@ "citizens.commands.npc.age.set-baby" : "[[{0}]] ist jetzt ein Baby.", "citizens.commands.npc.age.set-normal" : "[[{0}]] ist nun [[{1}]] Ticks alt.", "citizens.commands.npc.age.unlocked" : "Alter entsperrt.", + "citizens.commands.npc.aggressive.description" : "Legt den Aggresivitätsstatus der Entität fest", "citizens.commands.npc.ai.started" : "Nutzt jetzt Minecraft KI.", "citizens.commands.npc.ai.stopped" : "Nutzt nicht länger Minecraft KI.", "citizens.commands.npc.allay.dancing-set" : "[[{0}]] tanzt jetzt.", @@ -32,6 +35,7 @@ "citizens.commands.npc.anchor.invalid-name" : "ungültiger Ankername.", "citizens.commands.npc.anchor.missing" : "Der Anker {1} existiert nicht.", "citizens.commands.npc.anchor.removed" : "Anker entfernt.", + "citizens.commands.npc.armorstand.description" : "Bearbeite Rüstungsständer Eigenschaften", "citizens.commands.npc.axolotl.invalid-variant" : "Ungültige Variante. Gültige Varianten sind [[{0}]].", "citizens.commands.npc.axolotl.playing-dead" : "[[{0}]] spielt jetzt tod.", "citizens.commands.npc.axolotl.playing-dead-stopped" : "[[{0}]] spielt nicht mehr tod.", @@ -42,6 +46,7 @@ "citizens.commands.npc.bee.invalid-anger" : "Wut sollte über null sein.", "citizens.commands.npc.bee.no-nectar" : "[[{0}]] hat keinen Nektar", "citizens.commands.npc.bee.not-stung" : "[[{0}]] hat nicht mehr gestochen.", + "citizens.commands.npc.bossbar.description" : "Bearbeite Bossleisten Eigenschaften", "citizens.commands.npc.camel.pose-set" : "Pose auf [[{0}]] gesetzt.", "citizens.commands.npc.cat.collar-color-set" : "Halsbandfarbe auf [[{0}]] gesetzt.", "citizens.commands.npc.cat.invalid-collar-color" : "Ungültige Halsbandfarbe angegeben. Gültige Möglichkeiten sind [[{0}]].", @@ -62,22 +67,58 @@ "citizens.commands.npc.command.describe-format" : "
- {0} [{1}s] [cost:{2}] [exp:{3}] [-]", "citizens.commands.npc.command.errors-cleared" : "Fehler gelöscht für [[{0}]].", "citizens.commands.npc.command.experience-cost-set" : "Setze XP-Level-Kosten per Klick auf [[{0}]].", + "citizens.commands.npc.command.hide-error-messages-set" : "Fehlermeldungen werden jetzt ausgeblendet.", + "citizens.commands.npc.command.hide-error-messages-unset" : "Fehlermeldungen werden nicht mehr ausgeblendet.", + "citizens.commands.npc.command.invalid-player" : "[[{0}]] konnte nicht als Spieler gefunden werden.", + "citizens.commands.npc.command.left-hand-header" : "Befehle zum Ausführen bei [[left click]]:", + "citizens.commands.npc.command.none-added" : "Keine Befehle wurden hinzugefügt.", + "citizens.commands.npc.command.persist-sequence-set" : "Befehlssequenzen werden jetzt über Serverneustarts hinweg gespeichert.", + "citizens.commands.npc.command.persist-sequence-unset" : "Befehlssequenzen werden bei Serverneustarts nicht mehr gespeichert.", + "citizens.commands.npc.command.right-hand-header" : "Befehle zum Auszuführen bei [[right click]] ", + "citizens.commands.npc.commands.random-set" : "Befehle werden jetzt zufällig ausgeführt.", + "citizens.commands.npc.commands.random-unset" : "Befehle werden nicht mehr zufällig ausgeführt.", + "citizens.commands.npc.command.unknown-id" : "Unbekannte Befehl Id [[{0}]] für diesen NPC.", "citizens.commands.npc.controllable.not-controllable" : "[[{0}]] ist nicht kontrollierbar.", "citizens.commands.npc.controllable.removed" : "[[{0}]] kann nicht länger kontrolliert werden.", "citizens.commands.npc.controllable.set" : "[[{0}]] kann nun kontrolliert werden.", "citizens.commands.npc.copy.copied" : "[[{0}]] wurde kopiert.", "citizens.commands.npc.copy.description" : "Kopiert einen NPC", "citizens.commands.npc.create.description" : "Erstellt einen neuen NPC", + "citizens.commands.npc.create.invalid-location" : "Ort konnte nicht geparst werden oder wurde nicht gefunden.", "citizens.commands.npc.create.invalid-mobtype" : "{0} ist kein gültiger NPC-Typ. Es wird der Standard-Typ verwendet.", "citizens.commands.npc.create.npc-name-too-long" : "Namen von NPCs können nicht länger als 16 Zeichen sein. Der Name wurde gekürzt.", + "citizens.commands.npc.debug.description" : "Zeige Debug Informationen", "citizens.commands.npc.description" : "Zeigt grundlegende NPC-Informationen", "citizens.commands.npc.deselect" : "NPC abgewählt.", "citizens.commands.npc.despawn.despawned" : "Du hast [[{0}]] despawned.", + "citizens.commands.npc.enderman.angry-set" : "[[{0}]] ist jetzt böse. >:(", + "citizens.commands.npc.enderman.angry-unset" : "[[{0}]] ist nicht mehr böse. :D", + "citizens.commands.npc.follow.set" : "[[{0}]] folgt jetzt [[{1}]].", + "citizens.commands.npc.follow.unset" : "[[{0}]] folgt niemandem mehr.", + "citizens.commands.npc.fox.crouching-set" : "[[{0}]] ist nun in der Hocke.", + "citizens.commands.npc.fox.crouching-unset" : "[[{0}]] ist nun nicht mehr in der Hocke.", + "citizens.commands.npc.fox.sitting-set" : "[[{0}]] sitzt nun.", + "citizens.commands.npc.fox.sitting-unset" : "[[{0}]] sitzt nun nicht mehr.", + "citizens.commands.npc.fox.sleeping-set" : "[[{0}]] schläft nun.", + "citizens.commands.npc.fox.sleeping-unset" : "[[{0}]] ist aufgewacht.", + "citizens.commands.npc.frog.invalid-variant" : "Ungültige Froschvariante. Gültige Varianten sind [[{0}]].", + "citizens.commands.npc.gamemode.description" : "Ändert den Spielmodus", + "citizens.commands.npc.glowing.set" : "[[{0}]] leuchtet nun.", + "citizens.commands.npc.glowing.unset" : "[[{0}]] hat sich abgeleuchtet.", + "citizens.commands.npc.goat.description" : "Setzt die Ziegenmodifizierungen", "citizens.commands.npc.gravity.disabled" : "Gravitation [[deaktiviert]].", "citizens.commands.npc.gravity.enabled" : "Gravitation [[aktiviert]].", + "citizens.commands.npc.guardian.elder-set" : "[[{0}]] ist jetzt ein Wächterältester.", + "citizens.commands.npc.guardian.elder-unset" : "[[{0}]] ist nicht mehr ein Wächterältester.", "citizens.commands.npc.hologram.invalid-text-id" : "Ungültige Zeile.", "citizens.commands.npc.hologram.line-height-set" : "Zeilenhöhe beträgt nun [[{0}]].", "citizens.commands.npc.hurt.description" : "Verletzt den NPC", + "citizens.commands.npc.leashable.set" : "[[{0}]] ist nun abseilbar.", + "citizens.commands.npc.leashable.stopped" : "[[{0}]] ist nun nicht mehr abseilbar.", + "citizens.commands.npc.lookclose.headonly-set" : "[[{0}]] wird nun nur den Körper rotieren.", + "citizens.commands.npc.lookclose.headonly-unset" : "[[{0}]] wird nun seinen Körper rotieren lassen.", + "citizens.commands.npc.lookclose.random-set" : "[[{0}]] wird jetzt zufällig durch die Gegend schauen.", + "citizens.commands.npc.lookclose.random-stopped" : "[[{0}]] wird jetzt nicht mehr zufällig durch die Gegend schauen.", "citizens.commands.npc.lookclose.set" : "[[{0}]] wurd sich nun drehen, wenn Spieler in der Nähe sind.", "citizens.commands.npc.lookclose.stopped" : "[[{0}]] wird sich nicht mehr drehen, wenn Spieler in der Nähe sind.", "citizens.commands.npc.mount.failed" : "Kontrolle von [[{0}]] fehlgeschlagen.", diff --git a/main/src/main/resources/en.json b/main/src/main/resources/en.json index 06ece2663..402d25168 100644 --- a/main/src/main/resources/en.json +++ b/main/src/main/resources/en.json @@ -11,6 +11,7 @@ "citizens.commands.errors.unknown-registry" : "Unknown NPC registry [[{0}]].", "citizens.commands.help.command-missing" : "Command /{0} not found.", "citizens.commands.help.header" : "Help", + "citizens.commands.npc.shop.deleted" : "Shop [[{0}]] deleted.", "citizens.commands.id-not-found" : "Couldn''t find any NPC with ID [[{0}]].", "citizens.commands.invalid-mobtype" : "[[{0}]] is not a valid mobtype.", "citizens.commands.invalid-number" : "That is not a valid number.", diff --git a/main/src/main/resources/es.json b/main/src/main/resources/es.json index 0944fcfa4..832083307 100644 --- a/main/src/main/resources/es.json +++ b/main/src/main/resources/es.json @@ -138,7 +138,6 @@ "citizens.commands.traitc.not-configurable" : "Esta plantilla no es configurable.", "citizens.commands.traitc.not-on-npc" : "Los NPC's no pueden tener esta plantilla.", "citizens.commands.trait.failed-to-add" : "<7>No se pueden agregar {0}.", - "citizens.commands.trait.failed-to-change" : "<7>No se pueden cambiar {0}.", "citizens.commands.trait.failed-to-remove" : "<7>No se pueden eliminar {0}.", "citizens.commands.trait.removed" : "Eliminado {0} satisfactoriamente.", "citizens.commands.unknown-command" : "Comando desconocido. Querias decir:", diff --git a/main/src/main/resources/fr.json b/main/src/main/resources/fr.json index 9eeb6ccee..41ca06387 100644 --- a/main/src/main/resources/fr.json +++ b/main/src/main/resources/fr.json @@ -313,7 +313,6 @@ "citizens.commands.npc.tpto.from-not-found" : "Entité source introuvable.", "citizens.commands.npc.tpto.success" : "Téléportation réalisée avec succès.", "citizens.commands.npc.tpto.to-not-found" : "Entité de destination introuvable.", - "citizens.commands.npc.trackingdistance.set" : "Distance de suivi fixée à [[{0}]].", "citizens.commands.npc.tropicalfish.body-color-set" : "Couleur du corps fixée à [[{0}]].", "citizens.commands.npc.tropicalfish.invalid-color" : "Couleur de poisson invalide. Les couleurs valides sont\\: [[{0}]]", "citizens.commands.npc.tropicalfish.invalid-pattern" : "Motif de poisson invalide. Les motifs valides sont\\: [[{0}]]", @@ -355,7 +354,6 @@ "citizens.commands.traitc.not-configurable" : "Cette caractéristique n''est pas paramétrable.", "citizens.commands.traitc.not-on-npc" : "Le PNJ n''a pas cette caractéristique.", "citizens.commands.trait.failed-to-add" : "<7> impossible d''ajouter {0}.", - "citizens.commands.trait.failed-to-change" : "<7>Impossible de changer {0}.", "citizens.commands.trait.failed-to-remove" : "<7>Impossible de supprimer {0}.", "citizens.commands.trait.removed" : "Suppression de {0} avec succès.", "citizens.commands.unknown-command" : "Commande inconnue. Vouliez vous faire\\:", diff --git a/main/src/main/resources/nl.json b/main/src/main/resources/nl.json index 5911c08f6..b519ac65c 100644 --- a/main/src/main/resources/nl.json +++ b/main/src/main/resources/nl.json @@ -78,7 +78,6 @@ "citizens.commands.traitc.not-configurable" : "Dit eigenschap kan niet worden aangepast.", "citizens.commands.traitc.not-on-npc" : "De NPC heeft deze eigenschap niet.", "citizens.commands.trait.failed-to-add" : "<7>Kon {0} niet toevoegen.", - "citizens.commands.trait.failed-to-change" : "<7>Kon {0} niet veranderen.", "citizens.commands.trait.failed-to-remove" : "<7>Kon {0} niet verwijderen.", "citizens.commands.trait.removed" : "{0} verwijderd.", "citizens.commands.unknown-command" : "Onbekend commando, bedoelde je:", diff --git a/main/src/main/resources/pl.json b/main/src/main/resources/pl.json index 70f6a0e3e..c7c2b45d3 100644 --- a/main/src/main/resources/pl.json +++ b/main/src/main/resources/pl.json @@ -253,7 +253,6 @@ "citizens.commands.traitc.not-configurable" : "Nie można konfigurować tej cechy.", "citizens.commands.traitc.not-on-npc" : "NPC nie ma tej cechy.", "citizens.commands.trait.failed-to-add" : "<7>Nie udało się dodać {0}.", - "citizens.commands.trait.failed-to-change" : "<7>Nie udało się zmienić {0}.", "citizens.commands.trait.failed-to-remove" : "<7>Nie udało się usunąć {0}.", "citizens.commands.trait.removed" : "Pomyślnie usunięto {0}.", "citizens.commands.unknown-command" : "Nieznana komenda. Myślałeś może o:", diff --git a/main/src/main/resources/zh-tw.json b/main/src/main/resources/zh-tw.json index 810c2d019..5e6a7493c 100644 --- a/main/src/main/resources/zh-tw.json +++ b/main/src/main/resources/zh-tw.json @@ -255,7 +255,6 @@ "citizens.commands.traitc.not-configurable" : "無法設定該特徵。", "citizens.commands.traitc.not-on-npc" : "NPC 沒有該特徵。", "citizens.commands.trait.failed-to-add" : "<7>無法新增 {0}。", - "citizens.commands.trait.failed-to-change" : "<7>無法變更 {0}。", "citizens.commands.trait.failed-to-remove" : "<7>無法移除 {0}。", "citizens.commands.trait.removed" : "成功移除 {0}。", "citizens.commands.unknown-command" : "未知的指令。您是不是指:", diff --git a/main/src/main/resources/zh.json b/main/src/main/resources/zh.json index 46c9db38c..2a33c575b 100644 --- a/main/src/main/resources/zh.json +++ b/main/src/main/resources/zh.json @@ -217,7 +217,6 @@ "citizens.commands.traitc.not-configurable" : "该特征是不可配置的.", "citizens.commands.traitc.not-on-npc" : "没有这个特征.", "citizens.commands.trait.failed-to-add" : "<7>无法添加 {0}.", - "citizens.commands.trait.failed-to-change" : "<7>无法更改 {0}.", "citizens.commands.trait.failed-to-remove" : "<7>无法删除 {0}.", "citizens.commands.trait.removed" : "已成功删除 {0}.", "citizens.commands.unknown-command" : "未知命令, 你是否要使用:",