Make /npc shop delete (name) output a message, send head yaw packet to just the viewer rather than cached nearby players, bump translations

This commit is contained in:
fullwall 2024-03-16 23:10:12 +08:00
parent a9b85961a9
commit 70ac5c9193
17 changed files with 188 additions and 39 deletions

View File

@ -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());
}

View File

@ -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();

View File

@ -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();
}

View File

@ -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) {

View File

@ -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<Player, String> {
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<Player, String>) 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<String> getCompletions(CommandContext args, CommandSender sender, NPC npc) {
@ -540,5 +648,18 @@ public class HologramTrait extends Trait {
private static List<String> 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("<item:(.*?)([:].*?)?>");
}

View File

@ -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();

View File

@ -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());
}
}

View File

@ -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";

View File

@ -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);
}

View File

@ -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" : "<br> - {0} [{1}s] [cost:{2}] [exp:{3}] [<click:run_command:/npc cmd remove {4}><hover:show_text:Entferne den Befehl><red><u>-</hover></click>]",
"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.",

View File

@ -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.",

View File

@ -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:",

View File

@ -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\\:",

View File

@ -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:",

View File

@ -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:",

View File

@ -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" : "未知的指令。您是不是指:",

View File

@ -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" : "未知命令, 你是否要使用:",