From f595f67f01c1087b8eb853f9291468869607d19a Mon Sep 17 00:00:00 2001 From: PikaMug <2267126+PikaMug@users.noreply.github.com> Date: Tue, 13 Oct 2020 04:19:18 -0400 Subject: [PATCH] New ride an entity condition, use as default. Fixes #1419 --- .../java/me/blackvein/quests/Quester.java | 14 +- .../main/java/me/blackvein/quests/Quests.java | 16 ++ .../quests/conditions/Condition.java | 29 ++- .../quests/conditions/ConditionFactory.java | 11 ++ .../conditions/main/ConditionMainPrompt.java | 31 +-- .../convo/conditions/tasks/EntityPrompt.java | 185 ++++++++++++++++++ .../convo/conditions/tasks/WorldPrompt.java | 3 +- .../java/me/blackvein/quests/util/CK.java | 1 + main/src/main/resources/conditions.yml | 11 +- main/src/main/resources/strings.yml | 6 + 10 files changed, 275 insertions(+), 32 deletions(-) create mode 100644 main/src/main/java/me/blackvein/quests/convo/conditions/tasks/EntityPrompt.java diff --git a/main/src/main/java/me/blackvein/quests/Quester.java b/main/src/main/java/me/blackvein/quests/Quester.java index 184a42773..affba987c 100644 --- a/main/src/main/java/me/blackvein/quests/Quester.java +++ b/main/src/main/java/me/blackvein/quests/Quester.java @@ -598,22 +598,28 @@ public class Quester { final Condition c = stage.getCondition(); if (c != null) { p.sendMessage(ChatColor.LIGHT_PURPLE + Lang.get("stageEditorConditions") + ":"); - if (!c.getItemsWhileHoldingMainHand().isEmpty()) { + if (!c.getEntitiesWhileRiding().isEmpty()) { + String msg = "- " + Lang.get("conditionEditorRideEntity"); + for (final String e : c.getEntitiesWhileRiding()) { + msg += ChatColor.AQUA + "\n \u2515 " + e; + } + p.sendMessage(ChatColor.YELLOW + msg); + } else if (!c.getItemsWhileHoldingMainHand().isEmpty()) { String msg = "- " + Lang.get("conditionEditorItemsInMainHand"); for (final ItemStack is : c.getItemsWhileHoldingMainHand()) { - msg += ChatColor.AQUA + "\n - " + ItemUtil.getPrettyItemName(is.getType().name()); + msg += ChatColor.AQUA + "\n \u2515 " + ItemUtil.getPrettyItemName(is.getType().name()); } p.sendMessage(ChatColor.YELLOW + msg); } else if (!c.getWorldsWhileStayingWithin().isEmpty()) { String msg = "- " + Lang.get("conditionEditorStayWithinWorld"); for (final String w : c.getWorldsWhileStayingWithin()) { - msg += ChatColor.AQUA + "\n - " + w; + msg += ChatColor.AQUA + "\n \u2515 " + w; } p.sendMessage(ChatColor.YELLOW + msg); } else if (!c.getBiomesWhileStayingWithin().isEmpty()) { String msg = "- " + Lang.get("conditionEditorStayWithinBiome"); for (final String b : c.getBiomesWhileStayingWithin()) { - msg += ChatColor.AQUA + "\n - " + MiscUtil.snakeCaseToUpperCamelCase(b); + msg += ChatColor.AQUA + "\n \u2515 " + MiscUtil.snakeCaseToUpperCamelCase(b); } p.sendMessage(ChatColor.YELLOW + msg); } diff --git a/main/src/main/java/me/blackvein/quests/Quests.java b/main/src/main/java/me/blackvein/quests/Quests.java index 3b8f90f46..648447711 100644 --- a/main/src/main/java/me/blackvein/quests/Quests.java +++ b/main/src/main/java/me/blackvein/quests/Quests.java @@ -3362,6 +3362,22 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener throw new ConditionFormatException("fail-quest is not a true/false value", conditionKey); } } + if (data.contains(conditionKey + "ride-entity")) { + if (ConfigUtil.checkList(data.getList(conditionKey + "ride-entity"), String.class)) { + final LinkedList entities = new LinkedList(); + for (final String s : data.getStringList(conditionKey + "ride-entity")) { + final EntityType e = MiscUtil.getProperMobType(s); + if (e == null) { + throw new ConditionFormatException("ride-entity is not a valid entity type", + conditionKey); + } + entities.add(s); + } + condition.setEntitiesWhileRiding(entities); + } else { + throw new ConditionFormatException("ride-entity is not a list of entity types", conditionKey); + } + } if (data.contains(conditionKey + "hold-main-hand")) { final LinkedList temp = new LinkedList(); @SuppressWarnings("unchecked") diff --git a/main/src/main/java/me/blackvein/quests/conditions/Condition.java b/main/src/main/java/me/blackvein/quests/conditions/Condition.java index 54a8898ae..0d68c77ae 100644 --- a/main/src/main/java/me/blackvein/quests/conditions/Condition.java +++ b/main/src/main/java/me/blackvein/quests/conditions/Condition.java @@ -29,6 +29,7 @@ public class Condition { private final Quests plugin; private String name = ""; private boolean failQuest = false; + private LinkedList entitiesWhileRiding = new LinkedList(); private LinkedList itemsWhileHoldingMainHand = new LinkedList(); private LinkedList worldsWhileStayingWithin = new LinkedList(); private LinkedList biomesWhileStayingWithin = new LinkedList(); @@ -52,6 +53,14 @@ public class Condition { public void setFailQuest(final boolean failQuest) { this.failQuest = failQuest; } + + public LinkedList getEntitiesWhileRiding() { + return entitiesWhileRiding; + } + + public void setEntitiesWhileRiding(final LinkedList entitiesWhileRiding) { + this.entitiesWhileRiding = entitiesWhileRiding; + } public LinkedList getItemsWhileHoldingMainHand() { return itemsWhileHoldingMainHand; @@ -80,29 +89,37 @@ public class Condition { @SuppressWarnings("deprecation") public boolean check(final Quester quester, final Quest quest) { final Player player = quester.getPlayer(); - if (itemsWhileHoldingMainHand.isEmpty() == false) { + if (!entitiesWhileRiding.isEmpty()) { + for (final String e : entitiesWhileRiding) { + if (player.isInsideVehicle() && player.getVehicle().getType().equals(MiscUtil.getProperMobType(e))) { + return true; + } else if (plugin.getSettings().getConsoleLogging() > 2) { + plugin.getLogger().info("DEBUG: Condition entity does not match for= " + e); + } + } + } else if (!itemsWhileHoldingMainHand.isEmpty()) { for (final ItemStack is : itemsWhileHoldingMainHand) { if (ItemUtil.compareItems(player.getItemInHand(), is, true, true) == 0) { return true; - } else { + } else if (plugin.getSettings().getConsoleLogging() > 2) { plugin.getLogger().info("DEBUG: Condition item does not match with code= " + ItemUtil.compareItems(player.getItemInHand(), is, true, true)); } } - } else if (worldsWhileStayingWithin.isEmpty() == false) { + } else if (!worldsWhileStayingWithin.isEmpty()) { for (final String w : worldsWhileStayingWithin) { if (player.getWorld().getName().equalsIgnoreCase(w)) { return true; - } else { + } else if (plugin.getSettings().getConsoleLogging() > 2) { plugin.getLogger().info("DEBUG: Condition world does not match for= " + w); } } - } else if (biomesWhileStayingWithin.isEmpty() == false) { + } else if (!biomesWhileStayingWithin.isEmpty()) { for (final String b : biomesWhileStayingWithin) { if (player.getWorld().getBiome(player.getLocation().getBlockX(), player.getLocation().getBlockZ()) .name().equalsIgnoreCase(MiscUtil.getProperBiome(b).name())) { return true; - } else { + } else if (plugin.getSettings().getConsoleLogging() > 2) { plugin.getLogger().info("DEBUG: Condition biome does not match for= " + MiscUtil.getProperBiome(b)); } } diff --git a/main/src/main/java/me/blackvein/quests/conditions/ConditionFactory.java b/main/src/main/java/me/blackvein/quests/conditions/ConditionFactory.java index 352aee9c2..0107e34b7 100644 --- a/main/src/main/java/me/blackvein/quests/conditions/ConditionFactory.java +++ b/main/src/main/java/me/blackvein/quests/conditions/ConditionFactory.java @@ -79,6 +79,12 @@ public class ConditionFactory implements ConversationAbandonedListener { } else { context.setSessionData(CK.C_FAIL_QUEST, Lang.get("noWord")); } + if (condition.getEntitiesWhileRiding() != null + && condition.getEntitiesWhileRiding().isEmpty() == false) { + final LinkedList entities = new LinkedList(); + entities.addAll(condition.getEntitiesWhileRiding()); + context.setSessionData(CK.C_WHILE_RIDING_ENTITY, entities); + } if (condition.getItemsWhileHoldingMainHand() != null && condition.getItemsWhileHoldingMainHand().isEmpty() == false) { final LinkedList items = new LinkedList(); @@ -103,6 +109,7 @@ public class ConditionFactory implements ConversationAbandonedListener { context.setSessionData(CK.C_OLD_CONDITION, null); context.setSessionData(CK.C_NAME, null); context.setSessionData(CK.C_FAIL_QUEST, null); + context.setSessionData(CK.C_WHILE_RIDING_ENTITY, null); context.setSessionData(CK.C_WHILE_HOLDING_MAIN_HAND, null); context.setSessionData(CK.C_WHILE_WITHIN_WORLD, null); context.setSessionData(CK.C_WHILE_WITHIN_BIOME, null); @@ -186,6 +193,10 @@ public class ConditionFactory implements ConversationAbandonedListener { section.set("fail-quest", true); } } + if (context.getSessionData(CK.C_WHILE_RIDING_ENTITY) != null) { + section.set("ride-entity", + context.getSessionData(CK.C_WHILE_RIDING_ENTITY)); + } if (context.getSessionData(CK.C_WHILE_HOLDING_MAIN_HAND) != null) { section.set("hold-main-hand", context.getSessionData(CK.C_WHILE_HOLDING_MAIN_HAND)); diff --git a/main/src/main/java/me/blackvein/quests/convo/conditions/main/ConditionMainPrompt.java b/main/src/main/java/me/blackvein/quests/convo/conditions/main/ConditionMainPrompt.java index 03e57ad6d..2905b711f 100644 --- a/main/src/main/java/me/blackvein/quests/convo/conditions/main/ConditionMainPrompt.java +++ b/main/src/main/java/me/blackvein/quests/convo/conditions/main/ConditionMainPrompt.java @@ -25,6 +25,7 @@ import me.blackvein.quests.Stage; import me.blackvein.quests.conditions.Condition; import me.blackvein.quests.convo.conditions.ConditionsEditorNumericPrompt; import me.blackvein.quests.convo.conditions.ConditionsEditorStringPrompt; +import me.blackvein.quests.convo.conditions.tasks.EntityPrompt; import me.blackvein.quests.convo.conditions.tasks.PlayerPrompt; import me.blackvein.quests.convo.conditions.tasks.WorldPrompt; import me.blackvein.quests.events.editor.conditions.ConditionsEditorPostOpenNumericPromptEvent; @@ -60,10 +61,11 @@ public class ConditionMainPrompt extends ConditionsEditorNumericPrompt { case 2: case 3: case 4: - return ChatColor.BLUE; case 5: - return ChatColor.GREEN; + return ChatColor.BLUE; case 6: + return ChatColor.GREEN; + case 7: return ChatColor.RED; default: return null; @@ -76,14 +78,16 @@ public class ConditionMainPrompt extends ConditionsEditorNumericPrompt { case 1: return ChatColor.YELLOW + Lang.get("conditionEditorSetName"); case 2: - return ChatColor.GOLD + Lang.get("eventEditorPlayer"); + return ChatColor.GOLD + Lang.get("conditionEditorEntity"); case 3: - return ChatColor.GOLD + Lang.get("conditionEditorWorld"); + return ChatColor.GOLD + Lang.get("eventEditorPlayer"); case 4: - return ChatColor.YELLOW + Lang.get("conditionEditorFailQuest") + ":"; + return ChatColor.GOLD + Lang.get("conditionEditorWorld"); case 5: - return ChatColor.GREEN + Lang.get("save"); + return ChatColor.YELLOW + Lang.get("conditionEditorFailQuest") + ":"; case 6: + return ChatColor.GREEN + Lang.get("save"); + case 7: return ChatColor.RED + Lang.get("exit"); default: return null; @@ -96,14 +100,15 @@ public class ConditionMainPrompt extends ConditionsEditorNumericPrompt { case 1: case 2: case 3: - return ""; case 4: + return ""; + case 5: if (context.getSessionData(CK.C_FAIL_QUEST) == null) { context.setSessionData(CK.C_FAIL_QUEST, Lang.get("noWord")); } return "" + ChatColor.AQUA + context.getSessionData(CK.C_FAIL_QUEST); - case 5: case 6: + case 7: return ""; default: return null; @@ -130,10 +135,12 @@ public class ConditionMainPrompt extends ConditionsEditorNumericPrompt { case 1: return new ConditionNamePrompt(context); case 2: - return new PlayerPrompt(context); + return new EntityPrompt(context); case 3: - return new WorldPrompt(context); + return new PlayerPrompt(context); case 4: + return new WorldPrompt(context); + case 5: final String s = (String) context.getSessionData(CK.C_FAIL_QUEST); if (s.equalsIgnoreCase(Lang.get("yesWord"))) { context.setSessionData(CK.C_FAIL_QUEST, Lang.get("noWord")); @@ -141,13 +148,13 @@ public class ConditionMainPrompt extends ConditionsEditorNumericPrompt { context.setSessionData(CK.C_FAIL_QUEST, Lang.get("yesWord")); } return new ConditionMainPrompt(context); - case 5: + case 6: if (context.getSessionData(CK.C_OLD_CONDITION) != null) { return new ConditionSavePrompt(context, (String) context.getSessionData(CK.C_OLD_CONDITION)); } else { return new ConditionSavePrompt(context, null); } - case 6: + case 7: return new ConditionExitPrompt(context); default: return new ConditionMainPrompt(context); diff --git a/main/src/main/java/me/blackvein/quests/convo/conditions/tasks/EntityPrompt.java b/main/src/main/java/me/blackvein/quests/convo/conditions/tasks/EntityPrompt.java new file mode 100644 index 000000000..fd02d0749 --- /dev/null +++ b/main/src/main/java/me/blackvein/quests/convo/conditions/tasks/EntityPrompt.java @@ -0,0 +1,185 @@ +/******************************************************************************************************* + * Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + * NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *******************************************************************************************************/ + +package me.blackvein.quests.convo.conditions.tasks; + +import java.util.LinkedList; +import java.util.List; + +import org.bukkit.ChatColor; +import org.bukkit.conversations.ConversationContext; +import org.bukkit.conversations.Prompt; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Vehicle; + +import me.blackvein.quests.convo.conditions.main.ConditionMainPrompt; +import me.blackvein.quests.convo.quests.QuestsEditorNumericPrompt; +import me.blackvein.quests.convo.quests.QuestsEditorStringPrompt; +import me.blackvein.quests.events.editor.quests.QuestsEditorPostOpenNumericPromptEvent; +import me.blackvein.quests.events.editor.quests.QuestsEditorPostOpenStringPromptEvent; +import me.blackvein.quests.util.CK; +import me.blackvein.quests.util.Lang; +import me.blackvein.quests.util.MiscUtil; + +public class EntityPrompt extends QuestsEditorNumericPrompt { + + public EntityPrompt(final ConversationContext context) { + super(context); + } + + private final int size = 2; + + @Override + public int getSize() { + return size; + } + + @Override + public String getTitle(final ConversationContext context) { + return Lang.get("conditionEditorEntity"); + } + + @Override + public ChatColor getNumberColor(final ConversationContext context, final int number) { + switch (number) { + case 1: + return ChatColor.BLUE; + case 2: + return ChatColor.GREEN; + default: + return null; + } + } + + @Override + public String getSelectionText(final ConversationContext context, final int number) { + switch(number) { + case 1: + return ChatColor.YELLOW + Lang.get("conditionEditorRideEntity"); + case 2: + return ChatColor.GREEN + Lang.get("done"); + default: + return null; + } + } + + @Override + @SuppressWarnings("unchecked") + public String getAdditionalText(final ConversationContext context, final int number) { + switch(number) { + case 1: + if (context.getSessionData(CK.C_WHILE_RIDING_ENTITY) == null) { + return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")"; + } else { + String text = "\n"; + for (final String s: (List) context.getSessionData(CK.C_WHILE_RIDING_ENTITY)) { + text += ChatColor.GRAY + " - " + ChatColor.BLUE + MiscUtil.getProperMobType(s) + "\n"; + } + return text; + } + case 2: + return ""; + default: + return null; + } + } + + @Override + public String getPromptText(final ConversationContext context) { + final QuestsEditorPostOpenNumericPromptEvent event = new QuestsEditorPostOpenNumericPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + String text = ChatColor.AQUA + "- " + getTitle(context) + " -\n"; + for (int i = 1; i <= size; i++) { + text += getNumberColor(context, i) + "" + ChatColor.BOLD + i + ChatColor.RESET + " - " + + getSelectionText(context, i) + " " + getAdditionalText(context, i) + "\n"; + } + return text; + } + + @Override + protected Prompt acceptValidatedInput(final ConversationContext context, final Number input) { + switch(input.intValue()) { + case 1: + return new EntitiesPrompt(context); + case 2: + try { + return new ConditionMainPrompt(context); + } catch (final Exception e) { + context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("itemCreateCriticalError")); + return Prompt.END_OF_CONVERSATION; + } + default: + return new EntityPrompt(context); + } + } + + public class EntitiesPrompt extends QuestsEditorStringPrompt { + + public EntitiesPrompt(final ConversationContext context) { + super(context); + } + + @Override + public String getTitle(final ConversationContext context) { + return Lang.get("conditionEditorEntitiesTitle"); + } + + @Override + public String getQueryText(final ConversationContext context) { + return Lang.get("conditionEditorEntitiesPrompt"); + } + + @Override + public String getPromptText(final ConversationContext context) { + final QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + String entities = ChatColor.LIGHT_PURPLE + getTitle(context) + "\n"; + final EntityType[] mobArr = EntityType.values(); + for (int i = 0; i < mobArr.length; i++) { + final EntityType type = mobArr[i]; + if (type.getEntityClass() == null || !Vehicle.class.isAssignableFrom(type.getEntityClass())) { + continue; + } + entities += MiscUtil.snakeCaseToUpperCamelCase(mobArr[i].name()) + ", "; + } + entities = entities.substring(0, entities.length() - 2) + "\n"; + return entities + ChatColor.YELLOW + getQueryText(context); + } + + @Override + public Prompt acceptInput(final ConversationContext context, final String input) { + if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false) { + final LinkedList mobTypes = new LinkedList(); + for (final String s : input.split(" ")) { + if (MiscUtil.getProperMobType(s) != null) { + final EntityType type = MiscUtil.getProperMobType(s); + if (type.getEntityClass() != null && Vehicle.class.isAssignableFrom(type.getEntityClass())) { + mobTypes.add(s); + context.setSessionData(CK.C_WHILE_RIDING_ENTITY, mobTypes); + } else { + context.getForWhom().sendRawMessage(ChatColor.LIGHT_PURPLE + s + " " + ChatColor.RED + + Lang.get("stageEditorInvalidMob")); + return new EntitiesPrompt(context); + } + } else { + context.getForWhom().sendRawMessage(ChatColor.LIGHT_PURPLE + s + " " + ChatColor.RED + + Lang.get("stageEditorInvalidMob")); + return new EntitiesPrompt(context); + } + } + } + return new EntityPrompt(context); + } + } +} diff --git a/main/src/main/java/me/blackvein/quests/convo/conditions/tasks/WorldPrompt.java b/main/src/main/java/me/blackvein/quests/convo/conditions/tasks/WorldPrompt.java index 9cbe90a75..0e22171d8 100644 --- a/main/src/main/java/me/blackvein/quests/convo/conditions/tasks/WorldPrompt.java +++ b/main/src/main/java/me/blackvein/quests/convo/conditions/tasks/WorldPrompt.java @@ -229,14 +229,13 @@ public class WorldPrompt extends QuestsEditorNumericPrompt { @Override public Prompt acceptInput(final ConversationContext context, final String input) { - final Player player = (Player) context.getForWhom(); if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false) { final LinkedList biomes = new LinkedList(); for (final String s : input.split(" ")) { if (MiscUtil.getProperBiome(s) != null) { biomes.add(s); } else { - player.sendMessage(ChatColor.LIGHT_PURPLE + s + " " + ChatColor.RED + context.getForWhom().sendRawMessage(ChatColor.LIGHT_PURPLE + s + " " + ChatColor.RED + Lang.get("conditionEditorInvalidBiome")); return new BiomesPrompt(context); } diff --git a/main/src/main/java/me/blackvein/quests/util/CK.java b/main/src/main/java/me/blackvein/quests/util/CK.java index 17b447d8f..a0b6c3fda 100644 --- a/main/src/main/java/me/blackvein/quests/util/CK.java +++ b/main/src/main/java/me/blackvein/quests/util/CK.java @@ -179,6 +179,7 @@ public class CK { public static final String C_OLD_CONDITION = "oldCondition"; public static final String C_NAME = "conName"; public static final String C_FAIL_QUEST = "conFailQuest"; + public static final String C_WHILE_RIDING_ENTITY = "conRidingEntity"; public static final String C_WHILE_HOLDING_MAIN_HAND = "conHoldingMainHand"; public static final String C_WHILE_WITHIN_WORLD = "conWithinWorld"; public static final String C_WHILE_WITHIN_BIOME = "conWithinBiome"; diff --git a/main/src/main/resources/conditions.yml b/main/src/main/resources/conditions.yml index 322d3a558..9c46c9655 100644 --- a/main/src/main/resources/conditions.yml +++ b/main/src/main/resources/conditions.yml @@ -1,10 +1,5 @@ conditions: - HoldMainHand: + RideThePig: fail-quest: true - hold-main-hand: - - ==: org.bukkit.inventory.ItemStack - v: 2230 - type: DIAMOND_SWORD - meta: - ==: ItemMeta - meta-type: UNSPECIFIC \ No newline at end of file + ride-entity: + - Pig \ No newline at end of file diff --git a/main/src/main/resources/strings.yml b/main/src/main/resources/strings.yml index 124d9264d..54aa980f5 100644 --- a/main/src/main/resources/strings.yml +++ b/main/src/main/resources/strings.yml @@ -403,9 +403,15 @@ conditionEditorDeleted: "Condition deleted. Quest and condition data reloaded." conditionEditorModifiedNote: 'Note: You have modified a condition that the following quests use:' conditionEditorForcedToQuit: "If you save the condition, anyone who is actively doing any of these quests will be forced to quit them." conditionEditorSetName: "Set name" +conditionEditorEntity: "Entity" conditionEditorWorld: "World" conditionEditorFailQuest: "Fail the quest" conditionEditorConditionCleared: "Condition cleared." +conditionEditorRideEntity: "Ride entity" +conditionEditorEntitiesTitle: "- Entities -" +conditionEditorEntitiesPrompt: "Enter entity names, , " +conditionEditorStayWithinWorld: "Stay within world" +conditionEditorInvalidWorld: "is not a valid world name!" conditionEditorItemsInMainHand: "Hold in main hand" conditionEditorWorldsTitle: "- Worlds -" conditionEditorWorldsPrompt: "Enter world names, , "