Merge branch 'develop'

This commit is contained in:
PikaMug 2022-01-23 14:07:59 -05:00
commit 7eaedf079f
202 changed files with 4842 additions and 2787 deletions

View File

@ -1,10 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>me.blackvein.quests</groupId>
<artifactId>quests-parent</artifactId>
<version>4.1.3</version>
<version>4.2.0</version>
</parent>
<artifactId>quests-api</artifactId>
@ -14,7 +15,7 @@
<repositories>
<repository>
<!-- CitizensBooks, DungeonsXL, GPS, LocaleLib, mcMMO Classic, PhatLoots -->
<!-- CitizensBooks, DungeonsXL, GPS, mcMMO Classic, PhatLoots -->
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
@ -167,31 +168,6 @@
<defaultGoal>clean package install</defaultGoal>
<sourceDirectory>${basedir}/src/main/java</sourceDirectory>
<resources>
<resource>
<targetPath>.</targetPath>
<directory>${basedir}/src/main/resources/</directory>
<filtering>true</filtering>
<includes>
<include>lang/**/*.*</include>
<include>actions.yml</include>
<include>conditions.yml</include>
<include>config.yml</include>
<include>plugin.yml</include>
<include>quests.yml</include>
<include>strings.yml</include>
</includes>
</resource>
<resource>
<targetPath>.</targetPath>
<directory>${basedir}/</directory>
<filtering>false</filtering>
<includes>
<include>README.md</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
@ -208,55 +184,6 @@
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<minimizeJar>false</minimizeJar>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
</execution>
</executions>
<configuration>
<artifactSet>
<includes>
<include>me.*</include>
<include>com.github.PikaMug:LocaleLib</include>
<include>com.zaxxer:HikariCP</include>
<include>org.slf4j:slf4j-simple</include>
<include>org.slf4j:slf4j-api</include>
<include>mysql</include>
</includes>
</artifactSet>
<relocations>
<relocation>
<pattern>me.pikamug.localelib</pattern>
<shadedPattern>me.blackvein.quests.libs.localelib</shadedPattern>
</relocation>
<relocation>
<pattern>com.zaxxer.hikari</pattern>
<shadedPattern>me.blackvein.quests.libs.hikari</shadedPattern>
</relocation>
<relocation>
<pattern>org.slf4j</pattern>
<shadedPattern>me.blackvein.quests.libs.slf4j</shadedPattern>
</relocation>
<relocation>
<pattern>com.mysql</pattern>
<shadedPattern>me.blackvein.quests.libs.mysql</shadedPattern>
</relocation>
</relocations>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -12,6 +12,7 @@
package me.blackvein.quests;
import me.blackvein.quests.player.IQuester;
import org.bukkit.inventory.ItemStack;
import java.util.Collection;
@ -22,9 +23,9 @@ import java.util.LinkedList;
*/
public class QuestData {
private final Quester quester;
private final IQuester quester;
public QuestData(final Quester quester) {
public QuestData(final IQuester quester) {
this.quester = quester;
}

View File

@ -0,0 +1,91 @@
package me.blackvein.quests;
import me.blackvein.quests.actions.IAction;
import me.blackvein.quests.actions.ActionFactory;
import me.blackvein.quests.conditions.ICondition;
import me.blackvein.quests.conditions.ConditionFactory;
import me.blackvein.quests.config.ISettings;
import me.blackvein.quests.dependencies.IDependencies;
import me.blackvein.quests.module.ICustomObjective;
import me.blackvein.quests.player.IQuester;
import me.blackvein.quests.quests.IQuest;
import me.blackvein.quests.quests.QuestFactory;
import org.bukkit.command.CommandExecutor;
import org.bukkit.conversations.ConversationFactory;
import org.bukkit.plugin.Plugin;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.UUID;
public interface QuestsAPI extends Plugin {
boolean isLoading();
String getDetectedServerSoftwareVersion();
IDependencies getDependencies();
ISettings getSettings();
List<ICustomObjective> getCustomObjectives();
List<CustomReward> getCustomRewards();
List<CustomRequirement> getCustomRequirements();
Collection<IQuest> getLoadedQuests();
Collection<IAction> getLoadedActions();
Collection<ICondition> getLoadedConditions();
IQuester getQuester(final UUID id);
Collection<IQuester> getOnlineQuesters();
Collection<IQuester> getOfflineQuesters();
void setOfflineQuesters(final Collection<IQuester> questers);
LinkedList<Integer> getQuestNpcIds();
void setQuestNpcIds(final LinkedList<Integer> questNpcIds);
CommandExecutor getCommandExecutor();
ConversationFactory getConversationFactory();
ConversationFactory getNpcConversationFactory();
QuestFactory getQuestFactory();
ActionFactory getActionFactory();
ConditionFactory getConditionFactory();
/*ConvoListener getConvoListener();
BlockListener getBlockListener();
ItemListener getItemListener();
NpcListener getNpcListener();
PlayerListener getPlayerListener();
UniteListener getUniteListener();
NpcEffectThread getNpcEffectThread();
PlayerMoveThread getPlayerMoveThread();
PartiesListener getPartiesListener();
DenizenTrigger getDenizenTrigger();
LocaleManager getLocaleManager();
Storage getStorage();*/
}

View File

@ -1,479 +1,48 @@
/*
* Copyright (c) 2014 PikaMug and contributors. 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.actions;
import me.blackvein.quests.Quest;
import me.blackvein.quests.QuestMob;
import me.blackvein.quests.Quester;
import me.blackvein.quests.Quests;
import me.blackvein.quests.convo.actions.main.ActionMainPrompt;
import me.blackvein.quests.convo.actions.menu.ActionMenuPrompt;
import me.blackvein.quests.interfaces.ReloadCallback;
import me.blackvein.quests.util.CK;
import me.blackvein.quests.util.ConfigUtil;
import me.blackvein.quests.util.FakeConversable;
import me.blackvein.quests.util.ItemUtil;
import me.blackvein.quests.util.Lang;
import org.bukkit.ChatColor;
import org.bukkit.Effect;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.conversations.ConversationAbandonedEvent;
import org.bukkit.conversations.ConversationAbandonedListener;
import org.bukkit.conversations.ConversationContext;
import org.bukkit.conversations.ConversationFactory;
import org.bukkit.conversations.ConversationPrefix;
import org.bukkit.conversations.Prompt;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Objects;
import java.util.UUID;
public class ActionFactory implements ConversationAbandonedListener {
public interface ActionFactory {
Map<UUID, Block> getSelectedExplosionLocations();
private final Quests plugin;
private final ConversationFactory conversationFactory;
private Map<UUID, Block> selectedExplosionLocations = new HashMap<>();
private Map<UUID, Block> selectedEffectLocations = new HashMap<>();
private Map<UUID, Block> selectedMobLocations = new HashMap<>();
private Map<UUID, Block> selectedLightningLocations = new HashMap<>();
private Map<UUID, Block> selectedTeleportLocations = new HashMap<>();
private List<String> editingActionNames = new LinkedList<>();
void setSelectedExplosionLocations(final Map<UUID, Block> selectedExplosionLocations);
public ActionFactory(final Quests plugin) {
this.plugin = plugin;
// Ensure to initialize factory last so that 'this' is fully initialized before it is passed
this.conversationFactory = new ConversationFactory(plugin).withModality(false).withLocalEcho(false)
.withFirstPrompt(new ActionMenuPrompt(new ConversationContext(plugin, new FakeConversable(),
new HashMap<>()))).withTimeout(3600)
.withPrefix(new LineBreakPrefix()).addConversationAbandonedListener(this);
}
public static class LineBreakPrefix implements ConversationPrefix {
@Override
public @NotNull String getPrefix(final @NotNull ConversationContext context) {
return "\n";
}
}
public Map<UUID, Block> getSelectedExplosionLocations() {
return selectedExplosionLocations;
}
Map<UUID, Block> getSelectedEffectLocations();
public void setSelectedExplosionLocations(
final Map<UUID, Block> selectedExplosionLocations) {
this.selectedExplosionLocations = selectedExplosionLocations;
}
void setSelectedEffectLocations(final Map<UUID, Block> selectedEffectLocations);
public Map<UUID, Block> getSelectedEffectLocations() {
return selectedEffectLocations;
}
Map<UUID, Block> getSelectedMobLocations();
public void setSelectedEffectLocations(final Map<UUID, Block> selectedEffectLocations) {
this.selectedEffectLocations = selectedEffectLocations;
}
void setSelectedMobLocations(final Map<UUID, Block> selectedMobLocations);
public Map<UUID, Block> getSelectedMobLocations() {
return selectedMobLocations;
}
Map<UUID, Block> getSelectedLightningLocations();
public void setSelectedMobLocations(final Map<UUID, Block> selectedMobLocations) {
this.selectedMobLocations = selectedMobLocations;
}
void setSelectedLightningLocations(final Map<UUID, Block> selectedLightningLocations);
public Map<UUID, Block> getSelectedLightningLocations() {
return selectedLightningLocations;
}
Map<UUID, Block> getSelectedTeleportLocations();
public void setSelectedLightningLocations(
final Map<UUID, Block> selectedLightningLocations) {
this.selectedLightningLocations = selectedLightningLocations;
}
void setSelectedTeleportLocations(final Map<UUID, Block> selectedTeleportLocations);
public Map<UUID, Block> getSelectedTeleportLocations() {
return selectedTeleportLocations;
}
ConversationFactory getConversationFactory();
public void setSelectedTeleportLocations(
final Map<UUID, Block> selectedTeleportLocations) {
this.selectedTeleportLocations = selectedTeleportLocations;
}
List<String> getNamesOfActionsBeingEdited();
public ConversationFactory getConversationFactory() {
return conversationFactory;
}
public List<String> getNamesOfActionsBeingEdited() {
return editingActionNames;
}
public void setNamesOfActionsBeingEdited(final List<String> actionNames) {
this.editingActionNames = actionNames;
}
void setNamesOfActionsBeingEdited(final List<String> actionNames);
@Override
public void conversationAbandoned(final ConversationAbandonedEvent abandonedEvent) {
if (abandonedEvent.getContext().getForWhom() instanceof Player) {
final UUID uuid = ((Player) abandonedEvent.getContext().getForWhom()).getUniqueId();
selectedExplosionLocations.remove(uuid);
selectedEffectLocations.remove(uuid);
selectedMobLocations.remove(uuid);
selectedLightningLocations.remove(uuid);
selectedTeleportLocations.remove(uuid);
}
}
public Prompt returnToMenu(final ConversationContext context) {
return new ActionMainPrompt(context);
}
public void loadData(final Action event, final ConversationContext context) {
if (event.message != null) {
context.setSessionData(CK.E_MESSAGE, event.message);
}
if (event.clearInv) {
context.setSessionData(CK.E_CLEAR_INVENTORY, Lang.get("yesWord"));
} else {
context.setSessionData(CK.E_CLEAR_INVENTORY, Lang.get("noWord"));
}
if (event.failQuest) {
context.setSessionData(CK.E_FAIL_QUEST, Lang.get("yesWord"));
} else {
context.setSessionData(CK.E_FAIL_QUEST, Lang.get("noWord"));
}
if (event.items != null && !event.items.isEmpty()) {
final LinkedList<ItemStack> items = new LinkedList<>(event.items);
context.setSessionData(CK.E_ITEMS, items);
}
if (event.explosions != null && !event.explosions.isEmpty()) {
final LinkedList<String> locs = new LinkedList<>();
for (final Location loc : event.explosions) {
locs.add(ConfigUtil.getLocationInfo(loc));
}
context.setSessionData(CK.E_EXPLOSIONS, locs);
}
if (event.effects != null && !event.effects.isEmpty()) {
final LinkedList<String> locs = new LinkedList<>();
final LinkedList<String> effs = new LinkedList<>();
for (final Entry<Location, Effect> e : event.effects.entrySet()) {
locs.add(ConfigUtil.getLocationInfo(e.getKey()));
effs.add(e.getValue().toString());
}
context.setSessionData(CK.E_EFFECTS, effs);
context.setSessionData(CK.E_EFFECTS_LOCATIONS, locs);
}
if (event.stormWorld != null) {
context.setSessionData(CK.E_WORLD_STORM, event.stormWorld.getName());
context.setSessionData(CK.E_WORLD_STORM_DURATION, event.stormDuration);
}
if (event.thunderWorld != null) {
context.setSessionData(CK.E_WORLD_THUNDER, event.thunderWorld.getName());
context.setSessionData(CK.E_WORLD_THUNDER_DURATION, event.thunderDuration);
}
if (event.mobSpawns != null && !event.mobSpawns.isEmpty()) {
final LinkedList<String> questMobs = new LinkedList<>();
for (final QuestMob questMob : event.mobSpawns) {
questMobs.add(questMob.serialize());
}
context.setSessionData(CK.E_MOB_TYPES, questMobs);
}
if (event.lightningStrikes != null && !event.lightningStrikes.isEmpty()) {
final LinkedList<String> locs = new LinkedList<>();
for (final Location loc : event.lightningStrikes) {
locs.add(ConfigUtil.getLocationInfo(loc));
}
context.setSessionData(CK.E_LIGHTNING, locs);
}
if (event.potionEffects != null && !event.potionEffects.isEmpty()) {
final LinkedList<String> types = new LinkedList<>();
final LinkedList<Long> durations = new LinkedList<>();
final LinkedList<Integer> mags = new LinkedList<>();
for (final PotionEffect pe : event.potionEffects) {
types.add(pe.getType().getName());
durations.add((long) pe.getDuration());
mags.add(pe.getAmplifier());
}
context.setSessionData(CK.E_POTION_TYPES, types);
context.setSessionData(CK.E_POTION_DURATIONS, durations);
context.setSessionData(CK.E_POTION_STRENGTH, mags);
}
if (event.hunger > -1) {
context.setSessionData(CK.E_HUNGER, event.hunger);
}
if (event.saturation > -1) {
context.setSessionData(CK.E_SATURATION, event.saturation);
}
if (event.health > -1) {
context.setSessionData(CK.E_HEALTH, event.health);
}
if (event.teleport != null) {
context.setSessionData(CK.E_TELEPORT, ConfigUtil.getLocationInfo(event.teleport));
}
if (event.commands != null) {
context.setSessionData(CK.E_COMMANDS, event.commands);
}
if (event.timer > 0) {
context.setSessionData(CK.E_TIMER, event.timer);
}
if (event.cancelTimer) {
context.setSessionData(CK.E_CANCEL_TIMER, true);
}
}
Prompt returnToMenu(final ConversationContext context);
public void clearData(final ConversationContext context) {
context.setSessionData(CK.E_OLD_EVENT, null);
context.setSessionData(CK.E_NAME, null);
context.setSessionData(CK.E_MESSAGE, null);
context.setSessionData(CK.E_CLEAR_INVENTORY, null);
context.setSessionData(CK.E_FAIL_QUEST, null);
context.setSessionData(CK.E_ITEMS, null);
context.setSessionData(CK.E_ITEMS_AMOUNTS, null);
context.setSessionData(CK.E_EXPLOSIONS, null);
context.setSessionData(CK.E_EFFECTS, null);
context.setSessionData(CK.E_EFFECTS_LOCATIONS, null);
context.setSessionData(CK.E_WORLD_STORM, null);
context.setSessionData(CK.E_WORLD_STORM_DURATION, null);
context.setSessionData(CK.E_WORLD_THUNDER, null);
context.setSessionData(CK.E_WORLD_THUNDER_DURATION, null);
context.setSessionData(CK.E_MOB_TYPES, null);
context.setSessionData(CK.E_LIGHTNING, null);
context.setSessionData(CK.E_POTION_TYPES, null);
context.setSessionData(CK.E_POTION_DURATIONS, null);
context.setSessionData(CK.E_POTION_STRENGTH, null);
context.setSessionData(CK.E_HUNGER, null);
context.setSessionData(CK.E_SATURATION, null);
context.setSessionData(CK.E_HEALTH, null);
context.setSessionData(CK.E_TELEPORT, null);
context.setSessionData(CK.E_COMMANDS, null);
context.setSessionData(CK.E_TIMER, null);
context.setSessionData(CK.E_CANCEL_TIMER, null);
}
void loadData(final IAction event, final ConversationContext context);
public void deleteAction(final ConversationContext context) {
final YamlConfiguration data = new YamlConfiguration();
final File actionsFile = new File(plugin.getDataFolder(), "actions.yml");
try {
data.load(actionsFile);
} catch (final IOException | InvalidConfigurationException e) {
e.printStackTrace();
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("questErrorReadingFile")
.replace("<file>", actionsFile.getName()));
return;
}
final String action = (String) context.getSessionData(CK.ED_EVENT_DELETE);
String key = "actions";
ConfigurationSection sec = data.getConfigurationSection(key);
if (sec == null) {
key = "events";
sec = data.getConfigurationSection(key);
}
if (sec != null && action != null) {
sec.set(action, null);
}
try {
data.save(actionsFile);
} catch (final IOException e) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("questSaveError"));
return;
}
final ReloadCallback<Boolean> callback = response -> {
if (!response) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("unknownError"));
}
};
plugin.reload(callback);
context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("eventEditorDeleted"));
if (plugin.getSettings().getConsoleLogging() > 0) {
final String identifier = context.getForWhom() instanceof Player ?
"Player " + ((Player)context.getForWhom()).getUniqueId() : "CONSOLE";
plugin.getLogger().info(identifier + " deleted action " + action);
}
for (final Quester q : plugin.getOfflineQuesters()) {
for (final Quest quest : q.getCurrentQuests().keySet()) {
q.checkQuest(quest);
}
}
clearData(context);
}
void clearData(final ConversationContext context);
@SuppressWarnings("unchecked")
public void saveAction(final ConversationContext context) {
final YamlConfiguration data = new YamlConfiguration();
final File actionsFile = new File(plugin.getDataFolder(), "actions.yml");
try {
data.load(actionsFile);
} catch (final IOException | InvalidConfigurationException e) {
e.printStackTrace();
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("questErrorReadingFile")
.replace("<file>", actionsFile.getName()));
return;
}
String key = "actions";
if (data.getConfigurationSection(key) == null) {
key = "events";
}
if (context.getSessionData(CK.E_OLD_EVENT) != null
&& !((String) Objects.requireNonNull(context.getSessionData(CK.E_OLD_EVENT))).isEmpty()) {
data.set(key + "." + context.getSessionData(CK.E_OLD_EVENT), null);
final Collection<Action> temp = plugin.getLoadedActions();
temp.remove(plugin.getAction((String) context.getSessionData(CK.E_OLD_EVENT)));
plugin.setLoadedActions(temp);
}
final ConfigurationSection section = data.createSection(key + "." + context.getSessionData(CK.E_NAME));
editingActionNames.remove((String) context.getSessionData(CK.E_NAME));
if (context.getSessionData(CK.E_MESSAGE) != null) {
section.set("message", context.getSessionData(CK.E_MESSAGE));
}
if (context.getSessionData(CK.E_CLEAR_INVENTORY) != null) {
final String s = (String) context.getSessionData(CK.E_CLEAR_INVENTORY);
if (s != null && s.equalsIgnoreCase(Lang.get("yesWord"))) {
section.set("clear-inventory", true);
}
}
if (context.getSessionData(CK.E_FAIL_QUEST) != null) {
final String s = (String) context.getSessionData(CK.E_FAIL_QUEST);
if (s != null && s.equalsIgnoreCase(Lang.get("yesWord"))) {
section.set("fail-quest", true);
}
}
if (context.getSessionData(CK.E_ITEMS) != null) {
section.set("items", context.getSessionData(CK.E_ITEMS));
}
if (context.getSessionData(CK.E_EXPLOSIONS) != null) {
section.set("explosions", context.getSessionData(CK.E_EXPLOSIONS));
}
if (context.getSessionData(CK.E_EFFECTS) != null) {
section.set("effects", context.getSessionData(CK.E_EFFECTS));
section.set("effect-locations", context.getSessionData(CK.E_EFFECTS_LOCATIONS));
}
if (context.getSessionData(CK.E_WORLD_STORM) != null) {
section.set("storm-world", context.getSessionData(CK.E_WORLD_STORM));
section.set("storm-duration", context.getSessionData(CK.E_WORLD_STORM_DURATION));
}
if (context.getSessionData(CK.E_WORLD_THUNDER) != null) {
section.set("thunder-world", context.getSessionData(CK.E_WORLD_THUNDER));
section.set("thunder-duration", context.getSessionData(CK.E_WORLD_THUNDER_DURATION));
}
try {
if (context.getSessionData(CK.E_MOB_TYPES) != null) {
int count = 0;
for (final String s : (LinkedList<String>) Objects.requireNonNull(context
.getSessionData(CK.E_MOB_TYPES))) {
ConfigurationSection ss = section.getConfigurationSection("mob-spawns." + count);
if (ss == null) {
ss = section.createSection("mob-spawns." + count);
}
final QuestMob questMob = QuestMob.fromString(s);
if (questMob.getName() != null) {
ss.set("name", questMob.getName());
}
ss.set("spawn-location", ConfigUtil.getLocationInfo(questMob.getSpawnLocation()));
ss.set("mob-type", questMob.getType().name());
ss.set("spawn-amounts", questMob.getSpawnAmounts());
ss.set("held-item", ItemUtil.serializeItemStack(questMob.getInventory()[0]));
ss.set("held-item-drop-chance", questMob.getDropChances()[0]);
ss.set("boots", ItemUtil.serializeItemStack(questMob.getInventory()[1]));
ss.set("boots-drop-chance", questMob.getDropChances()[1]);
ss.set("leggings", ItemUtil.serializeItemStack(questMob.getInventory()[2]));
ss.set("leggings-drop-chance", questMob.getDropChances()[2]);
ss.set("chest-plate", ItemUtil.serializeItemStack(questMob.getInventory()[3]));
ss.set("chest-plate-drop-chance", questMob.getDropChances()[3]);
ss.set("helmet", ItemUtil.serializeItemStack(questMob.getInventory()[4]));
ss.set("helmet-drop-chance", questMob.getDropChances()[4]);
count++;
}
}
} catch (final Exception e) {
e.printStackTrace();
}
if (context.getSessionData(CK.E_LIGHTNING) != null) {
section.set("lightning-strikes", context.getSessionData(CK.E_LIGHTNING));
}
if (context.getSessionData(CK.E_COMMANDS) != null) {
final LinkedList<String> commands = (LinkedList<String>) context.getSessionData(CK.E_COMMANDS);
if (commands != null && !commands.isEmpty()) {
section.set("commands", commands);
}
}
if (context.getSessionData(CK.E_POTION_TYPES) != null) {
section.set("potion-effect-types", context.getSessionData(CK.E_POTION_TYPES));
section.set("potion-effect-durations", context.getSessionData(CK.E_POTION_DURATIONS));
section.set("potion-effect-amplifiers", context.getSessionData(CK.E_POTION_STRENGTH));
}
if (context.getSessionData(CK.E_HUNGER) != null) {
section.set("hunger", context.getSessionData(CK.E_HUNGER));
}
if (context.getSessionData(CK.E_SATURATION) != null) {
section.set("saturation", context.getSessionData(CK.E_SATURATION));
}
if (context.getSessionData(CK.E_HEALTH) != null) {
section.set("health", context.getSessionData(CK.E_HEALTH));
}
if (context.getSessionData(CK.E_TELEPORT) != null) {
section.set("teleport-location", context.getSessionData(CK.E_TELEPORT));
}
if (context.getSessionData(CK.E_TIMER) != null) {
final Integer i = (Integer) context.getSessionData(CK.E_TIMER);
if (i != null && i > 0) {
section.set("timer", context.getSessionData(CK.E_TIMER));
}
}
if (context.getSessionData(CK.E_CANCEL_TIMER) != null) {
final String s = (String) context.getSessionData(CK.E_CANCEL_TIMER);
if (s != null && s.equalsIgnoreCase(Lang.get("yesWord"))) {
section.set("cancel-timer", true);
}
}
if (context.getSessionData(CK.E_DENIZEN) != null) {
section.set("denizen-script", context.getSessionData(CK.E_DENIZEN));
}
try {
data.save(actionsFile);
} catch (final IOException e) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("questSaveError"));
return;
}
final ReloadCallback<Boolean> callback = response -> {
if (!response) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("unknownError"));
}
};
plugin.reload(callback);
context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("eventEditorSaved"));
if (plugin.getSettings().getConsoleLogging() > 0) {
final String identifier = context.getForWhom() instanceof Player ?
"Player " + ((Player)context.getForWhom()).getUniqueId() : "CONSOLE";
plugin.getLogger().info(identifier + " saved action " + context.getSessionData(CK.E_NAME));
}
for (final Quester q : plugin.getOfflineQuesters()) {
for (final Quest quest : q.getCurrentQuests().keySet()) {
q.checkQuest(quest);
}
}
clearData(context);
}
}
void deleteAction(final ConversationContext context);
void saveAction(final ConversationContext context);
}

View File

@ -0,0 +1,109 @@
package me.blackvein.quests.actions;
import me.blackvein.quests.quests.IQuest;
import me.blackvein.quests.player.IQuester;
import me.blackvein.quests.entity.QuestMob;
import org.bukkit.Effect;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import java.util.LinkedList;
import java.util.Map;
public interface IAction extends Comparable<IAction> {
String getName();
void setName(final String name);
String getMessage();
void setMessage(final String message);
boolean isClearInv();
void setClearInv(final boolean clearInv);
boolean isFailQuest();
void setFailQuest(final boolean failQuest);
LinkedList<Location> getExplosions();
void setExplosions(final LinkedList<Location> explosions);
Map<Location, Effect> getEffects();
void setEffects(final Map<Location, Effect> effects);
LinkedList<ItemStack> getItems();
void setItems(final LinkedList<ItemStack> items);
World getStormWorld();
void setStormWorld(final World stormWorld);
int getStormDuration();
void setStormDuration(final int stormDuration);
World getThunderWorld();
void setThunderWorld(final World thunderWorld);
int getThunderDuration();
void setThunderDuration(final int thunderDuration);
int getTimer();
void setTimer(final int timer);
boolean isCancelTimer();
void setCancelTimer(final boolean cancelTimer);
LinkedList<QuestMob> getMobSpawns();
void setMobSpawns(final LinkedList<QuestMob> mobSpawns);
LinkedList<Location> getLightningStrikes();
void setLightningStrikes(final LinkedList<Location> lightningStrikes);
LinkedList<String> getCommands();
void setCommands(final LinkedList<String> commands);
LinkedList<PotionEffect> getPotionEffects();
void setPotionEffects(final LinkedList<PotionEffect> potionEffects);
int getHunger();
void setHunger(final int hunger);
int getSaturation();
void setSaturation(final int saturation);
float getHealth();
void setHealth(final float health);
Location getTeleport();
void setTeleport(final Location teleport);
String getBook();
void setBook(final String book);
String getDenizenScript();
void setDenizenScript(final String scriptName);
void fire(final IQuester quester, final IQuest quest);
}

View File

@ -1,277 +1,25 @@
/*
* Copyright (c) 2014 PikaMug and contributors. 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.conditions;
import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester;
import me.blackvein.quests.Quests;
import me.blackvein.quests.convo.conditions.main.ConditionMainPrompt;
import me.blackvein.quests.convo.conditions.menu.ConditionMenuPrompt;
import me.blackvein.quests.interfaces.ReloadCallback;
import me.blackvein.quests.util.CK;
import me.blackvein.quests.util.FakeConversable;
import me.blackvein.quests.util.Lang;
import org.bukkit.ChatColor;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.conversations.ConversationAbandonedEvent;
import org.bukkit.conversations.ConversationAbandonedListener;
import org.bukkit.conversations.ConversationContext;
import org.bukkit.conversations.ConversationFactory;
import org.bukkit.conversations.ConversationPrefix;
import org.bukkit.conversations.Prompt;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
public class ConditionFactory implements ConversationAbandonedListener {
public interface ConditionFactory {
ConversationFactory getConversationFactory();
private final Quests plugin;
private final ConversationFactory conversationFactory;
private List<String> editingConditionNames = new LinkedList<>();
List<String> getNamesOfConditionsBeingEdited();
public ConditionFactory(final Quests plugin) {
this.plugin = plugin;
// Ensure to initialize factory last so that 'this' is fully initialized before it is passed
this.conversationFactory = new ConversationFactory(plugin).withModality(false).withLocalEcho(false)
.withFirstPrompt(new ConditionMenuPrompt(new ConversationContext(plugin, new FakeConversable(),
new HashMap<>()))).withTimeout(3600)
.withPrefix(new LineBreakPrefix()).addConversationAbandonedListener(this);
}
public static class LineBreakPrefix implements ConversationPrefix {
@Override
public @NotNull String getPrefix(final @NotNull ConversationContext context) {
return "\n";
}
}
void setNamesOfConditionsBeingEdited(final List<String> conditionNames);
public ConversationFactory getConversationFactory() {
return conversationFactory;
}
public List<String> getNamesOfConditionsBeingEdited() {
return editingConditionNames;
}
public void setNamesOfConditionsBeingEdited(final List<String> conditionNames) {
this.editingConditionNames = conditionNames;
}
Prompt returnToMenu(final ConversationContext context);
@Override
public void conversationAbandoned(final @NotNull ConversationAbandonedEvent abandonedEvent) {
}
public Prompt returnToMenu(final ConversationContext context) {
return new ConditionMainPrompt(context);
}
public void loadData(final Condition condition, final ConversationContext context) {
if (condition.isFailQuest()) {
context.setSessionData(CK.C_FAIL_QUEST, Lang.get("yesWord"));
} else {
context.setSessionData(CK.C_FAIL_QUEST, Lang.get("noWord"));
}
if (condition.getEntitiesWhileRiding() != null && !condition.getEntitiesWhileRiding().isEmpty()) {
final LinkedList<String> entities = new LinkedList<>(condition.getEntitiesWhileRiding());
context.setSessionData(CK.C_WHILE_RIDING_ENTITY, entities);
}
if (condition.getNpcsWhileRiding() != null && !condition.getNpcsWhileRiding().isEmpty()) {
final LinkedList<Integer> npcs = new LinkedList<>(condition.getNpcsWhileRiding());
context.setSessionData(CK.C_WHILE_RIDING_NPC, npcs);
}
if (condition.getPermissions() != null && !condition.getPermissions().isEmpty()) {
final LinkedList<String> permissions = new LinkedList<>(condition.getPermissions());
context.setSessionData(CK.C_WHILE_PERMISSION, permissions);
}
if (condition.getItemsWhileHoldingMainHand() != null && !condition.getItemsWhileHoldingMainHand().isEmpty()) {
final LinkedList<ItemStack> items = new LinkedList<>(condition.getItemsWhileHoldingMainHand());
context.setSessionData(CK.C_WHILE_HOLDING_MAIN_HAND, items);
}
if (condition.getWorldsWhileStayingWithin() != null && !condition.getWorldsWhileStayingWithin().isEmpty()) {
final LinkedList<String> worlds = new LinkedList<>(condition.getBiomesWhileStayingWithin());
context.setSessionData(CK.C_WHILE_WITHIN_WORLD, worlds);
}
if (condition.getBiomesWhileStayingWithin() != null && !condition.getBiomesWhileStayingWithin().isEmpty()) {
final LinkedList<String> biomes = new LinkedList<>(condition.getBiomesWhileStayingWithin());
context.setSessionData(CK.C_WHILE_WITHIN_BIOME, biomes);
}
if (condition.getRegionsWhileStayingWithin() != null && !condition.getRegionsWhileStayingWithin().isEmpty()) {
final LinkedList<String> regions = new LinkedList<>(condition.getRegionsWhileStayingWithin());
context.setSessionData(CK.C_WHILE_WITHIN_REGION, regions);
}
if (condition.getPlaceholdersCheckIdentifier() != null
&& !condition.getPlaceholdersCheckIdentifier().isEmpty()) {
final LinkedList<String> identifiers = new LinkedList<>(condition.getPlaceholdersCheckIdentifier());
context.setSessionData(CK.C_WHILE_PLACEHOLDER_ID, identifiers);
}
if (condition.getPlaceholdersCheckValue() != null && !condition.getPlaceholdersCheckValue().isEmpty()) {
final LinkedList<String> values = new LinkedList<>(condition.getPlaceholdersCheckValue());
context.setSessionData(CK.C_WHILE_PLACEHOLDER_VAL, values);
}
}
void loadData(final ICondition condition, final ConversationContext context);
public void clearData(final ConversationContext context) {
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_RIDING_NPC, null);
context.setSessionData(CK.C_WHILE_PERMISSION, 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);
context.setSessionData(CK.C_WHILE_WITHIN_REGION, null);
context.setSessionData(CK.C_WHILE_PLACEHOLDER_ID, null);
context.setSessionData(CK.C_WHILE_PLACEHOLDER_VAL, null);
}
void clearData(final ConversationContext context);
public void deleteCondition(final ConversationContext context) {
final YamlConfiguration data = new YamlConfiguration();
final File conditionsFile = new File(plugin.getDataFolder(), "conditions.yml");
try {
data.load(conditionsFile);
} catch (final IOException | InvalidConfigurationException e) {
e.printStackTrace();
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("questErrorReadingFile")
.replace("<file>", conditionsFile.getName()));
return;
}
final String condition = (String) context.getSessionData(CK.ED_CONDITION_DELETE);
final ConfigurationSection sec = data.getConfigurationSection("conditions");
if (sec != null && condition != null) {
sec.set(condition, null);
}
try {
data.save(conditionsFile);
} catch (final IOException e) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("questSaveError"));
return;
}
final ReloadCallback<Boolean> callback = response -> {
if (!response) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("unknownError"));
}
};
plugin.reload(callback);
context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("conditionEditorDeleted"));
if (plugin.getSettings().getConsoleLogging() > 0) {
final String identifier = context.getForWhom() instanceof Player ?
"Player " + ((Player)context.getForWhom()).getUniqueId() : "CONSOLE";
plugin.getLogger().info(identifier + " deleted condition " + condition);
}
for (final Quester q : plugin.getOfflineQuesters()) {
for (final Quest quest : q.getCurrentQuests().keySet()) {
q.checkQuest(quest);
}
}
clearData(context);
}
void deleteCondition(final ConversationContext context);
public void saveCondition(final ConversationContext context) {
final YamlConfiguration data = new YamlConfiguration();
final File conditionsFile = new File(plugin.getDataFolder(), "conditions.yml");
try {
data.load(conditionsFile);
} catch (final IOException | InvalidConfigurationException e) {
e.printStackTrace();
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("questErrorReadingFile")
.replace("<file>", conditionsFile.getName()));
return;
}
if (context.getSessionData(CK.C_OLD_CONDITION) != null
&& !((String) Objects.requireNonNull(context.getSessionData(CK.C_OLD_CONDITION))).isEmpty()) {
data.set("conditions." + context.getSessionData(CK.C_OLD_CONDITION), null);
final Collection<Condition> temp = plugin.getLoadedConditions();
temp.remove(plugin.getCondition((String) context.getSessionData(CK.C_OLD_CONDITION)));
plugin.setLoadedConditions(temp);
}
final ConfigurationSection section = data.createSection("conditions." + context.getSessionData(CK.C_NAME));
editingConditionNames.remove((String) context.getSessionData(CK.C_NAME));
if (context.getSessionData(CK.C_FAIL_QUEST) != null) {
final String s = (String) context.getSessionData(CK.C_FAIL_QUEST);
if (s != null && s.equalsIgnoreCase(Lang.get("yesWord"))) {
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_RIDING_NPC) != null) {
section.set("ride-npc",
context.getSessionData(CK.C_WHILE_RIDING_NPC));
}
if (context.getSessionData(CK.C_WHILE_PERMISSION) != null) {
section.set("permission",
context.getSessionData(CK.C_WHILE_PERMISSION));
}
if (context.getSessionData(CK.C_WHILE_HOLDING_MAIN_HAND) != null) {
section.set("hold-main-hand",
context.getSessionData(CK.C_WHILE_HOLDING_MAIN_HAND));
}
if (context.getSessionData(CK.C_WHILE_WITHIN_WORLD) != null) {
section.set("stay-within-world",
context.getSessionData(CK.C_WHILE_WITHIN_WORLD));
}
if (context.getSessionData(CK.C_WHILE_WITHIN_BIOME) != null) {
section.set("stay-within-biome",
context.getSessionData(CK.C_WHILE_WITHIN_BIOME));
}
if (context.getSessionData(CK.C_WHILE_WITHIN_REGION) != null) {
section.set("stay-within-region",
context.getSessionData(CK.C_WHILE_WITHIN_REGION));
}
if (context.getSessionData(CK.C_WHILE_PLACEHOLDER_ID) != null) {
section.set("check-placeholder-id",
context.getSessionData(CK.C_WHILE_PLACEHOLDER_ID));
}
if (context.getSessionData(CK.C_WHILE_PLACEHOLDER_VAL) != null) {
section.set("check-placeholder-value",
context.getSessionData(CK.C_WHILE_PLACEHOLDER_VAL));
}
try {
data.save(conditionsFile);
} catch (final IOException e) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("questSaveError"));
return;
}
final ReloadCallback<Boolean> callback = response -> {
if (!response) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("unknownError"));
}
};
plugin.reload(callback);
context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("conditionEditorSaved"));
if (plugin.getSettings().getConsoleLogging() > 0) {
final String identifier = context.getForWhom() instanceof Player ?
"Player " + ((Player)context.getForWhom()).getUniqueId() : "CONSOLE";
plugin.getLogger().info(identifier + " saved condition " + context.getSessionData(CK.C_NAME));
}
for (final Quester q : plugin.getOfflineQuesters()) {
for (final Quest quest : q.getCurrentQuests().keySet()) {
q.checkQuest(quest);
}
}
clearData(context);
}
}
void saveCondition(final ConversationContext context);
}

View File

@ -0,0 +1,55 @@
package me.blackvein.quests.conditions;
import me.blackvein.quests.quests.IQuest;
import me.blackvein.quests.player.IQuester;
import org.bukkit.inventory.ItemStack;
import java.util.LinkedList;
public interface ICondition extends Comparable<ICondition> {
String getName();
void setName(final String name);
boolean isFailQuest();
void setFailQuest(final boolean failQuest);
LinkedList<String> getEntitiesWhileRiding();
void setEntitiesWhileRiding(final LinkedList<String> entitiesWhileRiding);
LinkedList<Integer> getNpcsWhileRiding();
void setNpcsWhileRiding(final LinkedList<Integer> npcsWhileRiding);
LinkedList<String> getPermissions();
void setPermissions(final LinkedList<String> permissions);
LinkedList<ItemStack> getItemsWhileHoldingMainHand();
void setItemsWhileHoldingMainHand(final LinkedList<ItemStack> itemsWhileHoldingMainHand);
LinkedList<String> getWorldsWhileStayingWithin();
void setWorldsWhileStayingWithin(final LinkedList<String> worldsWhileStayingWithin);
LinkedList<String> getBiomesWhileStayingWithin();
void setBiomesWhileStayingWithin(final LinkedList<String> biomesWhileStayingWithin);
LinkedList<String> getRegionsWhileStayingWithin();
void setRegionsWhileStayingWithin(final LinkedList<String> biomesWhileStayingWithin);
LinkedList<String> getPlaceholdersCheckIdentifier();
void setPlaceholdersCheckIdentifier(final LinkedList<String> placeholdersCheckIdentifier);
LinkedList<String> getPlaceholdersCheckValue();
void setPlaceholdersCheckValue(final LinkedList<String> placeholdersCheckValue);
boolean check(final IQuester quester, final IQuest quest);
}

View File

@ -0,0 +1,51 @@
package me.blackvein.quests.config;
public interface ISettings {
int getAcceptTimeout();
void setAcceptTimeout(final int acceptTimeout);
boolean canAllowCommands();
void setAllowCommands(final boolean allowCommands);
boolean canAllowCommandsForNpcQuests();
void setAllowCommandsForNpcQuests(final boolean allowCommandsForNpcQuests);
boolean canAllowPranks();
void setAllowPranks(final boolean allowPranks);
boolean canAskConfirmation();
void setAskConfirmation(final boolean askConfirmation);
boolean canClickablePrompts();
void setClickablePrompts(boolean clickablePrompts);
int getConsoleLogging();
void setConsoleLogging(final int consoleLogging);
boolean canDisableCommandFeedback();
void setDisableCommandFeedback(final boolean disableCommandFeedback);
boolean canGenFilesOnJoin();
void setGenFilesOnJoin(final boolean genFilesOnJoin);
boolean canIgnoreLockedQuests();
void setIgnoreLockedQuests(final boolean ignoreLockedQuests);
int getKillDelay();
void setKillDelay(final int killDelay);
int getMaxQuests();
void setMaxQuests(final int maxQuests);
boolean canNpcEffects();
void setNpcEffects(final boolean npcEffects);
String getEffect();
void setEffect(final String effect);
String getRedoEffect();
void setRedoEffect(final String redoEffect);
boolean canShowQuestReqs();
void setShowQuestReqs(final boolean showQuestReqs);
boolean canShowQuestTitles();
void setShowQuestTitles(final boolean showQuestTitles);
int getStrictPlayerMovement();
void setStrictPlayerMovement(final int strictPlayerMovement);
boolean canTrialSave();
void setTrialSave(final boolean trialSave);
int getTopLimit();
void setTopLimit(final int topLimit);
boolean canTranslateNames();
void setTranslateNames(final boolean translateItems);
boolean canTranslateSubCommands();
void setTranslateSubCommands(final boolean translateSubCommands);
boolean canUpdateCheck();
void setUpdateCheck(final boolean updateCheck);
void init();
}

View File

@ -12,6 +12,7 @@
package me.blackvein.quests.convo;
import me.blackvein.quests.QuestsAPI;
import me.blackvein.quests.util.Lang;
import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.TextComponent;
@ -22,8 +23,6 @@ import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
import me.blackvein.quests.Quests;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@ -67,7 +66,7 @@ public abstract class QuestsNumericPrompt extends NumericPrompt {
if (context.getPlugin() == null) {
return Lang.get("itemCreateCriticalError");
}
if (!(context.getForWhom() instanceof Player) || !((Quests)context.getPlugin()).getSettings().canClickablePrompts()) {
if (!(context.getForWhom() instanceof Player) || !((QuestsAPI)context.getPlugin()).getSettings().canClickablePrompts()) {
return input;
}
final String[] basicText = input.split("\n");

View File

@ -12,18 +12,16 @@
package me.blackvein.quests.convo;
import me.blackvein.quests.QuestsAPI;
import me.blackvein.quests.util.Lang;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.conversations.ConversationContext;
import org.bukkit.conversations.StringPrompt;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.Quests;
import java.util.List;
public abstract class QuestsStringPrompt extends StringPrompt {
@ -61,7 +59,7 @@ public abstract class QuestsStringPrompt extends StringPrompt {
if (context.getPlugin() == null) {
return Lang.get("itemCreateCriticalError");
}
if (!(context.getForWhom() instanceof Player) || !((Quests)context.getPlugin()).getSettings().canClickablePrompts()) {
if (!(context.getForWhom() instanceof Player) || !((QuestsAPI)context.getPlugin()).getSettings().canClickablePrompts()) {
return ChatColor.GOLD + header + "\n" + ChatColor.AQUA + String.join(ChatColor.GRAY + ", " + ChatColor.AQUA, list) + "\n" + ChatColor.YELLOW + footer;
}
final TextComponent component = new TextComponent(header + "\n");

View File

@ -12,12 +12,11 @@
package me.blackvein.quests.convo.actions;
import org.bukkit.ChatColor;
import org.bukkit.conversations.ConversationContext;
import me.blackvein.quests.Quests;
import me.blackvein.quests.QuestsAPI;
import me.blackvein.quests.actions.ActionFactory;
import me.blackvein.quests.convo.QuestsNumericPrompt;
import org.bukkit.ChatColor;
import org.bukkit.conversations.ConversationContext;
public abstract class ActionsEditorNumericPrompt extends QuestsNumericPrompt {
private final ConversationContext context;
@ -26,7 +25,7 @@ public abstract class ActionsEditorNumericPrompt extends QuestsNumericPrompt {
public ActionsEditorNumericPrompt(final ConversationContext context) {
this.context = context;
if (context != null && context.getPlugin() != null) {
this.factory = ((Quests)context.getPlugin()).getActionFactory();
this.factory = ((QuestsAPI)context.getPlugin()).getActionFactory();
}
}

View File

@ -12,11 +12,10 @@
package me.blackvein.quests.convo.actions;
import org.bukkit.conversations.ConversationContext;
import me.blackvein.quests.Quests;
import me.blackvein.quests.QuestsAPI;
import me.blackvein.quests.actions.ActionFactory;
import me.blackvein.quests.convo.QuestsStringPrompt;
import org.bukkit.conversations.ConversationContext;
public abstract class ActionsEditorStringPrompt extends QuestsStringPrompt {
private final ConversationContext context;
@ -25,7 +24,7 @@ public abstract class ActionsEditorStringPrompt extends QuestsStringPrompt {
public ActionsEditorStringPrompt(final ConversationContext context) {
this.context = context;
if (context != null && context.getPlugin() != null) {
this.factory = ((Quests)context.getPlugin()).getActionFactory();
this.factory = ((QuestsAPI)context.getPlugin()).getActionFactory();
}
}

View File

@ -12,12 +12,11 @@
package me.blackvein.quests.convo.conditions;
import org.bukkit.ChatColor;
import org.bukkit.conversations.ConversationContext;
import me.blackvein.quests.Quests;
import me.blackvein.quests.QuestsAPI;
import me.blackvein.quests.conditions.ConditionFactory;
import me.blackvein.quests.convo.QuestsNumericPrompt;
import org.bukkit.ChatColor;
import org.bukkit.conversations.ConversationContext;
public abstract class ConditionsEditorNumericPrompt extends QuestsNumericPrompt {
private final ConversationContext context;
@ -26,7 +25,7 @@ public abstract class ConditionsEditorNumericPrompt extends QuestsNumericPrompt
public ConditionsEditorNumericPrompt(final ConversationContext context) {
this.context = context;
if (context != null && context.getPlugin() != null) {
this.factory = ((Quests)context.getPlugin()).getConditionFactory();
this.factory = ((QuestsAPI)context.getPlugin()).getConditionFactory();
}
}

View File

@ -12,11 +12,10 @@
package me.blackvein.quests.convo.conditions;
import org.bukkit.conversations.ConversationContext;
import me.blackvein.quests.Quests;
import me.blackvein.quests.QuestsAPI;
import me.blackvein.quests.conditions.ConditionFactory;
import me.blackvein.quests.convo.QuestsStringPrompt;
import org.bukkit.conversations.ConversationContext;
public abstract class ConditionsEditorStringPrompt extends QuestsStringPrompt {
private final ConversationContext context;
@ -25,7 +24,7 @@ public abstract class ConditionsEditorStringPrompt extends QuestsStringPrompt {
public ConditionsEditorStringPrompt(final ConversationContext context) {
this.context = context;
if (context != null && context.getPlugin() != null) {
this.factory = ((Quests)context.getPlugin()).getConditionFactory();
this.factory = ((QuestsAPI)context.getPlugin()).getConditionFactory();
}
}

View File

@ -12,13 +12,12 @@
package me.blackvein.quests.convo.quests;
import me.blackvein.quests.quests.QuestFactory;
import me.blackvein.quests.QuestsAPI;
import me.blackvein.quests.convo.QuestsNumericPrompt;
import org.bukkit.ChatColor;
import org.bukkit.conversations.ConversationContext;
import me.blackvein.quests.QuestFactory;
import me.blackvein.quests.Quests;
import me.blackvein.quests.convo.QuestsNumericPrompt;
public abstract class QuestsEditorNumericPrompt extends QuestsNumericPrompt {
private final ConversationContext context;
private QuestFactory factory;
@ -26,7 +25,7 @@ public abstract class QuestsEditorNumericPrompt extends QuestsNumericPrompt {
public QuestsEditorNumericPrompt(final ConversationContext context) {
this.context = context;
if (context != null && context.getPlugin() != null) {
factory = ((Quests)context.getPlugin()).getQuestFactory();
factory = ((QuestsAPI)context.getPlugin()).getQuestFactory();
}
}

View File

@ -12,11 +12,10 @@
package me.blackvein.quests.convo.quests;
import org.bukkit.conversations.ConversationContext;
import me.blackvein.quests.QuestFactory;
import me.blackvein.quests.Quests;
import me.blackvein.quests.quests.QuestFactory;
import me.blackvein.quests.QuestsAPI;
import me.blackvein.quests.convo.QuestsStringPrompt;
import org.bukkit.conversations.ConversationContext;
public abstract class QuestsEditorStringPrompt extends QuestsStringPrompt {
private final ConversationContext context;
@ -25,7 +24,7 @@ public abstract class QuestsEditorStringPrompt extends QuestsStringPrompt {
public QuestsEditorStringPrompt(final ConversationContext context) {
this.context = context;
if (context != null && context.getPlugin() != null) {
factory = ((Quests)context.getPlugin()).getQuestFactory();
factory = ((QuestsAPI)context.getPlugin()).getQuestFactory();
}
}

View File

@ -0,0 +1,71 @@
package me.blackvein.quests.dependencies;
import com.alessiodp.parties.api.interfaces.PartiesAPI;
import com.codisimus.plugins.phatloots.PhatLoots;
import com.gmail.nossr50.datatypes.skills.SkillType;
import com.gmail.nossr50.mcMMO;
import com.herocraftonline.heroes.Heroes;
import com.herocraftonline.heroes.characters.Hero;
import me.blackvein.quests.player.IQuester;
import me.blackvein.quests.reflect.denizen.DenizenAPI;
import me.blackvein.quests.reflect.worldguard.WorldGuardAPI;
import me.clip.placeholderapi.PlaceholderAPIPlugin;
import me.pikamug.unite.api.objects.PartyProvider;
import net.citizensnpcs.api.CitizensPlugin;
import net.milkbowl.vault.economy.Economy;
import net.milkbowl.vault.permission.Permission;
import org.bukkit.Location;
import ro.nicuch.citizensbooks.CitizensBooksAPI;
import java.util.Set;
import java.util.UUID;
public interface IDependencies {
Economy getVaultEconomy();
Permission getVaultPermission();
PartyProvider getPartyProvider();
Set<PartyProvider> getPartyProviders();
WorldGuardAPI getWorldGuardApi();
mcMMO getMcmmoClassic();
Heroes getHeroes();
PhatLoots getPhatLoots();
PlaceholderAPIPlugin getPlaceholderApi();
CitizensPlugin getCitizens();
void linkCitizens();
void unlinkCitizens();
DenizenAPI getDenizenApi();
CitizensBooksAPI getCitizensBooksApi();
PartiesAPI getPartiesApi();
boolean isPluginAvailable(final String pluginName);
boolean runDenizenScript(final String scriptName, final IQuester quester);
Location getNPCLocation(final int id);
String getNPCName(final int id);
int getMcmmoSkillLevel(final SkillType st, final String player);
Hero getHero(final UUID uuid);
boolean testPrimaryHeroesClass(final String primaryClass, final UUID uuid);
boolean testSecondaryHeroesClass(final String secondaryClass, final UUID uuid);
void init();
}

View File

@ -0,0 +1,45 @@
package me.blackvein.quests.entity;
import org.bukkit.Location;
import org.bukkit.entity.EntityType;
import org.bukkit.inventory.ItemStack;
public interface QuestMob {
String getName();
void setName(final String name);
EntityType getType();
void setType(final EntityType entityType);
Location getSpawnLocation();
void setSpawnLocation(final Location spawnLocation);
Integer getSpawnAmounts();
void setSpawnAmounts(final int spawnAmounts);
ItemStack[] getInventory();
void setInventory(final ItemStack[] inventory);
Float[] getDropChances();
void setDropChances(final Float[] dropChances);
void setHelmet(final ItemStack helmet, final float dropChance);
void setChest(final ItemStack chest, final float dropChance);
void setLeggings(final ItemStack leggings, final float dropChance);
void setBoots(final ItemStack boots, final float dropChance);
void setHeldItem(final ItemStack heldItem, final float dropChance);
void spawn();
String serialize();
}

View File

@ -12,13 +12,12 @@
package me.blackvein.quests.events.editor.actions;
import me.blackvein.quests.QuestsAPI;
import me.blackvein.quests.actions.ActionFactory;
import me.blackvein.quests.events.QuestsEvent;
import org.bukkit.conversations.ConversationContext;
import org.bukkit.conversations.Prompt;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.Quests;
import me.blackvein.quests.actions.ActionFactory;
import me.blackvein.quests.events.QuestsEvent;
import org.jetbrains.annotations.NotNull;
import java.util.Objects;
@ -34,14 +33,14 @@ public abstract class ActionsEditorEvent extends QuestsEvent {
public ActionsEditorEvent(final ConversationContext context, final Prompt prompt) {
this.context = context;
this.factory = ((Quests) Objects.requireNonNull(context.getPlugin())).getActionFactory();
this.factory = ((QuestsAPI) Objects.requireNonNull(context.getPlugin())).getActionFactory();
this.prompt = prompt;
}
public ActionsEditorEvent(final ConversationContext context, final Prompt prompt, final boolean async) {
super(async);
this.context = context;
this.factory = ((Quests) Objects.requireNonNull(context.getPlugin())).getActionFactory();
this.factory = ((QuestsAPI) Objects.requireNonNull(context.getPlugin())).getActionFactory();
this.prompt = prompt;
}

View File

@ -12,10 +12,9 @@
package me.blackvein.quests.events.editor.actions;
import me.blackvein.quests.convo.actions.ActionsEditorStringPrompt;
import org.bukkit.conversations.ConversationContext;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.convo.actions.ActionsEditorStringPrompt;
import org.jetbrains.annotations.NotNull;
public class ActionsEditorPostOpenStringPromptEvent extends ActionsEditorEvent {

View File

@ -12,13 +12,12 @@
package me.blackvein.quests.events.editor.conditions;
import me.blackvein.quests.QuestsAPI;
import me.blackvein.quests.conditions.ConditionFactory;
import me.blackvein.quests.events.QuestsEvent;
import org.bukkit.conversations.ConversationContext;
import org.bukkit.conversations.Prompt;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.Quests;
import me.blackvein.quests.conditions.ConditionFactory;
import me.blackvein.quests.events.QuestsEvent;
import org.jetbrains.annotations.NotNull;
import java.util.Objects;
@ -34,14 +33,14 @@ public abstract class ConditionsEditorEvent extends QuestsEvent {
public ConditionsEditorEvent(final ConversationContext context, final Prompt prompt) {
this.context = context;
this.factory = ((Quests) Objects.requireNonNull(context.getPlugin())).getConditionFactory();
this.factory = ((QuestsAPI) Objects.requireNonNull(context.getPlugin())).getConditionFactory();
this.prompt = prompt;
}
public ConditionsEditorEvent(final ConversationContext context, final Prompt prompt, final boolean async) {
super(async);
this.context = context;
this.factory = ((Quests) Objects.requireNonNull(context.getPlugin())).getConditionFactory();
this.factory = ((QuestsAPI) Objects.requireNonNull(context.getPlugin())).getConditionFactory();
this.prompt = prompt;
}

View File

@ -12,13 +12,12 @@
package me.blackvein.quests.events.editor.quests;
import me.blackvein.quests.quests.QuestFactory;
import me.blackvein.quests.QuestsAPI;
import me.blackvein.quests.events.QuestsEvent;
import org.bukkit.conversations.ConversationContext;
import org.bukkit.conversations.Prompt;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.QuestFactory;
import me.blackvein.quests.Quests;
import me.blackvein.quests.events.QuestsEvent;
import org.jetbrains.annotations.NotNull;
import java.util.Objects;
@ -34,14 +33,14 @@ public abstract class QuestsEditorEvent extends QuestsEvent {
public QuestsEditorEvent(final ConversationContext context, final Prompt prompt) {
this.context = context;
this.factory = ((Quests) Objects.requireNonNull(context.getPlugin())).getQuestFactory();
this.factory = ((QuestsAPI) Objects.requireNonNull(context.getPlugin())).getQuestFactory();
this.prompt = prompt;
}
public QuestsEditorEvent(final ConversationContext context, final Prompt prompt, final boolean async) {
super(async);
this.context = context;
this.factory = ((Quests) Objects.requireNonNull(context.getPlugin())).getQuestFactory();
this.factory = ((QuestsAPI) Objects.requireNonNull(context.getPlugin())).getQuestFactory();
this.prompt = prompt;
}

View File

@ -12,10 +12,9 @@
package me.blackvein.quests.events.editor.quests;
import me.blackvein.quests.convo.quests.QuestsEditorNumericPrompt;
import org.bukkit.conversations.ConversationContext;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.convo.quests.QuestsEditorNumericPrompt;
import org.jetbrains.annotations.NotNull;
public class QuestsEditorPostOpenNumericPromptEvent extends QuestsEditorEvent {

View File

@ -12,10 +12,9 @@
package me.blackvein.quests.events.editor.quests;
import me.blackvein.quests.convo.quests.QuestsEditorStringPrompt;
import org.bukkit.conversations.ConversationContext;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.convo.quests.QuestsEditorStringPrompt;
import org.jetbrains.annotations.NotNull;
public class QuestsEditorPostOpenStringPromptEvent extends QuestsEditorEvent {

View File

@ -14,7 +14,7 @@ package me.blackvein.quests.events.quest;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.Quest;
import me.blackvein.quests.quests.IQuest;
import me.blackvein.quests.events.QuestsEvent;
import org.jetbrains.annotations.NotNull;
@ -23,13 +23,13 @@ import org.jetbrains.annotations.NotNull;
*/
public abstract class QuestEvent extends QuestsEvent {
private static final HandlerList HANDLERS = new HandlerList();
private final Quest quest;
private final IQuest quest;
public QuestEvent(final Quest quest) {
public QuestEvent(final IQuest quest) {
this.quest = quest;
}
public QuestEvent(final Quest quest, final boolean async) {
public QuestEvent(final IQuest quest, final boolean async) {
super(async);
this.quest = quest;
}
@ -39,7 +39,7 @@ public abstract class QuestEvent extends QuestsEvent {
*
* @return Quest which is involved in this event
*/
public final Quest getQuest() {
public final IQuest getQuest() {
return quest;
}

View File

@ -15,8 +15,8 @@ package me.blackvein.quests.events.quest;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester;
import me.blackvein.quests.quests.IQuest;
import me.blackvein.quests.player.IQuester;
import org.jetbrains.annotations.NotNull;
/**
@ -24,10 +24,10 @@ import org.jetbrains.annotations.NotNull;
*/
public class QuestQuitEvent extends QuestEvent implements Cancellable {
private static final HandlerList HANDLERS = new HandlerList();
private final Quester quester;
private final IQuester quester;
private boolean cancel = false;
public QuestQuitEvent(final Quest quest, final Quester who) {
public QuestQuitEvent(final IQuest quest, final IQuester who) {
super(quest);
this.quester = who;
}
@ -37,7 +37,7 @@ public class QuestQuitEvent extends QuestEvent implements Cancellable {
*
* @return Quester who is involved in this event
*/
public Quester getQuester() {
public IQuester getQuester() {
return quester;
}

View File

@ -15,8 +15,8 @@ package me.blackvein.quests.events.quest;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester;
import me.blackvein.quests.quests.IQuest;
import me.blackvein.quests.player.IQuester;
import org.jetbrains.annotations.NotNull;
/**
@ -24,10 +24,10 @@ import org.jetbrains.annotations.NotNull;
*/
public class QuestTakeEvent extends QuestEvent implements Cancellable {
private static final HandlerList HANDLERS = new HandlerList();
private final Quester quester;
private final IQuester quester;
private boolean cancel = false;
public QuestTakeEvent(final Quest quest, final Quester who) {
public QuestTakeEvent(final IQuest quest, final IQuester who) {
super(quest);
this.quester = who;
}
@ -37,7 +37,7 @@ public class QuestTakeEvent extends QuestEvent implements Cancellable {
*
* @return Quester who is involved in this event
*/
public Quester getQuester() {
public IQuester getQuester() {
return quester;
}

View File

@ -16,8 +16,8 @@ import org.bukkit.Location;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester;
import me.blackvein.quests.quests.IQuest;
import me.blackvein.quests.player.IQuester;
import org.jetbrains.annotations.NotNull;
/**
@ -25,11 +25,11 @@ import org.jetbrains.annotations.NotNull;
*/
public class QuestUpdateCompassEvent extends QuestEvent implements Cancellable {
private static final HandlerList HANDLERS = new HandlerList();
private final Quester quester;
private final IQuester quester;
private final Location target;
private boolean cancel = false;
public QuestUpdateCompassEvent(final Quest quest, final Quester who, final Location target) {
public QuestUpdateCompassEvent(final IQuest quest, final IQuester who, final Location target) {
super(quest);
this.quester = who;
this.target = target;
@ -40,7 +40,7 @@ public class QuestUpdateCompassEvent extends QuestEvent implements Cancellable {
*
* @return Quester who is involved in this event
*/
public Quester getQuester() {
public IQuester getQuester() {
return quester;
}

View File

@ -0,0 +1,89 @@
/*
* Copyright (c) 2014 PikaMug and contributors. 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.module;
import me.blackvein.quests.quests.IQuest;
import org.bukkit.entity.Player;
import java.util.LinkedList;
import java.util.Map;
public interface ICustomObjective {
String getModuleName();
Map.Entry<String, Short> getModuleItem();
String getName();
void setName(final String name);
String getAuthor();
void setAuthor(final String author);
String getDisplay();
void setDisplay(final String display);
Map.Entry<String, Short> getItem();
void setItem(final String type, final short durability);
LinkedList<Map.Entry<String, Object>> getData();
/**
* Add a new prompt<p>
*
* Note that the "defaultValue" Object will be cast to a String internally
*
* @param title Prompt name
* @param description Description of expected input
* @param defaultValue Value to be used if input is not received
*/
void addStringPrompt(final String title, final String description, final Object defaultValue);
Map<String, String> getDescriptions();
int getCount();
void setCount(final int count);
String getCountPrompt();
void setCountPrompt(final String countPrompt);
/**
* Check whether to let user set required amount for objective
*/
boolean canShowCount();
/**
* Set whether to let user set required amount for objective
*
* @param showCount Whether to show the count
*/
void setShowCount(final boolean showCount);
/**
* Get custom objective data for applicable player
*
* @param player Player attempting this objective
* @param customObj The objective being attempted
* @param quest Current me.blackvein.quests.Quest which includes this objective
* @return data
*/
Map<String, Object> getDataForPlayer(final Player player, final ICustomObjective customObj, final IQuest quest);
void incrementObjective(final Player player, final ICustomObjective obj, final int count, final IQuest quest);
}

View File

@ -0,0 +1,233 @@
package me.blackvein.quests.player;
import me.blackvein.quests.quests.IQuest;
import me.blackvein.quests.quests.IStage;
import me.blackvein.quests.quests.Objective;
import me.blackvein.quests.QuestData;
import me.blackvein.quests.enums.ObjectiveType;
import me.blackvein.quests.module.ICustomObjective;
import net.citizensnpcs.api.npc.NPC;
import org.bukkit.DyeColor;
import org.bukkit.Location;
import org.bukkit.OfflinePlayer;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.inventory.ItemStack;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentSkipListSet;
import java.util.function.BiFunction;
import java.util.function.Function;
public interface IQuester extends Comparable<IQuester> {
UUID getUUID();
void setUUID(final UUID id);
String getQuestIdToTake();
void setQuestIdToTake(final String questIdToTake);
String getLastKnownName();
void setLastKnownName(final String lastKnownName);
int getQuestPoints();
void setQuestPoints(final int questPoints);
/**
* Get compass target quest. Returns null if not set
*
* @return Quest or null
*/
IQuest getCompassTarget();
/**
* Set compass target quest. Does not update in-game
*
* @param quest The target quest
*/
void setCompassTarget(final IQuest quest);
ConcurrentHashMap<Integer, IQuest> getTimers();
void setTimers(final ConcurrentHashMap<Integer, IQuest> timers);
void removeTimer(final Integer timerId);
ConcurrentHashMap<IQuest, Integer> getCurrentQuests();
void setCurrentQuests(final ConcurrentHashMap<IQuest, Integer> currentQuests);
ConcurrentSkipListSet<IQuest> getCompletedQuests();
void setCompletedQuests(final ConcurrentSkipListSet<IQuest> completedQuests);
ConcurrentHashMap<IQuest, Long> getCompletedTimes();
void setCompletedTimes(final ConcurrentHashMap<IQuest, Long> completedTimes);
ConcurrentHashMap<IQuest, Integer> getAmountsCompleted();
void setAmountsCompleted(final ConcurrentHashMap<IQuest, Integer> amountsCompleted);
ConcurrentHashMap<IQuest, QuestData> getQuestData();
void setQuestData(final ConcurrentHashMap<IQuest, QuestData> questData);
Player getPlayer();
OfflinePlayer getOfflinePlayer();
void sendMessage(final String message);
IStage getCurrentStage(final IQuest quest);
QuestData getQuestData(final IQuest quest);
boolean hasJournal();
ItemStack getJournal();
int getJournalIndex();
void updateJournal();
void takeQuest(final IQuest quest, final boolean ignoreRequirements);
void quitQuest(final IQuest quest, final String message);
void quitQuest(final IQuest quest, final String[] messages);
LinkedList<String> getCurrentRequirements(final IQuest quest, final boolean ignoreOverrides);
LinkedList<String> getCurrentObjectives(final IQuest quest, final boolean ignoreOverrides);
LinkedList<String> getObjectives(final IQuest quest, final boolean ignoreOverrides);
boolean containsObjective(final IQuest quest, final String name);
boolean hasCustomObjective(final IQuest quest, final String name);
void breakBlock(final IQuest quest, final ItemStack itemStack);
void damageBlock(final IQuest quest, final ItemStack itemStack);
void placeBlock(final IQuest quest, final ItemStack itemStack);
void useBlock(final IQuest quest, final ItemStack itemStack);
void cutBlock(final IQuest quest, final ItemStack itemStack);
void craftItem(final IQuest quest, final ItemStack itemStack);
void smeltItem(final IQuest quest, final ItemStack itemStack);
void enchantBook(final IQuest quest, final ItemStack itemStack,
final Map<Enchantment, Integer> enchantsToAdd);
void enchantItem(final IQuest quest, final ItemStack itemStack);
void brewItem(final IQuest quest, final ItemStack itemStack);
void consumeItem(final IQuest quest, final ItemStack itemStack);
void deliverToNPC(final IQuest quest, final NPC npc, final ItemStack itemStack);
void interactWithNPC(final IQuest quest, final NPC npc);
void killNPC(final IQuest quest, final NPC npc);
void milkCow(final IQuest quest);
void catchFish(final IQuest quest);
void killMob(final IQuest quest, final Location killedLocation, final EntityType entityType);
void killPlayer(final IQuest quest, final Player player);
void reachLocation(final IQuest quest, final Location location);
void tameMob(final IQuest quest, final EntityType entityType);
void shearSheep(final IQuest quest, final DyeColor color);
void sayPassword(final IQuest quest, final AsyncPlayerChatEvent evt);
void finishObjective(final IQuest quest, final Objective objective, final EntityType mob,
final String extra, final NPC npc, final Location location, final DyeColor color,
final String pass, final ICustomObjective co);
boolean testComplete(final IQuest quest);
void addEmptiesFor(final IQuest quest, final int stage);
boolean saveData();
long getCompletionDifference(final IQuest quest);
long getRemainingCooldown(final IQuest quest);
FileConfiguration getBaseData();
boolean hasData();
boolean hasBaseData();
void startStageTimer(final IQuest quest);
void stopStageTimer(final IQuest quest);
long getStageTime(final IQuest quest);
void checkQuest(final IQuest quest);
void showGUIDisplay(final NPC npc, final LinkedList<IQuest> quests);
void hardQuit(final IQuest quest);
void hardRemove(final IQuest quest);
void hardClear();
void hardStagePut(final IQuest key, final Integer val);
void hardDataPut(final IQuest key, final QuestData val);
boolean canUseCompass();
void resetCompass();
void findCompassTarget();
void findNextCompassTarget(final boolean notify);
boolean hasItem(final ItemStack is);
Set<String> dispatchMultiplayerEverything(final IQuest quest, final ObjectiveType type,
final BiFunction<IQuester, IQuest, Void> fun);
Set<String> dispatchMultiplayerObjectives(final IQuest quest, final IStage currentStage,
final Function<IQuester, Void> fun);
List<IQuester> getMultiplayerQuesters(final IQuest quest);
boolean offerQuest(final IQuest quest, final boolean giveReason);
boolean canAcceptOffer(final IQuest quest, final boolean giveReason);
boolean meetsCondition(final IQuest quest, final boolean giveReason);
boolean isSelectingBlock();
boolean isInRegion(final String regionID);
}

View File

@ -0,0 +1,87 @@
package me.blackvein.quests.quests;
import me.blackvein.quests.actions.IAction;
import me.blackvein.quests.player.IQuester;
import net.citizensnpcs.api.npc.NPC;
import org.bukkit.Location;
import org.bukkit.OfflinePlayer;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.Plugin;
import java.util.LinkedList;
public interface IQuest extends Comparable<IQuest> {
Plugin getPlugin();
void setPlugin(Plugin plugin);
String getId();
void setId(String id);
String getName();
void setName(final String name);
String getDescription();
void setDescription(final String description);
String getFinished();
void setFinished(final String finished);
String getRegionStart();
void setRegionStart(final String regionStart);
ItemStack getGUIDisplay();
void setGUIDisplay(final ItemStack guiDisplay);
IStage getStage(final int index);
LinkedList<IStage> getStages();
NPC getNpcStart();
void setNpcStart(final NPC npcStart);
Location getBlockStart();
void setBlockStart(final Location blockStart);
IAction getInitialAction();
void setInitialAction(final IAction initialAction);
Requirements getRequirements();
Planner getPlanner();
Rewards getRewards();
Options getOptions();
void nextStage(final IQuester quester, final boolean allowSharedProgress);
void setStage(final IQuester quester, final int stage);
boolean updateCompass(final IQuester quester, final IStage stage);
boolean testRequirements(final IQuester quester);
boolean testRequirements(final OfflinePlayer player);
void completeQuest(final IQuester quester);
void completeQuest(final IQuester quester, final boolean allowMultiplayer);
void failQuest(final IQuester quester);
void failQuest(final IQuester quester, final boolean ignoreFailAction);
boolean isInRegion(final IQuester quester);
boolean isInRegionStart(final IQuester quester);
}

View File

@ -0,0 +1,315 @@
package me.blackvein.quests.quests;
import me.blackvein.quests.actions.IAction;
import me.blackvein.quests.conditions.ICondition;
import me.blackvein.quests.enums.ObjectiveType;
import me.blackvein.quests.module.ICustomObjective;
import org.bukkit.DyeColor;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.EntityType;
import org.bukkit.inventory.ItemStack;
import java.util.LinkedList;
import java.util.Map;
public interface IStage {
LinkedList<ItemStack> getBlocksToBreak();
boolean addBlockToBreak(ItemStack blockToBreak);
void setBlocksToBreak(final LinkedList<ItemStack> blocksToBreak);
LinkedList<ItemStack> getBlocksToDamage();
boolean addBlockToDamage(ItemStack blockToDamage);
void setBlocksToDamage(final LinkedList<ItemStack> blocksToDamage);
LinkedList<ItemStack> getBlocksToPlace();
boolean addBlockToPlace(ItemStack blockToPlace);
void setBlocksToPlace(final LinkedList<ItemStack> blocksToPlace);
LinkedList<ItemStack> getBlocksToUse();
boolean addBlockToUse(ItemStack blockToUse);
void setBlocksToUse(final LinkedList<ItemStack> blocksToUse);
LinkedList<ItemStack> getBlocksToCut();
boolean addBlockToCut(ItemStack blockToCut);
void setBlocksToCut(final LinkedList<ItemStack> blocksToCut);
LinkedList<ItemStack> getItemsToCraft();
boolean addItemToCraft(ItemStack itemToCraft);
void setItemsToCraft(final LinkedList<ItemStack> itemsToCraft);
LinkedList<ItemStack> getItemsToSmelt();
boolean addItemToSmelt(ItemStack itemToSmelt);
void setItemsToSmelt(final LinkedList<ItemStack> itemsToSmelt);
LinkedList<ItemStack> getItemsToEnchant();
boolean addItemToEnchant(ItemStack itemToEnchant);
void setItemsToEnchant(final LinkedList<ItemStack> itemsToEnchant);
LinkedList<ItemStack> getItemsToBrew();
boolean addItemsToBrew(ItemStack itemToBrew);
void setItemsToBrew(final LinkedList<ItemStack> itemsToBrew);
LinkedList<ItemStack> getItemsToConsume();
boolean addItemToConsume(ItemStack itemToConsume);
void setItemsToConsume(final LinkedList<ItemStack> itemsToConsume);
LinkedList<ItemStack> getItemsToDeliver();
boolean addItemToDeliver(ItemStack itemToDeliver);
void setItemsToDeliver(final LinkedList<ItemStack> itemsToDeliver);
LinkedList<Integer> getItemDeliveryTargets();
boolean addItemDeliveryTarget(Integer itemDeliveryTarget);
void setItemDeliveryTargets(final LinkedList<Integer> itemDeliveryTargets);
LinkedList<String> getDeliverMessages();
boolean addDeliverMessage(String deliverMessage);
void setDeliverMessages(final LinkedList<String> deliverMessages);
LinkedList<Integer> getCitizensToInteract();
boolean addCitizenToInteract(Integer citizenToInteract);
void setCitizensToInteract(final LinkedList<Integer> citizensToInteract);
LinkedList<Integer> getCitizensToKill();
boolean addCitizenToKill(Integer citizenToKill);
void setCitizensToKill(final LinkedList<Integer> citizensToKill);
LinkedList<Integer> getCitizenNumToKill();
boolean addCitizenNumToKill(Integer citizenNumToKill);
void setCitizenNumToKill(final LinkedList<Integer> citizenNumToKill);
LinkedList<EntityType> getMobsToKill();
boolean addMobToKill(EntityType mobToKill);
void setMobsToKill(final LinkedList<EntityType> mobsToKill);
LinkedList<Integer> getMobNumToKill();
boolean addMobNumToKill(Integer mobNumToKill);
void setMobNumToKill(final LinkedList<Integer> mobNumToKill);
LinkedList<Location> getLocationsToKillWithin();
boolean addLocationToKillWithin(Location locationToKillWithin);
void setLocationsToKillWithin(final LinkedList<Location> locationsToKillWithin);
LinkedList<Integer> getRadiiToKillWithin();
boolean addRadiusToKillWithin(Integer radiusToKillWithin);
void setRadiiToKillWithin(final LinkedList<Integer> radiiToKillWithin);
LinkedList<String> getKillNames();
boolean addKillName(String killName);
void setKillNames(final LinkedList<String> killNames);
LinkedList<Location> getLocationsToReach();
boolean addLocationToReach(Location locationToReach);
void setLocationsToReach(final LinkedList<Location> locationsToReach);
LinkedList<Integer> getRadiiToReachWithin();
boolean addRadiusToReachWithin(Integer radiusToReachWithin);
void setRadiiToReachWithin(final LinkedList<Integer> radiiToReachWithin);
LinkedList<World> getWorldsToReachWithin();
boolean addWorldToReachWithin(World worldToReachWithin);
void setWorldsToReachWithin(final LinkedList<World> worldsToReachWithin);
LinkedList<String> getLocationNames();
boolean addLocationName(String locationName);
void setLocationNames(final LinkedList<String> locationNames);
LinkedList<EntityType> getMobsToTame();
boolean addMobToTame(EntityType mobToTame);
void setMobsToTame(final LinkedList<EntityType> mobsToTame);
LinkedList<Integer> getMobNumToTame();
boolean addMobNumToTame(Integer mobNumToTame);
void setMobNumToTame(final LinkedList<Integer> mobNumToTame);
Integer getFishToCatch();
void setFishToCatch(final Integer fishToCatch);
Integer getCowsToMilk();
void setCowsToMilk(final Integer cowsToMilk);
Integer getPlayersToKill();
void setPlayersToKill(final Integer playersToKill);
LinkedList<DyeColor> getSheepToShear();
boolean addSheepToShear(DyeColor sheepToShear);
void setSheepToShear(final LinkedList<DyeColor> sheepToShear);
LinkedList<Integer> getSheepNumToShear();
boolean addSheepNumToShear(Integer sheepNumToShear);
void setSheepNumToShear(final LinkedList<Integer> sheepNumToShear);
LinkedList<String> getPasswordDisplays();
boolean addPasswordDisplay(String passwordDisplay);
void setPasswordDisplays(final LinkedList<String> passwordDisplays);
LinkedList<String> getPasswordPhrases();
boolean addPasswordPhrase(String passwordPhrase);
void setPasswordPhrases(final LinkedList<String> passwordPhrases);
String getScript();
void setScript(final String script);
IAction getStartAction();
void setStartAction(final IAction startAction);
IAction getFinishAction();
void setFinishAction(final IAction finishAction);
IAction getFailAction();
void setFailAction(final IAction failAction);
IAction getDeathAction();
void setDeathAction(final IAction deathAction);
Map<String, IAction> getChatActions();
void addChatAction(Map.Entry<String, IAction> chatAction);
void setChatActions(final Map<String, IAction> chatActions);
Map<String, IAction> getCommandActions();
void addCommandAction(Map.Entry<String, IAction> commandAction);
void setCommandActions(final Map<String, IAction> commandActions);
IAction getDisconnectAction();
void setDisconnectAction(final IAction disconnectAction);
ICondition getCondition();
void setCondition(final ICondition condition);
long getDelay();
void setDelay(final long delay);
String getDelayMessage();
void setDelayMessage(final String delayMessage);
String getCompleteMessage();
void setCompleteMessage(final String completeMessage);
String getStartMessage();
void setStartMessage(final String startMessage);
LinkedList<String> getObjectiveOverrides();
boolean addObjectiveOverride(String objectiveOverride);
void setObjectiveOverrides(final LinkedList<String> objectiveOverrides);
LinkedList<ICustomObjective> getCustomObjectives();
boolean addCustomObjectives(final ICustomObjective customObjective);
void clearCustomObjectives();
LinkedList<Integer> getCustomObjectiveCounts();
boolean addCustomObjectiveCounts(final Integer customObjectiveCount);
void clearCustomObjectiveCounts();
LinkedList<String> getCustomObjectiveDisplays();
void clearCustomObjectiveDisplays();
LinkedList<Map.Entry<String, Object>> getCustomObjectiveData();
boolean addCustomObjectiveData(final Map.Entry<String, Object> customObjectiveDatum);
void clearCustomObjectiveData();
/**
* Check if stage has at least one objective<p>
*
* Excludes start/complete message, delay, and objective-override
*
* @return true if stage contains an objective
*/
boolean hasObjective();
/**
* Check if stage has the specified type of objective<p>
*
* @param type The type of objective to check for
* @return true if stage contains specified objective
*/
boolean containsObjective(final ObjectiveType type);
}

View File

@ -0,0 +1,16 @@
package me.blackvein.quests.quests;
import me.blackvein.quests.enums.ObjectiveType;
import org.bukkit.inventory.ItemStack;
public interface Objective {
ObjectiveType getType();
int getProgress();
int getGoal();
ItemStack getItemProgress();
ItemStack getItemGoal();
}

View File

@ -0,0 +1,39 @@
package me.blackvein.quests.quests;
public interface Options {
boolean canAllowCommands();
void setAllowCommands(final boolean allowCommands);
boolean canAllowQuitting();
void setAllowQuitting(final boolean allowQuitting);
boolean canIgnoreSilkTouch();
void setIgnoreSilkTouch(final boolean ignoreSilkTouch);
String getExternalPartyPlugin();
void setExternalPartyPlugin(final String externalPartyPlugin);
boolean canUsePartiesPlugin();
void setUsePartiesPlugin(final boolean usePartiesPlugin);
int getShareProgressLevel();
void setShareProgressLevel(final int shareProgressLevel);
boolean canShareSameQuestOnly();
void setShareSameQuestOnly(final boolean shareSameQuestOnly);
double getShareDistance();
void setShareDistance(final double shareDistance);
boolean canHandleOfflinePlayers();
void setHandleOfflinePlayers(final boolean handleOfflinePlayers);
}

View File

@ -0,0 +1,20 @@
package me.blackvein.quests.quests;
public interface Planner {
String getStart();
long getStartInMillis();
boolean hasStart();
void setStart(final String start);
String getEnd();
long getEndInMillis();
boolean hasEnd();
void setEnd(final String end);
long getRepeat();
boolean hasRepeat();
void setRepeat(final long repeat);
long getCooldown();
boolean hasCooldown();
void setCooldown(final long cooldown);
boolean getOverride();
void setOverride(final boolean override);
}

View File

@ -0,0 +1,54 @@
package me.blackvein.quests.quests;
import org.bukkit.block.Block;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.conversations.ConversationContext;
import org.bukkit.conversations.ConversationFactory;
import org.bukkit.conversations.Prompt;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
public interface QuestFactory {
Map<UUID, Block> getSelectedBlockStarts();
void setSelectedBlockStarts(final Map<UUID, Block> selectedBlockStarts);
Map<UUID, Block> getSelectedKillLocations();
void setSelectedKillLocations(final Map<UUID, Block> selectedKillLocations);
Map<UUID, Block> getSelectedReachLocations();
void setSelectedReachLocations(final Map<UUID, Block> selectedReachLocations);
Set<UUID> getSelectingNpcs();
void setSelectingNpcs(final Set<UUID> selectingNpcs);
List<String> getNamesOfQuestsBeingEdited();
void setNamesOfQuestsBeingEdited(final List<String> questNames);
ConversationFactory getConversationFactory();
Prompt returnToMenu(final ConversationContext context);
void loadQuest(final ConversationContext context, final IQuest q);
void deleteQuest(final ConversationContext context);
void saveQuest(final ConversationContext context, final ConfigurationSection section);
/*void saveRequirements(final ConversationContext context, final ConfigurationSection section);
void saveStages(final ConversationContext context, final ConfigurationSection section);
void saveRewards(final ConversationContext context, final ConfigurationSection section);
void savePlanner(final ConversationContext context, final ConfigurationSection section);
void saveOptions(final ConversationContext context, final ConfigurationSection section);*/
}

View File

@ -0,0 +1,61 @@
package me.blackvein.quests.quests;
import me.blackvein.quests.quests.IQuest;
import org.bukkit.inventory.ItemStack;
import java.util.List;
import java.util.Map;
public interface Requirements {
int getMoney();
void setMoney(final int money);
int getQuestPoints();
void setQuestPoints(final int questPoints);
List<ItemStack> getItems();
void setItems(final List<ItemStack> items);
List<Boolean> getRemoveItems();
void setRemoveItems(final List<Boolean> removeItems);
List<IQuest> getNeededQuests();
void setNeededQuests(final List<IQuest> neededQuests);
List<IQuest> getBlockQuests();
void setBlockQuests(final List<IQuest> blockQuests);
List<String> getPermissions();
void setPermissions(final List<String> permissions);
List<String> getMcmmoSkills();
void setMcmmoSkills(final List<String> mcmmoSkills);
List<Integer> getMcmmoAmounts();
void setMcmmoAmounts(final List<Integer> mcmmoAmounts);
String getHeroesPrimaryClass();
void setHeroesPrimaryClass(final String heroesPrimaryClass);
String getHeroesSecondaryClass();
void setHeroesSecondaryClass(final String heroesSecondaryClass);
Map<String, Map<String, Object>> getCustomRequirements();
void setCustomRequirements(final Map<String, Map<String, Object>> customRequirements);
List<String> getDetailsOverride();
void setDetailsOverride(final List<String> detailsOverride);
}

View File

@ -0,0 +1,41 @@
package me.blackvein.quests.quests;
import org.bukkit.inventory.ItemStack;
import java.util.List;
import java.util.Map;
public interface Rewards {
int getMoney();
void setMoney(final int money);
int getQuestPoints();
void setQuestPoints(final int questPoints);
int getExp();
void setExp(final int exp);
List<String> getCommands();
void setCommands(final List<String> commands);
List<String> getCommandsOverrideDisplay();
void setCommandsOverrideDisplay(final List<String> commandsOverrideDisplay);
List<String> getPermissions();
void setPermissions(final List<String> permissions);
List<String> getPermissionWorlds();
void setPermissionWorlds(final List<String> worldNames);
List<ItemStack> getItems();
void setItems(final List<ItemStack> items);
List<String> getMcmmoSkills();
void setMcmmoSkills(final List<String> mcmmoSkills);
List<Integer> getMcmmoAmounts();
void setMcmmoAmounts(final List<Integer> mcmmoAmounts);
List<String> getHeroesClasses();
void setHeroesClasses(final List<String> heroesClasses);
List<Double> getHeroesAmounts();
void setHeroesAmounts(final List<Double> heroesAmounts);
int getPartiesExperience();
void setPartiesExperience(final int partiesExperience);
List<String> getPhatLoots();
void setPhatLoots(final List<String> phatLoots);
Map<String, Map<String, Object>> getCustomRewards();
void setCustomRewards(final Map<String, Map<String, Object>> customRewards);
List<String> getDetailsOverride();
void setDetailsOverride(final List<String> detailsOverride);
}

View File

@ -12,7 +12,7 @@
package me.blackvein.quests.reflect.denizen;
import me.blackvein.quests.Quests;
import me.blackvein.quests.QuestsAPI;
import net.citizensnpcs.api.npc.NPC;
import org.bukkit.Bukkit;
import org.bukkit.configuration.file.YamlConfiguration;
@ -27,7 +27,7 @@ import java.util.logging.Level;
public class DenizenAPI_1_0_9 {
private static final Quests quests = (Quests) Bukkit.getPluginManager().getPlugin("Quests");
private static final QuestsAPI quests = (QuestsAPI) Bukkit.getPluginManager().getPlugin("Quests");
private static final DenizenAPI api = quests != null ? quests.getDependencies().getDenizenApi() : null;
public static boolean containsScript(final String input) {

View File

@ -16,7 +16,7 @@ import com.denizenscript.denizen.objects.NPCTag;
import com.denizenscript.denizen.objects.PlayerTag;
import com.denizenscript.denizencore.scripts.ScriptRegistry;
import com.denizenscript.denizencore.scripts.containers.core.TaskScriptContainer;
import me.blackvein.quests.Quests;
import me.blackvein.quests.QuestsAPI;
import net.citizensnpcs.api.npc.NPC;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
@ -31,7 +31,7 @@ import java.util.logging.Level;
public class DenizenAPI_1_1_0 {
private static final Quests quests = (Quests) Bukkit.getPluginManager().getPlugin("Quests");
private static final QuestsAPI quests = (QuestsAPI) Bukkit.getPluginManager().getPlugin("Quests");
private static final DenizenAPI api = quests != null ? quests.getDependencies().getDenizenApi() : null;
public static boolean containsScript(final String input) {

View File

@ -12,8 +12,7 @@
package me.blackvein.quests.util;
import me.blackvein.quests.Dependencies;
import me.blackvein.quests.Quests;
import me.blackvein.quests.QuestsAPI;
import me.clip.placeholderapi.PlaceholderAPI;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
@ -126,7 +125,7 @@ public class Lang {
}
}
public static void init(final Quests plugin) throws InvalidConfigurationException, IOException {
public static void init(final QuestsAPI plugin) throws InvalidConfigurationException, IOException {
final File langFile = new File(plugin.getDataFolder(), File.separator + "lang" + File.separator + iso + File.separator
+ "strings.yml");
final File langFile_new = new File(plugin.getDataFolder(), File.separator + "lang" + File.separator + iso
@ -278,7 +277,7 @@ public class Lang {
}
s = convertString(s);
if (Bukkit.getServer().getPluginManager().getPlugin("PlaceholderAPI") != null ) {
if (Dependencies.placeholder.isEnabled()) {
if (Bukkit.getServer().getPluginManager().getPlugin("PlaceholderAPI").isEnabled()) {
s = PlaceholderAPI.setPlaceholders(p, s);
}
}

274
core/pom.xml Normal file
View File

@ -0,0 +1,274 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>me.blackvein.quests</groupId>
<artifactId>quests-parent</artifactId>
<version>4.2.0</version>
</parent>
<artifactId>quests-core</artifactId>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repositories>
<repository>
<!-- CitizensBooks, DungeonsXL, GPS, LocaleLib, mcMMO Classic, PhatLoots -->
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
<repository>
<id>spigot-repo</id>
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
</repository>
<repository>
<!-- Citizens, Denizen -->
<id>citizens-repo</id>
<url>https://repo.citizensnpcs.co/</url>
</repository>
<repository>
<!-- WorldEdit, WorldGuard -->
<id>enginehub-repo</id>
<url>https://maven.enginehub.org/repo/</url>
</repository>
<repository>
<!-- Parties -->
<id>alessiodp-repo</id>
<url>https://repo.alessiodp.com/releases/</url>
</repository>
<repository>
<!-- PlaceholderAPI -->
<id>papi-repo</id>
<url>https://repo.extendedclip.com/content/repositories/placeholderapi/</url>
</repository>
<repository>
<!-- Heroes, Vault -->
<id>hc-repo</id>
<url>https://nexus.hc.to/content/repositories/pub_releases/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.13.2-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>net.citizensnpcs</groupId>
<artifactId>citizensapi</artifactId>
<version>2.0.21-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.denizenscript</groupId>
<artifactId>denizen</artifactId>
<version>1.1.3-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>net.milkbowl.vault</groupId>
<artifactId>Vault</artifactId>
<version>1.7.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.github.mcMMO-Dev</groupId>
<artifactId>mcMMO-Classic</artifactId>
<version>master-82f97cbe04-1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.herocraftonline.heroes</groupId>
<artifactId>heroes-stripped</artifactId>
<version>4dd3dd85</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.sk89q.worldedit</groupId>
<artifactId>worldedit-bukkit</artifactId>
<version>7.2.8</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.sk89q.worldguard</groupId>
<artifactId>worldguard-bukkit</artifactId>
<version>7.0.5-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>me.clip</groupId>
<artifactId>placeholderapi</artifactId>
<version>2.9.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.github.nicuch</groupId>
<artifactId>CitizensBooks</artifactId>
<version>2.5.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.github.RednedEpic</groupId>
<artifactId>PhatLoots</artifactId>
<version>e55d0ba1f6</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.alessiodp.parties</groupId>
<artifactId>parties-api</artifactId>
<version>3.1.6</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.github.PikaMug</groupId>
<artifactId>Unite</artifactId>
<version>1.1.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.github.PikaMug</groupId>
<artifactId>LocaleLib</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
<exclusions>
<exclusion>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<!-- Do not update until Java 11 is min -->
<version>4.0.3</version>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.33</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.1</version>
</dependency>
<dependency>
<groupId>me.blackvein.quests</groupId>
<artifactId>quests-api</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<defaultGoal>clean package install</defaultGoal>
<sourceDirectory>${basedir}/src/main/java</sourceDirectory>
<resources>
<resource>
<targetPath>.</targetPath>
<directory>${basedir}/src/main/resources/</directory>
<filtering>true</filtering>
<includes>
<include>lang/**/*.*</include>
<include>actions.yml</include>
<include>conditions.yml</include>
<include>config.yml</include>
<include>plugin.yml</include>
<include>quests.yml</include>
<include>strings.yml</include>
</includes>
</resource>
<resource>
<targetPath>.</targetPath>
<directory>${basedir}/</directory>
<filtering>false</filtering>
<includes>
<include>README.md</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<minimizeJar>false</minimizeJar>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
</execution>
</executions>
<configuration>
<artifactSet>
<includes>
<include>me.*</include>
<include>com.github.PikaMug:LocaleLib</include>
<include>com.zaxxer:HikariCP</include>
<include>org.slf4j:slf4j-simple</include>
<include>org.slf4j:slf4j-api</include>
<include>mysql</include>
</includes>
</artifactSet>
<relocations>
<relocation>
<pattern>me.pikamug.localelib</pattern>
<shadedPattern>me.blackvein.quests.libs.localelib</shadedPattern>
</relocation>
<relocation>
<pattern>com.zaxxer.hikari</pattern>
<shadedPattern>me.blackvein.quests.libs.hikari</shadedPattern>
</relocation>
<relocation>
<pattern>org.slf4j</pattern>
<shadedPattern>me.blackvein.quests.libs.slf4j</shadedPattern>
</relocation>
<relocation>
<pattern>com.mysql</pattern>
<shadedPattern>me.blackvein.quests.libs.mysql</shadedPattern>
</relocation>
</relocations>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -15,6 +15,10 @@ package me.blackvein.quests;
import me.blackvein.quests.enums.ObjectiveType;
import me.blackvein.quests.events.quester.QuesterPostUpdateObjectiveEvent;
import me.blackvein.quests.events.quester.QuesterPreUpdateObjectiveEvent;
import me.blackvein.quests.module.ICustomObjective;
import me.blackvein.quests.player.IQuester;
import me.blackvein.quests.quests.BukkitObjective;
import me.blackvein.quests.quests.IStage;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
@ -27,7 +31,7 @@ import java.util.LinkedList;
import java.util.Map;
import java.util.Map.Entry;
public abstract class CustomObjective implements Listener {
public abstract class CustomObjective implements ICustomObjective, Listener {
private final Quests plugin = Quests.getPlugin(Quests.class);
private String name = null;
@ -40,118 +44,131 @@ public abstract class CustomObjective implements Listener {
private boolean showCount = true;
private int count = 1;
@Override
public String getModuleName() {
return new File(getClass().getProtectionDomain().getCodeSource().getLocation().getPath()).getName()
.replace(".jar", "");
}
@Override
public Entry<String, Short> getModuleItem() {
return new AbstractMap.SimpleEntry<>("IRON_INGOT", (short) 0);
}
@Override
public String getName() {
return name;
}
@Override
public void setName(final String name) {
this.name = name;
}
@Override
public String getAuthor() {
return author;
}
@Override
public void setAuthor(final String author) {
this.author = author;
}
@Override
public String getDisplay() {
return display;
}
@Override
public void setDisplay(final String display) {
this.display = display;
}
@Override
public Entry<String, Short> getItem() {
return item;
}
/**
* @deprecated Use {@link #setItem(String, short)}
*/
public void addItem(final String type, final short durability) {
setItem(type, durability);
}
@Override
public void setItem(final String type, final short durability) {
this.item = new AbstractMap.SimpleEntry<>(type, durability);
}
@Override
public LinkedList<Entry<String, Object>> getData() {
return data;
}
/**
* Add a new prompt<p>
*
*
* Note that the "defaultValue" Object will be cast to a String internally
*
*
* @param title Prompt name
* @param description Description of expected input
* @param defaultValue Value to be used if input is not received
*/
@Override
public void addStringPrompt(final String title, final String description, final Object defaultValue) {
final Entry<String, Object> prompt = new AbstractMap.SimpleEntry<>(title, defaultValue);
data.add(prompt);
descriptions.put(title, description);
}
@Override
public Map<String, String> getDescriptions() {
return descriptions;
}
@Override
public int getCount() {
return count;
}
@Override
public void setCount(final int count) {
this.count = count;
}
@Override
public String getCountPrompt() {
return countPrompt;
}
@Override
public void setCountPrompt(final String countPrompt) {
this.countPrompt = countPrompt;
}
/**
* Check whether to let user set required amount for objective
*/
@Override
public boolean canShowCount() {
return showCount;
}
/**
* Set whether to let user set required amount for objective
*
*
* @param showCount Whether to show the count
*/
@Override
public void setShowCount(final boolean showCount) {
this.showCount = showCount;
}
public Map<String, Object> getDataForPlayer(final Player player, final CustomObjective customObj, final Quest quest) {
final Quester quester = plugin.getQuester(player.getUniqueId());
public Map<String, Object> getDataForPlayer(final Player player, final CustomObjective customObj,
final Quest quest) {
final IQuester quester = plugin.getQuester(player.getUniqueId());
if (quester != null) {
final Stage currentStage = quester.getCurrentStage(quest);
final IStage currentStage = quester.getCurrentStage(quest);
if (currentStage == null) {
return null;
}
CustomObjective found = null;
for (final me.blackvein.quests.CustomObjective co : currentStage.customObjectives) {
ICustomObjective found = null;
for (final ICustomObjective co : currentStage.getCustomObjectives()) {
if (co.getName().equals(customObj.getName())) {
found = co;
break;
@ -160,7 +177,7 @@ public abstract class CustomObjective implements Listener {
if (found != null) {
final Map<String, Object> m = new HashMap<>();
for (final Entry<String, Object> dataMap : found.getData()) {
for (final Entry<String, Object> e : currentStage.customObjectiveData) {
for (final Entry<String, Object> e : currentStage.getCustomObjectiveData()) {
if (e.getKey().equals(dataMap.getKey())) {
m.put(e.getKey(), e.getValue());
}
@ -180,7 +197,7 @@ public abstract class CustomObjective implements Listener {
if (quester.hasCustomObjective(quest, obj.getName())) {
int index = -1;
final LinkedList<Integer> customObjCounts = quester.getQuestData(quest).customObjectiveCounts;
for (final CustomObjective co : quester.getCurrentStage(quest).customObjectives) {
for (final ICustomObjective co : quester.getCurrentStage(quest).getCustomObjectives()) {
index++;
if (co.getName().equals(this.getName())) {
if (index >= customObjCounts.size()) {
@ -196,30 +213,30 @@ public abstract class CustomObjective implements Listener {
}
if (index > -1) {
final int progress = customObjCounts.get(index);
final int goal = quester.getCurrentStage(quest).customObjectiveCounts.get(index);
final int goal = quester.getCurrentStage(quest).getCustomObjectiveCounts().get(index);
final ObjectiveType type = ObjectiveType.CUSTOM;
final QuesterPreUpdateObjectiveEvent preEvent
= new QuesterPreUpdateObjectiveEvent(quester, quest, new Objective(type, progress, goal));
final QuesterPreUpdateObjectiveEvent preEvent
= new QuesterPreUpdateObjectiveEvent(quester, quest, new BukkitObjective(type, progress, goal));
plugin.getServer().getPluginManager().callEvent(preEvent);
if (progress >= goal) {
quester.finishObjective(quest, new Objective(type, new ItemStack(Material.AIR, 1),
quester.finishObjective(quest, new BukkitObjective(type, new ItemStack(Material.AIR, 1),
new ItemStack(Material.AIR, goal)), null, null, null, null, null, null, obj);
// Multiplayer
final int finalIndex = index;
quester.dispatchMultiplayerObjectives(quest, quester.getCurrentStage(quest), (final Quester q) -> {
quester.dispatchMultiplayerObjectives(quest, quester.getCurrentStage(quest), (final IQuester q) -> {
final int old = q.getQuestData(quest).customObjectiveCounts.get(finalIndex);
q.getQuestData(quest).customObjectiveCounts.set(finalIndex, old + count);
q.finishObjective(quest, new Objective(type, new ItemStack(Material.AIR, 1),
q.finishObjective(quest, new BukkitObjective(type, new ItemStack(Material.AIR, 1),
new ItemStack(Material.AIR, goal)), null, null, null, null, null, null, obj);
return null;
});
}
final QuesterPostUpdateObjectiveEvent postEvent
= new QuesterPostUpdateObjectiveEvent(quester, quest, new Objective(type, progress, goal));
final QuesterPostUpdateObjectiveEvent postEvent
= new QuesterPostUpdateObjectiveEvent(quester, quest, new BukkitObjective(type, progress, goal));
plugin.getServer().getPluginManager().callEvent(postEvent);
}
}

View File

@ -21,10 +21,11 @@ import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.util.player.UserManager;
import com.herocraftonline.heroes.Heroes;
import com.herocraftonline.heroes.characters.Hero;
import me.blackvein.quests.dependencies.IDependencies;
import me.blackvein.quests.listeners.NpcListener;
import me.blackvein.quests.player.IQuester;
import me.blackvein.quests.reflect.denizen.DenizenAPI;
import me.blackvein.quests.reflect.worldguard.WorldGuardAPI;
import me.blackvein.quests.util.Lang;
import me.clip.placeholderapi.PlaceholderAPIPlugin;
import me.pikamug.unite.api.objects.PartyProvider;
import net.citizensnpcs.api.CitizensPlugin;
@ -43,7 +44,7 @@ import java.util.Objects;
import java.util.Set;
import java.util.UUID;
public class Dependencies {
public class Dependencies implements IDependencies {
private final Quests plugin;
private static Economy economy = null;
@ -229,21 +230,6 @@ public class Dependencies {
}
return false;
}
void init() {
getCitizens();
getWorldGuardApi();
getDenizenApi();
getMcmmoClassic();
getHeroes();
getPhatLoots();
getPlaceholderApi();
getCitizensBooksApi();
getPartiesApi();
getPartyProvider();
getVaultEconomy();
getVaultPermission();
}
private boolean setupEconomy() {
try {
@ -281,31 +267,8 @@ public class Dependencies {
}
return (partyProvider != null);
}
/**
* @deprecated Do not use. Will be removed in a future version.
**/
public String getCurrency(final boolean plural) {
// TODO remove "money" from strings.yml
if (getVaultEconomy() == null) {
return Lang.get("money");
}
if (plural) {
if (getVaultEconomy().currencyNamePlural().trim().isEmpty()) {
return Lang.get("money");
} else {
return getVaultEconomy().currencyNamePlural();
}
} else {
if (getVaultEconomy().currencyNameSingular().trim().isEmpty()) {
return Lang.get("money");
} else {
return getVaultEconomy().currencyNameSingular();
}
}
}
public boolean runDenizenScript(final String scriptName, final Quester quester) {
public boolean runDenizenScript(final String scriptName, final IQuester quester) {
return plugin.getDenizenTrigger().runDenizenScript(scriptName, quester);
}
@ -343,4 +306,19 @@ public class Dependencies {
final Hero hero = getHero(uuid);
return hero.getSecondClass().getName().equalsIgnoreCase(secondaryClass);
}
public void init() {
getCitizens();
getWorldGuardApi();
getDenizenApi();
getMcmmoClassic();
getHeroes();
getPhatLoots();
getPlaceholderApi();
getCitizensBooksApi();
getPartiesApi();
getPartyProvider();
getVaultEconomy();
getVaultPermission();
}
}

View File

@ -20,8 +20,10 @@ import com.codisimus.plugins.phatloots.loot.LootBundle;
import com.gmail.nossr50.datatypes.skills.SkillType;
import com.gmail.nossr50.util.player.UserManager;
import com.herocraftonline.heroes.characters.Hero;
import me.blackvein.quests.actions.IAction;
import me.blackvein.quests.actions.Action;
import me.blackvein.quests.conditions.Condition;
import me.blackvein.quests.conditions.ICondition;
import me.blackvein.quests.dependencies.IDependencies;
import me.blackvein.quests.events.quest.QuestUpdateCompassEvent;
import me.blackvein.quests.events.quester.QuesterPostChangeStageEvent;
import me.blackvein.quests.events.quester.QuesterPostCompleteQuestEvent;
@ -29,6 +31,17 @@ import me.blackvein.quests.events.quester.QuesterPostFailQuestEvent;
import me.blackvein.quests.events.quester.QuesterPreChangeStageEvent;
import me.blackvein.quests.events.quester.QuesterPreCompleteQuestEvent;
import me.blackvein.quests.events.quester.QuesterPreFailQuestEvent;
import me.blackvein.quests.player.IQuester;
import me.blackvein.quests.quests.BukkitOptions;
import me.blackvein.quests.quests.BukkitPlanner;
import me.blackvein.quests.quests.BukkitRequirements;
import me.blackvein.quests.quests.BukkitRewards;
import me.blackvein.quests.quests.IQuest;
import me.blackvein.quests.quests.IStage;
import me.blackvein.quests.quests.Options;
import me.blackvein.quests.quests.Planner;
import me.blackvein.quests.quests.Requirements;
import me.blackvein.quests.quests.Rewards;
import me.blackvein.quests.util.ConfigUtil;
import me.blackvein.quests.util.InventoryUtil;
import me.blackvein.quests.util.ItemUtil;
@ -52,14 +65,16 @@ import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.Plugin;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
public class Quest implements Comparable<Quest> {
public class Quest implements IQuest {
protected Quests plugin;
protected String id;
@ -67,113 +82,160 @@ public class Quest implements Comparable<Quest> {
protected String description;
protected String finished;
protected ItemStack guiDisplay = null;
private final LinkedList<Stage> orderedStages = new LinkedList<>();
protected NPC npcStart;
private final LinkedList<IStage> orderedStages = new LinkedList<>();
protected UUID npcStart;
protected Location blockStart;
protected String regionStart = null;
protected Action initialAction;
private final Requirements requirements = new Requirements();
private final Planner planner = new Planner();
private final Rewards rewards = new Rewards();
private final Options options = new Options();
private final BukkitRequirements requirements = new BukkitRequirements();
private final BukkitPlanner planner = new BukkitPlanner();
private final BukkitRewards rewards = new BukkitRewards();
private final BukkitOptions options = new BukkitOptions();
public Quest(final Quests plugin) {
this.plugin = plugin;
}
@Override
public int compareTo(final Quest quest) {
public int compareTo(final IQuest quest) {
return id.compareTo(quest.getId());
}
public Quests getPlugin() {
return plugin;
}
public void setPlugin(Plugin plugin) {
if (plugin instanceof Quests) {
this.plugin = (Quests)plugin;
}
}
@Override
public String getId() {
return id;
}
@Override
public void setId(String id) {
if (plugin != null) {
this.id = id;
}
}
@Override
public String getName() {
return name;
}
@Override
public void setName(final String name) {
this.name = name;
}
@Override
public String getDescription() {
return description;
}
@Override
public void setDescription(final String description) {
this.description = description;
}
@Override
public String getFinished() {
return finished;
}
@Override
public void setFinished(final String finished) {
this.finished = finished;
}
@Override
public String getRegionStart() {
return regionStart;
}
@Override
public void setRegionStart(final String regionStart) {
this.regionStart = regionStart;
}
@Override
public ItemStack getGUIDisplay() {
return guiDisplay;
}
@Override
public void setGUIDisplay(final ItemStack guiDisplay) {
this.guiDisplay = guiDisplay;
}
public Stage getStage(final int index) {
@Override
public IStage getStage(final int index) {
try {
return orderedStages.get(index);
} catch (final Exception e) {
return null;
}
}
public LinkedList<Stage> getStages() {
@Override
public LinkedList<IStage> getStages() {
return orderedStages;
}
@Override
public NPC getNpcStart() {
return npcStart;
if (CitizensAPI.getNPCRegistry().getByUniqueId(npcStart) != null) {
return CitizensAPI.getNPCRegistry().getByUniqueId(npcStart);
}
return null;
}
@Override
public void setNpcStart(final NPC npcStart) {
this.npcStart = npcStart;
this.npcStart = npcStart.getUniqueId();
}
@Override
public Location getBlockStart() {
return blockStart;
}
@Override
public void setBlockStart(final Location blockStart) {
this.blockStart = blockStart;
}
public Action getInitialAction() {
@Override
public IAction getInitialAction() {
return initialAction;
}
public void setInitialAction(final Action initialAction) {
this.initialAction = initialAction;
@Override
public void setInitialAction(final IAction initialAction) {
this.initialAction = (Action) initialAction;
}
@Override
public Requirements getRequirements() {
return requirements;
}
@Override
public Planner getPlanner() {
return planner;
}
@Override
public Rewards getRewards() {
return rewards;
}
@Override
public Options getOptions() {
return options;
}
@ -184,13 +246,13 @@ public class Quest implements Comparable<Quest> {
* @param quester Player to force
* @param allowSharedProgress Whether to distribute progress to fellow questers
*/
public void nextStage(final Quester quester, final boolean allowSharedProgress) {
final Stage currentStage = quester.getCurrentStage(this);
public void nextStage(final IQuester quester, final boolean allowSharedProgress) {
final IStage currentStage = quester.getCurrentStage(this);
if (currentStage == null) {
plugin.getLogger().severe("Current stage was null for quester " + quester.getPlayer().getUniqueId());
return;
}
final String stageCompleteMessage = currentStage.completeMessage;
final String stageCompleteMessage = currentStage.getCompleteMessage();
if (stageCompleteMessage != null) {
if (quester.getOfflinePlayer().isOnline()) {
quester.getPlayer().sendMessage(ConfigUtil.parseStringWithPossibleLineBreaks(stageCompleteMessage,
@ -201,17 +263,17 @@ public class Quest implements Comparable<Quest> {
quester.resetCompass();
quester.findCompassTarget();
}
if (currentStage.delay < 0) {
if (currentStage.finishAction != null) {
currentStage.finishAction.fire(quester, this);
if (currentStage.getDelay() < 0) {
if (currentStage.getFinishAction() != null) {
currentStage.getFinishAction().fire(quester, this);
}
if (quester.currentQuests.get(this) == (orderedStages.size() - 1)) {
if (currentStage.script != null) {
plugin.getDenizenTrigger().runDenizenScript(currentStage.script, quester);
if (quester.getCurrentQuests().get(this) == (orderedStages.size() - 1)) {
if (currentStage.getScript() != null) {
plugin.getDenizenTrigger().runDenizenScript(currentStage.getScript(), quester);
}
completeQuest(quester);
} else {
setStage(quester, quester.currentQuests.get(this) + 1);
setStage(quester, quester.getCurrentQuests().get(this) + 1);
}
if (quester.getQuestData(this) != null) {
quester.getQuestData(this).setDelayStartTime(0);
@ -220,8 +282,8 @@ public class Quest implements Comparable<Quest> {
// Multiplayer
if (allowSharedProgress && options.getShareProgressLevel() == 3) {
final List<Quester> mq = quester.getMultiplayerQuesters(this);
for (final Quester qq : mq) {
final List<IQuester> mq = quester.getMultiplayerQuesters(this);
for (final IQuester qq : mq) {
if (currentStage.equals(qq.getCurrentStage(this))) {
nextStage(qq, true);
}
@ -237,20 +299,21 @@ public class Quest implements Comparable<Quest> {
* Force player to proceed to the specified stage
*
* @param quester Player to force
* @param stage Stage number to specify
* @param stage IStage number to specify
* @throws IndexOutOfBoundsException if stage does not exist
*/
public void setStage(final Quester quester, final int stage) throws IndexOutOfBoundsException {
public void setStage(final IQuester quester, final int stage) throws IndexOutOfBoundsException {
final OfflinePlayer player = quester.getOfflinePlayer();
if (orderedStages.size() - 1 < stage) {
final String msg = "Tried to set invalid stage number of " + stage + " for quest " + getName() + " on "
+ player.getName();
throw new IndexOutOfBoundsException(msg);
}
final Stage currentStage = quester.getCurrentStage(this);
final Stage nextStage = getStage(stage);
final IStage currentStage = quester.getCurrentStage(this);
final IStage nextStage = getStage(stage);
if (player.isOnline()) {
final QuesterPreChangeStageEvent preEvent = new QuesterPreChangeStageEvent(quester, this, currentStage, nextStage);
final QuesterPreChangeStageEvent preEvent
= new QuesterPreChangeStageEvent((Quester) quester, this, currentStage, nextStage);
plugin.getServer().getPluginManager().callEvent(preEvent);
if (preEvent.isCancelled()) {
return;
@ -259,11 +322,11 @@ public class Quest implements Comparable<Quest> {
quester.hardQuit(this);
quester.hardStagePut(this, stage);
quester.addEmptiesFor(this, stage);
if (currentStage.script != null) {
plugin.getDenizenTrigger().runDenizenScript(currentStage.script, quester);
if (currentStage.getScript() != null) {
plugin.getDenizenTrigger().runDenizenScript(currentStage.getScript(), quester);
}
if (nextStage.startAction != null) {
nextStage.startAction.fire(quester, this);
if (nextStage.getStartAction() != null) {
nextStage.getStartAction().fire(quester, this);
}
updateCompass(quester, nextStage);
if (player.isOnline()) {
@ -277,11 +340,11 @@ public class Quest implements Comparable<Quest> {
+ " because the current stage for player " + quester.getLastKnownName() + " was null");
return;
}
final String stageStartMessage = quester.getCurrentStage(this).startMessage;
final String stageStartMessage = quester.getCurrentStage(this).getStartMessage();
if (stageStartMessage != null) {
p.sendMessage(ConfigUtil.parseStringWithPossibleLineBreaks(stageStartMessage, this, p));
}
final Condition c = nextStage.getCondition();
final ICondition c = nextStage.getCondition();
if (c != null && nextStage.getObjectiveOverrides().isEmpty()) {
p.sendMessage(ChatColor.LIGHT_PURPLE + Lang.get("stageEditorConditions"));
if (!c.getEntitiesWhileRiding().isEmpty()) {
@ -350,7 +413,8 @@ public class Quest implements Comparable<Quest> {
}
quester.updateJournal();
if (player.isOnline()) {
final QuesterPostChangeStageEvent postEvent = new QuesterPostChangeStageEvent(quester, this, currentStage, nextStage);
final QuesterPostChangeStageEvent postEvent
= new QuesterPostChangeStageEvent((Quester) quester, this, currentStage, nextStage);
plugin.getServer().getPluginManager().callEvent(postEvent);
}
}
@ -364,7 +428,7 @@ public class Quest implements Comparable<Quest> {
* @param stage The stage to process for targets
* @return true if an attempt was made successfully
*/
public boolean updateCompass(final Quester quester, final Stage stage) {
public boolean updateCompass(final IQuester quester, final IStage stage) {
if (quester == null) {
return false;
}
@ -377,20 +441,20 @@ public class Quest implements Comparable<Quest> {
if (!quester.getPlayer().hasPermission("quests.compass")) {
return false;
}
final Quest quest = this;
final IQuest quest = this;
Bukkit.getScheduler().runTask(plugin, () -> {
Location targetLocation = null;
if (stage.citizensToInteract != null && stage.citizensToInteract.size() > 0) {
targetLocation = plugin.getDependencies().getNPCLocation(stage.citizensToInteract.getFirst());
} else if (stage.citizensToKill != null && stage.citizensToKill.size() > 0) {
targetLocation = plugin.getDependencies().getNPCLocation(stage.citizensToKill.getFirst());
} else if (stage.locationsToReach != null && stage.locationsToReach.size() > 0) {
targetLocation = stage.locationsToReach.getFirst();
} else if (stage.itemDeliveryTargets != null && stage.itemDeliveryTargets.size() > 0) {
final NPC npc = plugin.getDependencies().getCitizens().getNPCRegistry().getById(stage.itemDeliveryTargets
.getFirst());
if (stage.getCitizensToInteract() != null && stage.getCitizensToInteract().size() > 0) {
targetLocation = plugin.getDependencies().getNPCLocation(stage.getCitizensToInteract().getFirst());
} else if (stage.getCitizensToKill() != null && stage.getCitizensToKill().size() > 0) {
targetLocation = plugin.getDependencies().getNPCLocation(stage.getCitizensToKill().getFirst());
} else if (stage.getLocationsToReach() != null && stage.getLocationsToReach().size() > 0) {
targetLocation = stage.getLocationsToReach().getFirst();
} else if (stage.getItemDeliveryTargets() != null && stage.getItemDeliveryTargets().size() > 0) {
final NPC npc = plugin.getDependencies().getCitizens().getNPCRegistry().getById(stage
.getItemDeliveryTargets().getFirst());
targetLocation = npc.getStoredLocation();
} else if (stage.playersToKill != null && stage.playersToKill > 0) {
} else if (stage.getPlayersToKill() != null && stage.getPlayersToKill() > 0) {
final Location source = quester.getPlayer().getLocation();
Location nearest = null;
double old_distance = 30000000;
@ -410,11 +474,11 @@ public class Quest implements Comparable<Quest> {
if (nearest != null) {
targetLocation = nearest;
}
} else if (stage.mobsToKill != null && stage.mobsToKill.size() > 0) {
} else if (stage.getMobsToKill() != null && stage.getMobsToKill().size() > 0) {
final Location source = quester.getPlayer().getLocation();
Location nearest = null;
double old_distance = 30000000;
final EntityType et = stage.mobsToKill.getFirst();
final EntityType et = stage.getMobsToKill().getFirst();
if (source.getWorld() == null) {
return;
}
@ -431,11 +495,11 @@ public class Quest implements Comparable<Quest> {
if (nearest != null) {
targetLocation = nearest;
}
} else if (stage.mobsToTame != null && stage.mobsToTame.size() > 0) {
} else if (stage.getMobsToTame() != null && stage.getMobsToTame().size() > 0) {
final Location source = quester.getPlayer().getLocation();
Location nearest = null;
double old_distance = 30000000;
final EntityType et = stage.mobsToTame.getFirst();
final EntityType et = stage.getMobsToTame().getFirst();
if (source.getWorld() == null) {
return;
}
@ -452,11 +516,11 @@ public class Quest implements Comparable<Quest> {
if (nearest != null) {
targetLocation = nearest;
}
} else if (stage.sheepToShear != null && stage.sheepToShear.size() > 0) {
} else if (stage.getSheepToShear() != null && stage.getSheepToShear().size() > 0) {
final Location source = quester.getPlayer().getLocation();
Location nearest = null;
double old_distance = 30000000;
final DyeColor dc = stage.sheepToShear.getFirst();
final DyeColor dc = stage.getSheepToShear().getFirst();
if (source.getWorld() == null) {
return;
}
@ -502,7 +566,7 @@ public class Quest implements Comparable<Quest> {
* @param quester The quester to check
* @return true if all Requirements have been met
*/
public boolean testRequirements(final Quester quester) {
public boolean testRequirements(final IQuester quester) {
return testRequirements(quester.getOfflinePlayer());
}
@ -514,21 +578,21 @@ public class Quest implements Comparable<Quest> {
* @param player The player to check
* @return true if all Requirements have been met
*/
protected boolean testRequirements(final OfflinePlayer player) {
final Quester quester = plugin.getQuester(player.getUniqueId());
public boolean testRequirements(final OfflinePlayer player) {
final IQuester quester = plugin.getQuester(player.getUniqueId());
if (requirements.getMoney() != 0 && plugin.getDependencies().getVaultEconomy() != null) {
if (plugin.getDependencies().getVaultEconomy().getBalance(player) < requirements.getMoney()) {
return false;
}
}
if (quester.questPoints < requirements.getQuestPoints()) {
if (quester.getQuestPoints() < requirements.getQuestPoints()) {
return false;
}
if (!quester.completedQuests.containsAll(requirements.getNeededQuests())) {
if (!quester.getCompletedQuests().containsAll(requirements.getNeededQuests())) {
return false;
}
for (final Quest q : requirements.getBlockQuests()) {
if (quester.completedQuests.contains(q) || quester.currentQuests.containsKey(q)) {
for (final IQuest q : requirements.getBlockQuests()) {
if (quester.getCompletedQuests().contains(q) || quester.getCurrentQuests().containsKey(q)) {
return false;
}
}
@ -592,7 +656,7 @@ public class Quest implements Comparable<Quest> {
*
* @param quester The quester finishing this quest
*/
public void completeQuest(final Quester quester) {
public void completeQuest(final IQuester quester) {
completeQuest(quester, true);
}
@ -603,13 +667,13 @@ public class Quest implements Comparable<Quest> {
* @param allowMultiplayer Allow multiplayer sharing
*/
@SuppressWarnings("deprecation")
public void completeQuest(final Quester quester, final boolean allowMultiplayer) {
public void completeQuest(final IQuester quester, final boolean allowMultiplayer) {
final OfflinePlayer player = quester.getOfflinePlayer();
boolean cancelled = false;
if (player.isOnline()) {
if (Bukkit.isPrimaryThread()) {
final QuesterPreCompleteQuestEvent preEvent
= new QuesterPreCompleteQuestEvent(quester, this, false);
= new QuesterPreCompleteQuestEvent((Quester) quester, this, false);
plugin.getServer().getPluginManager().callEvent(preEvent);
if (preEvent.isCancelled()) {
return;
@ -617,7 +681,7 @@ public class Quest implements Comparable<Quest> {
} else {
final CompletableFuture<Boolean> future = CompletableFuture.supplyAsync(() -> {
final QuesterPreCompleteQuestEvent preEvent
= new QuesterPreCompleteQuestEvent(quester, Quest.this, true);
= new QuesterPreCompleteQuestEvent((Quester) quester, Quest.this, true);
plugin.getServer().getPluginManager().callEvent(preEvent);
return preEvent.isCancelled();
});
@ -633,11 +697,11 @@ public class Quest implements Comparable<Quest> {
return;
}
quester.hardQuit(this);
quester.completedQuests.add(this);
for (final Map.Entry<Integer, Quest> entry : quester.timers.entrySet()) {
quester.getCompletedQuests().add(this);
for (final Map.Entry<Integer, IQuest> entry : quester.getTimers().entrySet()) {
if (entry.getValue().getName().equals(getName())) {
plugin.getServer().getScheduler().cancelTask(entry.getKey());
quester.timers.remove(entry.getKey());
quester.getTimers().remove(entry.getKey());
}
}
if (player.isOnline()) {
@ -647,16 +711,16 @@ public class Quest implements Comparable<Quest> {
Bukkit.getScheduler().runTaskLater(plugin, () -> p.sendMessage(ps), 40);
}
if (planner.getCooldown() > -1) {
quester.completedTimes.put(this, System.currentTimeMillis());
if (quester.amountsCompleted.containsKey(this)) {
quester.amountsCompleted.put(this, quester.amountsCompleted.get(this) + 1);
quester.getCompletedTimes().put(this, System.currentTimeMillis());
if (quester.getAmountsCompleted().containsKey(this)) {
quester.getAmountsCompleted().put(this, quester.getAmountsCompleted().get(this) + 1);
} else {
quester.amountsCompleted.put(this, 1);
quester.getAmountsCompleted().put(this, 1);
}
}
// Issue rewards
final Dependencies depends = plugin.getDependencies();
final IDependencies depends = plugin.getDependencies();
boolean issuedReward = false;
if (rewards.getMoney() > 0 && depends.getVaultEconomy() != null) {
depends.getVaultEconomy().depositPlayer(player, rewards.getMoney());
@ -807,7 +871,7 @@ public class Quest implements Comparable<Quest> {
issuedReward = true;
}
if (rewards.getQuestPoints() > 0) {
quester.questPoints += rewards.getQuestPoints();
quester.setQuestPoints(quester.getQuestPoints() + rewards.getQuestPoints());
if (plugin.getSettings().getConsoleLogging() > 2) {
plugin.getLogger().info(player.getUniqueId() + " was rewarded " + rewards.getQuestPoints() + " "
+ Lang.get("questPoints"));
@ -1043,14 +1107,14 @@ public class Quest implements Comparable<Quest> {
quester.updateJournal();
quester.findCompassTarget();
if (player.isOnline()) {
final QuesterPostCompleteQuestEvent postEvent = new QuesterPostCompleteQuestEvent(quester, this);
final QuesterPostCompleteQuestEvent postEvent = new QuesterPostCompleteQuestEvent((Quester) quester, this);
plugin.getServer().getPluginManager().callEvent(postEvent);
}
// Multiplayer
if (allowMultiplayer && options.getShareProgressLevel() == 4) {
final List<Quester> mq = quester.getMultiplayerQuesters(this);
for (final Quester qq : mq) {
final List<IQuester> mq = quester.getMultiplayerQuesters(this);
for (final IQuester qq : mq) {
if (qq.getQuestData(this) != null) {
completeQuest(qq, false);
}
@ -1063,7 +1127,7 @@ public class Quest implements Comparable<Quest> {
*
* @param quester The quester to be ejected
*/
public void failQuest(final Quester quester) {
public void failQuest(final IQuester quester) {
failQuest(quester, false);
}
@ -1071,18 +1135,17 @@ public class Quest implements Comparable<Quest> {
* Force player to quit quest and inform them of their failure
*
* @param quester The quester to be ejected
* @param ignoreFailAction Whether to ignore quest fail Action
* @param ignoreFailAction Whether to ignore quest fail IAction
*/
@SuppressWarnings("deprecation")
public void failQuest(final Quester quester, final boolean ignoreFailAction) {
final QuesterPreFailQuestEvent preEvent = new QuesterPreFailQuestEvent(quester, this);
public void failQuest(final IQuester quester, final boolean ignoreFailAction) {
final QuesterPreFailQuestEvent preEvent = new QuesterPreFailQuestEvent((Quester) quester, this);
plugin.getServer().getPluginManager().callEvent(preEvent);
if (preEvent.isCancelled()) {
return;
}
final Player player = quester.getPlayer();
if (!ignoreFailAction) {
final Stage stage = quester.getCurrentStage(this);
final IStage stage = quester.getCurrentStage(this);
if (stage != null && stage.getFailAction() != null) {
quester.getCurrentStage(this).getFailAction().fire(quester, this);
}
@ -1095,19 +1158,19 @@ public class Quest implements Comparable<Quest> {
if (player.isOnline()) {
player.updateInventory();
}
final QuesterPostFailQuestEvent postEvent = new QuesterPostFailQuestEvent(quester, this);
final QuesterPostFailQuestEvent postEvent = new QuesterPostFailQuestEvent((Quester) quester, this);
plugin.getServer().getPluginManager().callEvent(postEvent);
}
/**
* Checks if quester is in WorldGuard region start
*
* @deprecated Use {@link #isInRegionStart(Quester)}
* @deprecated Use {@link #isInRegionStart(IQuester)}
* @param quester The quester to check
* @return true if quester is in region
*/
@Deprecated
public boolean isInRegion(final Quester quester) {
public boolean isInRegion(final IQuester quester) {
return isInRegionStart(quester);
}
@ -1130,7 +1193,7 @@ public class Quest implements Comparable<Quest> {
* @param quester The quester to check
* @return true if quester is in region
*/
public boolean isInRegionStart(final Quester quester) {
public boolean isInRegionStart(final IQuester quester) {
return isInRegionStart(quester.getPlayer());
}

View File

@ -12,6 +12,7 @@
package me.blackvein.quests;
import me.blackvein.quests.config.ISettings;
import me.blackvein.quests.util.Lang;
import org.bukkit.configuration.file.FileConfiguration;
@ -19,7 +20,7 @@ import java.io.File;
import java.io.IOException;
import java.util.Objects;
public class Settings {
public class Settings implements ISettings {
private final Quests plugin;
private int acceptTimeout = 20;

View File

@ -12,9 +12,11 @@
package me.blackvein.quests;
import me.blackvein.quests.actions.Action;
import me.blackvein.quests.conditions.Condition;
import me.blackvein.quests.actions.IAction;
import me.blackvein.quests.conditions.ICondition;
import me.blackvein.quests.module.ICustomObjective;
import me.blackvein.quests.enums.ObjectiveType;
import me.blackvein.quests.quests.IStage;
import org.bukkit.DyeColor;
import org.bukkit.Location;
import org.bukkit.World;
@ -26,20 +28,20 @@ import java.util.LinkedList;
import java.util.Map;
import java.util.Map.Entry;
public class Stage {
public class Stage implements IStage {
protected LinkedList<ItemStack> blocksToBreak = new LinkedList<>();
protected LinkedList<ItemStack> blocksToDamage = new LinkedList<>();
protected LinkedList<ItemStack> blocksToPlace = new LinkedList<>();
protected LinkedList<ItemStack> blocksToUse = new LinkedList<>();
protected LinkedList<ItemStack> blocksToCut = new LinkedList<>();
protected LinkedList<ItemStack> itemsToCraft = new LinkedList<>();
protected LinkedList<ItemStack> itemsToSmelt = new LinkedList<>();
protected LinkedList<ItemStack> itemsToEnchant = new LinkedList<>();
protected LinkedList<ItemStack> itemsToBrew = new LinkedList<>();
protected LinkedList<ItemStack> itemsToConsume = new LinkedList<>();
protected LinkedList<ItemStack> itemsToDeliver = new LinkedList<>();
protected LinkedList<Integer> itemDeliveryTargets = new LinkedList<Integer>() {
private LinkedList<ItemStack> blocksToBreak = new LinkedList<>();
private LinkedList<ItemStack> blocksToDamage = new LinkedList<>();
private LinkedList<ItemStack> blocksToPlace = new LinkedList<>();
private LinkedList<ItemStack> blocksToUse = new LinkedList<>();
private LinkedList<ItemStack> blocksToCut = new LinkedList<>();
private LinkedList<ItemStack> itemsToCraft = new LinkedList<>();
private LinkedList<ItemStack> itemsToSmelt = new LinkedList<>();
private LinkedList<ItemStack> itemsToEnchant = new LinkedList<>();
private LinkedList<ItemStack> itemsToBrew = new LinkedList<>();
private LinkedList<ItemStack> itemsToConsume = new LinkedList<>();
private LinkedList<ItemStack> itemsToDeliver = new LinkedList<>();
private LinkedList<Integer> itemDeliveryTargets = new LinkedList<Integer>() {
private static final long serialVersionUID = -2774443496142382127L;
@ -59,8 +61,8 @@ public class Stage {
return true;
}
};
protected LinkedList<String> deliverMessages = new LinkedList<>();
protected LinkedList<Integer> citizensToInteract = new LinkedList<Integer>() {
private LinkedList<String> deliverMessages = new LinkedList<>();
private LinkedList<Integer> citizensToInteract = new LinkedList<Integer>() {
private static final long serialVersionUID = -4086855121042524435L;
@ -80,7 +82,7 @@ public class Stage {
return true;
}
};
protected LinkedList<Integer> citizensToKill = new LinkedList<Integer>() {
private LinkedList<Integer> citizensToKill = new LinkedList<Integer>() {
private static final long serialVersionUID = 7705964814014176415L;
@ -100,48 +102,53 @@ public class Stage {
return true;
}
};
protected LinkedList<Integer> citizenNumToKill = new LinkedList<>();
protected LinkedList<EntityType> mobsToKill = new LinkedList<>();
protected LinkedList<Integer> mobNumToKill = new LinkedList<>();
protected LinkedList<Location> locationsToKillWithin = new LinkedList<>();
protected LinkedList<Integer> radiiToKillWithin = new LinkedList<>();
protected LinkedList<String> killNames = new LinkedList<>();
protected LinkedList<EntityType> mobsToTame = new LinkedList<>();
protected LinkedList<Integer> mobNumToTame = new LinkedList<>();
protected Integer fishToCatch;
protected Integer cowsToMilk;
protected LinkedList<DyeColor> sheepToShear = new LinkedList<>();
protected LinkedList<Integer> sheepNumToShear = new LinkedList<>();
protected Integer playersToKill;
protected LinkedList<Location> locationsToReach = new LinkedList<>();
protected LinkedList<Integer> radiiToReachWithin = new LinkedList<>();
protected LinkedList<World> worldsToReachWithin = new LinkedList<>();
protected LinkedList<String> locationNames = new LinkedList<>();
protected LinkedList<String> passwordDisplays = new LinkedList<>();
protected LinkedList<String> passwordPhrases = new LinkedList<>();
protected String script;
protected Action startAction = null;
protected Action finishAction = null;
protected Action failAction = null;
protected Action deathAction = null;
protected Map<String, Action> chatActions = new HashMap<>();
protected Map<String, Action> commandActions = new HashMap<>();
protected Action disconnectAction = null;
protected Condition condition = null;
protected long delay = -1;
protected String delayMessage = null;
protected String completeMessage = null;
protected String startMessage = null;
protected LinkedList<String> objectiveOverrides = new LinkedList<>();
protected LinkedList<CustomObjective> customObjectives = new LinkedList<>();
protected LinkedList<Integer> customObjectiveCounts = new LinkedList<>();
protected LinkedList<String> customObjectiveDisplays = new LinkedList<>();
protected LinkedList<Entry<String, Object>> customObjectiveData = new LinkedList<>();
private LinkedList<Integer> citizenNumToKill = new LinkedList<>();
private LinkedList<EntityType> mobsToKill = new LinkedList<>();
private LinkedList<Integer> mobNumToKill = new LinkedList<>();
private LinkedList<Location> locationsToKillWithin = new LinkedList<>();
private LinkedList<Integer> radiiToKillWithin = new LinkedList<>();
private LinkedList<String> killNames = new LinkedList<>();
private LinkedList<EntityType> mobsToTame = new LinkedList<>();
private LinkedList<Integer> mobNumToTame = new LinkedList<>();
private Integer fishToCatch;
private Integer cowsToMilk;
private LinkedList<DyeColor> sheepToShear = new LinkedList<>();
private LinkedList<Integer> sheepNumToShear = new LinkedList<>();
private Integer playersToKill;
private LinkedList<Location> locationsToReach = new LinkedList<>();
private LinkedList<Integer> radiiToReachWithin = new LinkedList<>();
private LinkedList<World> worldsToReachWithin = new LinkedList<>();
private LinkedList<String> locationNames = new LinkedList<>();
private LinkedList<String> passwordDisplays = new LinkedList<>();
private LinkedList<String> passwordPhrases = new LinkedList<>();
private String script;
private IAction startAction = null;
private IAction finishAction = null;
private IAction failAction = null;
private IAction deathAction = null;
private Map<String, IAction> chatActions = new HashMap<>();
private Map<String, IAction> commandActions = new HashMap<>();
private IAction disconnectAction = null;
private ICondition condition = null;
private long delay = -1;
private String delayMessage = null;
private String completeMessage = null;
private String startMessage = null;
private LinkedList<String> objectiveOverrides = new LinkedList<>();
private LinkedList<ICustomObjective> customObjectives = new LinkedList<>();
private LinkedList<Integer> customObjectiveCounts = new LinkedList<>();
private LinkedList<String> customObjectiveDisplays = new LinkedList<>();
private LinkedList<Entry<String, Object>> customObjectiveData = new LinkedList<>();
public LinkedList<ItemStack> getBlocksToBreak() {
return blocksToBreak;
}
@Override
public boolean addBlockToBreak(ItemStack blockToBreak) {
return blocksToBreak.add(blockToBreak);
}
public void setBlocksToBreak(final LinkedList<ItemStack> blocksToBreak) {
this.blocksToBreak = blocksToBreak;
}
@ -150,6 +157,11 @@ public class Stage {
return blocksToDamage;
}
@Override
public boolean addBlockToDamage(ItemStack blockToDamage) {
return blocksToDamage.add(blockToDamage);
}
public void setBlocksToDamage(final LinkedList<ItemStack> blocksToDamage) {
this.blocksToDamage = blocksToDamage;
}
@ -158,6 +170,11 @@ public class Stage {
return blocksToPlace;
}
@Override
public boolean addBlockToPlace(ItemStack blockToPlace) {
return blocksToPlace.add(blockToPlace);
}
public void setBlocksToPlace(final LinkedList<ItemStack> blocksToPlace) {
this.blocksToPlace = blocksToPlace;
}
@ -166,6 +183,11 @@ public class Stage {
return blocksToUse;
}
@Override
public boolean addBlockToUse(ItemStack blockToUse) {
return blocksToUse.add(blockToUse);
}
public void setBlocksToUse(final LinkedList<ItemStack> blocksToUse) {
this.blocksToUse = blocksToUse;
}
@ -174,6 +196,11 @@ public class Stage {
return blocksToCut;
}
@Override
public boolean addBlockToCut(ItemStack blockToCut) {
return blocksToCut.add(blockToCut);
}
public void setBlocksToCut(final LinkedList<ItemStack> blocksToCut) {
this.blocksToCut = blocksToCut;
}
@ -182,6 +209,11 @@ public class Stage {
return itemsToCraft;
}
@Override
public boolean addItemToCraft(ItemStack itemToCraft) {
return itemsToCraft.add(itemToCraft);
}
public void setItemsToCraft(final LinkedList<ItemStack> itemsToCraft) {
this.itemsToCraft = itemsToCraft;
}
@ -190,6 +222,11 @@ public class Stage {
return itemsToSmelt;
}
@Override
public boolean addItemToSmelt(ItemStack itemToSmelt) {
return itemsToSmelt.add(itemToSmelt);
}
public void setItemsToSmelt(final LinkedList<ItemStack> itemsToSmelt) {
this.itemsToSmelt = itemsToSmelt;
}
@ -198,6 +235,11 @@ public class Stage {
return itemsToEnchant;
}
@Override
public boolean addItemToEnchant(ItemStack itemToEnchant) {
return itemsToEnchant.add(itemToEnchant);
}
public void setItemsToEnchant(final LinkedList<ItemStack> itemsToEnchant) {
this.itemsToEnchant = itemsToEnchant;
}
@ -206,6 +248,11 @@ public class Stage {
return itemsToBrew;
}
@Override
public boolean addItemsToBrew(ItemStack itemToBrew) {
return itemsToBrew.add(itemToBrew);
}
public void setItemsToBrew(final LinkedList<ItemStack> itemsToBrew) {
this.itemsToBrew = itemsToBrew;
}
@ -214,6 +261,11 @@ public class Stage {
return itemsToConsume;
}
@Override
public boolean addItemToConsume(ItemStack itemToConsume) {
return itemsToConsume.add(itemToConsume);
}
public void setItemsToConsume(final LinkedList<ItemStack> itemsToConsume) {
this.itemsToBrew = itemsToConsume;
}
@ -222,6 +274,11 @@ public class Stage {
return itemsToDeliver;
}
@Override
public boolean addItemToDeliver(ItemStack itemToDeliver) {
return itemsToDeliver.add(itemToDeliver);
}
public void setItemsToDeliver(final LinkedList<ItemStack> itemsToDeliver) {
this.itemsToDeliver = itemsToDeliver;
}
@ -230,6 +287,11 @@ public class Stage {
return itemDeliveryTargets;
}
@Override
public boolean addItemDeliveryTarget(Integer itemDeliveryTarget) {
return itemDeliveryTargets.add(itemDeliveryTarget);
}
public void setItemDeliveryTargets(final LinkedList<Integer> itemDeliveryTargets) {
this.itemDeliveryTargets = itemDeliveryTargets;
}
@ -238,6 +300,11 @@ public class Stage {
return deliverMessages;
}
@Override
public boolean addDeliverMessage(String deliverMessage) {
return deliverMessages.add(deliverMessage);
}
public void setDeliverMessages(final LinkedList<String> deliverMessages) {
this.deliverMessages = deliverMessages;
}
@ -246,6 +313,11 @@ public class Stage {
return citizensToInteract;
}
@Override
public boolean addCitizenToInteract(Integer citizenToInteract) {
return citizensToInteract.add(citizenToInteract);
}
public void setCitizensToInteract(final LinkedList<Integer> citizensToInteract) {
this.citizensToInteract = citizensToInteract;
}
@ -254,6 +326,11 @@ public class Stage {
return citizensToKill;
}
@Override
public boolean addCitizenToKill(Integer citizenToKill) {
return citizensToKill.add(citizenToKill);
}
public void setCitizensToKill(final LinkedList<Integer> citizensToKill) {
this.citizensToKill = citizensToKill;
}
@ -262,6 +339,11 @@ public class Stage {
return citizenNumToKill;
}
@Override
public boolean addCitizenNumToKill(Integer citizenNumToKill) {
return this.citizenNumToKill.add(citizenNumToKill);
}
public void setCitizenNumToKill(final LinkedList<Integer> citizenNumToKill) {
this.citizenNumToKill = citizenNumToKill;
}
@ -270,6 +352,11 @@ public class Stage {
return mobsToKill;
}
@Override
public boolean addMobToKill(EntityType mobToKill) {
return mobsToKill.add(mobToKill);
}
public void setMobsToKill(final LinkedList<EntityType> mobsToKill) {
this.mobsToKill = mobsToKill;
}
@ -278,6 +365,11 @@ public class Stage {
return mobNumToKill;
}
@Override
public boolean addMobNumToKill(Integer mobNumToKill) {
return this.mobNumToKill.add(mobNumToKill);
}
public void setMobNumToKill(final LinkedList<Integer> mobNumToKill) {
this.mobNumToKill = mobNumToKill;
}
@ -286,6 +378,11 @@ public class Stage {
return locationsToKillWithin;
}
@Override
public boolean addLocationToKillWithin(Location locationToKillWithin) {
return locationsToKillWithin.add(locationToKillWithin);
}
public void setLocationsToKillWithin(final LinkedList<Location> locationsToKillWithin) {
this.locationsToKillWithin = locationsToKillWithin;
}
@ -294,6 +391,11 @@ public class Stage {
return radiiToKillWithin;
}
@Override
public boolean addRadiusToKillWithin(Integer radiusToKillWithin) {
return radiiToKillWithin.add(radiusToKillWithin);
}
public void setRadiiToKillWithin(final LinkedList<Integer> radiiToKillWithin) {
this.radiiToKillWithin = radiiToKillWithin;
}
@ -302,6 +404,11 @@ public class Stage {
return killNames;
}
@Override
public boolean addKillName(String killName) {
return killNames.add(killName);
}
public void setKillNames(final LinkedList<String> killNames) {
this.killNames = killNames;
}
@ -310,6 +417,11 @@ public class Stage {
return locationsToReach;
}
@Override
public boolean addLocationToReach(Location locationToReach) {
return locationsToReach.add(locationToReach);
}
public void setLocationsToReach(final LinkedList<Location> locationsToReach) {
this.locationsToReach = locationsToReach;
}
@ -318,6 +430,11 @@ public class Stage {
return radiiToReachWithin;
}
@Override
public boolean addRadiusToReachWithin(Integer radiusToReachWithin) {
return radiiToReachWithin.add(radiusToReachWithin);
}
public void setRadiiToReachWithin(final LinkedList<Integer> radiiToReachWithin) {
this.radiiToReachWithin = radiiToReachWithin;
}
@ -326,6 +443,11 @@ public class Stage {
return worldsToReachWithin;
}
@Override
public boolean addWorldToReachWithin(World worldToReachWithin) {
return worldsToReachWithin.add(worldToReachWithin);
}
public void setWorldsToReachWithin(final LinkedList<World> worldsToReachWithin) {
this.worldsToReachWithin = worldsToReachWithin;
}
@ -334,6 +456,11 @@ public class Stage {
return locationNames;
}
@Override
public boolean addLocationName(String locationName) {
return locationNames.add(locationName);
}
public void setLocationNames(final LinkedList<String> locationNames) {
this.locationNames = locationNames;
}
@ -342,6 +469,11 @@ public class Stage {
return mobsToTame;
}
@Override
public boolean addMobToTame(EntityType mobToTame) {
return mobsToTame.add(mobToTame);
}
public void setMobsToTame(final LinkedList<EntityType> mobsToTame) {
this.mobsToTame = mobsToTame;
}
@ -350,6 +482,11 @@ public class Stage {
return mobNumToTame;
}
@Override
public boolean addMobNumToTame(Integer mobNumToTame) {
return this.mobNumToTame.add(mobNumToTame);
}
public void setMobNumToTame(final LinkedList<Integer> mobNumToTame) {
this.mobNumToTame = mobNumToTame;
}
@ -382,6 +519,11 @@ public class Stage {
return sheepToShear;
}
@Override
public boolean addSheepToShear(DyeColor sheepToShear) {
return this.sheepToShear.add(sheepToShear);
}
public void setSheepToShear(final LinkedList<DyeColor> sheepToShear) {
this.sheepToShear = sheepToShear;
}
@ -390,6 +532,11 @@ public class Stage {
return sheepNumToShear;
}
@Override
public boolean addSheepNumToShear(Integer sheepNumToShear) {
return this.sheepNumToShear.add(sheepNumToShear);
}
public void setSheepNumToShear(final LinkedList<Integer> sheepNumToShear) {
this.sheepNumToShear = sheepNumToShear;
}
@ -398,6 +545,11 @@ public class Stage {
return passwordDisplays;
}
@Override
public boolean addPasswordDisplay(String passwordDisplay) {
return passwordDisplays.add(passwordDisplay);
}
public void setPasswordDisplays(final LinkedList<String> passwordDisplays) {
this.passwordDisplays = passwordDisplays;
}
@ -406,6 +558,11 @@ public class Stage {
return passwordPhrases;
}
@Override
public boolean addPasswordPhrase(String passwordPhrase) {
return passwordPhrases.add(passwordPhrase);
}
public void setPasswordPhrases(final LinkedList<String> passwordPhrases) {
this.passwordPhrases = passwordPhrases;
}
@ -418,67 +575,77 @@ public class Stage {
this.script = script;
}
public Action getStartAction() {
public IAction getStartAction() {
return startAction;
}
public void setStartAction(final Action startAction) {
public void setStartAction(final IAction startAction) {
this.startAction = startAction;
}
public Action getFinishAction() {
public IAction getFinishAction() {
return finishAction;
}
public void setFinishAction(final Action finishAction) {
public void setFinishAction(final IAction finishAction) {
this.finishAction = finishAction;
}
public Action getFailAction() {
public IAction getFailAction() {
return failAction;
}
public void setFailAction(final Action failAction) {
public void setFailAction(final IAction failAction) {
this.failAction = failAction;
}
public Action getDeathAction() {
public IAction getDeathAction() {
return deathAction;
}
public void setDeathAction(final Action deathAction) {
public void setDeathAction(final IAction deathAction) {
this.deathAction = deathAction;
}
public Map<String, Action> getChatActions() {
public Map<String, IAction> getChatActions() {
return chatActions;
}
public void setChatActions(final Map<String, Action> chatActions) {
@Override
public void addChatAction(Entry<String, IAction> chatAction) {
chatActions.put(chatAction.getKey(), chatAction.getValue());
}
public void setChatActions(final Map<String, IAction> chatActions) {
this.chatActions = chatActions;
}
public Map<String, Action> getCommandActions() {
public Map<String, IAction> getCommandActions() {
return commandActions;
}
public void setCommandActions(final Map<String, Action> commandActions) {
@Override
public void addCommandAction(Entry<String, IAction> commandAction) {
commandActions.put(commandAction.getKey(), commandAction.getValue());
}
public void setCommandActions(final Map<String, IAction> commandActions) {
this.commandActions = commandActions;
}
public Action getDisconnectAction() {
public IAction getDisconnectAction() {
return disconnectAction;
}
public void setDisconnectAction(final Action disconnectAction) {
public void setDisconnectAction(final IAction disconnectAction) {
this.disconnectAction = disconnectAction;
}
public Condition getCondition() {
public ICondition getCondition() {
return condition;
}
public void setCondition(final Condition condition) {
public void setCondition(final ICondition condition) {
this.condition = condition;
}
@ -518,26 +685,59 @@ public class Stage {
return objectiveOverrides;
}
@Override
public boolean addObjectiveOverride(String objectiveOverride) {
return objectiveOverrides.add(objectiveOverride);
}
public void setObjectiveOverrides(final LinkedList<String> objectiveOverrides) {
this.objectiveOverrides = objectiveOverrides;
}
public LinkedList<CustomObjective> getCustomObjectives() {
public LinkedList<ICustomObjective> getCustomObjectives() {
return customObjectives;
}
public boolean addCustomObjectives(final ICustomObjective customObjective) {
return customObjectives.add(customObjective);
}
public void clearCustomObjectives() {
customObjectives.clear();
}
public LinkedList<Integer> getCustomObjectiveCounts() {
return customObjectiveCounts;
}
public boolean addCustomObjectiveCounts(final Integer customObjectiveCount) {
return customObjectiveCounts.add(customObjectiveCount);
}
public void clearCustomObjectiveCounts() {
customObjectiveCounts.clear();
}
public LinkedList<String> getCustomObjectiveDisplays() {
return customObjectiveDisplays;
}
public void clearCustomObjectiveDisplays() {
customObjectiveDisplays.clear();
}
public LinkedList<Entry<String, Object>> getCustomObjectiveData() {
return customObjectiveData;
}
public boolean addCustomObjectiveData(final Entry<String, Object> customObjectiveDatum) {
return this.customObjectiveData.add(customObjectiveDatum);
}
public void clearCustomObjectiveData() {
customObjectiveData.clear();
}
/**
* Check if stage has at least one objective<p>
*
@ -569,24 +769,6 @@ public class Stage {
return !customObjectives.isEmpty();
}
/**
* Check if stage has the specified type of objective<p>
*
* Accepted strings are: breakBlock, damageBlock, placeBlock, useBlock,
* cutBlock, craftItem, smeltItem, enchantItem, brewItem, milkCow, catchFish,
* killMob, deliverItem, killPlayer, talkToNPC, killNPC, tameMob,
* shearSheep, password, reachLocation
*
* @deprecated Use {@link #containsObjective(ObjectiveType)}
*
* @param type The type of objective to check for
* @return true if stage contains specified objective
*/
@Deprecated
public boolean containsObjective(final String type) {
return containsObjective(ObjectiveType.fromName(type));
}
/**
* Check if stage has the specified type of objective<p>
*

View File

@ -11,10 +11,10 @@
*/
package me.blackvein.quests.actions;
import me.blackvein.quests.Quest;
import me.blackvein.quests.QuestMob;
import me.blackvein.quests.Quester;
import me.blackvein.quests.quests.IQuest;
import me.blackvein.quests.player.IQuester;
import me.blackvein.quests.Quests;
import me.blackvein.quests.entity.QuestMob;
import me.blackvein.quests.tasks.ActionTimer;
import me.blackvein.quests.util.ConfigUtil;
import me.blackvein.quests.util.InventoryUtil;
@ -31,7 +31,7 @@ import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
public class Action implements Comparable<Action> {
public class Action implements IAction {
private final Quests plugin;
private String name = "";
@ -82,197 +82,243 @@ public class Action implements Comparable<Action> {
public Action(final Quests plugin) {
this.plugin = plugin;
}
@Override
public int compareTo(final Action action) {
public int compareTo(final IAction action) {
return name.compareTo(action.getName());
}
@Override
public String getName() {
return name;
}
@Override
public void setName(final String name) {
this.name = name;
}
@Override
public String getMessage() {
return message;
}
@Override
public void setMessage(final String message) {
this.message = message;
}
@Override
public boolean isClearInv() {
return clearInv;
}
@Override
public void setClearInv(final boolean clearInv) {
this.clearInv = clearInv;
}
@Override
public boolean isFailQuest() {
return failQuest;
}
@Override
public void setFailQuest(final boolean failQuest) {
this.failQuest = failQuest;
}
@Override
public LinkedList<Location> getExplosions() {
return explosions;
}
@Override
public void setExplosions(final LinkedList<Location> explosions) {
this.explosions = explosions;
}
@Override
public Map<Location, Effect> getEffects() {
return effects;
}
@Override
public void setEffects(final Map<Location, Effect> effects) {
this.effects = effects;
}
@Override
public LinkedList<ItemStack> getItems() {
return items;
}
@Override
public void setItems(final LinkedList<ItemStack> items) {
this.items = items;
}
@Override
public World getStormWorld() {
return stormWorld;
}
@Override
public void setStormWorld(final World stormWorld) {
this.stormWorld = stormWorld;
}
@Override
public int getStormDuration() {
return stormDuration;
}
@Override
public void setStormDuration(final int stormDuration) {
this.stormDuration = stormDuration;
}
@Override
public World getThunderWorld() {
return thunderWorld;
}
@Override
public void setThunderWorld(final World thunderWorld) {
this.thunderWorld = thunderWorld;
}
@Override
public int getThunderDuration() {
return thunderDuration;
}
@Override
public void setThunderDuration(final int thunderDuration) {
this.thunderDuration = thunderDuration;
}
@Override
public int getTimer() {
return timer;
}
@Override
public void setTimer(final int timer) {
this.timer = timer;
}
@Override
public boolean isCancelTimer() {
return cancelTimer;
}
@Override
public void setCancelTimer(final boolean cancelTimer) {
this.cancelTimer = cancelTimer;
}
@Override
public LinkedList<QuestMob> getMobSpawns() {
return mobSpawns;
}
@Override
public void setMobSpawns(final LinkedList<QuestMob> mobSpawns) {
this.mobSpawns = mobSpawns;
}
@Override
public LinkedList<Location> getLightningStrikes() {
return lightningStrikes;
}
@Override
public void setLightningStrikes(final LinkedList<Location> lightningStrikes) {
this.lightningStrikes = lightningStrikes;
}
@Override
public LinkedList<String> getCommands() {
return commands;
}
@Override
public void setCommands(final LinkedList<String> commands) {
this.commands = commands;
}
@Override
public LinkedList<PotionEffect> getPotionEffects() {
return potionEffects;
}
@Override
public void setPotionEffects(final LinkedList<PotionEffect> potionEffects) {
this.potionEffects = potionEffects;
}
@Override
public int getHunger() {
return hunger;
}
@Override
public void setHunger(final int hunger) {
this.hunger = hunger;
}
@Override
public int getSaturation() {
return saturation;
}
@Override
public void setSaturation(final int saturation) {
this.saturation = saturation;
}
@Override
public float getHealth() {
return health;
}
@Override
public void setHealth(final float health) {
this.health = health;
}
@Override
public Location getTeleport() {
return teleport;
}
@Override
public void setTeleport(final Location teleport) {
this.teleport = teleport;
}
@Override
public String getBook() {
return book;
}
@Override
public void setBook(final String book) {
this.book = book;
}
@Override
public String getDenizenScript() {
return book;
}
@Override
public void setDenizenScript(final String scriptName) {
this.denizenScript = scriptName;
}
public void fire(final Quester quester, final Quest quest) {
public void fire(final IQuester quester, final IQuest quest) {
final Player player = quester.getPlayer();
if (message != null) {
player.sendMessage(ConfigUtil.parseStringWithPossibleLineBreaks(message, quest, player));
@ -348,7 +394,7 @@ public class Action implements Comparable<Action> {
}
if (teleport != null) {
if (player.isDead()) {
plugin.getLogger().warning("Tried to fire Action " + name + " but player " + player.getUniqueId()
plugin.getLogger().warning("Tried to fire IAction " + name + " but player " + player.getUniqueId()
+ " was dead (known Bukkit limitation).");
} else {
player.teleport(teleport);
@ -406,7 +452,7 @@ public class Action implements Comparable<Action> {
.runTaskLater(plugin, timer * 20L).getTaskId(), quest);
}
if (cancelTimer) {
for (final Map.Entry<Integer, Quest> entry : quester.getTimers().entrySet()) {
for (final Map.Entry<Integer, IQuest> entry : quester.getTimers().entrySet()) {
if (entry.getValue().getName().equals(quest.getName())) {
plugin.getServer().getScheduler().cancelTask(entry.getKey());
quester.getTimers().remove(entry.getKey());

View File

@ -0,0 +1,480 @@
/*
* Copyright (c) 2014 PikaMug and contributors. 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.actions;
import me.blackvein.quests.quests.IQuest;
import me.blackvein.quests.player.IQuester;
import me.blackvein.quests.Quests;
import me.blackvein.quests.convo.actions.main.ActionMainPrompt;
import me.blackvein.quests.convo.actions.menu.ActionMenuPrompt;
import me.blackvein.quests.entity.BukkitQuestMob;
import me.blackvein.quests.entity.QuestMob;
import me.blackvein.quests.interfaces.ReloadCallback;
import me.blackvein.quests.util.CK;
import me.blackvein.quests.util.ConfigUtil;
import me.blackvein.quests.util.FakeConversable;
import me.blackvein.quests.util.ItemUtil;
import me.blackvein.quests.util.Lang;
import org.bukkit.ChatColor;
import org.bukkit.Effect;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.conversations.ConversationAbandonedEvent;
import org.bukkit.conversations.ConversationAbandonedListener;
import org.bukkit.conversations.ConversationContext;
import org.bukkit.conversations.ConversationFactory;
import org.bukkit.conversations.ConversationPrefix;
import org.bukkit.conversations.Prompt;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Objects;
import java.util.UUID;
public class BukkitActionFactory implements ActionFactory, ConversationAbandonedListener {
private final Quests plugin;
private final ConversationFactory conversationFactory;
private Map<UUID, Block> selectedExplosionLocations = new HashMap<>();
private Map<UUID, Block> selectedEffectLocations = new HashMap<>();
private Map<UUID, Block> selectedMobLocations = new HashMap<>();
private Map<UUID, Block> selectedLightningLocations = new HashMap<>();
private Map<UUID, Block> selectedTeleportLocations = new HashMap<>();
private List<String> editingActionNames = new LinkedList<>();
public BukkitActionFactory(final Quests plugin) {
this.plugin = plugin;
// Ensure to initialize factory last so that 'this' is fully initialized before it is passed
this.conversationFactory = new ConversationFactory(plugin).withModality(false).withLocalEcho(false)
.withFirstPrompt(new ActionMenuPrompt(new ConversationContext(plugin, new FakeConversable(),
new HashMap<>()))).withTimeout(3600)
.withPrefix(new LineBreakPrefix()).addConversationAbandonedListener(this);
}
public static class LineBreakPrefix implements ConversationPrefix {
@Override
public @NotNull String getPrefix(final @NotNull ConversationContext context) {
return "\n";
}
}
public Map<UUID, Block> getSelectedExplosionLocations() {
return selectedExplosionLocations;
}
public void setSelectedExplosionLocations(
final Map<UUID, Block> selectedExplosionLocations) {
this.selectedExplosionLocations = selectedExplosionLocations;
}
public Map<UUID, Block> getSelectedEffectLocations() {
return selectedEffectLocations;
}
public void setSelectedEffectLocations(final Map<UUID, Block> selectedEffectLocations) {
this.selectedEffectLocations = selectedEffectLocations;
}
public Map<UUID, Block> getSelectedMobLocations() {
return selectedMobLocations;
}
public void setSelectedMobLocations(final Map<UUID, Block> selectedMobLocations) {
this.selectedMobLocations = selectedMobLocations;
}
public Map<UUID, Block> getSelectedLightningLocations() {
return selectedLightningLocations;
}
public void setSelectedLightningLocations(
final Map<UUID, Block> selectedLightningLocations) {
this.selectedLightningLocations = selectedLightningLocations;
}
public Map<UUID, Block> getSelectedTeleportLocations() {
return selectedTeleportLocations;
}
public void setSelectedTeleportLocations(
final Map<UUID, Block> selectedTeleportLocations) {
this.selectedTeleportLocations = selectedTeleportLocations;
}
public ConversationFactory getConversationFactory() {
return conversationFactory;
}
public List<String> getNamesOfActionsBeingEdited() {
return editingActionNames;
}
public void setNamesOfActionsBeingEdited(final List<String> actionNames) {
this.editingActionNames = actionNames;
}
@Override
public void conversationAbandoned(final ConversationAbandonedEvent abandonedEvent) {
if (abandonedEvent.getContext().getForWhom() instanceof Player) {
final UUID uuid = ((Player) abandonedEvent.getContext().getForWhom()).getUniqueId();
selectedExplosionLocations.remove(uuid);
selectedEffectLocations.remove(uuid);
selectedMobLocations.remove(uuid);
selectedLightningLocations.remove(uuid);
selectedTeleportLocations.remove(uuid);
}
}
public Prompt returnToMenu(final ConversationContext context) {
return new ActionMainPrompt(context);
}
public void loadData(final IAction event, final ConversationContext context) {
if (event.getMessage() != null) {
context.setSessionData(CK.E_MESSAGE, event.getMessage());
}
if (event.isClearInv()) {
context.setSessionData(CK.E_CLEAR_INVENTORY, Lang.get("yesWord"));
} else {
context.setSessionData(CK.E_CLEAR_INVENTORY, Lang.get("noWord"));
}
if (event.isFailQuest()) {
context.setSessionData(CK.E_FAIL_QUEST, Lang.get("yesWord"));
} else {
context.setSessionData(CK.E_FAIL_QUEST, Lang.get("noWord"));
}
if (event.getItems() != null && !event.getItems().isEmpty()) {
final LinkedList<ItemStack> items = new LinkedList<>(event.getItems());
context.setSessionData(CK.E_ITEMS, items);
}
if (event.getExplosions() != null && !event.getExplosions().isEmpty()) {
final LinkedList<String> locs = new LinkedList<>();
for (final Location loc : event.getExplosions()) {
locs.add(ConfigUtil.getLocationInfo(loc));
}
context.setSessionData(CK.E_EXPLOSIONS, locs);
}
if (event.getEffects() != null && !event.getEffects().isEmpty()) {
final LinkedList<String> locs = new LinkedList<>();
final LinkedList<String> effs = new LinkedList<>();
for (final Entry<Location, Effect> e : event.getEffects().entrySet()) {
locs.add(ConfigUtil.getLocationInfo(e.getKey()));
effs.add(e.getValue().toString());
}
context.setSessionData(CK.E_EFFECTS, effs);
context.setSessionData(CK.E_EFFECTS_LOCATIONS, locs);
}
if (event.getStormWorld() != null) {
context.setSessionData(CK.E_WORLD_STORM, event.getStormWorld().getName());
context.setSessionData(CK.E_WORLD_STORM_DURATION, event.getStormDuration());
}
if (event.getThunderWorld() != null) {
context.setSessionData(CK.E_WORLD_THUNDER, event.getThunderWorld().getName());
context.setSessionData(CK.E_WORLD_THUNDER_DURATION, event.getThunderDuration());
}
if (event.getMobSpawns() != null && !event.getMobSpawns().isEmpty()) {
final LinkedList<String> questMobs = new LinkedList<>();
for (final QuestMob questMob : event.getMobSpawns()) {
questMobs.add(questMob.serialize());
}
context.setSessionData(CK.E_MOB_TYPES, questMobs);
}
if (event.getLightningStrikes() != null && !event.getLightningStrikes().isEmpty()) {
final LinkedList<String> locs = new LinkedList<>();
for (final Location loc : event.getLightningStrikes()) {
locs.add(ConfigUtil.getLocationInfo(loc));
}
context.setSessionData(CK.E_LIGHTNING, locs);
}
if (event.getPotionEffects() != null && !event.getPotionEffects().isEmpty()) {
final LinkedList<String> types = new LinkedList<>();
final LinkedList<Long> durations = new LinkedList<>();
final LinkedList<Integer> mags = new LinkedList<>();
for (final PotionEffect pe : event.getPotionEffects()) {
types.add(pe.getType().getName());
durations.add((long) pe.getDuration());
mags.add(pe.getAmplifier());
}
context.setSessionData(CK.E_POTION_TYPES, types);
context.setSessionData(CK.E_POTION_DURATIONS, durations);
context.setSessionData(CK.E_POTION_STRENGTH, mags);
}
if (event.getHunger() > -1) {
context.setSessionData(CK.E_HUNGER, event.getHunger());
}
if (event.getSaturation() > -1) {
context.setSessionData(CK.E_SATURATION, event.getSaturation());
}
if (event.getHealth() > -1) {
context.setSessionData(CK.E_HEALTH, event.getHealth());
}
if (event.getTeleport() != null) {
context.setSessionData(CK.E_TELEPORT, ConfigUtil.getLocationInfo(event.getTeleport()));
}
if (event.getCommands() != null) {
context.setSessionData(CK.E_COMMANDS, event.getCommands());
}
if (event.getTimer() > 0) {
context.setSessionData(CK.E_TIMER, event.getTimer());
}
if (event.isCancelTimer()) {
context.setSessionData(CK.E_CANCEL_TIMER, true);
}
}
public void clearData(final ConversationContext context) {
context.setSessionData(CK.E_OLD_EVENT, null);
context.setSessionData(CK.E_NAME, null);
context.setSessionData(CK.E_MESSAGE, null);
context.setSessionData(CK.E_CLEAR_INVENTORY, null);
context.setSessionData(CK.E_FAIL_QUEST, null);
context.setSessionData(CK.E_ITEMS, null);
context.setSessionData(CK.E_ITEMS_AMOUNTS, null);
context.setSessionData(CK.E_EXPLOSIONS, null);
context.setSessionData(CK.E_EFFECTS, null);
context.setSessionData(CK.E_EFFECTS_LOCATIONS, null);
context.setSessionData(CK.E_WORLD_STORM, null);
context.setSessionData(CK.E_WORLD_STORM_DURATION, null);
context.setSessionData(CK.E_WORLD_THUNDER, null);
context.setSessionData(CK.E_WORLD_THUNDER_DURATION, null);
context.setSessionData(CK.E_MOB_TYPES, null);
context.setSessionData(CK.E_LIGHTNING, null);
context.setSessionData(CK.E_POTION_TYPES, null);
context.setSessionData(CK.E_POTION_DURATIONS, null);
context.setSessionData(CK.E_POTION_STRENGTH, null);
context.setSessionData(CK.E_HUNGER, null);
context.setSessionData(CK.E_SATURATION, null);
context.setSessionData(CK.E_HEALTH, null);
context.setSessionData(CK.E_TELEPORT, null);
context.setSessionData(CK.E_COMMANDS, null);
context.setSessionData(CK.E_TIMER, null);
context.setSessionData(CK.E_CANCEL_TIMER, null);
}
public void deleteAction(final ConversationContext context) {
final YamlConfiguration data = new YamlConfiguration();
final File actionsFile = new File(plugin.getDataFolder(), "actions.yml");
try {
data.load(actionsFile);
} catch (final IOException | InvalidConfigurationException e) {
e.printStackTrace();
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("questErrorReadingFile")
.replace("<file>", actionsFile.getName()));
return;
}
final String action = (String) context.getSessionData(CK.ED_EVENT_DELETE);
String key = "actions";
ConfigurationSection sec = data.getConfigurationSection(key);
if (sec == null) {
key = "events";
sec = data.getConfigurationSection(key);
}
if (sec != null && action != null) {
sec.set(action, null);
}
try {
data.save(actionsFile);
} catch (final IOException e) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("questSaveError"));
return;
}
final ReloadCallback<Boolean> callback = response -> {
if (!response) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("unknownError"));
}
};
plugin.reload(callback);
context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("eventEditorDeleted"));
if (plugin.getSettings().getConsoleLogging() > 0) {
final String identifier = context.getForWhom() instanceof Player ?
"Player " + ((Player)context.getForWhom()).getUniqueId() : "CONSOLE";
plugin.getLogger().info(identifier + " deleted action " + action);
}
for (final IQuester q : plugin.getOfflineQuesters()) {
for (final IQuest quest : q.getCurrentQuests().keySet()) {
q.checkQuest(quest);
}
}
clearData(context);
}
@SuppressWarnings("unchecked")
public void saveAction(final ConversationContext context) {
final YamlConfiguration data = new YamlConfiguration();
final File actionsFile = new File(plugin.getDataFolder(), "actions.yml");
try {
data.load(actionsFile);
} catch (final IOException | InvalidConfigurationException e) {
e.printStackTrace();
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("questErrorReadingFile")
.replace("<file>", actionsFile.getName()));
return;
}
String key = "actions";
if (data.getConfigurationSection(key) == null) {
key = "events";
}
if (context.getSessionData(CK.E_OLD_EVENT) != null
&& !((String) Objects.requireNonNull(context.getSessionData(CK.E_OLD_EVENT))).isEmpty()) {
data.set(key + "." + context.getSessionData(CK.E_OLD_EVENT), null);
final Collection<IAction> temp = plugin.getLoadedActions();
temp.remove(plugin.getAction((String) context.getSessionData(CK.E_OLD_EVENT)));
plugin.setLoadedActions(temp);
}
final ConfigurationSection section = data.createSection(key + "." + context.getSessionData(CK.E_NAME));
editingActionNames.remove((String) context.getSessionData(CK.E_NAME));
if (context.getSessionData(CK.E_MESSAGE) != null) {
section.set("message", context.getSessionData(CK.E_MESSAGE));
}
if (context.getSessionData(CK.E_CLEAR_INVENTORY) != null) {
final String s = (String) context.getSessionData(CK.E_CLEAR_INVENTORY);
if (s != null && s.equalsIgnoreCase(Lang.get("yesWord"))) {
section.set("clear-inventory", true);
}
}
if (context.getSessionData(CK.E_FAIL_QUEST) != null) {
final String s = (String) context.getSessionData(CK.E_FAIL_QUEST);
if (s != null && s.equalsIgnoreCase(Lang.get("yesWord"))) {
section.set("fail-quest", true);
}
}
if (context.getSessionData(CK.E_ITEMS) != null) {
section.set("items", context.getSessionData(CK.E_ITEMS));
}
if (context.getSessionData(CK.E_EXPLOSIONS) != null) {
section.set("explosions", context.getSessionData(CK.E_EXPLOSIONS));
}
if (context.getSessionData(CK.E_EFFECTS) != null) {
section.set("effects", context.getSessionData(CK.E_EFFECTS));
section.set("effect-locations", context.getSessionData(CK.E_EFFECTS_LOCATIONS));
}
if (context.getSessionData(CK.E_WORLD_STORM) != null) {
section.set("storm-world", context.getSessionData(CK.E_WORLD_STORM));
section.set("storm-duration", context.getSessionData(CK.E_WORLD_STORM_DURATION));
}
if (context.getSessionData(CK.E_WORLD_THUNDER) != null) {
section.set("thunder-world", context.getSessionData(CK.E_WORLD_THUNDER));
section.set("thunder-duration", context.getSessionData(CK.E_WORLD_THUNDER_DURATION));
}
try {
if (context.getSessionData(CK.E_MOB_TYPES) != null) {
int count = 0;
for (final String s : (LinkedList<String>) Objects.requireNonNull(context
.getSessionData(CK.E_MOB_TYPES))) {
ConfigurationSection ss = section.getConfigurationSection("mob-spawns." + count);
if (ss == null) {
ss = section.createSection("mob-spawns." + count);
}
final QuestMob questMob = BukkitQuestMob.fromString(s);
if (questMob.getName() != null) {
ss.set("name", questMob.getName());
}
ss.set("spawn-location", ConfigUtil.getLocationInfo(questMob.getSpawnLocation()));
ss.set("mob-type", questMob.getType().name());
ss.set("spawn-amounts", questMob.getSpawnAmounts());
ss.set("held-item", ItemUtil.serializeItemStack(questMob.getInventory()[0]));
ss.set("held-item-drop-chance", questMob.getDropChances()[0]);
ss.set("boots", ItemUtil.serializeItemStack(questMob.getInventory()[1]));
ss.set("boots-drop-chance", questMob.getDropChances()[1]);
ss.set("leggings", ItemUtil.serializeItemStack(questMob.getInventory()[2]));
ss.set("leggings-drop-chance", questMob.getDropChances()[2]);
ss.set("chest-plate", ItemUtil.serializeItemStack(questMob.getInventory()[3]));
ss.set("chest-plate-drop-chance", questMob.getDropChances()[3]);
ss.set("helmet", ItemUtil.serializeItemStack(questMob.getInventory()[4]));
ss.set("helmet-drop-chance", questMob.getDropChances()[4]);
count++;
}
}
} catch (final Exception e) {
e.printStackTrace();
}
if (context.getSessionData(CK.E_LIGHTNING) != null) {
section.set("lightning-strikes", context.getSessionData(CK.E_LIGHTNING));
}
if (context.getSessionData(CK.E_COMMANDS) != null) {
final LinkedList<String> commands = (LinkedList<String>) context.getSessionData(CK.E_COMMANDS);
if (commands != null && !commands.isEmpty()) {
section.set("commands", commands);
}
}
if (context.getSessionData(CK.E_POTION_TYPES) != null) {
section.set("potion-effect-types", context.getSessionData(CK.E_POTION_TYPES));
section.set("potion-effect-durations", context.getSessionData(CK.E_POTION_DURATIONS));
section.set("potion-effect-amplifiers", context.getSessionData(CK.E_POTION_STRENGTH));
}
if (context.getSessionData(CK.E_HUNGER) != null) {
section.set("hunger", context.getSessionData(CK.E_HUNGER));
}
if (context.getSessionData(CK.E_SATURATION) != null) {
section.set("saturation", context.getSessionData(CK.E_SATURATION));
}
if (context.getSessionData(CK.E_HEALTH) != null) {
section.set("health", context.getSessionData(CK.E_HEALTH));
}
if (context.getSessionData(CK.E_TELEPORT) != null) {
section.set("teleport-location", context.getSessionData(CK.E_TELEPORT));
}
if (context.getSessionData(CK.E_TIMER) != null) {
final Integer i = (Integer) context.getSessionData(CK.E_TIMER);
if (i != null && i > 0) {
section.set("timer", context.getSessionData(CK.E_TIMER));
}
}
if (context.getSessionData(CK.E_CANCEL_TIMER) != null) {
final String s = (String) context.getSessionData(CK.E_CANCEL_TIMER);
if (s != null && s.equalsIgnoreCase(Lang.get("yesWord"))) {
section.set("cancel-timer", true);
}
}
if (context.getSessionData(CK.E_DENIZEN) != null) {
section.set("denizen-script", context.getSessionData(CK.E_DENIZEN));
}
try {
data.save(actionsFile);
} catch (final IOException e) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("questSaveError"));
return;
}
final ReloadCallback<Boolean> callback = response -> {
if (!response) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("unknownError"));
}
};
plugin.reload(callback);
context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("eventEditorSaved"));
if (plugin.getSettings().getConsoleLogging() > 0) {
final String identifier = context.getForWhom() instanceof Player ?
"Player " + ((Player)context.getForWhom()).getUniqueId() : "CONSOLE";
plugin.getLogger().info(identifier + " saved action " + context.getSessionData(CK.E_NAME));
}
for (final IQuester q : plugin.getOfflineQuesters()) {
for (final IQuest quest : q.getCurrentQuests().keySet()) {
q.checkQuest(quest);
}
}
clearData(context);
}
}

View File

@ -0,0 +1,277 @@
/*
* Copyright (c) 2014 PikaMug and contributors. 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.conditions;
import me.blackvein.quests.quests.IQuest;
import me.blackvein.quests.player.IQuester;
import me.blackvein.quests.Quests;
import me.blackvein.quests.convo.conditions.main.ConditionMainPrompt;
import me.blackvein.quests.convo.conditions.menu.ConditionMenuPrompt;
import me.blackvein.quests.interfaces.ReloadCallback;
import me.blackvein.quests.util.CK;
import me.blackvein.quests.util.FakeConversable;
import me.blackvein.quests.util.Lang;
import org.bukkit.ChatColor;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.conversations.ConversationAbandonedEvent;
import org.bukkit.conversations.ConversationAbandonedListener;
import org.bukkit.conversations.ConversationContext;
import org.bukkit.conversations.ConversationFactory;
import org.bukkit.conversations.ConversationPrefix;
import org.bukkit.conversations.Prompt;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
public class BukkitConditionFactory implements ConditionFactory, ConversationAbandonedListener {
private final Quests plugin;
private final ConversationFactory conversationFactory;
private List<String> editingConditionNames = new LinkedList<>();
public BukkitConditionFactory(final Quests plugin) {
this.plugin = plugin;
// Ensure to initialize factory last so that 'this' is fully initialized before it is passed
this.conversationFactory = new ConversationFactory(plugin).withModality(false).withLocalEcho(false)
.withFirstPrompt(new ConditionMenuPrompt(new ConversationContext(plugin, new FakeConversable(),
new HashMap<>()))).withTimeout(3600)
.withPrefix(new LineBreakPrefix()).addConversationAbandonedListener(this);
}
public static class LineBreakPrefix implements ConversationPrefix {
@Override
public @NotNull String getPrefix(final @NotNull ConversationContext context) {
return "\n";
}
}
public ConversationFactory getConversationFactory() {
return conversationFactory;
}
public List<String> getNamesOfConditionsBeingEdited() {
return editingConditionNames;
}
public void setNamesOfConditionsBeingEdited(final List<String> conditionNames) {
this.editingConditionNames = conditionNames;
}
@Override
public void conversationAbandoned(final @NotNull ConversationAbandonedEvent abandonedEvent) {
}
public Prompt returnToMenu(final ConversationContext context) {
return new ConditionMainPrompt(context);
}
public void loadData(final ICondition condition, final ConversationContext context) {
if (condition.isFailQuest()) {
context.setSessionData(CK.C_FAIL_QUEST, Lang.get("yesWord"));
} else {
context.setSessionData(CK.C_FAIL_QUEST, Lang.get("noWord"));
}
if (condition.getEntitiesWhileRiding() != null && !condition.getEntitiesWhileRiding().isEmpty()) {
final LinkedList<String> entities = new LinkedList<>(condition.getEntitiesWhileRiding());
context.setSessionData(CK.C_WHILE_RIDING_ENTITY, entities);
}
if (condition.getNpcsWhileRiding() != null && !condition.getNpcsWhileRiding().isEmpty()) {
final LinkedList<Integer> npcs = new LinkedList<>(condition.getNpcsWhileRiding());
context.setSessionData(CK.C_WHILE_RIDING_NPC, npcs);
}
if (condition.getPermissions() != null && !condition.getPermissions().isEmpty()) {
final LinkedList<String> permissions = new LinkedList<>(condition.getPermissions());
context.setSessionData(CK.C_WHILE_PERMISSION, permissions);
}
if (condition.getItemsWhileHoldingMainHand() != null && !condition.getItemsWhileHoldingMainHand().isEmpty()) {
final LinkedList<ItemStack> items = new LinkedList<>(condition.getItemsWhileHoldingMainHand());
context.setSessionData(CK.C_WHILE_HOLDING_MAIN_HAND, items);
}
if (condition.getWorldsWhileStayingWithin() != null && !condition.getWorldsWhileStayingWithin().isEmpty()) {
final LinkedList<String> worlds = new LinkedList<>(condition.getBiomesWhileStayingWithin());
context.setSessionData(CK.C_WHILE_WITHIN_WORLD, worlds);
}
if (condition.getBiomesWhileStayingWithin() != null && !condition.getBiomesWhileStayingWithin().isEmpty()) {
final LinkedList<String> biomes = new LinkedList<>(condition.getBiomesWhileStayingWithin());
context.setSessionData(CK.C_WHILE_WITHIN_BIOME, biomes);
}
if (condition.getRegionsWhileStayingWithin() != null && !condition.getRegionsWhileStayingWithin().isEmpty()) {
final LinkedList<String> regions = new LinkedList<>(condition.getRegionsWhileStayingWithin());
context.setSessionData(CK.C_WHILE_WITHIN_REGION, regions);
}
if (condition.getPlaceholdersCheckIdentifier() != null
&& !condition.getPlaceholdersCheckIdentifier().isEmpty()) {
final LinkedList<String> identifiers = new LinkedList<>(condition.getPlaceholdersCheckIdentifier());
context.setSessionData(CK.C_WHILE_PLACEHOLDER_ID, identifiers);
}
if (condition.getPlaceholdersCheckValue() != null && !condition.getPlaceholdersCheckValue().isEmpty()) {
final LinkedList<String> values = new LinkedList<>(condition.getPlaceholdersCheckValue());
context.setSessionData(CK.C_WHILE_PLACEHOLDER_VAL, values);
}
}
public void clearData(final ConversationContext context) {
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_RIDING_NPC, null);
context.setSessionData(CK.C_WHILE_PERMISSION, 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);
context.setSessionData(CK.C_WHILE_WITHIN_REGION, null);
context.setSessionData(CK.C_WHILE_PLACEHOLDER_ID, null);
context.setSessionData(CK.C_WHILE_PLACEHOLDER_VAL, null);
}
public void deleteCondition(final ConversationContext context) {
final YamlConfiguration data = new YamlConfiguration();
final File conditionsFile = new File(plugin.getDataFolder(), "conditions.yml");
try {
data.load(conditionsFile);
} catch (final IOException | InvalidConfigurationException e) {
e.printStackTrace();
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("questErrorReadingFile")
.replace("<file>", conditionsFile.getName()));
return;
}
final String condition = (String) context.getSessionData(CK.ED_CONDITION_DELETE);
final ConfigurationSection sec = data.getConfigurationSection("conditions");
if (sec != null && condition != null) {
sec.set(condition, null);
}
try {
data.save(conditionsFile);
} catch (final IOException e) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("questSaveError"));
return;
}
final ReloadCallback<Boolean> callback = response -> {
if (!response) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("unknownError"));
}
};
plugin.reload(callback);
context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("conditionEditorDeleted"));
if (plugin.getSettings().getConsoleLogging() > 0) {
final String identifier = context.getForWhom() instanceof Player ?
"Player " + ((Player)context.getForWhom()).getUniqueId() : "CONSOLE";
plugin.getLogger().info(identifier + " deleted condition " + condition);
}
for (final IQuester q : plugin.getOfflineQuesters()) {
for (final IQuest quest : q.getCurrentQuests().keySet()) {
q.checkQuest(quest);
}
}
clearData(context);
}
public void saveCondition(final ConversationContext context) {
final YamlConfiguration data = new YamlConfiguration();
final File conditionsFile = new File(plugin.getDataFolder(), "conditions.yml");
try {
data.load(conditionsFile);
} catch (final IOException | InvalidConfigurationException e) {
e.printStackTrace();
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("questErrorReadingFile")
.replace("<file>", conditionsFile.getName()));
return;
}
if (context.getSessionData(CK.C_OLD_CONDITION) != null
&& !((String) Objects.requireNonNull(context.getSessionData(CK.C_OLD_CONDITION))).isEmpty()) {
data.set("conditions." + context.getSessionData(CK.C_OLD_CONDITION), null);
final Collection<ICondition> temp = plugin.getLoadedConditions();
temp.remove(plugin.getCondition((String) context.getSessionData(CK.C_OLD_CONDITION)));
plugin.setLoadedConditions(temp);
}
final ConfigurationSection section = data.createSection("conditions." + context.getSessionData(CK.C_NAME));
editingConditionNames.remove((String) context.getSessionData(CK.C_NAME));
if (context.getSessionData(CK.C_FAIL_QUEST) != null) {
final String s = (String) context.getSessionData(CK.C_FAIL_QUEST);
if (s != null && s.equalsIgnoreCase(Lang.get("yesWord"))) {
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_RIDING_NPC) != null) {
section.set("ride-npc",
context.getSessionData(CK.C_WHILE_RIDING_NPC));
}
if (context.getSessionData(CK.C_WHILE_PERMISSION) != null) {
section.set("permission",
context.getSessionData(CK.C_WHILE_PERMISSION));
}
if (context.getSessionData(CK.C_WHILE_HOLDING_MAIN_HAND) != null) {
section.set("hold-main-hand",
context.getSessionData(CK.C_WHILE_HOLDING_MAIN_HAND));
}
if (context.getSessionData(CK.C_WHILE_WITHIN_WORLD) != null) {
section.set("stay-within-world",
context.getSessionData(CK.C_WHILE_WITHIN_WORLD));
}
if (context.getSessionData(CK.C_WHILE_WITHIN_BIOME) != null) {
section.set("stay-within-biome",
context.getSessionData(CK.C_WHILE_WITHIN_BIOME));
}
if (context.getSessionData(CK.C_WHILE_WITHIN_REGION) != null) {
section.set("stay-within-region",
context.getSessionData(CK.C_WHILE_WITHIN_REGION));
}
if (context.getSessionData(CK.C_WHILE_PLACEHOLDER_ID) != null) {
section.set("check-placeholder-id",
context.getSessionData(CK.C_WHILE_PLACEHOLDER_ID));
}
if (context.getSessionData(CK.C_WHILE_PLACEHOLDER_VAL) != null) {
section.set("check-placeholder-value",
context.getSessionData(CK.C_WHILE_PLACEHOLDER_VAL));
}
try {
data.save(conditionsFile);
} catch (final IOException e) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("questSaveError"));
return;
}
final ReloadCallback<Boolean> callback = response -> {
if (!response) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("unknownError"));
}
};
plugin.reload(callback);
context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("conditionEditorSaved"));
if (plugin.getSettings().getConsoleLogging() > 0) {
final String identifier = context.getForWhom() instanceof Player ?
"Player " + ((Player)context.getForWhom()).getUniqueId() : "CONSOLE";
plugin.getLogger().info(identifier + " saved condition " + context.getSessionData(CK.C_NAME));
}
for (final IQuester q : plugin.getOfflineQuesters()) {
for (final IQuest quest : q.getCurrentQuests().keySet()) {
q.checkQuest(quest);
}
}
clearData(context);
}
}

View File

@ -12,8 +12,8 @@
package me.blackvein.quests.conditions;
import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester;
import me.blackvein.quests.quests.IQuest;
import me.blackvein.quests.player.IQuester;
import me.blackvein.quests.Quests;
import me.blackvein.quests.util.ItemUtil;
import me.blackvein.quests.util.MiscUtil;
@ -24,7 +24,7 @@ import org.bukkit.inventory.ItemStack;
import java.util.LinkedList;
import java.util.Objects;
public class Condition implements Comparable<Condition> {
public class Condition implements ICondition {
private final Quests plugin;
private String name = "";
@ -44,107 +44,130 @@ public class Condition implements Comparable<Condition> {
}
@Override
public int compareTo(final Condition condition) {
public int compareTo(final ICondition condition) {
return name.compareTo(condition.getName());
}
@Override
public String getName() {
return name;
}
@Override
public void setName(final String name) {
this.name = name;
}
@Override
public boolean isFailQuest() {
return failQuest;
}
@Override
public void setFailQuest(final boolean failQuest) {
this.failQuest = failQuest;
}
@Override
public LinkedList<String> getEntitiesWhileRiding() {
return entitiesWhileRiding;
}
@Override
public void setEntitiesWhileRiding(final LinkedList<String> entitiesWhileRiding) {
this.entitiesWhileRiding = entitiesWhileRiding;
}
@Override
public LinkedList<Integer> getNpcsWhileRiding() {
return npcsWhileRiding;
}
@Override
public void setNpcsWhileRiding(final LinkedList<Integer> npcsWhileRiding) {
this.npcsWhileRiding = npcsWhileRiding;
}
@Override
public LinkedList<String> getPermissions() {
return permissions;
}
@Override
public void setPermissions(final LinkedList<String> permissions) {
this.permissions = permissions;
}
@Override
public LinkedList<ItemStack> getItemsWhileHoldingMainHand() {
return itemsWhileHoldingMainHand;
}
@Override
public void setItemsWhileHoldingMainHand(final LinkedList<ItemStack> itemsWhileHoldingMainHand) {
this.itemsWhileHoldingMainHand = itemsWhileHoldingMainHand;
}
@Override
public LinkedList<String> getWorldsWhileStayingWithin() {
return worldsWhileStayingWithin;
}
@Override
public void setWorldsWhileStayingWithin(final LinkedList<String> worldsWhileStayingWithin) {
this.worldsWhileStayingWithin = worldsWhileStayingWithin;
}
@Override
public LinkedList<String> getBiomesWhileStayingWithin() {
return biomesWhileStayingWithin;
}
@Override
public void setBiomesWhileStayingWithin(final LinkedList<String> biomesWhileStayingWithin) {
this.biomesWhileStayingWithin = biomesWhileStayingWithin;
}
@Override
public LinkedList<String> getRegionsWhileStayingWithin() {
return regionsWhileStayingWithin;
}
@Override
public void setRegionsWhileStayingWithin(final LinkedList<String> biomesWhileStayingWithin) {
this.regionsWhileStayingWithin = biomesWhileStayingWithin;
}
@Override
public LinkedList<String> getPlaceholdersCheckIdentifier() {
return placeholdersCheckIdentifier;
}
@Override
public void setPlaceholdersCheckIdentifier(final LinkedList<String> placeholdersCheckIdentifier) {
this.placeholdersCheckIdentifier = placeholdersCheckIdentifier;
}
@Override
public LinkedList<String> getPlaceholdersCheckValue() {
return placeholdersCheckValue;
}
@Override
public void setPlaceholdersCheckValue(final LinkedList<String> placeholdersCheckValue) {
this.placeholdersCheckValue = placeholdersCheckValue;
}
@SuppressWarnings("deprecation")
public boolean check(final Quester quester, final Quest quest) {
@Override
public boolean check(final IQuester quester, final IQuest quest) {
final Player player = quester.getPlayer();
if (!entitiesWhileRiding.isEmpty()) {
for (final String e : entitiesWhileRiding) {
if (player.getVehicle() != null && player.getVehicle().getType().equals(MiscUtil.getProperMobType(e))) {
return true;
} else if (plugin.getSettings().getConsoleLogging() > 2) {
plugin.getLogger().info("DEBUG: Condition entity mismatch for " + player.getName() + ": " + e);
plugin.getLogger().info("DEBUG: ICondition entity mismatch for " + player.getName() + ": " + e);
}
}
} else if (!npcsWhileRiding.isEmpty()) {
@ -154,7 +177,7 @@ public class Condition implements Comparable<Condition> {
.equals(plugin.getDependencies().getCitizens().getNPCRegistry().getById(n).getEntity())) {
return true;
} else if (plugin.getSettings().getConsoleLogging() > 2) {
plugin.getLogger().info("DEBUG: Condition NPC mismatch for " + player.getName() + ": ID " + n);
plugin.getLogger().info("DEBUG: ICondition NPC mismatch for " + player.getName() + ": ID " + n);
}
}
}
@ -164,7 +187,7 @@ public class Condition implements Comparable<Condition> {
if (plugin.getDependencies().getVaultPermission().has(player, p)) {
return plugin.getDependencies().getVaultPermission().has(player, p);
} else if (plugin.getSettings().getConsoleLogging() > 2) {
plugin.getLogger().info("DEBUG: Condition permission mismatch for " + player.getName() + ": " + p);
plugin.getLogger().info("DEBUG: ICondition permission mismatch for " + player.getName() + ": " + p);
}
} else {
plugin.getLogger().warning("Vault must be installed for condition permission checks: " + p);
@ -175,7 +198,7 @@ public class Condition implements Comparable<Condition> {
if (ItemUtil.compareItems(player.getItemInHand(), is, true, true) == 0) {
return true;
} else if (plugin.getSettings().getConsoleLogging() > 2) {
plugin.getLogger().info("DEBUG: Condition item mismatch for " + player.getName() + ": code "
plugin.getLogger().info("DEBUG: ICondition item mismatch for " + player.getName() + ": code "
+ ItemUtil.compareItems(player.getItemInHand(), is, true, true));
}
}
@ -184,7 +207,7 @@ public class Condition implements Comparable<Condition> {
if (player.getWorld().getName().equalsIgnoreCase(w)) {
return true;
} else if (plugin.getSettings().getConsoleLogging() > 2) {
plugin.getLogger().info("DEBUG: Condition world mismatch for " + player.getName() + ": " + w);
plugin.getLogger().info("DEBUG: ICondition world mismatch for " + player.getName() + ": " + w);
}
}
} else if (!biomesWhileStayingWithin.isEmpty()) {
@ -196,7 +219,7 @@ public class Condition implements Comparable<Condition> {
.name().equalsIgnoreCase(Objects.requireNonNull(MiscUtil.getProperBiome(b)).name())) {
return true;
} else if (plugin.getSettings().getConsoleLogging() > 2) {
plugin.getLogger().info("DEBUG: Condition biome mismatch for " + player.getName() + ": "
plugin.getLogger().info("DEBUG: ICondition biome mismatch for " + player.getName() + ": "
+ MiscUtil.getProperBiome(b));
}
}
@ -205,7 +228,7 @@ public class Condition implements Comparable<Condition> {
if (quester.isInRegion(r)) {
return true;
} else if (plugin.getSettings().getConsoleLogging() > 2) {
plugin.getLogger().info("DEBUG: Condition region mismatch for " + player.getName() + ": " + r);
plugin.getLogger().info("DEBUG: ICondition region mismatch for " + player.getName() + ": " + r);
}
}
} else if (!placeholdersCheckIdentifier.isEmpty()) {
@ -216,7 +239,7 @@ public class Condition implements Comparable<Condition> {
placeholdersCheckValue.get(index).equals(PlaceholderAPI.setPlaceholders(player, i))) {
return true;
} else if (plugin.getSettings().getConsoleLogging() > 2) {
plugin.getLogger().info("DEBUG: Condition placeholder mismatch for " + player.getName() + ": " + i);
plugin.getLogger().info("DEBUG: ICondition placeholder mismatch for " + player.getName() + ": " + i);
}
} else {
plugin.getLogger().warning("PAPI must be installed for placeholder checks: " + i);

View File

@ -12,11 +12,10 @@
package me.blackvein.quests.convo.actions.main;
import me.blackvein.quests.Quest;
import me.blackvein.quests.QuestMob;
import me.blackvein.quests.actions.IAction;
import me.blackvein.quests.quests.IQuest;
import me.blackvein.quests.Quests;
import me.blackvein.quests.Stage;
import me.blackvein.quests.actions.Action;
import me.blackvein.quests.quests.IStage;
import me.blackvein.quests.convo.QuestsNumericPrompt;
import me.blackvein.quests.convo.actions.ActionsEditorNumericPrompt;
import me.blackvein.quests.convo.actions.ActionsEditorStringPrompt;
@ -25,6 +24,7 @@ import me.blackvein.quests.convo.actions.tasks.PlayerPrompt;
import me.blackvein.quests.convo.actions.tasks.TimerPrompt;
import me.blackvein.quests.convo.actions.tasks.WeatherPrompt;
import me.blackvein.quests.convo.generic.ItemStackPrompt;
import me.blackvein.quests.entity.BukkitQuestMob;
import me.blackvein.quests.events.editor.actions.ActionsEditorPostOpenNumericPromptEvent;
import me.blackvein.quests.events.editor.actions.ActionsEditorPostOpenStringPromptEvent;
import me.blackvein.quests.util.CK;
@ -117,7 +117,7 @@ public class ActionMainPrompt extends ActionsEditorNumericPrompt {
return ChatColor.YELLOW + Lang.get("stageEditorDenizenScript");
}
case 8:
return ChatColor.YELLOW + Lang.get("eventEditorFailQuest") + ":";
return ChatColor.YELLOW + Lang.get("eventEditorFailQuest");
case 9:
return ChatColor.GREEN + Lang.get("save");
case 10:
@ -147,7 +147,7 @@ public class ActionMainPrompt extends ActionsEditorNumericPrompt {
final StringBuilder text = new StringBuilder();
if (types != null) {
for (final String s : types) {
final QuestMob qm = QuestMob.fromString(s);
final BukkitQuestMob qm = BukkitQuestMob.fromString(s);
text.append("\n").append(ChatColor.GRAY).append(" - ").append(ChatColor.AQUA)
.append(qm.getType().name())
.append((qm.getName() != null) ? " (" + qm.getName() + ")" : "").append(ChatColor.GRAY)
@ -173,7 +173,8 @@ public class ActionMainPrompt extends ActionsEditorNumericPrompt {
if (context.getSessionData(CK.E_FAIL_QUEST) == null) {
context.setSessionData(CK.E_FAIL_QUEST, Lang.get("noWord"));
}
return "" + ChatColor.AQUA + context.getSessionData(CK.E_FAIL_QUEST);
return ChatColor.GRAY + "(" + ChatColor.AQUA + context.getSessionData(CK.E_FAIL_QUEST) + ChatColor.GRAY
+ ")";
default:
return null;
}
@ -181,7 +182,8 @@ public class ActionMainPrompt extends ActionsEditorNumericPrompt {
@Override
public @NotNull String getBasicPromptText(final @NotNull ConversationContext context) {
final ActionsEditorPostOpenNumericPromptEvent event = new ActionsEditorPostOpenNumericPromptEvent(context, this);
final ActionsEditorPostOpenNumericPromptEvent event
= new ActionsEditorPostOpenNumericPromptEvent(context, this);
plugin.getServer().getPluginManager().callEvent(event);
final StringBuilder text = new StringBuilder(ChatColor.GOLD + "- " + getTitle(context).replaceFirst(": ", ": "
@ -271,7 +273,7 @@ public class ActionMainPrompt extends ActionsEditorNumericPrompt {
return null;
}
if (!input.equalsIgnoreCase(Lang.get("cmdCancel"))) {
for (final Action a : plugin.getLoadedActions()) {
for (final IAction a : plugin.getLoadedActions()) {
if (a.getName().equalsIgnoreCase(input)) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("eventEditorExists"));
return new ActionNamePrompt(context);
@ -352,7 +354,7 @@ public class ActionMainPrompt extends ActionsEditorNumericPrompt {
final StringBuilder text = new StringBuilder();
if (types != null) {
for (final String type : types) {
final QuestMob qm = QuestMob.fromString(type);
final BukkitQuestMob qm = BukkitQuestMob.fromString(type);
text.append("\n").append(ChatColor.GRAY).append(" - ").append(ChatColor.AQUA)
.append(qm.getType().name())
.append((qm.getName() != null) ? " (" + qm.getName() + ")" : "")
@ -376,11 +378,11 @@ public class ActionMainPrompt extends ActionsEditorNumericPrompt {
= new ActionsEditorPostOpenNumericPromptEvent(context, this);
plugin.getServer().getPluginManager().callEvent(event);
final StringBuilder text = new StringBuilder(ChatColor.GOLD + getTitle(context) + "\n");
final StringBuilder text = new StringBuilder(ChatColor.GOLD + getTitle(context));
for (int i = 1; i <= size; i++) {
text.append(getNumberColor(context, i)).append(ChatColor.BOLD).append(i).append(ChatColor.RESET)
.append(" - ").append(getSelectionText(context, i)).append(" ")
.append(getAdditionalText(context, i)).append("\n");
text.append("\n").append(getNumberColor(context, i)).append(ChatColor.BOLD).append(i)
.append(ChatColor.RESET).append(" - ").append(getSelectionText(context, i)).append(" ")
.append(getAdditionalText(context, i));
}
return text.toString();
}
@ -404,11 +406,11 @@ public class ActionMainPrompt extends ActionsEditorNumericPrompt {
public class ActionMobPrompt extends ActionsEditorNumericPrompt {
private QuestMob questMob;
private BukkitQuestMob questMob;
private Integer itemIndex = -1;
private final Integer mobIndex;
public ActionMobPrompt(final ConversationContext context, final int mobIndex, final QuestMob questMob) {
public ActionMobPrompt(final ConversationContext context, final int mobIndex, final BukkitQuestMob questMob) {
super(context);
this.questMob = questMob;
this.mobIndex = mobIndex;
@ -498,46 +500,46 @@ public class ActionMainPrompt extends ActionsEditorNumericPrompt {
switch (number) {
case 1:
return "(" + (questMob.getName() == null ? Lang.get("noneSet") : ChatColor.AQUA + questMob.getName())
+ ChatColor.GRAY + ")\n";
+ ChatColor.GRAY + ")";
case 2:
return "(" + (questMob.getType() == null ? Lang.get("noneSet") : ChatColor.AQUA
+ questMob.getType().name()) + ChatColor.GRAY + ")\n";
+ questMob.getType().name()) + ChatColor.GRAY + ")";
case 3:
return "(" + (questMob.getSpawnLocation() == null ? ChatColor.GRAY + Lang.get("noneSet") : ChatColor.AQUA
+ ConfigUtil.getLocationInfo(questMob.getSpawnLocation())) + ChatColor.GRAY + ")\n";
+ ConfigUtil.getLocationInfo(questMob.getSpawnLocation())) + ChatColor.GRAY + ")";
case 4:
return "(" + (questMob.getSpawnAmounts() == null ? ChatColor.GRAY + Lang.get("noneSet") : ChatColor.AQUA
+ "" + questMob.getSpawnAmounts()) + ChatColor.GRAY + ")\n";
+ "" + questMob.getSpawnAmounts()) + ChatColor.GRAY + ")";
case 5:
return "(" + (questMob.getInventory()[0] == null ? ChatColor.GRAY + Lang.get("noneSet") : ChatColor.AQUA
+ ItemUtil.getDisplayString(questMob.getInventory()[0])) + ChatColor.GRAY + ")\n";
+ ItemUtil.getDisplayString(questMob.getInventory()[0])) + ChatColor.GRAY + ")";
case 6:
return "(" + (questMob.getDropChances()[0] == null ? ChatColor.GRAY + Lang.get("noneSet") : ChatColor.AQUA
+ "" + questMob.getDropChances()[0]) + ChatColor.GRAY + ")\n";
+ "" + questMob.getDropChances()[0]) + ChatColor.GRAY + ")";
case 7:
return "(" + (questMob.getInventory()[1] == null ? ChatColor.GRAY + Lang.get("noneSet") : ChatColor.AQUA
+ ItemUtil.getDisplayString(questMob.getInventory()[1])) + ChatColor.GRAY + ")\n";
+ ItemUtil.getDisplayString(questMob.getInventory()[1])) + ChatColor.GRAY + ")";
case 8:
return "(" + (questMob.getDropChances()[1] == null ? ChatColor.GRAY + Lang.get("noneSet") : ChatColor.AQUA
+ "" + questMob.getDropChances()[1]) + ChatColor.GRAY + ")\n";
+ "" + questMob.getDropChances()[1]) + ChatColor.GRAY + ")";
case 9:
return "(" + (questMob.getInventory()[2] == null ? ChatColor.GRAY + Lang.get("noneSet") : ChatColor.AQUA
+ ItemUtil.getDisplayString(questMob.getInventory()[2])) + ChatColor.GRAY + ")\n";
+ ItemUtil.getDisplayString(questMob.getInventory()[2])) + ChatColor.GRAY + ")";
case 10:
return "(" + (questMob.getDropChances()[2] == null ? ChatColor.GRAY + Lang.get("noneSet") : ChatColor.AQUA
+ "" + questMob.getDropChances()[2]) + ChatColor.GRAY + ")\n";
+ "" + questMob.getDropChances()[2]) + ChatColor.GRAY + ")";
case 11:
return "(" + (questMob.getInventory()[3] == null ? ChatColor.GRAY + Lang.get("noneSet") : ChatColor.AQUA
+ ItemUtil.getDisplayString(questMob.getInventory()[3])) + ChatColor.GRAY + ")\n";
+ ItemUtil.getDisplayString(questMob.getInventory()[3])) + ChatColor.GRAY + ")";
case 12:
return "(" + (questMob.getDropChances()[3] == null ? ChatColor.GRAY + Lang.get("noneSet") : ChatColor.AQUA
+ "" + questMob.getDropChances()[3]) + ChatColor.GRAY + ")\n";
+ "" + questMob.getDropChances()[3]) + ChatColor.GRAY + ")";
case 13:
return "(" + (questMob.getInventory()[4] == null ? ChatColor.GRAY + Lang.get("noneSet") : ChatColor.AQUA
+ ItemUtil.getDisplayString(questMob.getInventory()[4])) + ChatColor.GRAY + ")\n";
+ ItemUtil.getDisplayString(questMob.getInventory()[4])) + ChatColor.GRAY + ")";
case 14:
return "(" + (questMob.getDropChances()[4] == null ? ChatColor.GRAY + Lang.get("noneSet") : ChatColor.AQUA
+ "" + questMob.getDropChances()[4]) + ChatColor.GRAY + ")\n";
+ "" + questMob.getDropChances()[4]) + ChatColor.GRAY + ")";
case 15:
case 16:
return "";
@ -549,7 +551,7 @@ public class ActionMainPrompt extends ActionsEditorNumericPrompt {
@Override
public @NotNull String getBasicPromptText(final @NotNull ConversationContext context) {
if (questMob == null) {
questMob = new QuestMob();
questMob = new BukkitQuestMob();
}
// Check/add newly made item
if (context.getSessionData("tempStack") != null) {
@ -564,11 +566,11 @@ public class ActionMainPrompt extends ActionsEditorNumericPrompt {
= new ActionsEditorPostOpenNumericPromptEvent(context, this);
plugin.getServer().getPluginManager().callEvent(event);
final StringBuilder text = new StringBuilder(ChatColor.GOLD + getTitle(context) + "\n");
final StringBuilder text = new StringBuilder(ChatColor.GOLD + getTitle(context));
for (int i = 1; i <= size; i++) {
text.append(getNumberColor(context, i)).append(ChatColor.BOLD).append(i).append(ChatColor.RESET)
.append(" - ").append(getSelectionText(context, i)).append(ChatColor.GRAY).append(" ")
.append(getAdditionalText(context, i)).append("\n");
text.append("\n").append(getNumberColor(context, i)).append(ChatColor.BOLD).append(i)
.append(ChatColor.RESET).append(" - ").append(getSelectionText(context, i))
.append(ChatColor.GRAY).append(" ").append(getAdditionalText(context, i));
}
return text.toString();
}
@ -656,10 +658,10 @@ public class ActionMainPrompt extends ActionsEditorNumericPrompt {
public class ActionMobNamePrompt extends ActionsEditorStringPrompt {
private final QuestMob questMob;
private final BukkitQuestMob questMob;
private final Integer mobIndex;
public ActionMobNamePrompt(final ConversationContext context, final int mobIndex, final QuestMob questMob) {
public ActionMobNamePrompt(final ConversationContext context, final int mobIndex, final BukkitQuestMob questMob) {
super(context);
this.questMob = questMob;
this.mobIndex = mobIndex;
@ -677,7 +679,8 @@ public class ActionMainPrompt extends ActionsEditorNumericPrompt {
@Override
public @NotNull String getPromptText(final @NotNull ConversationContext context) {
final ActionsEditorPostOpenStringPromptEvent event = new ActionsEditorPostOpenStringPromptEvent(context, this);
final ActionsEditorPostOpenStringPromptEvent event
= new ActionsEditorPostOpenStringPromptEvent(context, this);
if (context.getPlugin() != null) {
context.getPlugin().getServer().getPluginManager().callEvent(event);
}
@ -705,10 +708,10 @@ public class ActionMainPrompt extends ActionsEditorNumericPrompt {
public class ActionMobTypePrompt extends ActionsEditorStringPrompt {
private final QuestMob questMob;
private final BukkitQuestMob questMob;
private final Integer mobIndex;
public ActionMobTypePrompt(final ConversationContext context, final int mobIndex, final QuestMob questMob) {
public ActionMobTypePrompt(final ConversationContext context, final int mobIndex, final BukkitQuestMob questMob) {
super(context);
this.questMob = questMob;
this.mobIndex = mobIndex;
@ -731,7 +734,7 @@ public class ActionMainPrompt extends ActionsEditorNumericPrompt {
if (context.getPlugin() != null) {
context.getPlugin().getServer().getPluginManager().callEvent(event);
}
final StringBuilder mobs = new StringBuilder(ChatColor.LIGHT_PURPLE + getTitle(context) + "\n");
final EntityType[] mobArr = EntityType.values();
for (int i = 0; i < mobArr.length; i++) {
@ -768,10 +771,10 @@ public class ActionMainPrompt extends ActionsEditorNumericPrompt {
public class ActionMobAmountPrompt extends ActionsEditorStringPrompt {
private final QuestMob questMob;
private final BukkitQuestMob questMob;
private final Integer mobIndex;
public ActionMobAmountPrompt(final ConversationContext context, final int mobIndex, final QuestMob questMob) {
public ActionMobAmountPrompt(final ConversationContext context, final int mobIndex, final BukkitQuestMob questMob) {
super(context);
this.questMob = questMob;
this.mobIndex = mobIndex;
@ -825,10 +828,10 @@ public class ActionMainPrompt extends ActionsEditorNumericPrompt {
public class ActionMobLocationPrompt extends ActionsEditorStringPrompt {
private final QuestMob questMob;
private final BukkitQuestMob questMob;
private final Integer mobIndex;
public ActionMobLocationPrompt(final ConversationContext context, final int mobIndex, final QuestMob questMob) {
public ActionMobLocationPrompt(final ConversationContext context, final int mobIndex, final BukkitQuestMob questMob) {
super(context);
this.questMob = questMob;
this.mobIndex = mobIndex;
@ -887,11 +890,11 @@ public class ActionMainPrompt extends ActionsEditorNumericPrompt {
public class ActionMobDropPrompt extends ActionsEditorStringPrompt {
private final QuestMob questMob;
private final BukkitQuestMob questMob;
private final Integer mobIndex;
private final Integer invIndex;
public ActionMobDropPrompt(final ConversationContext context, final int invIndex, final int mobIndex, final QuestMob questMob) {
public ActionMobDropPrompt(final ConversationContext context, final int invIndex, final int mobIndex, final BukkitQuestMob questMob) {
super(context);
this.questMob = questMob;
this.mobIndex = mobIndex;
@ -971,10 +974,11 @@ public class ActionMainPrompt extends ActionsEditorNumericPrompt {
context.getPlugin().getServer().getPluginManager().callEvent(event);
}
final StringBuilder text = new StringBuilder(ChatColor.DARK_AQUA + "- " + getTitle(context) + " -\n");
if (plugin.getDependencies().getDenizenApi().getScriptNames() != null) {
final StringBuilder text = new StringBuilder(ChatColor.DARK_AQUA + "- " + getTitle(context) + " -");
if (plugin.getDependencies().getDenizenApi() != null
&& plugin.getDependencies().getDenizenApi().getScriptNames() != null) {
for (final String s : plugin.getDependencies().getDenizenApi().getScriptNames()) {
text.append(ChatColor.AQUA).append("- ").append(s).append("\n");
text.append("\n").append(ChatColor.AQUA).append("- ").append(s);
}
}
return text.toString() + ChatColor.YELLOW + getQueryText(context);
@ -1013,8 +1017,8 @@ public class ActionMainPrompt extends ActionsEditorNumericPrompt {
super(context);
if (modifiedName != null) {
modName = modifiedName;
for (final Quest q : plugin.getLoadedQuests()) {
for (final Stage s : q.getStages()) {
for (final IQuest q : plugin.getLoadedQuests()) {
for (final IStage s : q.getStages()) {
if (s.getFinishAction() != null && s.getFinishAction().getName() != null) {
if (s.getFinishAction().getName().equalsIgnoreCase(modifiedName)) {
modified.add(q.getName());
@ -1162,7 +1166,8 @@ public class ActionMainPrompt extends ActionsEditorNumericPrompt {
final StringBuilder text = new StringBuilder(ChatColor.YELLOW + getQueryText(context));
for (int i = 1; i <= size; i++) {
text.append("\n").append(getNumberColor(context, i)).append(ChatColor.BOLD).append(i).append(ChatColor.RESET).append(" - ").append(getSelectionText(context, i));
text.append("\n").append(getNumberColor(context, i)).append(ChatColor.BOLD).append(i)
.append(ChatColor.RESET).append(" - ").append(getSelectionText(context, i));
}
return QuestsNumericPrompt.sendClickableSelection(text.toString(), context);
}

View File

@ -12,10 +12,10 @@
package me.blackvein.quests.convo.actions.menu;
import me.blackvein.quests.Quest;
import me.blackvein.quests.actions.IAction;
import me.blackvein.quests.quests.IQuest;
import me.blackvein.quests.Quests;
import me.blackvein.quests.Stage;
import me.blackvein.quests.actions.Action;
import me.blackvein.quests.quests.IStage;
import me.blackvein.quests.convo.QuestsNumericPrompt;
import me.blackvein.quests.convo.actions.ActionsEditorNumericPrompt;
import me.blackvein.quests.convo.actions.ActionsEditorStringPrompt;
@ -28,7 +28,6 @@ import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.conversations.ConversationContext;
import org.bukkit.conversations.Prompt;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import java.util.LinkedList;
@ -187,7 +186,7 @@ public class ActionMenuPrompt extends ActionsEditorNumericPrompt {
}
input = input.trim();
if (!input.equalsIgnoreCase(Lang.get("cmdCancel"))) {
for (final Action a : plugin.getLoadedActions()) {
for (final IAction a : plugin.getLoadedActions()) {
if (a.getName().equalsIgnoreCase(input)) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("eventEditorExists"));
return new ActionSelectCreatePrompt(context);
@ -237,7 +236,7 @@ public class ActionMenuPrompt extends ActionsEditorNumericPrompt {
final ActionsEditorPostOpenStringPromptEvent event
= new ActionsEditorPostOpenStringPromptEvent(context, this);
plugin.getServer().getPluginManager().callEvent(event);
final List<String> names = plugin.getLoadedActions().stream().map(Action::getName).collect(Collectors.toList());
final List<String> names = plugin.getLoadedActions().stream().map(IAction::getName).collect(Collectors.toList());
return sendClickableMenu(getTitle(context), names, getQueryText(context), context);
}
@ -247,7 +246,7 @@ public class ActionMenuPrompt extends ActionsEditorNumericPrompt {
return null;
}
if (!input.equalsIgnoreCase(Lang.get("cmdCancel"))) {
final Action a = plugin.getAction(input);
final IAction a = plugin.getAction(input);
if (a != null) {
context.setSessionData(CK.E_OLD_EVENT, a.getName());
context.setSessionData(CK.E_NAME, a.getName());
@ -283,7 +282,7 @@ public class ActionMenuPrompt extends ActionsEditorNumericPrompt {
final ActionsEditorPostOpenStringPromptEvent event
= new ActionsEditorPostOpenStringPromptEvent(context, this);
plugin.getServer().getPluginManager().callEvent(event);
final List<String> names = plugin.getLoadedActions().stream().map(Action::getName).collect(Collectors.toList());
final List<String> names = plugin.getLoadedActions().stream().map(IAction::getName).collect(Collectors.toList());
return sendClickableMenu(getTitle(context), names, getQueryText(context), context);
}
@ -294,10 +293,10 @@ public class ActionMenuPrompt extends ActionsEditorNumericPrompt {
}
if (!input.equalsIgnoreCase(Lang.get("cmdCancel"))) {
final LinkedList<String> used = new LinkedList<String>();
final Action a = plugin.getAction(input);
final IAction a = plugin.getAction(input);
if (a != null) {
for (final Quest quest : plugin.getLoadedQuests()) {
for (final Stage stage : quest.getStages()) {
for (final IQuest quest : plugin.getLoadedQuests()) {
for (final IStage stage : quest.getStages()) {
if (stage.getFinishAction() != null
&& stage.getFinishAction().getName().equalsIgnoreCase(a.getName())) {
used.add(quest.getName());

View File

@ -93,15 +93,15 @@ public class EffectPrompt extends ActionsEditorNumericPrompt {
if (context.getSessionData(CK.E_EFFECTS) == null) {
return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")";
} else {
final StringBuilder text = new StringBuilder("\n");
final StringBuilder text = new StringBuilder();
final LinkedList<String> effects = (LinkedList<String>) context.getSessionData(CK.E_EFFECTS);
final LinkedList<String> locations
= (LinkedList<String>) context.getSessionData(CK.E_EFFECTS_LOCATIONS);
if (effects != null && locations != null) {
for (final String effect : effects) {
text.append(ChatColor.GRAY).append(" - ").append(ChatColor.AQUA).append(effect)
text.append("\n").append(ChatColor.GRAY).append(" - ").append(ChatColor.AQUA).append(effect)
.append(ChatColor.GRAY).append(" at ").append(ChatColor.DARK_AQUA)
.append(locations.get(effects.indexOf(effect))).append("\n");
.append(locations.get(effects.indexOf(effect)));
}
}
return text.toString();
@ -110,11 +110,11 @@ public class EffectPrompt extends ActionsEditorNumericPrompt {
if (context.getSessionData(CK.E_EXPLOSIONS) == null) {
return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")";
} else {
final StringBuilder text = new StringBuilder("\n");
final StringBuilder text = new StringBuilder();
final LinkedList<String> locations = (LinkedList<String>) context.getSessionData(CK.E_EXPLOSIONS);
if (locations != null) {
for (final String loc : locations) {
text.append(ChatColor.GRAY).append(" - ").append(ChatColor.AQUA).append(loc).append("\n");
text.append("\n").append(ChatColor.GRAY).append(" - ").append(ChatColor.AQUA).append(loc);
}
}
return text.toString();
@ -221,9 +221,9 @@ public class EffectPrompt extends ActionsEditorNumericPrompt {
if (context.getSessionData(CK.E_EFFECTS) == null) {
return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")";
} else {
final StringBuilder text = new StringBuilder("\n");
final StringBuilder text = new StringBuilder();
for (final String s : (List<String>) Objects.requireNonNull(context.getSessionData(CK.E_EFFECTS))) {
text.append(ChatColor.GRAY).append(" - ").append(ChatColor.AQUA).append(s).append("\n");
text.append("\n").append(ChatColor.GRAY).append(" - ").append(ChatColor.AQUA).append(s);
}
return text.toString();
}
@ -231,10 +231,10 @@ public class EffectPrompt extends ActionsEditorNumericPrompt {
if (context.getSessionData(CK.E_EFFECTS_LOCATIONS) == null) {
return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")";
} else {
final StringBuilder text = new StringBuilder("\n");
final StringBuilder text = new StringBuilder();
for (final String s : (List<String>) Objects.requireNonNull(context
.getSessionData(CK.E_EFFECTS_LOCATIONS))) {
text.append(ChatColor.GRAY).append(" - ").append(ChatColor.AQUA).append(s).append("\n");
text.append("\n").append(ChatColor.GRAY).append(" - ").append(ChatColor.AQUA).append(s);
}
return text.toString();
}
@ -335,7 +335,7 @@ public class EffectPrompt extends ActionsEditorNumericPrompt {
final ActionsEditorPostOpenStringPromptEvent event
= new ActionsEditorPostOpenStringPromptEvent(context, this);
plugin.getServer().getPluginManager().callEvent(event);
final StringBuilder effects = new StringBuilder(ChatColor.LIGHT_PURPLE + getTitle(context) + "\n");
final Effect[] values = Effect.values();
for (int i = 0; i < values.length; i++) {
@ -345,7 +345,7 @@ public class EffectPrompt extends ActionsEditorNumericPrompt {
} else {
effects.append(MiscUtil.snakeCaseToUpperCamelCase(eff.name())).append("\n");
}
}
return effects.toString() + ChatColor.YELLOW + getQueryText(context);
}

View File

@ -89,21 +89,21 @@ public class PlayerPrompt extends ActionsEditorNumericPrompt {
case 1:
return ChatColor.YELLOW + Lang.get("eventEditorSetMessage");
case 2:
return ChatColor.YELLOW + Lang.get("eventEditorClearInv");
case 3:
return ChatColor.YELLOW + Lang.get("eventEditorSetItems");
case 4:
case 3:
return ChatColor.YELLOW + Lang.get("eventEditorSetPotionEffects");
case 5:
case 4:
return ChatColor.YELLOW + Lang.get("eventEditorSetHunger");
case 6:
case 5:
return ChatColor.YELLOW + Lang.get("eventEditorSetSaturation");
case 7:
case 6:
return ChatColor.YELLOW + Lang.get("eventEditorSetHealth");
case 8:
case 7:
return ChatColor.YELLOW + Lang.get("eventEditorSetTeleport");
case 9:
case 8:
return ChatColor.YELLOW + Lang.get("eventEditorSetCommands");
case 9:
return ChatColor.YELLOW + Lang.get("eventEditorClearInv");
case 10:
return ChatColor.GREEN + Lang.get("done");
default:
@ -122,27 +122,25 @@ public class PlayerPrompt extends ActionsEditorNumericPrompt {
return ChatColor.GRAY + "(" + ChatColor.AQUA + context.getSessionData(CK.E_MESSAGE) + ChatColor.GRAY + ")";
}
case 2:
return ChatColor.AQUA + "" + context.getSessionData(CK.E_CLEAR_INVENTORY);
case 3:
if (context.getSessionData(CK.E_ITEMS) == null) {
return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")";
} else {
final StringBuilder text = new StringBuilder("\n");
final StringBuilder text = new StringBuilder();
final LinkedList<ItemStack> items = (LinkedList<ItemStack>) context.getSessionData(CK.E_ITEMS);
if (items != null) {
for (final ItemStack is : items) {
if (is != null) {
text.append(ChatColor.GRAY).append(" - ").append(ItemUtil.getString(is)).append("\n");
text.append("\n").append(ChatColor.GRAY).append(" - ").append(ItemUtil.getString(is));
}
}
return text.toString();
}
}
case 4:
case 3:
if (context.getSessionData(CK.E_POTION_TYPES) == null) {
return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")";
} else {
final StringBuilder text = new StringBuilder("\n");
final StringBuilder text = new StringBuilder();
final LinkedList<String> types = (LinkedList<String>) context.getSessionData(CK.E_POTION_TYPES);
final LinkedList<Long> durations = (LinkedList<Long>) context.getSessionData(CK.E_POTION_DURATIONS);
final LinkedList<Integer> mags = (LinkedList<Integer>) context.getSessionData(CK.E_POTION_STRENGTH);
@ -150,53 +148,56 @@ public class PlayerPrompt extends ActionsEditorNumericPrompt {
if (types != null && durations != null && mags != null) {
for (final String type : types) {
index++;
text.append(ChatColor.GRAY).append(" - ").append(ChatColor.AQUA).append(type)
text.append("\n").append(ChatColor.GRAY).append(" - ").append(ChatColor.AQUA).append(type)
.append(ChatColor.DARK_PURPLE).append(" ").append(RomanNumeral.getNumeral(mags
.get(index))).append(ChatColor.GRAY).append(" -> ").append(ChatColor.DARK_AQUA)
.append(MiscUtil.getTime(durations.get(index) * 50L)).append("\n");
.append(MiscUtil.getTime(durations.get(index) * 50L));
}
}
return text.toString();
}
case 5:
case 4:
if (context.getSessionData(CK.E_HUNGER) == null) {
return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")";
} else {
return ChatColor.GRAY + "(" + ChatColor.AQUA + context.getSessionData(CK.E_HUNGER) + ChatColor.GRAY
+ ")";
}
case 6:
case 5:
if (context.getSessionData(CK.E_SATURATION) == null) {
return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")";
} else {
return ChatColor.GRAY + "(" + ChatColor.AQUA + context.getSessionData(CK.E_SATURATION) + ChatColor.GRAY
+ ")";
}
case 7:
case 6:
if (context.getSessionData(CK.E_HEALTH) == null) {
return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")";
} else {
return ChatColor.GRAY + "(" + ChatColor.AQUA + context.getSessionData(CK.E_HEALTH) + ChatColor.GRAY
+ ")";
}
case 8:
case 7:
if (context.getSessionData(CK.E_TELEPORT) == null) {
return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")";
} else {
return ChatColor.GRAY + "(" + ChatColor.AQUA + context.getSessionData(CK.E_TELEPORT) + ChatColor.GRAY
+ ")";
}
case 9:
case 8:
if (context.getSessionData(CK.E_COMMANDS) == null) {
return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")";
} else {
final StringBuilder text = new StringBuilder("\n");
final StringBuilder text = new StringBuilder();
for (final String s : (LinkedList<String>) Objects.requireNonNull(context
.getSessionData(CK.E_COMMANDS))) {
text.append(ChatColor.GRAY).append(" - ").append(ChatColor.AQUA).append(s).append("\n");
text.append("\n").append(ChatColor.GRAY).append(" - ").append(ChatColor.AQUA).append(s);
}
return text.toString();
}
case 9:
return ChatColor.GRAY + "(" + ChatColor.AQUA + context.getSessionData(CK.E_CLEAR_INVENTORY) + ChatColor.GRAY
+ ")";
case 10:
return "";
default:
@ -229,26 +230,16 @@ public class PlayerPrompt extends ActionsEditorNumericPrompt {
case 1:
return new PlayerMessagePrompt(context);
case 2:
final String s = (String) context.getSessionData(CK.E_CLEAR_INVENTORY);
if (s != null) {
if (s.equalsIgnoreCase(Lang.get("yesWord"))) {
context.setSessionData(CK.E_CLEAR_INVENTORY, Lang.get("noWord"));
} else {
context.setSessionData(CK.E_CLEAR_INVENTORY, Lang.get("yesWord"));
}
}
return new ActionMainPrompt(context);
case 3:
return new PlayerItemListPrompt(context);
case 3:
return new PlayerPotionListPrompt(context);
case 4:
return new PlayerPotionEffectPrompt(context);
case 5:
return new PlayerHungerPrompt(context);
case 6:
case 5:
return new PlayerSaturationPrompt(context);
case 7:
case 6:
return new PlayerHealthPrompt(context);
case 8:
case 7:
if (context.getForWhom() instanceof Player) {
final Map<UUID, Block> selectedTeleportLocations = plugin.getActionFactory().getSelectedTeleportLocations();
selectedTeleportLocations.put(((Player) context.getForWhom()).getUniqueId(), null);
@ -258,13 +249,23 @@ public class PlayerPrompt extends ActionsEditorNumericPrompt {
context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("consoleError"));
return new PlayerPrompt(context);
}
case 9:
case 8:
if (!plugin.hasLimitedAccess(context.getForWhom())) {
return new PlayerCommandsPrompt(context);
} else {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("noPermission"));
return new PlayerPrompt(context);
}
case 9:
final String s = (String) context.getSessionData(CK.E_CLEAR_INVENTORY);
if (s != null) {
if (s.equalsIgnoreCase(Lang.get("yesWord"))) {
context.setSessionData(CK.E_CLEAR_INVENTORY, Lang.get("noWord"));
} else {
context.setSessionData(CK.E_CLEAR_INVENTORY, Lang.get("yesWord"));
}
}
return new PlayerPrompt(context);
case 10:
return new ActionMainPrompt(context);
default:
@ -364,11 +365,11 @@ public class PlayerPrompt extends ActionsEditorNumericPrompt {
if (context.getSessionData(CK.E_ITEMS) == null) {
return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")";
} else {
final StringBuilder text = new StringBuilder("\n");
final StringBuilder text = new StringBuilder();
for (final ItemStack is : (List<ItemStack>) Objects.requireNonNull(context
.getSessionData(CK.E_ITEMS))) {
text.append(ChatColor.GRAY).append(" - ").append(ItemUtil.getDisplayString(is))
.append("\n");
text.append("\n").append(ChatColor.GRAY).append(" - ")
.append(ItemUtil.getDisplayString(is));
}
return text.toString();
}
@ -430,9 +431,9 @@ public class PlayerPrompt extends ActionsEditorNumericPrompt {
}
}
public class PlayerPotionEffectPrompt extends ActionsEditorNumericPrompt {
public class PlayerPotionListPrompt extends ActionsEditorNumericPrompt {
public PlayerPotionEffectPrompt(final ConversationContext context) {
public PlayerPotionListPrompt(final ConversationContext context) {
super(context);
}
@ -490,10 +491,10 @@ public class PlayerPrompt extends ActionsEditorNumericPrompt {
if (context.getSessionData(CK.E_POTION_TYPES) == null) {
return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")";
} else {
final StringBuilder text = new StringBuilder("\n");
final StringBuilder text = new StringBuilder();
for (final String s : (LinkedList<String>) Objects.requireNonNull(context
.getSessionData(CK.E_POTION_TYPES))) {
text.append(ChatColor.GRAY).append(" - ").append(ChatColor.AQUA).append(s).append("\n");
text.append("\n").append(ChatColor.GRAY).append(" - ").append(ChatColor.AQUA).append(s);
}
return text.toString();
}
@ -501,11 +502,11 @@ public class PlayerPrompt extends ActionsEditorNumericPrompt {
if (context.getSessionData(CK.E_POTION_DURATIONS) == null) {
return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")";
} else {
final StringBuilder text = new StringBuilder("\n");
final StringBuilder text = new StringBuilder();
for (final Long l : (LinkedList<Long>) Objects.requireNonNull(context
.getSessionData(CK.E_POTION_DURATIONS))) {
text.append(ChatColor.GRAY).append(" - ").append(ChatColor.DARK_AQUA)
.append(MiscUtil.getTime(l * 50L)).append("\n");
text.append("\n").append(ChatColor.GRAY).append(" - ").append(ChatColor.DARK_AQUA)
.append(MiscUtil.getTime(l * 50L));
}
return text.toString();
}
@ -513,11 +514,11 @@ public class PlayerPrompt extends ActionsEditorNumericPrompt {
if (context.getSessionData(CK.E_POTION_STRENGTH) == null) {
return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")";
} else {
final StringBuilder text = new StringBuilder("\n");
final StringBuilder text = new StringBuilder();
for (final int i : (LinkedList<Integer>) Objects.requireNonNull(context
.getSessionData(CK.E_POTION_STRENGTH))) {
text.append(ChatColor.GRAY).append(" - ").append(ChatColor.DARK_PURPLE).append(i)
.append("\n");
text.append("\n").append(ChatColor.GRAY).append(" - ").append(ChatColor.DARK_PURPLE)
.append(i);
}
return text.toString();
}
@ -553,7 +554,7 @@ public class PlayerPrompt extends ActionsEditorNumericPrompt {
case 2:
if (context.getSessionData(CK.E_POTION_TYPES) == null) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("eventEditorMustSetPotionTypesFirst"));
return new PlayerPotionEffectPrompt(context);
return new PlayerPotionListPrompt(context);
} else {
return new PlayerPotionDurationsPrompt(context);
}
@ -561,11 +562,11 @@ public class PlayerPrompt extends ActionsEditorNumericPrompt {
if (context.getSessionData(CK.E_POTION_TYPES) == null) {
context.getForWhom().sendRawMessage(ChatColor.RED
+ Lang.get("eventEditorMustSetPotionTypesAndDurationsFirst"));
return new PlayerPotionEffectPrompt(context);
return new PlayerPotionListPrompt(context);
} else if (context.getSessionData(CK.E_POTION_DURATIONS) == null) {
context.getForWhom().sendRawMessage(ChatColor.RED
+ Lang.get("eventEditorMustSetPotionDurationsFirst"));
return new PlayerPotionEffectPrompt(context);
return new PlayerPotionListPrompt(context);
} else {
return new PlayerPotionMagnitudesPrompt(context);
}
@ -574,7 +575,7 @@ public class PlayerPrompt extends ActionsEditorNumericPrompt {
context.setSessionData(CK.E_POTION_TYPES, null);
context.setSessionData(CK.E_POTION_DURATIONS, null);
context.setSessionData(CK.E_POTION_STRENGTH, null);
return new PlayerPotionEffectPrompt(context);
return new PlayerPotionListPrompt(context);
case 5:
final int one;
final int two;
@ -601,10 +602,10 @@ public class PlayerPrompt extends ActionsEditorNumericPrompt {
return new ActionMainPrompt(context);
} else {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("eventEditorListSizeMismatch"));
return new PlayerPotionEffectPrompt(context);
return new PlayerPotionListPrompt(context);
}
default:
return new PlayerPotionEffectPrompt(context);
return new PlayerPotionListPrompt(context);
}
}
}
@ -631,9 +632,9 @@ public class PlayerPrompt extends ActionsEditorNumericPrompt {
= new ActionsEditorPostOpenStringPromptEvent(context, this);
plugin.getServer().getPluginManager().callEvent(event);
final StringBuilder effs = new StringBuilder(ChatColor.LIGHT_PURPLE + getTitle(context) + "\n");
final StringBuilder effs = new StringBuilder(ChatColor.LIGHT_PURPLE + getTitle(context));
for (final PotionEffectType pet : PotionEffectType.values()) {
effs.append(pet != null ? ChatColor.DARK_PURPLE + pet.getName() + "\n" : "");
effs.append(pet != null ? "\n" + ChatColor.DARK_PURPLE + pet.getName() : "");
}
return effs.toString() + ChatColor.YELLOW + getQueryText(context);
}
@ -656,7 +657,7 @@ public class PlayerPrompt extends ActionsEditorNumericPrompt {
}
}
}
return new PlayerPotionEffectPrompt(context);
return new PlayerPotionListPrompt(context);
}
}
@ -710,7 +711,7 @@ public class PlayerPrompt extends ActionsEditorNumericPrompt {
}
context.setSessionData(CK.E_POTION_DURATIONS, effDurations);
}
return new PlayerPotionEffectPrompt(context);
return new PlayerPotionListPrompt(context);
}
}
@ -763,7 +764,7 @@ public class PlayerPrompt extends ActionsEditorNumericPrompt {
}
context.setSessionData(CK.E_POTION_STRENGTH, magAmounts);
}
return new PlayerPotionEffectPrompt(context);
return new PlayerPotionListPrompt(context);
}
}

View File

@ -67,7 +67,7 @@ public class TimerPrompt extends ActionsEditorNumericPrompt {
case 1:
return ChatColor.YELLOW + Lang.get("eventEditorSetTimer");
case 2:
return ChatColor.YELLOW + Lang.get("eventEditorCancelTimer") + ":";
return ChatColor.YELLOW + Lang.get("eventEditorCancelTimer");
case 3:
return ChatColor.GREEN + Lang.get("done");
default:
@ -89,7 +89,8 @@ public class TimerPrompt extends ActionsEditorNumericPrompt {
}
}
case 2:
return ChatColor.AQUA + "" + context.getSessionData(CK.E_CANCEL_TIMER);
return ChatColor.GRAY + "(" + ChatColor.AQUA + context.getSessionData(CK.E_CANCEL_TIMER) + ChatColor.GRAY
+ ")";
case 3:
return "";
default:

View File

@ -117,11 +117,11 @@ public class WeatherPrompt extends ActionsEditorNumericPrompt {
if (context.getSessionData(CK.E_LIGHTNING) == null) {
return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")";
} else {
final StringBuilder text = new StringBuilder("\n");
final StringBuilder text = new StringBuilder();
final LinkedList<String> locations = (LinkedList<String>) context.getSessionData(CK.E_LIGHTNING);
if (locations != null) {
for (final String loc : locations) {
text.append(ChatColor.GRAY).append(" - ").append(ChatColor.AQUA).append(loc).append("\n");
text.append("\n").append(ChatColor.GRAY).append(" - ").append(ChatColor.AQUA).append(loc);
}
}
return text.toString();
@ -315,10 +315,10 @@ public class WeatherPrompt extends ActionsEditorNumericPrompt {
= new ActionsEditorPostOpenStringPromptEvent(context, this);
plugin.getServer().getPluginManager().callEvent(event);
StringBuilder effects = new StringBuilder(ChatColor.LIGHT_PURPLE + getTitle(context) + "\n"
StringBuilder effects = new StringBuilder(ChatColor.LIGHT_PURPLE + getTitle(context)
+ ChatColor.DARK_PURPLE);
for (final World w : plugin.getServer().getWorlds()) {
effects.append(w.getName()).append(", ");
effects.append("\n").append(w.getName()).append(", ");
}
effects = new StringBuilder(effects.substring(0, effects.length()));
return ChatColor.YELLOW + effects.toString() + getQueryText(context);
@ -532,10 +532,10 @@ public class WeatherPrompt extends ActionsEditorNumericPrompt {
= new ActionsEditorPostOpenStringPromptEvent(context, this);
plugin.getServer().getPluginManager().callEvent(event);
StringBuilder effects = new StringBuilder(ChatColor.LIGHT_PURPLE + getTitle(context) + "\n"
StringBuilder effects = new StringBuilder(ChatColor.LIGHT_PURPLE + getTitle(context)
+ ChatColor.DARK_PURPLE);
for (final World w : plugin.getServer().getWorlds()) {
effects.append(w.getName()).append(", ");
effects.append("\n").append(w.getName()).append(", ");
}
effects = new StringBuilder(effects.substring(0, effects.length()));
return ChatColor.YELLOW + effects.toString() + getQueryText(context);

View File

@ -12,10 +12,10 @@
package me.blackvein.quests.convo.conditions.main;
import me.blackvein.quests.Quest;
import me.blackvein.quests.conditions.ICondition;
import me.blackvein.quests.quests.IQuest;
import me.blackvein.quests.Quests;
import me.blackvein.quests.Stage;
import me.blackvein.quests.conditions.Condition;
import me.blackvein.quests.quests.IStage;
import me.blackvein.quests.convo.QuestsNumericPrompt;
import me.blackvein.quests.convo.conditions.ConditionsEditorNumericPrompt;
import me.blackvein.quests.convo.conditions.ConditionsEditorStringPrompt;
@ -204,14 +204,14 @@ public class ConditionMainPrompt extends ConditionsEditorNumericPrompt {
return null;
}
if (!input.equalsIgnoreCase(Lang.get("cmdCancel"))) {
for (final Condition c : plugin.getLoadedConditions()) {
for (final ICondition c : plugin.getLoadedConditions()) {
if (c.getName().equalsIgnoreCase(input)) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("conditionEditorExists"));
return new ConditionNamePrompt(context);
}
}
final List<String> actionNames = plugin.getConditionFactory().getNamesOfConditionsBeingEdited();
if (actionNames.contains(input)) {
final List<String> conditionNames = plugin.getConditionFactory().getNamesOfConditionsBeingEdited();
if (conditionNames.contains(input)) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("questEditorBeingEdited"));
return new ConditionNamePrompt(context);
}
@ -219,10 +219,10 @@ public class ConditionMainPrompt extends ConditionsEditorNumericPrompt {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("questEditorInvalidQuestName"));
return new ConditionNamePrompt(context);
}
actionNames.remove((String) context.getSessionData(CK.C_NAME));
conditionNames.remove((String) context.getSessionData(CK.C_NAME));
context.setSessionData(CK.C_NAME, input);
actionNames.add(input);
plugin.getConditionFactory().setNamesOfConditionsBeingEdited(actionNames);
conditionNames.add(input);
plugin.getConditionFactory().setNamesOfConditionsBeingEdited(conditionNames);
}
return new ConditionMainPrompt(context);
}
@ -333,11 +333,11 @@ public class ConditionMainPrompt extends ConditionsEditorNumericPrompt {
context.getPlugin().getServer().getPluginManager().callEvent(event);
}
final StringBuilder text = new StringBuilder(ChatColor.AQUA + getTitle(context) + "\n");
final StringBuilder text = new StringBuilder(ChatColor.AQUA + getTitle(context));
for (int i = 1; i <= size; i++) {
text.append(getNumberColor(context, i)).append(ChatColor.BOLD).append(i).append(ChatColor.RESET)
.append(" - ").append(getSelectionText(context, i)).append(" ")
.append(getAdditionalText(context, i)).append("\n");
text.append("\n").append(getNumberColor(context, i)).append(ChatColor.BOLD).append(i)
.append(ChatColor.RESET).append(" - ").append(getSelectionText(context, i)).append(" ")
.append(getAdditionalText(context, i));
}
return text.toString();
}
@ -482,8 +482,8 @@ public class ConditionMainPrompt extends ConditionsEditorNumericPrompt {
super(context);
if (modifiedName != null) {
modName = modifiedName;
for (final Quest q : plugin.getLoadedQuests()) {
for (final Stage s : q.getStages()) {
for (final IQuest q : plugin.getLoadedQuests()) {
for (final IStage s : q.getStages()) {
if (s.getCondition() != null && s.getCondition().getName() != null) {
if (s.getCondition().getName().equalsIgnoreCase(modifiedName)) {
modified.add(q.getName());

View File

@ -12,10 +12,10 @@
package me.blackvein.quests.convo.conditions.menu;
import me.blackvein.quests.Quest;
import me.blackvein.quests.conditions.ICondition;
import me.blackvein.quests.quests.IQuest;
import me.blackvein.quests.Quests;
import me.blackvein.quests.Stage;
import me.blackvein.quests.conditions.Condition;
import me.blackvein.quests.quests.IStage;
import me.blackvein.quests.convo.QuestsNumericPrompt;
import me.blackvein.quests.convo.conditions.ConditionsEditorNumericPrompt;
import me.blackvein.quests.convo.conditions.ConditionsEditorStringPrompt;
@ -28,7 +28,6 @@ import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.conversations.ConversationContext;
import org.bukkit.conversations.Prompt;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import java.util.LinkedList;
@ -186,7 +185,7 @@ public class ConditionMenuPrompt extends ConditionsEditorNumericPrompt {
}
input = input.trim();
if (!input.equalsIgnoreCase(Lang.get("cmdCancel"))) {
for (final Condition c : plugin.getLoadedConditions()) {
for (final ICondition c : plugin.getLoadedConditions()) {
if (c.getName().equalsIgnoreCase(input)) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("conditionEditorExists"));
return new ConditionSelectCreatePrompt(context);
@ -236,7 +235,7 @@ public class ConditionMenuPrompt extends ConditionsEditorNumericPrompt {
final ConditionsEditorPostOpenStringPromptEvent event
= new ConditionsEditorPostOpenStringPromptEvent(context, this);
plugin.getServer().getPluginManager().callEvent(event);
final List<String> names = plugin.getLoadedConditions().stream().map(Condition::getName).collect(Collectors.toList());
final List<String> names = plugin.getLoadedConditions().stream().map(ICondition::getName).collect(Collectors.toList());
return sendClickableMenu(getTitle(context), names, getQueryText(context), context);
}
@ -246,7 +245,7 @@ public class ConditionMenuPrompt extends ConditionsEditorNumericPrompt {
return null;
}
if (!input.equalsIgnoreCase(Lang.get("cmdCancel"))) {
final Condition c = plugin.getCondition(input);
final ICondition c = plugin.getCondition(input);
if (c != null) {
context.setSessionData(CK.C_OLD_CONDITION, c.getName());
context.setSessionData(CK.C_NAME, c.getName());
@ -282,7 +281,8 @@ public class ConditionMenuPrompt extends ConditionsEditorNumericPrompt {
final ConditionsEditorPostOpenStringPromptEvent event
= new ConditionsEditorPostOpenStringPromptEvent(context, this);
plugin.getServer().getPluginManager().callEvent(event);
final List<String> names = plugin.getLoadedConditions().stream().map(Condition::getName).collect(Collectors.toList());
final List<String> names = plugin.getLoadedConditions().stream().map(ICondition::getName)
.collect(Collectors.toList());
return sendClickableMenu(getTitle(context), names, getQueryText(context), context);
}
@ -293,10 +293,10 @@ public class ConditionMenuPrompt extends ConditionsEditorNumericPrompt {
}
if (!input.equalsIgnoreCase(Lang.get("cmdCancel"))) {
final LinkedList<String> used = new LinkedList<>();
final Condition c = plugin.getCondition(input);
final ICondition c = plugin.getCondition(input);
if (c != null) {
for (final Quest quest : plugin.getLoadedQuests()) {
for (final Stage stage : quest.getStages()) {
for (final IQuest quest : plugin.getLoadedQuests()) {
for (final IStage stage : quest.getStages()) {
if (stage.getCondition() != null
&& stage.getCondition().getName().equalsIgnoreCase(c.getName())) {
used.add(quest.getName());

View File

@ -187,7 +187,7 @@ public class EntityPrompt extends QuestsEditorNumericPrompt {
= new QuestsEditorPostOpenStringPromptEvent(context, this);
context.getPlugin().getServer().getPluginManager().callEvent(event);
}
final StringBuilder mobs = new StringBuilder(ChatColor.LIGHT_PURPLE + getTitle(context) + "\n");
final List<EntityType> mobArr = new LinkedList<>(Arrays.asList(EntityType.values()));
final List<EntityType> toRemove = new LinkedList<>();
@ -201,7 +201,7 @@ public class EntityPrompt extends QuestsEditorNumericPrompt {
for (int i = 0; i < mobArr.size(); i++) {
mobs.append(ChatColor.AQUA).append(MiscUtil.snakeCaseToUpperCamelCase(mobArr.get(i).name()));
if (i < (mobArr.size() - 1)) {
mobs.append(ChatColor.GRAY).append(", ");
mobs.append(ChatColor.GRAY).append(", ");
}
}
mobs.append("\n").append(ChatColor.YELLOW).append(getQueryText(context));
@ -266,8 +266,7 @@ public class EntityPrompt extends QuestsEditorNumericPrompt {
final Set<UUID> selectingNpcs = plugin.getQuestFactory().getSelectingNpcs();
selectingNpcs.add(((Player) context.getForWhom()).getUniqueId());
plugin.getQuestFactory().setSelectingNpcs(selectingNpcs);
return ChatColor.YELLOW + getQueryText(context) + "\n"
+ ChatColor.GOLD + Lang.get("npcHint");
return ChatColor.YELLOW + getQueryText(context) + "\n" + ChatColor.GOLD + Lang.get("npcHint");
} else {
return ChatColor.YELLOW + getQueryText(context);
}

View File

@ -263,13 +263,13 @@ public class PlayerPrompt extends QuestsEditorNumericPrompt {
if (context.getSessionData(CK.C_WHILE_HOLDING_MAIN_HAND) == null) {
return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")";
} else {
final StringBuilder text = new StringBuilder("\n");
final StringBuilder text = new StringBuilder();
final List<ItemStack> whileHoldingMainHand
= (List<ItemStack>) context.getSessionData(CK.C_WHILE_HOLDING_MAIN_HAND);
if (whileHoldingMainHand != null) {
for (final ItemStack is : whileHoldingMainHand) {
text.append(ChatColor.GRAY).append(" - ").append(ItemUtil.getDisplayString(is))
.append("\n");
text.append("\n").append(ChatColor.GRAY).append(" - ")
.append(ItemUtil.getDisplayString(is));
}
}
return text.toString();

View File

@ -12,10 +12,11 @@
package me.blackvein.quests.convo.misc;
import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester;
import me.blackvein.quests.quests.IQuest;
import me.blackvein.quests.player.IQuester;
import me.blackvein.quests.Quests;
import me.blackvein.quests.events.misc.MiscPostNpcOfferQuestEvent;
import me.blackvein.quests.Quest;
import me.blackvein.quests.util.Lang;
import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.ComponentBuilder;
@ -64,12 +65,12 @@ public class NpcOfferQuestPrompt extends MiscStringPrompt {
@SuppressWarnings("unchecked")
public ChatColor getNumberColor(final ConversationContext context, final int number) {
final Quests plugin = (Quests)context.getPlugin();
final LinkedList<Quest> quests = (LinkedList<Quest>) context.getSessionData("npcQuests");
final LinkedList<IQuest> quests = (LinkedList<IQuest>) context.getSessionData("npcQuests");
if (plugin != null) {
final Quester quester = plugin.getQuester(((Player) context.getForWhom()).getUniqueId());
final IQuester quester = plugin.getQuester(((Player) context.getForWhom()).getUniqueId());
if (quests != null && number > 0) {
if (number < (quests.size() + 1)) {
final Quest quest = quests.get(number - 1);
final IQuest quest = quests.get(number - 1);
if (quester.getCompletedQuests().contains(quest)) {
return ChatColor.GREEN;
} else {
@ -87,12 +88,12 @@ public class NpcOfferQuestPrompt extends MiscStringPrompt {
@SuppressWarnings("unchecked")
public String getSelectionText(final ConversationContext context, final int number) {
final Quests plugin = (Quests)context.getPlugin();
final LinkedList<Quest> quests = (LinkedList<Quest>) context.getSessionData("npcQuests");
final LinkedList<IQuest> quests = (LinkedList<IQuest>) context.getSessionData("npcQuests");
if (plugin != null) {
final Quester quester = plugin.getQuester(((Player) context.getForWhom()).getUniqueId());
final IQuester quester = plugin.getQuester(((Player) context.getForWhom()).getUniqueId());
if (quests != null && number > 0) {
if (number < (quests.size() + 1)) {
final Quest quest = quests.get(number - 1);
final IQuest quest = quests.get(number - 1);
if (quester.getCompletedQuests().contains(quest)) {
return ChatColor.GREEN + "" + ChatColor.ITALIC + quest.getName();
} else {
@ -109,12 +110,12 @@ public class NpcOfferQuestPrompt extends MiscStringPrompt {
@SuppressWarnings("unchecked")
public String getAdditionalText(final ConversationContext context, final int number) {
final Quests plugin = (Quests)context.getPlugin();
final LinkedList<Quest> quests = (LinkedList<Quest>) context.getSessionData("npcQuests");
final LinkedList<IQuest> quests = (LinkedList<IQuest>) context.getSessionData("npcQuests");
if (plugin != null) {
final Quester quester = plugin.getQuester(((Player) context.getForWhom()).getUniqueId());
final IQuester quester = plugin.getQuester(((Player) context.getForWhom()).getUniqueId());
if (quests != null && number > 0) {
if (number < (quests.size() + 1)) {
final Quest quest = quests.get(number - 1);
final IQuest quest = quests.get(number - 1);
if (quester.getCompletedQuests().contains(quest)) {
return ChatColor.GREEN + "" + Lang.get("redoCompleted");
}
@ -179,11 +180,11 @@ public class NpcOfferQuestPrompt extends MiscStringPrompt {
@Override
public Prompt acceptInput(final ConversationContext context, final String input) {
final Quests plugin = (Quests)context.getPlugin();
final LinkedList<Quest> quests = (LinkedList<Quest>) context.getSessionData("npcQuests");
final LinkedList<IQuest> quests = (LinkedList<IQuest>) context.getSessionData("npcQuests");
if (plugin == null || quests == null) {
return Prompt.END_OF_CONVERSATION;
}
final Quester quester = plugin.getQuester(((Player) context.getForWhom()).getUniqueId());
final IQuester quester = plugin.getQuester(((Player) context.getForWhom()).getUniqueId());
int numInput = -1;
try {
numInput = Integer.parseInt(input);
@ -194,15 +195,15 @@ public class NpcOfferQuestPrompt extends MiscStringPrompt {
context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("cancelled"));
return Prompt.END_OF_CONVERSATION;
} else {
Quest q = null;
for (final Quest quest : quests) {
IQuest q = null;
for (final IQuest quest : quests) {
if (quest.getName().equalsIgnoreCase(input)) {
q = quest;
break;
}
}
if (q == null) {
for (final Quest quest : quests) {
for (final IQuest quest : quests) {
if (numInput == (quests.indexOf(quest) + 1)) {
q = quest;
break;
@ -210,7 +211,7 @@ public class NpcOfferQuestPrompt extends MiscStringPrompt {
}
}
if (q == null) {
for (final Quest quest : quests) {
for (final IQuest quest : quests) {
if (quest.getName().toLowerCase().contains(input.toLowerCase())) {
q = quest;
break;
@ -238,8 +239,8 @@ public class NpcOfferQuestPrompt extends MiscStringPrompt {
}
}
private String extracted(final Quests plugin, final Quester quester) {
final Quest quest = plugin.getQuestById(quester.getQuestIdToTake());
private String extracted(final Quests plugin, final IQuester quester) {
final IQuest quest = plugin.getQuestById(quester.getQuestIdToTake());
return MessageFormat.format("{0}- {1}{2}{3} -\n\n{4}{5}\n", ChatColor.GOLD, ChatColor.DARK_PURPLE,
quest.getName(), ChatColor.GOLD, ChatColor.RESET, quest.getDescription());
}

View File

@ -13,7 +13,7 @@
package me.blackvein.quests.convo.quests.main;
import com.sk89q.worldguard.protection.managers.RegionManager;
import me.blackvein.quests.Quest;
import me.blackvein.quests.quests.IQuest;
import me.blackvein.quests.Quests;
import me.blackvein.quests.convo.QuestsNumericPrompt;
import me.blackvein.quests.convo.generic.ItemStackPrompt;
@ -341,7 +341,7 @@ public class QuestMainPrompt extends QuestsEditorNumericPrompt {
return null;
}
if (!input.equalsIgnoreCase(Lang.get("cmdCancel"))) {
for (final Quest q : plugin.getLoadedQuests()) {
for (final IQuest q : plugin.getLoadedQuests()) {
if (q.getName().equalsIgnoreCase(input)) {
String s = null;
if (context.getSessionData(CK.ED_QUEST_EDIT) != null) {
@ -732,7 +732,7 @@ public class QuestMainPrompt extends QuestsEditorNumericPrompt {
if (context.getSessionData("tempStack") != null) {
final ItemStack stack = (ItemStack) context.getSessionData("tempStack");
boolean failed = false;
for (final Quest quest : plugin.getLoadedQuests()) {
for (final IQuest quest : plugin.getLoadedQuests()) {
if (quest.getGUIDisplay() != null) {
if (ItemUtil.compareItems(stack, quest.getGUIDisplay(), false) == 0) {
String error = Lang.get("questGUIError");

View File

@ -12,7 +12,7 @@
package me.blackvein.quests.convo.quests.menu;
import me.blackvein.quests.Quest;
import me.blackvein.quests.quests.IQuest;
import me.blackvein.quests.Quests;
import me.blackvein.quests.convo.QuestsNumericPrompt;
import me.blackvein.quests.convo.quests.QuestsEditorNumericPrompt;
@ -26,7 +26,6 @@ import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.conversations.ConversationContext;
import org.bukkit.conversations.Prompt;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import java.util.LinkedList;
@ -170,7 +169,7 @@ public class QuestMenuPrompt extends QuestsEditorNumericPrompt {
}
input = input.trim();
if (!input.equalsIgnoreCase(Lang.get("cmdCancel"))) {
for (final Quest q : plugin.getLoadedQuests()) {
for (final IQuest q : plugin.getLoadedQuests()) {
if (q.getName().equalsIgnoreCase(input)) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("questEditorNameExists"));
return new QuestSelectCreatePrompt(context);
@ -222,7 +221,7 @@ public class QuestMenuPrompt extends QuestsEditorNumericPrompt {
final QuestsEditorPostOpenStringPromptEvent event
= new QuestsEditorPostOpenStringPromptEvent(context, this);
plugin.getServer().getPluginManager().callEvent(event);
final List<String> names = plugin.getLoadedQuests().stream().map(Quest::getName).collect(Collectors.toList());
final List<String> names = plugin.getLoadedQuests().stream().map(IQuest::getName).collect(Collectors.toList());
return sendClickableMenu(getTitle(context), names, getQueryText(context), context);
}
@ -232,7 +231,7 @@ public class QuestMenuPrompt extends QuestsEditorNumericPrompt {
return null;
}
if (!input.equalsIgnoreCase(Lang.get("cmdCancel"))) {
final Quest q = plugin.getQuest(input);
final IQuest q = plugin.getQuest(input);
if (q != null) {
plugin.getQuestFactory().loadQuest(context, q);
return new QuestMainPrompt(context);
@ -265,7 +264,7 @@ public class QuestMenuPrompt extends QuestsEditorNumericPrompt {
final QuestsEditorPostOpenStringPromptEvent event
= new QuestsEditorPostOpenStringPromptEvent(context, this);
plugin.getServer().getPluginManager().callEvent(event);
final List<String> names = plugin.getLoadedQuests().stream().map(Quest::getName).collect(Collectors.toList());
final List<String> names = plugin.getLoadedQuests().stream().map(IQuest::getName).collect(Collectors.toList());
return sendClickableMenu(getTitle(context), names, getQueryText(context), context);
}
@ -276,9 +275,9 @@ public class QuestMenuPrompt extends QuestsEditorNumericPrompt {
}
if (!input.equalsIgnoreCase(Lang.get("cmdCancel"))) {
final LinkedList<String> used = new LinkedList<>();
final Quest found = plugin.getQuest(input);
final IQuest found = plugin.getQuest(input);
if (found != null) {
for (final Quest q : plugin.getLoadedQuests()) {
for (final IQuest q : plugin.getLoadedQuests()) {
if (q.getRequirements().getNeededQuests().contains(q)
|| q.getRequirements().getBlockQuests().contains(q)) {
used.add(q.getName());

View File

@ -300,9 +300,10 @@ public class NpcsPrompt extends QuestsEditorNumericPrompt {
= (List<Integer>) context.getSessionData(pref + CK.S_DELIVERY_NPCS);
if (deliveryNpcs != null) {
for (final int i : deliveryNpcs) {
text.append(")\n").append(ChatColor.GRAY).append(" - ").append(ChatColor.AQUA).append(i)
.append(" (").append(plugin.getDependencies().getCitizens().getNPCRegistry()
.getById(i).getName());
text.append("\n").append(ChatColor.GRAY).append(" - ").append(ChatColor.AQUA).append(i)
.append(ChatColor.GRAY).append(" (").append(ChatColor.AQUA)
.append(plugin.getDependencies().getCitizens().getNPCRegistry()
.getById(i).getName()).append(ChatColor.GRAY).append(")");
}
}
return text.toString();

View File

@ -12,7 +12,7 @@
package me.blackvein.quests.convo.quests.options;
import me.blackvein.quests.Options;
import me.blackvein.quests.quests.BukkitOptions;
import me.blackvein.quests.Quests;
import me.blackvein.quests.convo.quests.QuestsEditorNumericPrompt;
import me.blackvein.quests.convo.quests.QuestsEditorStringPrompt;
@ -459,7 +459,7 @@ public class OptionsPrompt extends QuestsEditorNumericPrompt {
case 1:
final Boolean commandsOpt = (Boolean) context.getSessionData(CK.OPT_ALLOW_COMMANDS);
if (commandsOpt == null) {
final boolean defaultOpt = new Options().canAllowCommands();
final boolean defaultOpt = new BukkitOptions().canAllowCommands();
return ChatColor.GRAY + "(" + (defaultOpt ? ChatColor.GREEN
+ Lang.get(String.valueOf(defaultOpt)) : ChatColor.RED
+ Lang.get(String.valueOf(defaultOpt))) + ChatColor.GRAY + ")";
@ -471,7 +471,7 @@ public class OptionsPrompt extends QuestsEditorNumericPrompt {
case 2:
final Boolean quittingOpt = (Boolean) context.getSessionData(CK.OPT_ALLOW_QUITTING);
if (quittingOpt == null) {
final boolean defaultOpt = new Options().canAllowQuitting();
final boolean defaultOpt = new BukkitOptions().canAllowQuitting();
return ChatColor.GRAY + "(" + (defaultOpt ? ChatColor.GREEN
+ Lang.get(String.valueOf(defaultOpt)) : ChatColor.RED
+ Lang.get(String.valueOf(defaultOpt))) + ChatColor.GRAY + ")";
@ -483,7 +483,7 @@ public class OptionsPrompt extends QuestsEditorNumericPrompt {
case 3:
final Boolean ignoreOpt = (Boolean) context.getSessionData(CK.OPT_IGNORE_SILK_TOUCH);
if (ignoreOpt == null) {
final boolean defaultOpt = new Options().canIgnoreSilkTouch();
final boolean defaultOpt = new BukkitOptions().canIgnoreSilkTouch();
return ChatColor.GRAY + "(" + (defaultOpt ? ChatColor.GREEN
+ Lang.get(String.valueOf(defaultOpt)) : ChatColor.RED
+ Lang.get(String.valueOf(defaultOpt))) + ChatColor.GRAY + ")";
@ -617,7 +617,7 @@ public class OptionsPrompt extends QuestsEditorNumericPrompt {
case 2:
final Boolean partiesOpt = (Boolean) context.getSessionData(CK.OPT_USE_PARTIES_PLUGIN);
if (partiesOpt == null) {
final boolean defaultOpt = new Options().canUsePartiesPlugin();
final boolean defaultOpt = new BukkitOptions().canUsePartiesPlugin();
return ChatColor.GRAY + "("+ (defaultOpt ? ChatColor.GREEN
+ Lang.get(String.valueOf(defaultOpt)) : ChatColor.RED
+ Lang.get(String.valueOf(defaultOpt))) + ChatColor.GRAY + ")";
@ -629,7 +629,7 @@ public class OptionsPrompt extends QuestsEditorNumericPrompt {
case 3:
final Integer shareOpt = (Integer) context.getSessionData(CK.OPT_SHARE_PROGRESS_LEVEL);
if (shareOpt == null) {
final int defaultOpt = new Options().getShareProgressLevel();
final int defaultOpt = new BukkitOptions().getShareProgressLevel();
return ChatColor.GRAY + "(" + ChatColor.AQUA + defaultOpt + ChatColor.GRAY + ")";
} else {
return ChatColor.GRAY + "(" + ChatColor.AQUA + shareOpt + ChatColor.GRAY + ")";
@ -637,7 +637,7 @@ public class OptionsPrompt extends QuestsEditorNumericPrompt {
case 4:
final Boolean requireOpt = (Boolean) context.getSessionData(CK.OPT_SHARE_SAME_QUEST_ONLY);
if (requireOpt == null) {
final boolean defaultOpt = new Options().canShareSameQuestOnly();
final boolean defaultOpt = new BukkitOptions().canShareSameQuestOnly();
return ChatColor.GRAY + "(" + (defaultOpt ? ChatColor.GREEN
+ Lang.get(String.valueOf(defaultOpt)) : ChatColor.RED
+ Lang.get(String.valueOf(defaultOpt))) + ChatColor.GRAY + ")";
@ -649,7 +649,7 @@ public class OptionsPrompt extends QuestsEditorNumericPrompt {
case 5:
final Double distanceOpt = (Double) context.getSessionData(CK.OPT_SHARE_DISTANCE);
if (distanceOpt == null) {
final double defaultOpt = new Options().getShareDistance();
final double defaultOpt = new BukkitOptions().getShareDistance();
return ChatColor.GRAY + "(" + ChatColor.AQUA + defaultOpt + ChatColor.GRAY + ")";
} else {
return ChatColor.GRAY + "(" + ChatColor.AQUA + distanceOpt + ChatColor.GRAY + ")";
@ -657,7 +657,7 @@ public class OptionsPrompt extends QuestsEditorNumericPrompt {
case 6:
final Boolean handleOpt = (Boolean) context.getSessionData(CK.OPT_HANDLE_OFFLINE_PLAYERS);
if (handleOpt == null) {
final boolean defaultOpt = new Options().canHandleOfflinePlayers();
final boolean defaultOpt = new BukkitOptions().canHandleOfflinePlayers();
return ChatColor.GRAY + "("+ (defaultOpt ? ChatColor.GREEN
+ Lang.get(String.valueOf(defaultOpt)) : ChatColor.RED
+ Lang.get(String.valueOf(defaultOpt))) + ChatColor.GRAY + ")";

View File

@ -12,7 +12,7 @@
package me.blackvein.quests.convo.quests.planner;
import me.blackvein.quests.Planner;
import me.blackvein.quests.quests.BukkitPlanner;
import me.blackvein.quests.Quests;
import me.blackvein.quests.convo.quests.QuestsEditorNumericPrompt;
import me.blackvein.quests.convo.quests.QuestsEditorStringPrompt;
@ -139,7 +139,7 @@ public class PlannerPrompt extends QuestsEditorNumericPrompt {
case 5:
final Boolean override = (Boolean) context.getSessionData(CK.PLN_OVERRIDE);
if (override == null) {
final boolean defaultOpt = new Planner().getOverride();
final boolean defaultOpt = new BukkitPlanner().getOverride();
return ChatColor.GRAY + "(" + (defaultOpt ? ChatColor.GREEN
+ Lang.get(String.valueOf(defaultOpt)) : ChatColor.RED
+ Lang.get(String.valueOf(defaultOpt))) + ChatColor.GRAY + ")";

View File

@ -14,10 +14,8 @@ package me.blackvein.quests.convo.quests.requirements;
import com.gmail.nossr50.datatypes.skills.SkillType;
import com.herocraftonline.heroes.characters.classes.HeroClass;
import me.blackvein.quests.CustomObjective;
import me.blackvein.quests.CustomRequirement;
import me.blackvein.quests.CustomReward;
import me.blackvein.quests.Quest;
import me.blackvein.quests.quests.IQuest;
import me.blackvein.quests.Quests;
import me.blackvein.quests.convo.generic.ItemStackPrompt;
import me.blackvein.quests.convo.generic.OverridePrompt;
@ -175,8 +173,8 @@ public class RequirementsPrompt extends QuestsEditorNumericPrompt {
return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")";
} else {
return ChatColor.GRAY + "(" + ChatColor.AQUA + moneyReq + " "
+ (moneyReq > 1 ? plugin.getDependencies().getCurrency(true)
: plugin.getDependencies().getCurrency(false)) + ChatColor.GRAY + ")";
+ (moneyReq > 1 ? plugin.getDependencies().getVaultEconomy().currencyNamePlural()
: plugin.getDependencies().getVaultEconomy().currencyNameSingular() + ChatColor.GRAY + ")");
}
} else {
return ChatColor.GRAY + "(" + Lang.get("notInstalled") + ")";
@ -856,7 +854,7 @@ public class RequirementsPrompt extends QuestsEditorNumericPrompt {
StringBuilder text = new StringBuilder(ChatColor.LIGHT_PURPLE + getTitle(context) + "\n"
+ ChatColor.DARK_PURPLE);
boolean none = true;
for (final Quest q : plugin.getLoadedQuests()) {
for (final IQuest q : plugin.getLoadedQuests()) {
text.append(q.getName()).append(", ");
none = false;
}

View File

@ -16,8 +16,6 @@ import com.codisimus.plugins.phatloots.PhatLoot;
import com.codisimus.plugins.phatloots.PhatLootsAPI;
import com.gmail.nossr50.datatypes.skills.SkillType;
import com.herocraftonline.heroes.characters.classes.HeroClass;
import me.blackvein.quests.CustomObjective;
import me.blackvein.quests.CustomRequirement;
import me.blackvein.quests.CustomReward;
import me.blackvein.quests.Quests;
import me.blackvein.quests.convo.generic.ItemStackPrompt;

View File

@ -12,10 +12,10 @@
package me.blackvein.quests.convo.quests.stages;
import me.blackvein.quests.CustomObjective;
import me.blackvein.quests.actions.IAction;
import me.blackvein.quests.conditions.ICondition;
import me.blackvein.quests.module.ICustomObjective;
import me.blackvein.quests.Quests;
import me.blackvein.quests.actions.Action;
import me.blackvein.quests.conditions.Condition;
import me.blackvein.quests.convo.QuestsNumericPrompt;
import me.blackvein.quests.convo.generic.OverridePrompt;
import me.blackvein.quests.convo.quests.QuestsEditorNumericPrompt;
@ -31,7 +31,6 @@ import me.blackvein.quests.util.ConfigUtil;
import me.blackvein.quests.util.Lang;
import me.blackvein.quests.util.MiscUtil;
import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.HoverEvent;
import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.ChatColor;
import org.bukkit.Location;
@ -1439,7 +1438,7 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt {
if (plugin.getLoadedActions().isEmpty()) {
text.append(ChatColor.RED).append("- ").append(Lang.get("none")).append("\n");
} else {
for (final Action a : plugin.getLoadedActions()) {
for (final IAction a : plugin.getLoadedActions()) {
text.append(ChatColor.GREEN).append("- ").append(a.getName()).append("\n");
}
}
@ -1451,8 +1450,8 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt {
final Player player = (Player) context.getForWhom();
if (input != null && !input.equalsIgnoreCase(Lang.get("cmdCancel"))
&& !input.equalsIgnoreCase(Lang.get("cmdClear"))) {
Action found = null;
for (final Action a : plugin.getLoadedActions()) {
IAction found = null;
for (final IAction a : plugin.getLoadedActions()) {
if (a.getName().equalsIgnoreCase(input)) {
found = a;
break;
@ -1506,7 +1505,7 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt {
if (plugin.getLoadedActions().isEmpty()) {
text.append(ChatColor.RED).append("- ").append(Lang.get("none"));
} else {
for (final Action a : plugin.getLoadedActions()) {
for (final IAction a : plugin.getLoadedActions()) {
text.append(ChatColor.GREEN).append("- ").append(a.getName()).append("\n");
}
}
@ -1518,8 +1517,8 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt {
final Player player = (Player) context.getForWhom();
if (input != null && !input.equalsIgnoreCase(Lang.get("cmdCancel"))
&& !input.equalsIgnoreCase(Lang.get("cmdClear"))) {
Action found = null;
for (final Action a : plugin.getLoadedActions()) {
IAction found = null;
for (final IAction a : plugin.getLoadedActions()) {
if (a.getName().equalsIgnoreCase(input)) {
found = a;
break;
@ -1573,7 +1572,7 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt {
if (plugin.getLoadedActions().isEmpty()) {
text.append(ChatColor.RED).append("- ").append(Lang.get("none"));
} else {
for (final Action a : plugin.getLoadedActions()) {
for (final IAction a : plugin.getLoadedActions()) {
text.append(ChatColor.GREEN).append("- ").append(a.getName()).append("\n");
}
}
@ -1585,8 +1584,8 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt {
final Player player = (Player) context.getForWhom();
if (input != null && !input.equalsIgnoreCase(Lang.get("cmdCancel"))
&& !input.equalsIgnoreCase(Lang.get("cmdClear"))) {
Action found = null;
for (final Action a : plugin.getLoadedActions()) {
IAction found = null;
for (final IAction a : plugin.getLoadedActions()) {
if (a.getName().equalsIgnoreCase(input)) {
found = a;
break;
@ -1640,7 +1639,7 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt {
if (plugin.getLoadedActions().isEmpty()) {
text.append(ChatColor.RED).append("- ").append(Lang.get("none")).append("\n");
} else {
for (final Action a : plugin.getLoadedActions()) {
for (final IAction a : plugin.getLoadedActions()) {
text.append(ChatColor.GREEN).append("- ").append(a.getName()).append("\n");
}
}
@ -1652,8 +1651,8 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt {
final Player player = (Player) context.getForWhom();
if (input != null && !input.equalsIgnoreCase(Lang.get("cmdCancel"))
&& !input.equalsIgnoreCase(Lang.get("cmdClear"))) {
Action found = null;
for (final Action a : plugin.getLoadedActions()) {
IAction found = null;
for (final IAction a : plugin.getLoadedActions()) {
if (a.getName().equalsIgnoreCase(input)) {
found = a;
break;
@ -1707,7 +1706,7 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt {
if (plugin.getLoadedActions().isEmpty()) {
text.append(ChatColor.RED).append("- ").append(Lang.get("none"));
} else {
for (final Action a : plugin.getLoadedActions()) {
for (final IAction a : plugin.getLoadedActions()) {
text.append(ChatColor.GREEN).append("- ").append(a.getName()).append("\n");
}
}
@ -1719,8 +1718,8 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt {
final Player player = (Player) context.getForWhom();
if (input != null && !input.equalsIgnoreCase(Lang.get("cmdCancel"))
&& !input.equalsIgnoreCase(Lang.get("cmdClear"))) {
Action found = null;
for (final Action a : plugin.getLoadedActions()) {
IAction found = null;
for (final IAction a : plugin.getLoadedActions()) {
if (a.getName().equalsIgnoreCase(input)) {
found = a;
break;
@ -1774,7 +1773,7 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt {
if (plugin.getLoadedActions().isEmpty()) {
text.append(ChatColor.RED).append("- ").append(Lang.get("none"));
} else {
for (final Action a : plugin.getLoadedActions()) {
for (final IAction a : plugin.getLoadedActions()) {
text.append(ChatColor.GREEN).append("- ").append(a.getName()).append("\n");
}
}
@ -1786,8 +1785,8 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt {
final Player player = (Player) context.getForWhom();
if (input != null && !input.equalsIgnoreCase(Lang.get("cmdCancel"))
&& !input.equalsIgnoreCase(Lang.get("cmdClear"))) {
Action found = null;
for (final Action a : plugin.getLoadedActions()) {
IAction found = null;
for (final IAction a : plugin.getLoadedActions()) {
if (a.getName().equalsIgnoreCase(input)) {
found = a;
break;
@ -1916,7 +1915,7 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt {
if (plugin.getLoadedActions().isEmpty()) {
text.append(ChatColor.RED).append("- ").append(Lang.get("none"));
} else {
for (final Action a : plugin.getLoadedActions()) {
for (final IAction a : plugin.getLoadedActions()) {
text.append(ChatColor.GREEN).append("- ").append(a.getName()).append("\n");
}
}
@ -1928,8 +1927,8 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt {
final Player player = (Player) context.getForWhom();
if (input != null && !input.equalsIgnoreCase(Lang.get("cmdCancel"))
&& !input.equalsIgnoreCase(Lang.get("cmdClear"))) {
Action found = null;
for (final Action a : plugin.getLoadedActions()) {
IAction found = null;
for (final IAction a : plugin.getLoadedActions()) {
if (a.getName().equalsIgnoreCase(input)) {
found = a;
break;
@ -2059,7 +2058,7 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt {
if (plugin.getLoadedConditions().isEmpty()) {
text.append(ChatColor.RED).append("- ").append(Lang.get("none")).append("\n");
} else {
for (final Condition c : plugin.getLoadedConditions()) {
for (final ICondition c : plugin.getLoadedConditions()) {
text.append(ChatColor.GREEN).append("- ").append(c.getName()).append("\n");
}
}
@ -2071,8 +2070,8 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt {
final Player player = (Player) context.getForWhom();
if (input != null && !input.equalsIgnoreCase(Lang.get("cmdCancel"))
&& !input.equalsIgnoreCase(Lang.get("cmdClear"))) {
Condition found = null;
for (final Condition c : plugin.getLoadedConditions()) {
ICondition found = null;
for (final ICondition c : plugin.getLoadedConditions()) {
if (c.getName().equalsIgnoreCase(input)) {
found = c;
break;
@ -2396,7 +2395,7 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt {
text.append(ChatColor.DARK_PURPLE).append("(").append(Lang.get("stageEditorNoModules"))
.append(") ");
} else {
for (final String name : plugin.getCustomObjectives().stream().map(CustomObjective::getModuleName)
for (final String name : plugin.getCustomObjectives().stream().map(ICustomObjective::getModuleName)
.collect(Collectors.toCollection(TreeSet::new))) {
text.append(ChatColor.DARK_PURPLE).append(" - ").append(name).append("\n");
}
@ -2413,7 +2412,7 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt {
line.addExtra(link);
line.addExtra(ChatColor.DARK_AQUA + "(" + Lang.get("stageEditorNoModules") + ") ");
} else {
for (final String name : plugin.getCustomObjectives().stream().map(CustomObjective::getModuleName)
for (final String name : plugin.getCustomObjectives().stream().map(ICustomObjective::getModuleName)
.collect(Collectors.toCollection(TreeSet::new))) {
final TextComponent click = new TextComponent(ChatColor.DARK_PURPLE + " - " + name + "\n");
click.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, name));
@ -2432,7 +2431,7 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt {
&& !input.equalsIgnoreCase(Lang.get("cmdClear"))) {
String found = null;
// Check if we have a module with the specified name
for (final CustomObjective co : plugin.getCustomObjectives()) {
for (final ICustomObjective co : plugin.getCustomObjectives()) {
if (co.getModuleName().equalsIgnoreCase(input)) {
found = co.getModuleName();
break;
@ -2440,7 +2439,7 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt {
}
if (found == null) {
// No? Check again, but with locale sensitivity
for (final CustomObjective co : plugin.getCustomObjectives()) {
for (final ICustomObjective co : plugin.getCustomObjectives()) {
if (co.getModuleName().toLowerCase().contains(input.toLowerCase())) {
found = co.getModuleName();
break;
@ -2504,7 +2503,7 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt {
text.append(ChatColor.DARK_PURPLE).append("(").append(Lang.get("stageEditorNoModules"))
.append(") ");
} else {
for (final CustomObjective co : plugin.getCustomObjectives()) {
for (final ICustomObjective co : plugin.getCustomObjectives()) {
if (co.getModuleName().equals(moduleName)) {
text.append(ChatColor.DARK_PURPLE).append(" - ").append(co.getName()).append("\n");
}
@ -2522,7 +2521,7 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt {
line.addExtra(link);
line.addExtra(ChatColor.DARK_AQUA + "(" + Lang.get("stageEditorNoModules") + ") ");
} else {
for (final CustomObjective co : plugin.getCustomObjectives()) {
for (final ICustomObjective co : plugin.getCustomObjectives()) {
if (co.getModuleName().equals(moduleName)) {
final TextComponent click = new TextComponent(ChatColor.DARK_PURPLE + " - " + co.getName()
+ "\n");
@ -2542,8 +2541,8 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt {
public Prompt acceptInput(final @NotNull ConversationContext context, final String input) {
if (input != null && !input.equalsIgnoreCase(Lang.get("cmdCancel"))
&& !input.equalsIgnoreCase(Lang.get("cmdClear"))) {
CustomObjective found = null;
for (final CustomObjective co : plugin.getCustomObjectives()) {
ICustomObjective found = null;
for (final ICustomObjective co : plugin.getCustomObjectives()) {
if (co.getModuleName().equals(moduleName)) {
if (co.getName().toLowerCase().contains(input.toLowerCase())) {
found = co;
@ -2620,8 +2619,8 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt {
if (list != null && plugin != null) {
final String objName = list.getLast();
text.append(objName).append(" -\n");
CustomObjective found = null;
for (final CustomObjective co : plugin.getCustomObjectives()) {
ICustomObjective found = null;
for (final ICustomObjective co : plugin.getCustomObjectives()) {
if (co.getName().equals(objName)) {
found = co;
break;
@ -2646,8 +2645,8 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt {
if (counts != null && list != null && plugin != null) {
counts.set(counts.size() - 1, num);
final String objName = list.getLast();
CustomObjective found = null;
for (final CustomObjective co : plugin.getCustomObjectives()) {
ICustomObjective found = null;
for (final ICustomObjective co : plugin.getCustomObjectives()) {
if (co.getName().equals(objName)) {
found = co;
break;
@ -2683,8 +2682,8 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt {
+ CK.S_CUSTOM_OBJECTIVES_DATA);
if (list != null && plugin != null) {
final String objName = list.getLast();
CustomObjective found = null;
for (final CustomObjective co : plugin.getCustomObjectives()) {
ICustomObjective found = null;
for (final ICustomObjective co : plugin.getCustomObjectives()) {
if (co.getName().equals(objName)) {
found = co;
break;
@ -2727,8 +2726,8 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt {
+ CK.S_CUSTOM_OBJECTIVES);
if (list != null && plugin != null) {
final String objName = list.getLast();
CustomObjective found = null;
for (final CustomObjective co : plugin.getCustomObjectives()) {
ICustomObjective found = null;
for (final ICustomObjective co : plugin.getCustomObjectives()) {
if (co.getName().equals(objName)) {
found = co;
break;

View File

@ -10,7 +10,10 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package me.blackvein.quests;
package me.blackvein.quests.dependencies;
import me.blackvein.quests.player.IQuester;
import me.blackvein.quests.Quests;
public class DenizenTrigger {
private final Quests plugin;
@ -18,7 +21,7 @@ public class DenizenTrigger {
public DenizenTrigger(final Quests plugin) {
this.plugin = plugin;
}
public boolean runDenizenScript(final String scriptName, final Quester quester) {
public boolean runDenizenScript(final String scriptName, final IQuester quester) {
if (scriptName == null) {
return false;
}

View File

@ -10,7 +10,7 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package me.blackvein.quests;
package me.blackvein.quests.entity;
import org.bukkit.Bukkit;
import org.bukkit.Location;
@ -24,7 +24,7 @@ import me.blackvein.quests.util.ConfigUtil;
import me.blackvein.quests.util.ItemUtil;
import me.blackvein.quests.util.MiscUtil;
public class QuestMob {
public class BukkitQuestMob implements QuestMob {
private String name = null;
private EntityType entityType = null;
@ -33,10 +33,10 @@ public class QuestMob {
private ItemStack[] inventory = new ItemStack[5];
private Float[] dropChances = new Float[5];
public QuestMob(){
public BukkitQuestMob(){
}
public QuestMob(final EntityType entityType, final Location spawnLocation, final int spawnAmounts) {
public BukkitQuestMob(final EntityType entityType, final Location spawnLocation, final int spawnAmounts) {
this.entityType = entityType;
this.spawnLocation = spawnLocation;
this.spawnAmounts = spawnAmounts;
@ -189,7 +189,7 @@ public class QuestMob {
return string;
}
public static QuestMob fromString(final String str) {
public static BukkitQuestMob fromString(final String str) {
String name = null;
EntityType entityType = null;
Location loc = null;
@ -258,7 +258,7 @@ public class QuestMob {
}
}
}
final QuestMob qm = new QuestMob(entityType, loc, amounts != null ? amounts : 1);
final BukkitQuestMob qm = new BukkitQuestMob(entityType, loc, amounts != null ? amounts : 1);
qm.setName(name);
qm.inventory = inventory;
qm.dropChances = dropChances;

View File

@ -12,10 +12,9 @@
package me.blackvein.quests.events.command;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.Quester;
import me.blackvein.quests.events.QuestsEvent;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
/**

View File

@ -12,11 +12,10 @@
package me.blackvein.quests.events.command;
import me.blackvein.quests.Quester;
import org.bukkit.conversations.ConversationContext;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.Quester;
import org.jetbrains.annotations.NotNull;
/**

View File

@ -12,10 +12,9 @@
package me.blackvein.quests.events.command;
import me.blackvein.quests.Quester;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.Quester;
import org.jetbrains.annotations.NotNull;
/**

View File

@ -12,10 +12,9 @@
package me.blackvein.quests.events.command;
import me.blackvein.quests.Quester;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.Quester;
import org.jetbrains.annotations.NotNull;
/**

View File

@ -12,10 +12,9 @@
package me.blackvein.quests.events.quester;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.Quester;
import me.blackvein.quests.events.QuestsEvent;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
/**

View File

@ -12,11 +12,10 @@
package me.blackvein.quests.events.quester;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester;
import me.blackvein.quests.Stage;
import me.blackvein.quests.quests.IQuest;
import me.blackvein.quests.quests.IStage;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
/**
@ -24,11 +23,11 @@ import org.jetbrains.annotations.NotNull;
*/
public class QuesterPostChangeStageEvent extends QuesterEvent {
private static final HandlerList HANDLERS = new HandlerList();
private final Quest quest;
private final Stage current;
private final Stage next;
private final IQuest quest;
private final IStage current;
private final IStage next;
public QuesterPostChangeStageEvent(final Quester quester, final Quest quest, final Stage current, final Stage next) {
public QuesterPostChangeStageEvent(final Quester quester, final IQuest quest, final IStage current, final IStage next) {
super(quester);
this.quest = quest;
this.current = current;
@ -40,15 +39,15 @@ public class QuesterPostChangeStageEvent extends QuesterEvent {
*
* @return Quest which is involved in this event
*/
public Quest getQuest() {
public IQuest getQuest() {
return quest;
}
public Stage getCurrentStage() {
public IStage getCurrentStage() {
return current;
}
public Stage getNextStage() {
public IStage getNextStage() {
return next;
}

View File

@ -12,10 +12,9 @@
package me.blackvein.quests.events.quester;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester;
import me.blackvein.quests.quests.IQuest;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
/**
@ -23,9 +22,9 @@ import org.jetbrains.annotations.NotNull;
*/
public class QuesterPostCompleteQuestEvent extends QuesterEvent {
private static final HandlerList HANDLERS = new HandlerList();
private final Quest quest;
private final IQuest quest;
public QuesterPostCompleteQuestEvent(final Quester quester, final Quest quest) {
public QuesterPostCompleteQuestEvent(final Quester quester, final IQuest quest) {
super(quester);
this.quest = quest;
}
@ -35,7 +34,7 @@ public class QuesterPostCompleteQuestEvent extends QuesterEvent {
*
* @return Quest which is involved in this event
*/
public Quest getQuest() {
public IQuest getQuest() {
return quest;
}

View File

@ -12,10 +12,9 @@
package me.blackvein.quests.events.quester;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester;
import me.blackvein.quests.quests.IQuest;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
/**
@ -23,9 +22,9 @@ import org.jetbrains.annotations.NotNull;
*/
public class QuesterPostFailQuestEvent extends QuesterEvent {
private static final HandlerList HANDLERS = new HandlerList();
private final Quest quest;
private final IQuest quest;
public QuesterPostFailQuestEvent(final Quester quester, final Quest quest) {
public QuesterPostFailQuestEvent(final Quester quester, final IQuest quest) {
super(quester);
this.quest = quest;
}
@ -35,7 +34,7 @@ public class QuesterPostFailQuestEvent extends QuesterEvent {
*
* @return Quest which is involved in this event
*/
public Quest getQuest() {
public IQuest getQuest() {
return quest;
}

View File

@ -12,10 +12,9 @@
package me.blackvein.quests.events.quester;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester;
import me.blackvein.quests.quests.IQuest;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
/**
@ -23,9 +22,9 @@ import org.jetbrains.annotations.NotNull;
*/
public class QuesterPostStartQuestEvent extends QuesterEvent {
private static final HandlerList HANDLERS = new HandlerList();
private final Quest quest;
private final IQuest quest;
public QuesterPostStartQuestEvent(final Quester quester, final Quest quest) {
public QuesterPostStartQuestEvent(final Quester quester, final IQuest quest) {
super(quester);
this.quest = quest;
}
@ -35,7 +34,7 @@ public class QuesterPostStartQuestEvent extends QuesterEvent {
*
* @return Quest which is involved in this event
*/
public Quest getQuest() {
public IQuest getQuest() {
return quest;
}

View File

@ -12,12 +12,11 @@
package me.blackvein.quests.events.quester;
import me.blackvein.quests.Quester;
import me.blackvein.quests.quests.IQuest;
import me.blackvein.quests.quests.Objective;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.Objective;
import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester;
import org.jetbrains.annotations.NotNull;
/**
@ -25,11 +24,11 @@ import org.jetbrains.annotations.NotNull;
*/
public class QuesterPostUpdateObjectiveEvent extends QuesterEvent implements Cancellable {
private static final HandlerList HANDLERS = new HandlerList();
private final Quest quest;
private final IQuest quest;
private final Objective objective;
private boolean cancel = false;
public QuesterPostUpdateObjectiveEvent(final Quester quester, final Quest quest, final Objective objective) {
public QuesterPostUpdateObjectiveEvent(final Quester quester, final IQuest quest, final Objective objective) {
super(quester);
this.quest = quest;
this.objective = objective;
@ -40,7 +39,7 @@ public class QuesterPostUpdateObjectiveEvent extends QuesterEvent implements Can
*
* @return Quest which is involved in this event
*/
public Quest getQuest() {
public IQuest getQuest() {
return quest;
}

View File

@ -12,12 +12,11 @@
package me.blackvein.quests.events.quester;
import me.blackvein.quests.Quester;
import me.blackvein.quests.quests.IQuest;
import me.blackvein.quests.quests.IStage;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester;
import me.blackvein.quests.Stage;
import org.jetbrains.annotations.NotNull;
/**
@ -25,12 +24,12 @@ import org.jetbrains.annotations.NotNull;
*/
public class QuesterPreChangeStageEvent extends QuesterEvent implements Cancellable {
private static final HandlerList HANDLERS = new HandlerList();
private final Quest quest;
private final Stage current;
private final Stage next;
private final IQuest quest;
private final IStage current;
private final IStage next;
private boolean cancel = false;;
public QuesterPreChangeStageEvent(final Quester quester, final Quest quest, final Stage current, final Stage next) {
public QuesterPreChangeStageEvent(final Quester quester, final IQuest quest, final IStage current, final IStage next) {
super(quester);
this.quest = quest;
this.current = current;
@ -42,15 +41,15 @@ public class QuesterPreChangeStageEvent extends QuesterEvent implements Cancella
*
* @return Quest which is involved in this event
*/
public Quest getQuest() {
public IQuest getQuest() {
return quest;
}
public Stage getCurrentStage() {
public IStage getCurrentStage() {
return current;
}
public Stage getNextStage() {
public IStage getNextStage() {
return next;
}

View File

@ -12,11 +12,10 @@
package me.blackvein.quests.events.quester;
import me.blackvein.quests.Quester;
import me.blackvein.quests.quests.IQuest;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester;
import org.jetbrains.annotations.NotNull;
/**
@ -24,15 +23,15 @@ import org.jetbrains.annotations.NotNull;
*/
public class QuesterPreCompleteQuestEvent extends QuesterEvent implements Cancellable {
private static final HandlerList HANDLERS = new HandlerList();
private final Quest quest;
private final IQuest quest;
private boolean cancel = false;
public QuesterPreCompleteQuestEvent(final Quester quester, final Quest quest) {
public QuesterPreCompleteQuestEvent(final Quester quester, final IQuest quest) {
super(quester);
this.quest = quest;
}
public QuesterPreCompleteQuestEvent(final Quester quester, final Quest quest, final boolean async) {
public QuesterPreCompleteQuestEvent(final Quester quester, final IQuest quest, final boolean async) {
super(quester, async);
this.quest = quest;
}
@ -42,7 +41,7 @@ public class QuesterPreCompleteQuestEvent extends QuesterEvent implements Cancel
*
* @return Quest which is involved in this event
*/
public Quest getQuest() {
public IQuest getQuest() {
return quest;
}

View File

@ -12,11 +12,10 @@
package me.blackvein.quests.events.quester;
import me.blackvein.quests.Quester;
import me.blackvein.quests.quests.IQuest;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester;
import org.jetbrains.annotations.NotNull;
/**
@ -24,10 +23,10 @@ import org.jetbrains.annotations.NotNull;
*/
public class QuesterPreFailQuestEvent extends QuesterEvent implements Cancellable {
private static final HandlerList HANDLERS = new HandlerList();
private final Quest quest;
private final IQuest quest;
private boolean cancel = false;
public QuesterPreFailQuestEvent(final Quester quester, final Quest quest) {
public QuesterPreFailQuestEvent(final Quester quester, final IQuest quest) {
super(quester);
this.quest = quest;
}
@ -37,7 +36,7 @@ public class QuesterPreFailQuestEvent extends QuesterEvent implements Cancellabl
*
* @return Quest which is involved in this event
*/
public Quest getQuest() {
public IQuest getQuest() {
return quest;
}

View File

@ -12,11 +12,10 @@
package me.blackvein.quests.events.quester;
import me.blackvein.quests.Quester;
import me.blackvein.quests.quests.IQuest;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester;
import org.jetbrains.annotations.NotNull;
/**
@ -24,10 +23,10 @@ import org.jetbrains.annotations.NotNull;
*/
public class QuesterPreStartQuestEvent extends QuesterEvent implements Cancellable {
private static final HandlerList HANDLERS = new HandlerList();
private final Quest quest;
private final IQuest quest;
private boolean cancel = false;
public QuesterPreStartQuestEvent(final Quester quester, final Quest quest) {
public QuesterPreStartQuestEvent(final Quester quester, final IQuest quest) {
super(quester);
this.quest = quest;
}
@ -37,7 +36,7 @@ public class QuesterPreStartQuestEvent extends QuesterEvent implements Cancellab
*
* @return Quest which is involved in this event
*/
public Quest getQuest() {
public IQuest getQuest() {
return quest;
}

View File

@ -12,12 +12,11 @@
package me.blackvein.quests.events.quester;
import me.blackvein.quests.Quester;
import me.blackvein.quests.quests.IQuest;
import me.blackvein.quests.quests.Objective;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.Objective;
import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester;
import org.jetbrains.annotations.NotNull;
/**
@ -25,11 +24,11 @@ import org.jetbrains.annotations.NotNull;
*/
public class QuesterPreUpdateObjectiveEvent extends QuesterEvent implements Cancellable {
private static final HandlerList HANDLERS = new HandlerList();
private final Quest quest;
private final IQuest quest;
private final Objective objective;
private boolean cancel = false;
public QuesterPreUpdateObjectiveEvent(final Quester quester, final Quest quest, final Objective objective) {
public QuesterPreUpdateObjectiveEvent(final Quester quester, final IQuest quest, final Objective objective) {
super(quester);
this.quest = quest;
this.objective = objective;
@ -40,7 +39,7 @@ public class QuesterPreUpdateObjectiveEvent extends QuesterEvent implements Canc
*
* @return Quest which is involved in this event
*/
public Quest getQuest() {
public IQuest getQuest() {
return quest;
}

Some files were not shown because too many files have changed in this diff Show More