mirror of
https://github.com/PikaMug/Quests.git
synced 2024-09-27 14:42:36 +02:00
NEW conditions editor, part 3. Fixes #1007
This commit is contained in:
parent
2962b6ff79
commit
50d3f655dd
@ -591,6 +591,12 @@ public class Quester {
|
||||
msg += ChatColor.AQUA + "\n - " + ItemUtil.getPrettyItemName(is.getType().name());
|
||||
}
|
||||
p.sendMessage(ChatColor.YELLOW + msg);
|
||||
} else if (c.getBiomesWhileStayingWithin() != null) {
|
||||
String msg = "- " + Lang.get("conditionEditorStayingWithinBiome");
|
||||
for (String b : c.getBiomesWhileStayingWithin()) {
|
||||
msg += ChatColor.AQUA + "\n - " + MiscUtil.snakeCaseToUpperCamelCase(b);
|
||||
}
|
||||
p.sendMessage(ChatColor.YELLOW + msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -48,6 +48,7 @@ import org.bukkit.Effect;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.Biome;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.configuration.InvalidConfigurationException;
|
||||
@ -3332,6 +3333,22 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
}
|
||||
condition.setItemsWhileHoldingMainHand(temp);
|
||||
}
|
||||
if (data.contains(conditionKey + "stay-within-biome")) {
|
||||
if (ConfigUtil.checkList(data.getList(conditionKey + "stay-within-biome"), String.class)) {
|
||||
LinkedList<String> biomes = new LinkedList<String>();
|
||||
for (String s : data.getStringList(conditionKey + "stay-within-biome")) {
|
||||
Biome b = MiscUtil.getProperBiome(s);
|
||||
if (b == null) {
|
||||
throw new ConditionFormatException("stay-within-biome is not a valid biome",
|
||||
conditionKey);
|
||||
}
|
||||
biomes.add(s);
|
||||
}
|
||||
condition.setBiomesWhileStayingWithin(biomes);
|
||||
} else {
|
||||
throw new ConditionFormatException("stay-within-biome is not a list of biomes", conditionKey);
|
||||
}
|
||||
}
|
||||
return condition;
|
||||
}
|
||||
|
||||
|
@ -21,13 +21,16 @@ import me.blackvein.quests.Quest;
|
||||
import me.blackvein.quests.Quester;
|
||||
import me.blackvein.quests.Quests;
|
||||
import me.blackvein.quests.util.ItemUtil;
|
||||
import me.blackvein.quests.util.MiscUtil;
|
||||
|
||||
public class Condition {
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private Quests plugin;
|
||||
private String name = "";
|
||||
private boolean failQuest = false;
|
||||
private LinkedList<ItemStack> itemsWhileHoldingMainHand = new LinkedList<ItemStack>();
|
||||
private LinkedList<String> biomesWhileStayingWithin = new LinkedList<String>();
|
||||
|
||||
public Condition(final Quests plugin) {
|
||||
this.plugin = plugin;
|
||||
@ -56,10 +59,18 @@ public class Condition {
|
||||
public void setItemsWhileHoldingMainHand(LinkedList<ItemStack> itemsWhileHoldingMainHand) {
|
||||
this.itemsWhileHoldingMainHand = itemsWhileHoldingMainHand;
|
||||
}
|
||||
|
||||
public LinkedList<String> getBiomesWhileStayingWithin() {
|
||||
return biomesWhileStayingWithin;
|
||||
}
|
||||
|
||||
public void setBiomesWhileStayingWithin(LinkedList<String> biomesWhileStayingWithin) {
|
||||
this.biomesWhileStayingWithin = biomesWhileStayingWithin;
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public boolean check(Quester quester, Quest quest) {
|
||||
Player player = quester.getPlayer();
|
||||
final Player player = quester.getPlayer();
|
||||
if (itemsWhileHoldingMainHand.isEmpty() == false) {
|
||||
for (ItemStack is : itemsWhileHoldingMainHand) {
|
||||
if (ItemUtil.compareItems(player.getItemInHand(), is, true, true) == 0) {
|
||||
@ -69,6 +80,16 @@ public class Condition {
|
||||
+ ItemUtil.compareItems(player.getItemInHand(), is, true, true));
|
||||
}
|
||||
}
|
||||
} else if (biomesWhileStayingWithin.isEmpty() == false) {
|
||||
for (String b : biomesWhileStayingWithin) {
|
||||
if (player.getWorld().getBiome(player.getLocation().getBlockX(), player.getLocation().getBlockZ())
|
||||
.name().equalsIgnoreCase(MiscUtil.getProperBiome(b).name())) {
|
||||
return true;
|
||||
} else {
|
||||
System.out.println("DEBUG: condition biome does not match for= "
|
||||
+ MiscUtil.getProperBiome(b));
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@ -85,6 +85,12 @@ public class ConditionFactory implements ConversationAbandonedListener {
|
||||
items.addAll(condition.getItemsWhileHoldingMainHand());
|
||||
context.setSessionData(CK.C_WHILE_HOLDING_MAIN_HAND, items);
|
||||
}
|
||||
if (condition.getBiomesWhileStayingWithin() != null
|
||||
&& condition.getBiomesWhileStayingWithin().isEmpty() == false) {
|
||||
LinkedList<String> biomes = new LinkedList<String>();
|
||||
biomes.addAll(condition.getBiomesWhileStayingWithin());
|
||||
context.setSessionData(CK.C_WHILE_WITHIN_BIOME, biomes);
|
||||
}
|
||||
}
|
||||
|
||||
public void clearData(ConversationContext context) {
|
||||
@ -92,6 +98,7 @@ public class ConditionFactory implements ConversationAbandonedListener {
|
||||
context.setSessionData(CK.C_NAME, null);
|
||||
context.setSessionData(CK.C_FAIL_QUEST, null);
|
||||
context.setSessionData(CK.C_WHILE_HOLDING_MAIN_HAND, null);
|
||||
context.setSessionData(CK.C_WHILE_WITHIN_BIOME, null);
|
||||
}
|
||||
|
||||
public void deleteCondition(ConversationContext context) {
|
||||
@ -171,6 +178,10 @@ public class ConditionFactory implements ConversationAbandonedListener {
|
||||
section.set("hold-main-hand",
|
||||
(LinkedList<ItemStack>) context.getSessionData(CK.C_WHILE_HOLDING_MAIN_HAND));
|
||||
}
|
||||
if (context.getSessionData(CK.C_WHILE_WITHIN_BIOME) != null) {
|
||||
section.set("stay-within-biome",
|
||||
(LinkedList<ItemStack>) context.getSessionData(CK.C_WHILE_WITHIN_BIOME));
|
||||
}
|
||||
try {
|
||||
data.save(conditionsFile);
|
||||
} catch (IOException e) {
|
||||
|
@ -27,6 +27,7 @@ import me.blackvein.quests.conditions.Condition;
|
||||
import me.blackvein.quests.convo.conditions.ConditionsEditorNumericPrompt;
|
||||
import me.blackvein.quests.convo.conditions.menu.ConditionMenuPrompt;
|
||||
import me.blackvein.quests.convo.conditions.tasks.PlayerPrompt;
|
||||
import me.blackvein.quests.convo.conditions.tasks.WorldPrompt;
|
||||
import me.blackvein.quests.events.editor.conditions.ConditionsEditorPostOpenNumericPromptEvent;
|
||||
import me.blackvein.quests.util.CK;
|
||||
import me.blackvein.quests.util.Lang;
|
||||
@ -40,7 +41,7 @@ public class ConditionMainPrompt extends ConditionsEditorNumericPrompt {
|
||||
this.plugin = (Quests)context.getPlugin();
|
||||
}
|
||||
|
||||
private final int size = 5;
|
||||
private final int size = 6;
|
||||
|
||||
public int getSize() {
|
||||
return size;
|
||||
@ -55,10 +56,11 @@ public class ConditionMainPrompt extends ConditionsEditorNumericPrompt {
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
return ChatColor.BLUE;
|
||||
case 4:
|
||||
return ChatColor.GREEN;
|
||||
return ChatColor.BLUE;
|
||||
case 5:
|
||||
return ChatColor.GREEN;
|
||||
case 6:
|
||||
return ChatColor.RED;
|
||||
default:
|
||||
return null;
|
||||
@ -70,12 +72,14 @@ public class ConditionMainPrompt extends ConditionsEditorNumericPrompt {
|
||||
case 1:
|
||||
return ChatColor.YELLOW + Lang.get("conditionEditorSetName");
|
||||
case 2:
|
||||
return ChatColor.GOLD + Lang.get("conditionEditorPlayer");
|
||||
return ChatColor.GOLD + Lang.get("eventEditorPlayer");
|
||||
case 3:
|
||||
return ChatColor.YELLOW + Lang.get("conditionEditorFailQuest") + ":";
|
||||
return ChatColor.GOLD + Lang.get("conditionEditorWorld");
|
||||
case 4:
|
||||
return ChatColor.GREEN + Lang.get("save");
|
||||
return ChatColor.YELLOW + Lang.get("conditionEditorFailQuest") + ":";
|
||||
case 5:
|
||||
return ChatColor.GREEN + Lang.get("save");
|
||||
case 6:
|
||||
return ChatColor.RED + Lang.get("exit");
|
||||
default:
|
||||
return null;
|
||||
@ -86,14 +90,15 @@ public class ConditionMainPrompt extends ConditionsEditorNumericPrompt {
|
||||
switch (number) {
|
||||
case 1:
|
||||
case 2:
|
||||
return "";
|
||||
case 3:
|
||||
return "";
|
||||
case 4:
|
||||
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 4:
|
||||
case 5:
|
||||
case 6:
|
||||
return "";
|
||||
default:
|
||||
return null;
|
||||
@ -122,6 +127,8 @@ public class ConditionMainPrompt extends ConditionsEditorNumericPrompt {
|
||||
case 2:
|
||||
return new PlayerPrompt(context);
|
||||
case 3:
|
||||
return new WorldPrompt(context);
|
||||
case 4:
|
||||
String s = (String) context.getSessionData(CK.C_FAIL_QUEST);
|
||||
if (s.equalsIgnoreCase(Lang.get("yesWord"))) {
|
||||
context.setSessionData(CK.C_FAIL_QUEST, Lang.get("noWord"));
|
||||
@ -129,13 +136,13 @@ public class ConditionMainPrompt extends ConditionsEditorNumericPrompt {
|
||||
context.setSessionData(CK.C_FAIL_QUEST, Lang.get("yesWord"));
|
||||
}
|
||||
return new ConditionMainPrompt(context);
|
||||
case 4:
|
||||
case 5:
|
||||
if (context.getSessionData(CK.C_OLD_CONDITION) != null) {
|
||||
return new ConditionSavePrompt((String) context.getSessionData(CK.C_OLD_CONDITION));
|
||||
} else {
|
||||
return new ConditionSavePrompt(null);
|
||||
}
|
||||
case 5:
|
||||
case 6:
|
||||
return new ConditionExitPrompt();
|
||||
default:
|
||||
return new ConditionMainPrompt(context);
|
||||
|
@ -0,0 +1,174 @@
|
||||
/*******************************************************************************************************
|
||||
* 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.Arrays;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.block.Biome;
|
||||
import org.bukkit.conversations.ConversationContext;
|
||||
import org.bukkit.conversations.Prompt;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
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 WorldPrompt extends QuestsEditorNumericPrompt {
|
||||
|
||||
public WorldPrompt(ConversationContext context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
private final int size = 2;
|
||||
|
||||
public int getSize() {
|
||||
return size;
|
||||
}
|
||||
|
||||
public String getTitle(ConversationContext context) {
|
||||
return Lang.get("eventEditorPlayer");
|
||||
}
|
||||
|
||||
public ChatColor getNumberColor(ConversationContext context, int number) {
|
||||
switch (number) {
|
||||
case 1:
|
||||
return ChatColor.BLUE;
|
||||
case 2:
|
||||
return ChatColor.GREEN;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public String getSelectionText(ConversationContext context, int number) {
|
||||
switch(number) {
|
||||
case 1:
|
||||
return ChatColor.YELLOW + Lang.get("conditionEditorStayingWithinBiome");
|
||||
case 2:
|
||||
return ChatColor.GREEN + Lang.get("done");
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public String getAdditionalText(ConversationContext context, int number) {
|
||||
switch(number) {
|
||||
case 1:
|
||||
if (context.getSessionData(CK.C_WHILE_WITHIN_BIOME) == null) {
|
||||
return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")";
|
||||
} else {
|
||||
String text = "\n";
|
||||
for (String s: (List<String>) context.getSessionData(CK.C_WHILE_WITHIN_BIOME)) {
|
||||
text += ChatColor.GRAY + " - " + ChatColor.BLUE + s + "\n";
|
||||
}
|
||||
return text;
|
||||
}
|
||||
case 2:
|
||||
return "";
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPromptText(ConversationContext context) {
|
||||
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(ConversationContext context, Number input) {
|
||||
switch(input.intValue()) {
|
||||
case 1:
|
||||
return new BiomesPrompt(context);
|
||||
case 2:
|
||||
try {
|
||||
return new ConditionMainPrompt(context);
|
||||
} catch (Exception e) {
|
||||
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("itemCreateCriticalError"));
|
||||
return Prompt.END_OF_CONVERSATION;
|
||||
}
|
||||
default:
|
||||
return new WorldPrompt(context);
|
||||
}
|
||||
}
|
||||
|
||||
public class BiomesPrompt extends QuestsEditorStringPrompt {
|
||||
|
||||
public BiomesPrompt(ConversationContext context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTitle(ConversationContext context) {
|
||||
return Lang.get("conditionEditorBiomesTitle");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getQueryText(ConversationContext context) {
|
||||
return Lang.get("conditionEditorBiomesPrompt");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPromptText(ConversationContext context) {
|
||||
QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this);
|
||||
context.getPlugin().getServer().getPluginManager().callEvent(event);
|
||||
|
||||
String biomes = ChatColor.LIGHT_PURPLE + getTitle(context) + "\n";
|
||||
LinkedList<Biome> biomeArr = new LinkedList<Biome>(Arrays.asList(Biome.values()));
|
||||
for (int i = 0; i < biomeArr.size(); i++) {
|
||||
if (i < (biomeArr.size() - 1)) {
|
||||
biomes += MiscUtil.snakeCaseToUpperCamelCase(biomeArr.get(i).name()) + ", ";
|
||||
} else {
|
||||
biomes += MiscUtil.snakeCaseToUpperCamelCase(biomeArr.get(i).name()) + "\n";
|
||||
}
|
||||
}
|
||||
return biomes + ChatColor.YELLOW + getQueryText(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Prompt acceptInput(ConversationContext context, String input) {
|
||||
Player player = (Player) context.getForWhom();
|
||||
if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false) {
|
||||
LinkedList<String> biomes = new LinkedList<String>();
|
||||
for (String s : input.split(" ")) {
|
||||
if (MiscUtil.getProperBiome(s) != null) {
|
||||
biomes.add(s);
|
||||
} else {
|
||||
player.sendMessage(ChatColor.LIGHT_PURPLE + s + " " + ChatColor.RED
|
||||
+ Lang.get("conditionEditorInvalidBiome"));
|
||||
return new BiomesPrompt(context);
|
||||
}
|
||||
}
|
||||
context.setSessionData(CK.C_WHILE_WITHIN_BIOME, biomes);
|
||||
}
|
||||
return new WorldPrompt(context);
|
||||
}
|
||||
}
|
||||
}
|
@ -178,4 +178,5 @@ public class CK {
|
||||
public static final String C_NAME = "conName";
|
||||
public static final String C_FAIL_QUEST = "conFailQuest";
|
||||
public static final String C_WHILE_HOLDING_MAIN_HAND = "conHoldingMainHand";
|
||||
public static final String C_WHILE_WITHIN_BIOME = "conWithinBiome";
|
||||
}
|
||||
|
@ -17,6 +17,7 @@ import java.util.LinkedList;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.Effect;
|
||||
import org.bukkit.block.Biome;
|
||||
import org.bukkit.entity.EntityType;
|
||||
|
||||
public class MiscUtil {
|
||||
@ -163,6 +164,22 @@ public class MiscUtil {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets Biome from name
|
||||
*
|
||||
* @param properName Name to get biome from
|
||||
* @return Biome or null if invalid
|
||||
*/
|
||||
public static Biome getProperBiome(String properName) {
|
||||
properName = properName.replace("_", "").replace(" ", "").toUpperCase();
|
||||
for (Biome b : Biome.values()) {
|
||||
if (b.name().replace("_", "").equalsIgnoreCase(properName)) {
|
||||
return b;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets player-friendly name from type. 'LIGHT_BLUE' becomes 'Light Blue'
|
||||
*
|
||||
|
@ -410,11 +410,14 @@ 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"
|
||||
conditionEditorPlayer: "Player"
|
||||
conditionEditorItemsInMainHand: "Holding in main hand"
|
||||
conditionEditorSetItemsInMainHand: "Set holding in main hand"
|
||||
conditionEditorWorld: "World"
|
||||
conditionEditorFailQuest: "Fail the quest"
|
||||
conditionEditorConditionCleared: "Condition cleared."
|
||||
conditionEditorItemsInMainHand: "Holding in main hand"
|
||||
conditionEditorBiomesTitle: "- Biomes -"
|
||||
conditionEditorStayingWithinBiome: "Staying within biome"
|
||||
conditionEditorBiomesPrompt: "Enter biome names, <space>, <cancel>"
|
||||
conditionEditorInvalidBiome: "is not a valid biome name!"
|
||||
reqSetMoney: "Set money requirement"
|
||||
reqSetQuestPoints: "Set <points> requirement"
|
||||
reqSetItem: "Set item requirements"
|
||||
|
Loading…
Reference in New Issue
Block a user