Remove native GPS support. Add new Bukkit Event API. Bump version number

This commit is contained in:
PikaMug 2019-05-29 11:48:47 -04:00
parent d42123a275
commit 7927806d41
71 changed files with 1217 additions and 710 deletions

2
dist/pom.xml vendored
View File

@ -5,7 +5,7 @@
<parent>
<groupId>me.blackvein.quests</groupId>
<artifactId>quests-parent</artifactId>
<version>3.6.9</version>
<version>3.7.0</version>
</parent>
<artifactId>quests-dist</artifactId>
<packaging>pom</packaging>

View File

@ -4,7 +4,7 @@
<parent>
<groupId>me.blackvein.quests</groupId>
<artifactId>quests-parent</artifactId>
<version>3.6.9</version>
<version>3.7.0</version>
</parent>
<artifactId>quests-main</artifactId>
@ -112,11 +112,6 @@
<artifactId>PhatLoots</artifactId>
<version>-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.github.PikaMug</groupId>
<artifactId>GPS</artifactId>
<version>-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.github.DRE2N</groupId>
<artifactId>DungeonsXL</artifactId>

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
@ -28,8 +28,6 @@ import com.alessiodp.parties.api.interfaces.PartiesAPI;
import com.codisimus.plugins.phatloots.PhatLoots;
import com.gmail.nossr50.mcMMO;
import com.herocraftonline.heroes.Heroes;
import com.live.bemmamin.gps.Vars;
import com.live.bemmamin.gps.api.GPSAPI;
import de.erethon.dungeonsxl.DungeonsXL;
@ -40,7 +38,6 @@ public class Dependencies {
private static Permission permission = null;
private static WorldGuardAPI worldGuardApi = null;
private static mcMMO mcmmo = null;
private static GPSAPI gpsapi = null;
private static Heroes heroes = null;
private static PhatLoots phatLoots = null;
private static PlaceholderAPIPlugin placeholder = null;
@ -70,10 +67,6 @@ public class Dependencies {
return mcmmo;
}
public GPSAPI getGpsApi() {
return gpsapi;
}
public Heroes getHeroes() {
return heroes;
}
@ -138,10 +131,6 @@ public class Dependencies {
if (isPluginAvailable("mcMMO")) {
mcmmo = (mcMMO) plugin.getServer().getPluginManager().getPlugin("mcMMO");
}
if (isPluginAvailable("GPS") && plugin.getSettings().canUseGPS()) {
gpsapi = new GPSAPI(plugin);
Vars.getInstance().setMaxDistanceToEntry(9999.0);
}
if (isPluginAvailable("Heroes")) {
heroes = (Heroes) plugin.getServer().getPluginManager().getPlugin("Heroes");
}

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
@ -39,6 +39,12 @@ import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import de.erethon.dungeonsxl.player.DGroup;
import me.blackvein.quests.actions.Action;
import me.blackvein.quests.events.quester.QuesterPostChangeStageEvent;
import me.blackvein.quests.events.quester.QuesterPostCompleteQuestEvent;
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.exceptions.InvalidStageException;
import me.blackvein.quests.util.ItemUtil;
import me.blackvein.quests.util.Lang;
@ -149,7 +155,7 @@ public class Quest {
return initialAction;
}
public void setInitialActino(Action initialAction) {
public void setInitialAction(Action initialAction) {
this.initialAction = initialAction;
}
@ -237,6 +243,12 @@ public class Quest {
throw new InvalidStageException(this, stage);
}
Stage currentStage = quester.getCurrentStage(this);
Stage nextStage = quester.getCurrentStage(this);
QuesterPreChangeStageEvent preEvent = new QuesterPreChangeStageEvent(quester, this, currentStage, nextStage);
plugin.getServer().getPluginManager().callEvent(preEvent);
if (preEvent.isCancelled()) {
return;
}
quester.hardQuit(this);
quester.hardStagePut(this, stage);
quester.addEmptiesFor(this, stage);
@ -246,12 +258,10 @@ public class Quest {
/*
* if (quester.getCurrentStage(this).finishEvent != null) { quester.getCurrentStage(this).finishEvent.fire(quester); }
*/
Stage nextStage = quester.getCurrentStage(this);
if (nextStage.startEvent != null) {
nextStage.startEvent.fire(quester, this);
}
updateCompass(quester, nextStage);
updateGPS(quester);
String msg = Lang.get(quester.getPlayer(), "questObjectivesTitle");
msg = msg.replace("<quest>", name);
quester.getPlayer().sendMessage(ChatColor.GOLD + msg);
@ -261,62 +271,8 @@ public class Quest {
quester.getPlayer().sendMessage(plugin.parseStringWithPossibleLineBreaks(stageStartMessage, this, quester.getPlayer()));
}
quester.updateJournal();
}
/**
* Add location-objective points for GPS and begin navigation.<p>
*
* Do not call this method multiple times.
*
* @param quester The quester to have their GPS updated
* @return true if successful
*/
protected boolean updateGPS(Quester quester) {
if (plugin.getDependencies().getGpsApi() == null) {
return false;
}
Stage stage = quester.getCurrentStage(this);
LinkedList<Location> targetLocations = new LinkedList<Location>();
if (stage == null) {
return false;
}
if (stage.citizensToInteract != null && stage.citizensToInteract.size() > 0) {
for (Integer i : stage.citizensToInteract) {
targetLocations.add(plugin.getNPCLocation(i));
}
} else if (stage.citizensToKill != null && stage.citizensToKill.size() > 0) {
for (Integer i : stage.citizensToKill) {
targetLocations.add(plugin.getNPCLocation(i));
}
} else if (stage.locationsToReach != null && stage.locationsToReach.size() > 0) {
targetLocations.addAll(stage.locationsToReach);
} else if (stage.itemDeliveryTargets != null && stage.itemDeliveryTargets.size() > 0) {
for (Integer i : stage.itemDeliveryTargets) {
NPC npc = plugin.getDependencies().getCitizens().getNPCRegistry().getById(i);
targetLocations.add(npc.getStoredLocation());
}
}
if (targetLocations != null && !targetLocations.isEmpty()) {
int index = 1;
String pointName = "quests-" + quester.getPlayer().getUniqueId().toString() + "-" + stage.toString() + "-";
for (Location l : targetLocations) {
if (l.getWorld().getName().equals(quester.getPlayer().getWorld().getName())) {
if (!plugin.getDependencies().getGpsApi().gpsIsActive(quester.getPlayer())) {
plugin.getDependencies().getGpsApi().addPoint(pointName + index, l);
index++;
}
}
}
for (int i = 1 ; i < targetLocations.size(); i++) {
if (!plugin.getDependencies().getGpsApi().gpsIsActive(quester.getPlayer())) {
plugin.getDependencies().getGpsApi().connect(pointName + i, pointName + (i + 1), true);
}
}
if (!plugin.getDependencies().getGpsApi().gpsIsActive(quester.getPlayer())) {
plugin.getDependencies().getGpsApi().startGPS(quester.getPlayer(), pointName + (index - 1));
}
}
return targetLocations != null && !targetLocations.isEmpty();
QuesterPostChangeStageEvent postEvent = new QuesterPostChangeStageEvent(quester, this, currentStage, nextStage);
plugin.getServer().getPluginManager().callEvent(postEvent);
}
/**
@ -457,6 +413,11 @@ public class Quest {
*/
@SuppressWarnings("deprecation")
public void completeQuest(Quester q) {
QuesterPreCompleteQuestEvent preEvent = new QuesterPreCompleteQuestEvent(q, this);
plugin.getServer().getPluginManager().callEvent(preEvent);
if (preEvent.isCancelled()) {
return;
}
final Player player = plugin.getServer().getPlayer(q.getUUID());
q.hardQuit(this);
if (!q.completedQuests.contains(name)) {
@ -596,7 +557,7 @@ public class Quest {
if (!i.getItemMeta().hasItemFlag(ItemFlag.HIDE_ENCHANTS)) {
text += ChatColor.GRAY + " " + Lang.get(player, "with") + ChatColor.DARK_PURPLE;
for (Entry<Enchantment, Integer> e : i.getEnchantments().entrySet()) {
text += " " + Quester.prettyEnchantmentString(e.getKey()) + ":" + e.getValue();
text += " " + ItemUtil.getPrettyEnchantmentName(e.getKey()) + ":" + e.getValue();
}
}
} catch (Throwable tr) {
@ -610,7 +571,7 @@ public class Quest {
} else {
text = "- " + ChatColor.DARK_GREEN + ItemUtil.getName(i) + ":" + i.getDurability() + ChatColor.GRAY + " " + Lang.get(player, "with");
for (Entry<Enchantment, Integer> e : i.getEnchantments().entrySet()) {
text += " " + Quester.prettyEnchantmentString(e.getKey()) + ":" + e.getValue();
text += " " + ItemUtil.getPrettyEnchantmentName(e.getKey()) + ":" + e.getValue();
}
text += ChatColor.GRAY + " x " + i.getAmount();
}
@ -623,7 +584,7 @@ public class Quest {
if (!i.getItemMeta().hasItemFlag(ItemFlag.HIDE_ENCHANTS)) {
text += ChatColor.GRAY + " " + Lang.get(player, "with");
for (Entry<Enchantment, Integer> e : i.getEnchantments().entrySet()) {
text += " " + Quester.prettyEnchantmentString(e.getKey()) + ":" + e.getValue();
text += " " + ItemUtil.getPrettyEnchantmentName(e.getKey()) + ":" + e.getValue();
}
}
} catch (Throwable tr) {
@ -718,12 +679,9 @@ public class Quest {
q.saveData();
player.updateInventory();
q.updateJournal();
if (plugin.getDependencies().getGpsApi() != null) {
if (plugin.getDependencies().getGpsApi().gpsIsActive(player)) {
plugin.getDependencies().getGpsApi().stopGPS(player);
}
}
q.findCompassTarget();
QuesterPostCompleteQuestEvent postEvent = new QuesterPostCompleteQuestEvent(q, this);
plugin.getServer().getPluginManager().callEvent(postEvent);
}
/**
@ -733,6 +691,11 @@ public class Quest {
*/
@SuppressWarnings("deprecation")
public void failQuest(Quester q) {
QuesterPreFailQuestEvent preEvent = new QuesterPreFailQuestEvent(q, this);
plugin.getServer().getPluginManager().callEvent(preEvent);
if (preEvent.isCancelled()) {
return;
}
if (plugin.getServer().getPlayer(q.getUUID()) != null) {
Player player = plugin.getServer().getPlayer(q.getUUID());
player.sendMessage(ChatColor.GOLD + Lang.get(player, "questObjectivesTitle").replace("<quest>", name));
@ -745,6 +708,8 @@ public class Quest {
q.saveData();
}
q.updateJournal();
QuesterPostFailQuestEvent postEvent = new QuesterPostFailQuestEvent(q, this);
plugin.getServer().getPluginManager().callEvent(postEvent);
}
/**

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
@ -56,6 +56,7 @@ import me.blackvein.quests.prompts.StagesPrompt;
import me.blackvein.quests.util.CK;
import me.blackvein.quests.util.ItemUtil;
import me.blackvein.quests.util.Lang;
import me.blackvein.quests.util.MiscUtil;
import me.blackvein.quests.util.WorldGuardAPI;
import net.citizensnpcs.api.CitizensAPI;
@ -1630,7 +1631,7 @@ public class QuestFactory implements ConversationAbandonedListener {
amounts.add(e.getValue());
for (Entry<Enchantment, Material> e2 : e.getKey().entrySet()) {
names.add(e2.getValue().name());
enchants.add(Quester.prettyEnchantmentString(e2.getKey()));
enchants.add(ItemUtil.getPrettyEnchantmentName(e2.getKey()));
}
}
cc.setSessionData(pref + CK.S_ENCHANT_TYPES, enchants);
@ -1674,7 +1675,7 @@ public class QuestFactory implements ConversationAbandonedListener {
if (stage.mobsToKill.isEmpty() == false) {
LinkedList<String> mobs = new LinkedList<String>();
for (EntityType et : stage.mobsToKill) {
mobs.add(Quester.prettyMobString(et));
mobs.add(MiscUtil.getPrettyMobName(et));
}
cc.setSessionData(pref + CK.S_MOB_TYPES, mobs);
cc.setSessionData(pref + CK.S_MOB_AMOUNTS, stage.mobNumToKill);
@ -1701,7 +1702,7 @@ public class QuestFactory implements ConversationAbandonedListener {
LinkedList<String> mobs = new LinkedList<String>();
LinkedList<Integer> amnts = new LinkedList<Integer>();
for (Entry<EntityType, Integer> e : stage.mobsToTame.entrySet()) {
mobs.add(Quester.prettyMobString(e.getKey()));
mobs.add(MiscUtil.getPrettyMobName(e.getKey()));
amnts.add(e.getValue());
}
cc.setSessionData(pref + CK.S_TAME_TYPES, mobs);
@ -1711,7 +1712,7 @@ public class QuestFactory implements ConversationAbandonedListener {
LinkedList<String> colors = new LinkedList<String>();
LinkedList<Integer> amnts = new LinkedList<Integer>();
for (Entry<DyeColor, Integer> e : stage.sheepToShear.entrySet()) {
colors.add(Quester.prettyColorString(e.getKey()));
colors.add(MiscUtil.getPrettyDyeColorName(e.getKey()));
amnts.add(e.getValue());
}
cc.setSessionData(pref + CK.S_SHEAR_COLORS, colors);

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
@ -40,13 +40,14 @@ import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.BookMeta;
import org.bukkit.inventory.meta.ItemMeta;
import me.blackvein.quests.events.quester.QuesterPostStartQuestEvent;
import me.blackvein.quests.events.quester.QuesterPreStartQuestEvent;
import me.blackvein.quests.timers.StageTimer;
import me.blackvein.quests.util.ItemUtil;
import me.blackvein.quests.util.Lang;
@ -388,6 +389,11 @@ public class Quester {
if (q == null) {
return;
}
QuesterPreStartQuestEvent preEvent = new QuesterPreStartQuestEvent(this, q);
plugin.getServer().getPluginManager().callEvent(preEvent);
if (preEvent.isCancelled()) {
return;
}
Player player = getPlayer();
Planner pln = q.getPlanner();
long start = pln.getStartInMillis(); // Start time in milliseconds since UTC epoch
@ -513,11 +519,12 @@ public class Quester {
stage.startEvent.fire(this, q);
}
q.updateCompass(this, stage);
q.updateGPS(this);
saveData();
} else {
player.sendMessage(q.getRequirements().getFailRequirements());
}
QuesterPostStartQuestEvent postEvent = new QuesterPostStartQuestEvent(this, q);
plugin.getServer().getPluginManager().callEvent(postEvent);
}
/**
@ -669,12 +676,12 @@ public class Quester {
if (num1 < num2) {
String obj = Lang.get(getPlayer(), "enchantItem");
obj = obj.replace("<item>", ItemUtil.getName(new ItemStack(mat)) + ChatColor.GREEN);
obj = obj.replace("<enchantment>", ChatColor.LIGHT_PURPLE + Quester.prettyEnchantmentString(enchantment) + ChatColor.GREEN);
obj = obj.replace("<enchantment>", ChatColor.LIGHT_PURPLE + ItemUtil.getPrettyEnchantmentName(enchantment) + ChatColor.GREEN);
unfinishedObjectives.add(ChatColor.GREEN + obj + ChatColor.GREEN + ": " + num1 + "/" + num2);
} else {
String obj = Lang.get(getPlayer(), "enchantItem");
obj = obj.replace("<item>", ItemUtil.getName(new ItemStack(mat)) + ChatColor.GRAY);
obj = obj.replace("<enchantment>", ChatColor.LIGHT_PURPLE + Quester.prettyEnchantmentString(enchantment) + ChatColor.GRAY);
obj = obj.replace("<enchantment>", ChatColor.LIGHT_PURPLE + ItemUtil.getPrettyEnchantmentName(enchantment) + ChatColor.GRAY);
finishedObjectives.add(ChatColor.GRAY + obj + ChatColor.GRAY + ": " + num1 + "/" + num2);
}
}
@ -698,12 +705,12 @@ public class Quester {
< getCurrentStage(quest).mobNumToKill.get(getCurrentStage(quest).mobsToKill.indexOf(e))) {
if (getCurrentStage(quest).locationsToKillWithin.isEmpty()) {
unfinishedObjectives.add(ChatColor.GREEN + Lang.get(getPlayer(), "kill") + " "
+ ChatColor.AQUA + Quester.prettyMobString(e) + ChatColor.GREEN + ": "
+ ChatColor.AQUA + MiscUtil.getPrettyMobName(e) + ChatColor.GREEN + ": "
+ (getQuestData(quest).mobNumKilled.get(getQuestData(quest).mobsKilled.indexOf(e2)))
+ "/" + (getCurrentStage(quest).mobNumToKill.get(getCurrentStage(quest).mobsToKill.indexOf(e))));
} else {
String obj = Lang.get(getPlayer(), "killAtLocation");
obj = obj.replace("<mob>", ChatColor.LIGHT_PURPLE + Quester.prettyMobString(e));
obj = obj.replace("<mob>", ChatColor.LIGHT_PURPLE + MiscUtil.getPrettyMobName(e));
obj = obj.replace("<location>", getCurrentStage(quest).killNames.get(getCurrentStage(quest).mobsToKill.indexOf(e)));
unfinishedObjectives.add(ChatColor.GREEN + obj + ChatColor.GREEN + ": "
+ (getQuestData(quest).mobNumKilled.get(getQuestData(quest).mobsKilled.indexOf(e2)))
@ -712,12 +719,12 @@ public class Quester {
} else {
if (getCurrentStage(quest).locationsToKillWithin.isEmpty()) {
finishedObjectives.add(ChatColor.GRAY + Lang.get(getPlayer(), "kill") + " "
+ ChatColor.AQUA + Quester.prettyMobString(e) + ChatColor.GRAY + ": "
+ ChatColor.AQUA + MiscUtil.getPrettyMobName(e) + ChatColor.GRAY + ": "
+ (getQuestData(quest).mobNumKilled.get(getQuestData(quest).mobsKilled.indexOf(e2)))
+ "/" + (getCurrentStage(quest).mobNumToKill.get(getCurrentStage(quest).mobsToKill.indexOf(e))));
} else {
String obj = Lang.get(getPlayer(), "killAtLocation");
obj = obj.replace("<mob>", ChatColor.LIGHT_PURPLE + Quester.prettyMobString(e));
obj = obj.replace("<mob>", ChatColor.LIGHT_PURPLE + MiscUtil.getPrettyMobName(e));
obj = obj.replace("<location>", getCurrentStage(quest).killNames.get(getCurrentStage(quest).mobsToKill.indexOf(e)));
finishedObjectives.add(ChatColor.GRAY + obj + ChatColor.GRAY + ": "
+ (getQuestData(quest).mobNumKilled.get(getQuestData(quest).mobsKilled.indexOf(e2)))
@ -796,10 +803,10 @@ public class Quester {
for (Entry<EntityType, Integer> e2 : getQuestData(quest).mobsTamed.entrySet()) {
if (e.getKey().equals(e2.getKey())) {
if (e2.getValue() < e.getValue()) {
unfinishedObjectives.add(ChatColor.GREEN + Lang.get(getPlayer(), "tame") + " " + getCapitalized(e.getKey().name())
unfinishedObjectives.add(ChatColor.GREEN + Lang.get(getPlayer(), "tame") + " " + MiscUtil.getCapitalized(e.getKey().name())
+ ChatColor.GREEN + ": " + e2.getValue() + "/" + e.getValue());
} else {
finishedObjectives.add(ChatColor.GRAY + Lang.get(getPlayer(), "tame") + " " + getCapitalized(e.getKey().name())
finishedObjectives.add(ChatColor.GRAY + Lang.get(getPlayer(), "tame") + " " + MiscUtil.getCapitalized(e.getKey().name())
+ ChatColor.GRAY + ": " + e2.getValue() + "/" + e.getValue());
}
}
@ -1929,125 +1936,6 @@ public class Quester {
hardDataPut(quest, data);
}
public static String getCapitalized(String target) {
String firstLetter = target.substring(0, 1);
String remainder = target.substring(1);
String capitalized = firstLetter.toUpperCase() + remainder.toLowerCase();
return capitalized;
}
/**
* Cleans up item names. 'WOODEN_BUTTON' becomes 'Wooden Button'
*
* @param itemName any item name, ideally
* @return cleaned-up string
*/
public static String prettyItemString(String itemName) {
String baseString = Material.matchMaterial(itemName).toString();
String[] substrings = baseString.split("_");
String prettyString = "";
int size = 1;
for (String s : substrings) {
prettyString = prettyString.concat(Quester.getCapitalized(s));
if (size < substrings.length) {
prettyString = prettyString.concat(" ");
}
size++;
}
return prettyString;
}
/**
* Gets player-friendly name from type. 'ENDER_DRAGON' becomes 'Ender Dragon'
*
* @param type any mob type, ideally
* @return cleaned-up string
*/
public static String prettyMobString(EntityType type) {
String baseString = type.toString();
String[] substrings = baseString.split("_");
String prettyString = "";
int size = 1;
for (String s : substrings) {
prettyString = prettyString.concat(Quester.getCapitalized(s));
if (size < substrings.length) {
prettyString = prettyString.concat(" ");
}
size++;
}
if (type.equals((EntityType.OCELOT))) {
prettyString = "Ocelot";
}
return prettyString;
}
public static String prettyColorString(DyeColor color) {
return Lang.get("COLOR_" + color.name());
}
/**
* Gets player-friendly name from enchantment. 'FIRE_ASPECT' becomes 'Fire Aspect'
*
* @param e Enchantment to get pretty localized name of
* @return pretty localized name
*/
public static String prettyEnchantmentString(Enchantment e) {
String prettyString = enchantmentString(e);
prettyString = capitalsToSpaces(prettyString);
return prettyString;
}
/**
* Gets name of enchantment exactly as it appears in lang file
*
* @param e Enchantment to get localized name of
* @return localized name
*/
@SuppressWarnings("deprecation") // since 1.13
public static String enchantmentString(Enchantment e) {
try {
return (Lang.get("ENCHANTMENT_" + e.getName()));
} catch (NullPointerException ne) {
Bukkit.getLogger().warning(e.getName() + " was not found in Lang.yml, please ask the developer to "
+ "update the file or simply add an entry for the enchantment");
return e.getName().toLowerCase().replace("_", " ");
}
}
/**
* Adds a single space in front of all capital letters
*
* @param s string to process
* @return processed string
*/
public static String capitalsToSpaces(String s) {
int max = s.length();
for (int i = 1; i < max; i++) {
if (Character.isUpperCase(s.charAt(i))) {
s = s.substring(0, i) + " " + s.substring(i);
i++;
max++;
}
}
return s;
}
/**
* Capitalize character after space
*
* @param s string to process
* @return processed string
*/
public static String spaceToCapital(String s) {
int index = s.indexOf(' ');
if (index == -1) {
return null;
}
s = s.substring(0, (index + 1)) + Character.toUpperCase(s.charAt(index + 1)) + s.substring(index + 2);
s = s.replaceFirst(" ", "");
return s;
}
public void saveData() {
FileConfiguration data = getBaseData();
try {
@ -2174,7 +2062,7 @@ public class Quester {
Map<Enchantment, Material> enchMap = (Map<Enchantment, Material>) e.getKey();
enchAmounts.add(questData.itemsEnchanted.get(enchMap));
for (Entry<Enchantment, Material> e2 : enchMap.entrySet()) {
enchantments.add(Quester.prettyEnchantmentString((Enchantment) e2.getKey()));
enchantments.add(ItemUtil.getPrettyEnchantmentName((Enchantment) e2.getKey()));
itemNames.add(((Material) e2.getValue()).name());
}
}
@ -2194,7 +2082,7 @@ public class Quester {
LinkedList<String> locations = new LinkedList<String>();
LinkedList<Integer> radii = new LinkedList<Integer>();
for (EntityType e : questData.mobsKilled) {
mobNames.add(Quester.prettyMobString(e));
mobNames.add(MiscUtil.getPrettyMobName(e));
}
for (int i : questData.mobNumKilled) {
mobAmounts.add(i);
@ -2268,7 +2156,7 @@ public class Quester {
LinkedList<String> mobNames = new LinkedList<String>();
LinkedList<Integer> mobAmounts = new LinkedList<Integer>();
for (EntityType e : questData.mobsTamed.keySet()) {
mobNames.add(Quester.prettyMobString(e));
mobNames.add(MiscUtil.getPrettyMobName(e));
mobAmounts.add(questData.mobsTamed.get(e));
}
questSec.set("mobs-to-tame", mobNames);
@ -2278,7 +2166,7 @@ public class Quester {
LinkedList<String> colors = new LinkedList<String>();
LinkedList<Integer> shearAmounts = new LinkedList<Integer>();
for (DyeColor d : questData.sheepSheared.keySet()) {
colors.add(Quester.prettyColorString(d));
colors.add(MiscUtil.getPrettyDyeColorName(d));
shearAmounts.add(questData.sheepSheared.get(d));
}
questSec.set("sheep-to-shear", colors);
@ -2583,7 +2471,7 @@ public class Quester {
List<String> names = questSec.getStringList("enchantment-item-names");
List<Integer> times = questSec.getIntegerList("times-enchanted");
for (String s : enchantNames) {
enchantments.add(Quests.getEnchantment(s));
enchantments.add(ItemUtil.getEnchantmentFromProperName(s));
materials.add(Material.matchMaterial(names.get(enchantNames.indexOf(s))));
amounts.add(times.get(enchantNames.indexOf(s)));
}
@ -2696,7 +2584,7 @@ public class Quester {
List<String> colors = questSec.getStringList("sheep-to-shear");
List<Integer> amounts = questSec.getIntegerList("sheep-sheared");
for (String color : colors) {
getQuestData(quest).sheepSheared.put(Quests.getDyeColor(color), amounts.get(colors.indexOf(color)));
getQuestData(quest).sheepSheared.put(MiscUtil.getDyeColor(color), amounts.get(colors.indexOf(color)));
}
}
if (questSec.contains("passwords")) {
@ -2743,132 +2631,6 @@ public class Quester {
return true;
}
public static ConfigurationSection getLegacyQuestData(FileConfiguration questSec, String questName) {
ConfigurationSection newData = questSec.createSection("questData");
if (questSec.contains("blocks-broken-names")) {
List<String> names = questSec.getStringList("blocks-broken-names");
List<Integer> amounts = questSec.getIntegerList("blocks-broken-amounts");
newData.set(questName + ".blocks-broken-names", names);
newData.set(questName + ".blocks-broken-amounts", amounts);
}
if (questSec.contains("blocks-damaged-names")) {
List<String> names = questSec.getStringList("blocks-damaged-names");
List<Integer> amounts = questSec.getIntegerList("blocks-damaged-amounts");
newData.set(questName + ".blocks-damaged-names", names);
newData.set(questName + ".blocks-damaged-amounts", amounts);
}
if (questSec.contains("blocks-placed-names")) {
List<String> names = questSec.getStringList("blocks-placed-names");
List<Integer> amounts = questSec.getIntegerList("blocks-placed-amounts");
newData.set(questName + ".blocks-placed-names", names);
newData.set(questName + ".blocks-placed-amounts", amounts);
}
if (questSec.contains("blocks-used-names")) {
List<String> names = questSec.getStringList("blocks-used-names");
List<Integer> amounts = questSec.getIntegerList("blocks-used-amounts");
newData.set(questName + ".blocks-used-names", names);
newData.set(questName + ".blocks-used-amounts", amounts);
}
if (questSec.contains("blocks-cut-names")) {
List<String> names = questSec.getStringList("blocks-cut-names");
List<Integer> amounts = questSec.getIntegerList("blocks-cut-amounts");
newData.set(questName + ".blocks-cut-names", names);
newData.set(questName + ".blocks-cut-amounts", amounts);
}
if (questSec.contains("fish-caught")) {
newData.set(questName + ".fish-caught", questSec.getInt("fish-caught"));
}
if (questSec.contains("players-killed")) {
newData.set(questName + ".players-killed", questSec.getInt("players-killed"));
}
if (questSec.contains("enchantments")) {
List<String> enchantNames = questSec.getStringList("enchantments");
List<String> names = questSec.getStringList("enchantment-item-names");
List<Integer> times = questSec.getIntegerList("times-enchanted");
newData.set(questName + ".enchantments", enchantNames);
newData.set(questName + ".enchantment-item-names", names);
newData.set(questName + ".times-enchanted", times);
}
if (questSec.contains("mobs-killed")) {
List<String> mobs = questSec.getStringList("mobs-killed");
List<Integer> amounts = questSec.getIntegerList("mobs-killed-amounts");
newData.set(questName + ".mobs-killed", mobs);
newData.set(questName + ".mobs-killed-amounts", amounts);
if (questSec.contains("mob-kill-locations")) {
List<String> locations = questSec.getStringList("mob-kill-locations");
List<Integer> radii = questSec.getIntegerList("mob-kill-location-radii");
newData.set(questName + ".mob-kill-locations", locations);
newData.set(questName + ".mob-kill-location-radii", radii);
}
}
if (questSec.contains("item-delivery-amounts")) {
List<Integer> deliveryAmounts = questSec.getIntegerList("item-delivery-amounts");
newData.set(questName + ".item-delivery-amounts", deliveryAmounts);
}
if (questSec.contains("citizen-ids-to-talk-to")) {
List<Integer> ids = questSec.getIntegerList("citizen-ids-to-talk-to");
List<Boolean> has = questSec.getBooleanList("has-talked-to");
newData.set(questName + ".citizen-ids-to-talk-to", ids);
newData.set(questName + ".has-talked-to", has);
}
if (questSec.contains("citizen-ids-killed")) {
List<Integer> ids = questSec.getIntegerList("citizen-ids-killed");
List<Integer> num = questSec.getIntegerList("citizen-amounts-killed");
newData.set(questName + ".citizen-ids-killed", ids);
newData.set(questName + ".citizen-amounts-killed", num);
}
if (questSec.contains("locations-to-reach")) {
List<String> locations = questSec.getStringList("locations-to-reach");
List<Boolean> has = questSec.getBooleanList("has-reached-location");
List<Integer> radii = questSec.getIntegerList("radii-to-reach-within");
newData.set(questName + ".locations-to-reach", locations);
newData.set(questName + ".has-reached-location", has);
newData.set(questName + ".radii-to-reach-within", radii);
}
if (questSec.contains("potions-brewed-names")) {
List<String> names = questSec.getStringList("potions-brewed-names");
List<Integer> amounts = questSec.getIntegerList("potions-brewed-amounts");
newData.set(questName + ".potions-brewed-names", names);
newData.set(questName + ".potions-brewed-amounts", amounts);
}
if (questSec.contains("mobs-to-tame")) {
List<String> mobs = questSec.getStringList("mobs-to-tame");
List<Integer> amounts = questSec.getIntegerList("mob-tame-amounts");
newData.set(questName + ".mobs-to-tame", mobs);
newData.set(questName + ".mob-tame-amounts", amounts);
}
if (questSec.contains("sheep-to-shear")) {
List<String> colors = questSec.getStringList("sheep-to-shear");
List<Integer> amounts = questSec.getIntegerList("sheep-sheared");
newData.set(questName + ".sheep-to-shear", colors);
newData.set(questName + ".sheep-sheared", amounts);
}
if (questSec.contains("passwords")) {
List<String> passwords = questSec.getStringList("passwords");
List<Boolean> said = questSec.getBooleanList("passwords-said");
newData.set(questName + ".passwords", passwords);
newData.set(questName + ".passwords-said", said);
}
if (questSec.contains("custom-objectives")) {
List<String> customObj = questSec.getStringList("custom-objectives");
List<Integer> customObjCount = questSec.getIntegerList("custom-objective-counts");
newData.set(questName + ".custom-objectives", customObj);
newData.set(questName + ".custom-objective-counts", customObjCount);
}
if (questSec.contains("stage-delay")) {
newData.set(questName + ".stage-delay", questSec.getLong("stage-delay"));
}
if (questSec.contains("chat-triggers")) {
List<String> chatTriggers = questSec.getStringList("chat-triggers");
newData.set(questName + ".chat-triggers", chatTriggers);
}
if (questSec.contains("command-triggers")) {
List<String> commandTriggers = questSec.getStringList("command-triggers");
newData.set(questName + ".command-triggers", commandTriggers);
}
return newData;
}
/**
* Initiate the stage timer
* @param quest The quest of which the timer is for
@ -2952,91 +2714,6 @@ public class Quester {
}
}
public static String checkPlacement(Inventory inv, int rawSlot) {
if (rawSlot < 0) {
return Lang.get("questNoDrop");
}
InventoryType type = inv.getType();
if (type.equals(InventoryType.BREWING)) {
if (rawSlot < 4) {
return Lang.get("questNoBrew");
}
} else if (type.equals(InventoryType.CHEST)) {
if (inv.getContents().length == 27) {
if (rawSlot < 27) {
return Lang.get("questNoStore");
}
} else {
if (rawSlot < 54) {
return Lang.get("questNoStore");
}
}
} else if (type.equals(InventoryType.CRAFTING)) {
if (rawSlot < 5) {
return Lang.get("questNoCraft");
} else if (rawSlot < 9) {
return Lang.get("questNoEquip");
}
} else if (type.equals(InventoryType.DISPENSER)) {
if (rawSlot < 9) {
return Lang.get("questNoDispense");
}
} else if (type.equals(InventoryType.ENCHANTING)) {
if (rawSlot == 0) {
return Lang.get("questNoEnchant");
}
} else if (type.equals(InventoryType.ENDER_CHEST)) {
if (rawSlot < 27) {
return Lang.get("questNoStore");
}
} else if (type.equals(InventoryType.FURNACE)) {
if (rawSlot < 3) {
return Lang.get("questNoSmelt");
}
} else if (type.equals(InventoryType.WORKBENCH)) {
if (rawSlot < 10) {
return Lang.get("questNoCraft");
}
}
return null;
}
public static List<Integer> getChangedSlots(Inventory inInv, ItemStack inNew) {
List<Integer> changed = new ArrayList<Integer>();
if (inInv.contains(inNew.getType())) {
int amount = inNew.getAmount();
HashMap<Integer, ? extends ItemStack> items = inInv.all(inNew.getType());
for (int i = 0; i < inInv.getSize(); i++) {
if (!items.containsKey((Integer) i)) {
continue;
}
ItemStack item = items.get((Integer) i);
int slotamount = item.getMaxStackSize() - item.getAmount();
if (slotamount > 1) {
if (amount > slotamount) {
int toAdd = slotamount - amount;
amount = amount - toAdd;
changed.add(i);
} else {
changed.add(i);
amount = 0;
break;
}
}
}
if (amount > 0) {
if (inInv.firstEmpty() != -1) {
changed.add(inInv.firstEmpty());
}
}
} else {
if (inInv.firstEmpty() != -1) {
changed.add(inInv.firstEmpty());
}
}
return changed;
}
public void showGUIDisplay(NPC npc, LinkedList<Quest> quests) {
Player player = getPlayer();
int size = ((quests.size() / 9) + 1) * 9;
@ -3084,11 +2761,6 @@ public class Quester {
}
}
}
if (plugin.getDependencies().getGpsApi() != null) {
if (plugin.getDependencies().getGpsApi().gpsIsActive(this.getPlayer())) {
plugin.getDependencies().getGpsApi().stopGPS(this.getPlayer());
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
@ -3166,4 +2838,91 @@ public class Quester {
}
return playerAmount >= is.getAmount();
}
// I'm not sure why these methods are here. They've been in the class for a long time but aren't used anywhere?
/*public static String checkPlacement(Inventory inv, int rawSlot) {
if (rawSlot < 0) {
return Lang.get("questNoDrop");
}
InventoryType type = inv.getType();
if (type.equals(InventoryType.BREWING)) {
if (rawSlot < 4) {
return Lang.get("questNoBrew");
}
} else if (type.equals(InventoryType.CHEST)) {
if (inv.getContents().length == 27) {
if (rawSlot < 27) {
return Lang.get("questNoStore");
}
} else {
if (rawSlot < 54) {
return Lang.get("questNoStore");
}
}
} else if (type.equals(InventoryType.CRAFTING)) {
if (rawSlot < 5) {
return Lang.get("questNoCraft");
} else if (rawSlot < 9) {
return Lang.get("questNoEquip");
}
} else if (type.equals(InventoryType.DISPENSER)) {
if (rawSlot < 9) {
return Lang.get("questNoDispense");
}
} else if (type.equals(InventoryType.ENCHANTING)) {
if (rawSlot == 0) {
return Lang.get("questNoEnchant");
}
} else if (type.equals(InventoryType.ENDER_CHEST)) {
if (rawSlot < 27) {
return Lang.get("questNoStore");
}
} else if (type.equals(InventoryType.FURNACE)) {
if (rawSlot < 3) {
return Lang.get("questNoSmelt");
}
} else if (type.equals(InventoryType.WORKBENCH)) {
if (rawSlot < 10) {
return Lang.get("questNoCraft");
}
}
return null;
}*/
/*public static List<Integer> getChangedSlots(Inventory inInv, ItemStack inNew) {
List<Integer> changed = new ArrayList<Integer>();
if (inInv.contains(inNew.getType())) {
int amount = inNew.getAmount();
HashMap<Integer, ? extends ItemStack> items = inInv.all(inNew.getType());
for (int i = 0; i < inInv.getSize(); i++) {
if (!items.containsKey((Integer) i)) {
continue;
}
ItemStack item = items.get((Integer) i);
int slotamount = item.getMaxStackSize() - item.getAmount();
if (slotamount > 1) {
if (amount > slotamount) {
int toAdd = slotamount - amount;
amount = amount - toAdd;
changed.add(i);
} else {
changed.add(i);
amount = 0;
break;
}
}
}
if (amount > 0) {
if (inInv.firstEmpty() != -1) {
changed.add(inInv.firstEmpty());
}
}
} else {
if (inInv.firstEmpty() != -1) {
changed.add(inInv.firstEmpty());
}
}
return changed;
}*/
}

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
@ -216,11 +216,6 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
public void onDisable() {
getLogger().info("Saving Quester data.");
for (Player p : getServer().getOnlinePlayers()) {
if (depends.getGpsApi() != null) {
if (depends.getGpsApi().gpsIsActive(p)) {
depends.getGpsApi().stopGPS(p);
}
}
Quester quester = getQuester(p.getUniqueId());
quester.saveData();
}
@ -2107,7 +2102,7 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
if (config.contains("quests." + questKey + ".stages.ordered." + s2 + ".enchantments")) {
if (Quests.checkList(config.getList("quests." + questKey + ".stages.ordered." + s2 + ".enchantments"), String.class)) {
for (String enchant : config.getStringList("quests." + questKey + ".stages.ordered." + s2 + ".enchantments")) {
Enchantment e = Quests.getEnchantment(enchant);
Enchantment e = ItemUtil.getEnchantmentFromProperName(enchant);
if (e != null) {
enchantments.add(e);
} else {
@ -2674,10 +2669,11 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
}
/**
* Add possibilty to use fallbacks for customs maps
* Add possibilty to use fallbacks for customs maps<p>
*
* Avoid null objects in datamap by initialize the entry value with empty string if no fallback present.
*/
static Map<String, Object> populateCustoms(ConfigurationSection sec2, Map<String, Object> datamap) {
private static Map<String, Object> populateCustoms(ConfigurationSection sec2, Map<String, Object> datamap) {
Map<String,Object> data = new HashMap<String,Object>();
if (sec2 != null) {
for (String key : datamap.keySet()) {
@ -2688,10 +2684,11 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
}
/**
* Add possibilty to use fallbacks for customs entries
* Add possibilty to use fallbacks for customs entries<p>
*
* Avoid null objects in datamap by initialize the entry value with empty string if no fallback present.
*/
static Entry<String, Object> populateCustoms(ConfigurationSection sec2, Entry<String, Object> datamap) {
private static Entry<String, Object> populateCustoms(ConfigurationSection sec2, Entry<String, Object> datamap) {
String key = null;;
Object value = null;;
if (sec2 != null) {
@ -2721,9 +2718,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
if (legacyFile.exists()) {
getLogger().log(Level.INFO, "Renaming legacy \"events.yml\" to \"actions.yml\"");
try {
legacyFile.renameTo(actionsFile);
if (legacyFile.exists()) {
getLogger().log(Level.INFO, "Deleting legacy \"events.yml\" ... done!");
if (legacyFile.renameTo(actionsFile)) {
getLogger().log(Level.INFO, "Success! Deleting legacy \"events.yml\" ... done!");
legacyFile.delete();
}
} catch (Exception e) {
@ -3239,130 +3235,6 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
return count - subtract;
}
@SuppressWarnings("deprecation") // since 1.13
public static Enchantment getEnchantment(String enchant) {
String ench = Lang.getKey(enchant.replace(" ", ""));
ench = ench.replace("ENCHANTMENT_", "");
Enchantment e = Enchantment.getByName(ench);
return e != null ? e : getEnchantmentLegacy(ench.replace(" ", ""));
}
public static Enchantment getEnchantmentLegacy(String enchant) {
if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_ARROW_DAMAGE"))) {
return Enchantment.ARROW_DAMAGE;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_ARROW_FIRE"))) {
return Enchantment.ARROW_FIRE;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_ARROW_INFINITE"))) {
return Enchantment.ARROW_INFINITE;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_ARROW_KNOCKBACK"))) {
return Enchantment.ARROW_KNOCKBACK;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_DAMAGE_ALL"))) {
return Enchantment.DAMAGE_ALL;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_DAMAGE_ARTHROPODS"))) {
return Enchantment.DAMAGE_ARTHROPODS;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_DAMAGE_UNDEAD"))) {
return Enchantment.DAMAGE_UNDEAD;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_DIG_SPEED"))) {
return Enchantment.DIG_SPEED;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_DURABILITY"))) {
return Enchantment.DURABILITY;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_FIRE_ASPECT"))) {
return Enchantment.FIRE_ASPECT;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_KNOCKBACK"))) {
return Enchantment.KNOCKBACK;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_LOOT_BONUS_BLOCKS"))) {
return Enchantment.LOOT_BONUS_BLOCKS;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_LOOT_BONUS_MOBS"))) {
return Enchantment.LOOT_BONUS_MOBS;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_LUCK"))) {
return Enchantment.LOOT_BONUS_MOBS;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_LURE"))) {
return Enchantment.LOOT_BONUS_MOBS;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_OXYGEN"))) {
return Enchantment.OXYGEN;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_PROTECTION_ENVIRONMENTAL"))) {
return Enchantment.PROTECTION_ENVIRONMENTAL;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_PROTECTION_EXPLOSIONS"))) {
return Enchantment.PROTECTION_EXPLOSIONS;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_PROTECTION_FALL"))) {
return Enchantment.PROTECTION_FALL;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_PROTECTION_FIRE"))) {
return Enchantment.PROTECTION_FIRE;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_PROTECTION_PROJECTILE"))) {
return Enchantment.PROTECTION_PROJECTILE;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_SILK_TOUCH"))) {
return Enchantment.SILK_TOUCH;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_THORNS"))) {
return Enchantment.THORNS;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_WATER_WORKER"))) {
return Enchantment.WATER_WORKER;
} else {
return null;
}
}
public static Enchantment getEnchantmentPretty(String enchant) {
while (Quester.spaceToCapital(enchant) != null) {
enchant = Quester.spaceToCapital(enchant);
}
return getEnchantment(enchant);
}
public static DyeColor getDyeColor(String s) {
String col = Lang.getKey(MiscUtil.getCapitalized(s));
col = col.replace("COLOR_", "");
DyeColor color = null;
try {
color = DyeColor.valueOf(col);
} catch (IllegalArgumentException e) {
// Do nothing
}
return color != null ? color : getDyeColorLegacy(s);
}
public static DyeColor getDyeColorLegacy(String s) {
if (s.equalsIgnoreCase("Black") || s.equalsIgnoreCase(Lang.get("COLOR_BLACK"))) {
return DyeColor.BLACK;
} else if (s.equalsIgnoreCase("Blue") || s.equalsIgnoreCase(Lang.get("COLOR_BLUE"))) {
return DyeColor.BLUE;
} else if (s.equalsIgnoreCase("Brown") || s.equalsIgnoreCase(Lang.get("COLOR_BROWN"))) {
return DyeColor.BROWN;
} else if (s.equalsIgnoreCase("Cyan") || s.equalsIgnoreCase(Lang.get("COLOR_CYAN"))) {
return DyeColor.CYAN;
} else if (s.equalsIgnoreCase("Gray") || s.equalsIgnoreCase(Lang.get("COLOR_GRAY"))) {
return DyeColor.GRAY;
} else if (s.equalsIgnoreCase("Green") || s.equalsIgnoreCase(Lang.get("COLOR_GREEN"))) {
return DyeColor.GREEN;
} else if (s.equalsIgnoreCase("LightBlue") || s.equalsIgnoreCase(Lang.get("COLOR_LIGHT_BLUE"))) {
return DyeColor.LIGHT_BLUE;
} else if (s.equalsIgnoreCase("Lime") || s.equalsIgnoreCase(Lang.get("COLOR_LIME"))) {
return DyeColor.LIME;
} else if (s.equalsIgnoreCase("Magenta") || s.equalsIgnoreCase(Lang.get("COLOR_MAGENTA"))) {
return DyeColor.MAGENTA;
} else if (s.equalsIgnoreCase("Orange") || s.equalsIgnoreCase(Lang.get("COLOR_ORAGE"))) {
return DyeColor.ORANGE;
} else if (s.equalsIgnoreCase("Pink") || s.equalsIgnoreCase(Lang.get("COLOR_PINK"))) {
return DyeColor.PINK;
} else if (s.equalsIgnoreCase("Purple") || s.equalsIgnoreCase(Lang.get("COLOR_PURPLE"))) {
return DyeColor.PURPLE;
} else if (s.equalsIgnoreCase("Red") || s.equalsIgnoreCase(Lang.get("COLOR_RED"))) {
return DyeColor.RED;
// 1.13 changed DyeColor.SILVER -> DyeColor.LIGHT_GRAY
} else if (s.equalsIgnoreCase("Silver") || s.equalsIgnoreCase("LightGray") || s.equalsIgnoreCase(Lang.get("COLOR_SILVER"))) {
return DyeColor.getByColor(Color.SILVER);
} else if (s.equalsIgnoreCase("White") || s.equalsIgnoreCase(Lang.get("COLOR_WHITE"))) {
return DyeColor.WHITE;
} else if (s.equalsIgnoreCase("Yellow") || s.equalsIgnoreCase(Lang.get("COLOR_YELLOW"))) {
return DyeColor.YELLOW;
} else {
return null;
}
}
public static String getDyeString(DyeColor dc) {
return Lang.get("COLOR_" + dc.name());
}
/**
* Checks whether an NPC has a quest that the player may accept
* @param npc The giver NPC to check

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
@ -160,7 +160,7 @@ public class ActionFactory implements ConversationAbandonedListener {
if (input.equalsIgnoreCase("1")) {
if (player.hasPermission("quests.editor.actions.create") || player.hasPermission("quests.editor.events.create")) {
context.setSessionData(CK.E_OLD_EVENT, "");
return new EventNamePrompt();
return new ActionNamePrompt();
} else {
player.sendMessage(ChatColor.RED + Lang.get("noPermission"));
return new MenuPrompt();
@ -416,7 +416,7 @@ public class ActionFactory implements ConversationAbandonedListener {
@Override
public Prompt acceptInput(ConversationContext context, String input) {
if (input.equalsIgnoreCase("1") || input.equalsIgnoreCase(Lang.get("yesWord"))) {
deleteEvent(context);
deleteAction(context);
return new MenuPrompt();
} else if (input.equalsIgnoreCase("2") || input.equalsIgnoreCase(Lang.get("noWord"))) {
return new MenuPrompt();
@ -785,7 +785,7 @@ public class ActionFactory implements ConversationAbandonedListener {
@Override
public Prompt acceptInput(ConversationContext context, String input) {
if (input.equalsIgnoreCase("1") || input.equalsIgnoreCase(Lang.get("yesWord"))) {
saveEvent(context);
saveAction(context);
return new MenuPrompt();
} else if (input.equalsIgnoreCase("2") || input.equalsIgnoreCase(Lang.get("noWord"))) {
return new CreateMenuPrompt();
@ -858,7 +858,7 @@ public class ActionFactory implements ConversationAbandonedListener {
}
//
private void deleteEvent(ConversationContext context) {
private void deleteAction(ConversationContext context) {
YamlConfiguration data = new YamlConfiguration();
try {
actionsFile = new File(plugin.getDataFolder(), "actions.yml");
@ -891,7 +891,7 @@ public class ActionFactory implements ConversationAbandonedListener {
clearData(context);
}
private void saveEvent(ConversationContext context) {
private void saveAction(ConversationContext context) {
YamlConfiguration data = new YamlConfiguration();
try {
actionsFile = new File(plugin.getDataFolder(), "actions.yml");
@ -908,7 +908,7 @@ public class ActionFactory implements ConversationAbandonedListener {
if (((String) context.getSessionData(CK.E_OLD_EVENT)).isEmpty() == false) {
data.set("events." + (String) context.getSessionData(CK.E_OLD_EVENT), null);
LinkedList<Action> temp = plugin.getEvents();
temp.remove(plugin.getEvent((String) context.getSessionData(CK.E_OLD_EVENT)));
temp.remove(plugin.getAction((String) context.getSessionData(CK.E_OLD_EVENT)));
plugin.setEvents(temp);
}
ConfigurationSection section = data.createSection("events." + (String) context.getSessionData(CK.E_NAME));
@ -1049,7 +1049,7 @@ public class ActionFactory implements ConversationAbandonedListener {
clearData(context);
}
private class EventNamePrompt extends StringPrompt {
private class ActionNamePrompt extends StringPrompt {
@Override
public String getPromptText(ConversationContext context) {
@ -1064,16 +1064,16 @@ public class ActionFactory implements ConversationAbandonedListener {
for (Action e : plugin.getEvents()) {
if (e.getName().equalsIgnoreCase(input)) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("eventEditorExists"));
return new EventNamePrompt();
return new ActionNamePrompt();
}
}
if (names.contains(input)) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("eventEditorSomeone"));
return new EventNamePrompt();
return new ActionNamePrompt();
}
if (StringUtils.isAlphanumeric(input) == false) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("eventEditorAlpha"));
return new EventNamePrompt();
return new ActionNamePrompt();
}
context.setSessionData(CK.E_NAME, input);
names.add(input);

View File

@ -0,0 +1,12 @@
package me.blackvein.quests.events;
import org.bukkit.event.Event;
public abstract class QuestsEvent extends Event {
public QuestsEvent() {
}
public QuestsEvent(boolean async) {
super(async);
}
}

View File

@ -0,0 +1,41 @@
/*******************************************************************************************************
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
* NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************************************/
package me.blackvein.quests.events.quest;
import me.blackvein.quests.Quest;
import me.blackvein.quests.events.QuestsEvent;
/**
* Represents a quest-related event
*/
public abstract class QuestEvent extends QuestsEvent {
protected Quest quest;
public QuestEvent(final Quest quest) {
this.quest = quest;
}
public QuestEvent(final Quest quest, boolean async) {
super(async);
this.quest = quest;
}
/**
* Returns the quest involved in this event
*
* @return Quest which is involved in this event
*/
public final Quest getQuest() {
return quest;
}
}

View File

@ -0,0 +1,61 @@
/*******************************************************************************************************
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
* NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************************************/
package me.blackvein.quests.events.quest;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester;
/**
* Called when a quest is quit by a quester
*/
public class QuestQuitEvent extends QuestEvent implements Cancellable {
private static final HandlerList handlers = new HandlerList();
private Quester quester;
private boolean cancel = false;
public QuestQuitEvent(Quest quest, Quester who) {
super(quest);
this.quester = who;
}
/**
* Returns the quester involved in this event
*
* @return Quester who is involved in this event
*/
public Quester getQuester() {
return quester;
}
@Override
public boolean isCancelled() {
return cancel;
}
@Override
public void setCancelled(boolean cancel) {
this.cancel = cancel;
}
@Override
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() {
return handlers;
}
}

View File

@ -0,0 +1,57 @@
/*******************************************************************************************************
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
* NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************************************/
package me.blackvein.quests.events.quest;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester;
/**
* Called when a quest is taken by a quester
*/
public class QuestTakeEvent extends QuestEvent implements Cancellable {
private static final HandlerList handlers = new HandlerList();
private Quester quester;
private boolean cancel = false;
public QuestTakeEvent(Quest quest, Quester who) {
super(quest);
this.quester = who;
}
/**
* Returns the quester involved in this event
*
* @return Quester who is involved in this event
*/
public Quester getQuester() {
return quester;
}
@Override
public boolean isCancelled() {
return cancel;
}
@Override
public void setCancelled(boolean cancel) {
this.cancel = cancel;
}
@Override
public HandlerList getHandlers() {
return handlers;
}
}

View File

@ -0,0 +1,42 @@
/*******************************************************************************************************
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
* NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************************************/
package me.blackvein.quests.events.quester;
import me.blackvein.quests.Quester;
import me.blackvein.quests.events.QuestsEvent;
/**
* Represents a quester-related event
*/
public abstract class QuesterEvent extends QuestsEvent {
protected Quester quester;
public QuesterEvent(final Quester quester) {
this.quester = quester;
}
public QuesterEvent(final Quester quester, boolean async) {
super(async);
this.quester = quester;
}
/**
* Returns the quester involved in this event
*
* @return Quester which is involved in this event
*/
public final Quester getQuester() {
return quester;
}
}

View File

@ -0,0 +1,61 @@
/*******************************************************************************************************
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
* NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************************************/
package me.blackvein.quests.events.quester;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester;
import me.blackvein.quests.Stage;
/**
* Called after a quester changes stage
*/
public class QuesterPostChangeStageEvent extends QuesterEvent {
private static final HandlerList handlers = new HandlerList();
private Quest quest;
private Stage current;
private Stage next;
public QuesterPostChangeStageEvent(Quester quester, Quest quest, Stage current, Stage next) {
super(quester);
this.quest = quest;
this.current = current;
this.next = next;
}
/**
* Returns the quest involved in this event
*
* @return Quest who is involved in this event
*/
public Quest getQuest() {
return quest;
}
public Stage getCurrentStage() {
return current;
}
public Stage getNextStage() {
return next;
}
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() {
return handlers;
}
}

View File

@ -0,0 +1,48 @@
/*******************************************************************************************************
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
* NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************************************/
package me.blackvein.quests.events.quester;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester;
/**
* Called after a quester completes a quest
*/
public class QuesterPostCompleteQuestEvent extends QuesterEvent {
private static final HandlerList handlers = new HandlerList();
private Quest quest;
public QuesterPostCompleteQuestEvent(Quester quester, Quest quest) {
super(quester);
this.quest = quest;
}
/**
* Returns the quest involved in this event
*
* @return Quest who is involved in this event
*/
public Quest getQuest() {
return quest;
}
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() {
return handlers;
}
}

View File

@ -0,0 +1,48 @@
/*******************************************************************************************************
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
* NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************************************/
package me.blackvein.quests.events.quester;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester;
/**
* Called after a quester fails a quest
*/
public class QuesterPostFailQuestEvent extends QuesterEvent {
private static final HandlerList handlers = new HandlerList();
private Quest quest;
public QuesterPostFailQuestEvent(Quester quester, Quest quest) {
super(quester);
this.quest = quest;
}
/**
* Returns the quest involved in this event
*
* @return Quest who is involved in this event
*/
public Quest getQuest() {
return quest;
}
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() {
return handlers;
}
}

View File

@ -0,0 +1,48 @@
/*******************************************************************************************************
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
* NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************************************/
package me.blackvein.quests.events.quester;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester;
/**
* Called after a quester starts a quest
*/
public class QuesterPostStartQuestEvent extends QuesterEvent {
private static final HandlerList handlers = new HandlerList();
private Quest quest;
public QuesterPostStartQuestEvent(Quester quester, Quest quest) {
super(quester);
this.quest = quest;
}
/**
* Returns the quest involved in this event
*
* @return Quest who is involved in this event
*/
public Quest getQuest() {
return quest;
}
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() {
return handlers;
}
}

View File

@ -0,0 +1,73 @@
/*******************************************************************************************************
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
* NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************************************/
package me.blackvein.quests.events.quester;
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;
/**
* Called before a quester changes stage
*/
public class QuesterPreChangeStageEvent extends QuesterEvent implements Cancellable {
private static final HandlerList handlers = new HandlerList();
private Quest quest;
private Stage current;
private Stage next;
private boolean cancel = false;;
public QuesterPreChangeStageEvent(Quester quester, Quest quest, Stage current, Stage next) {
super(quester);
this.quest = quest;
this.current = current;
this.next = next;
}
/**
* Returns the quest involved in this event
*
* @return Quest who is involved in this event
*/
public Quest getQuest() {
return quest;
}
public Stage getCurrentStage() {
return current;
}
public Stage getNextStage() {
return next;
}
@Override
public boolean isCancelled() {
return cancel;
}
@Override
public void setCancelled(boolean cancel) {
this.cancel = cancel;
}
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() {
return handlers;
}
}

View File

@ -0,0 +1,60 @@
/*******************************************************************************************************
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
* NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************************************/
package me.blackvein.quests.events.quester;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester;
/**
* Called before a quester completes a quest
*/
public class QuesterPreCompleteQuestEvent extends QuesterEvent implements Cancellable {
private static final HandlerList handlers = new HandlerList();
private Quest quest;
private boolean cancel = false;
public QuesterPreCompleteQuestEvent(Quester quester, Quest quest) {
super(quester);
this.quest = quest;
}
/**
* Returns the quest involved in this event
*
* @return Quest who is involved in this event
*/
public Quest getQuest() {
return quest;
}
@Override
public boolean isCancelled() {
return cancel;
}
@Override
public void setCancelled(boolean cancel) {
this.cancel = cancel;
}
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() {
return handlers;
}
}

View File

@ -0,0 +1,60 @@
/*******************************************************************************************************
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
* NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************************************/
package me.blackvein.quests.events.quester;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester;
/**
* Called before a quester fails a quest
*/
public class QuesterPreFailQuestEvent extends QuesterEvent implements Cancellable {
private static final HandlerList handlers = new HandlerList();
private Quest quest;
private boolean cancel = false;
public QuesterPreFailQuestEvent(Quester quester, Quest quest) {
super(quester);
this.quest = quest;
}
/**
* Returns the quest involved in this event
*
* @return Quest who is involved in this event
*/
public Quest getQuest() {
return quest;
}
@Override
public boolean isCancelled() {
return cancel;
}
@Override
public void setCancelled(boolean cancel) {
this.cancel = cancel;
}
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() {
return handlers;
}
}

View File

@ -0,0 +1,60 @@
/*******************************************************************************************************
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
* NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************************************/
package me.blackvein.quests.events.quester;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester;
/**
* Called before a quester starts a quest
*/
public class QuesterPreStartQuestEvent extends QuesterEvent implements Cancellable {
private static final HandlerList handlers = new HandlerList();
private Quest quest;
private boolean cancel = false;
public QuesterPreStartQuestEvent(Quester quester, Quest quest) {
super(quester);
this.quest = quest;
}
/**
* Returns the quest involved in this event
*
* @return Quest who is involved in this event
*/
public Quest getQuest() {
return quest;
}
@Override
public boolean isCancelled() {
return cancel;
}
@Override
public void setCancelled(boolean cancel) {
this.cancel = cancel;
}
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() {
return handlers;
}
}

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
@ -30,6 +30,8 @@ import me.blackvein.quests.Quester;
import me.blackvein.quests.Quests;
import me.blackvein.quests.Requirements;
import me.blackvein.quests.Stage;
import me.blackvein.quests.events.quest.QuestQuitEvent;
import me.blackvein.quests.events.quest.QuestTakeEvent;
import me.blackvein.quests.exceptions.InvalidStageException;
import me.blackvein.quests.util.ItemUtil;
import me.blackvein.quests.util.Lang;
@ -613,39 +615,40 @@ public class CmdExecutor implements CommandExecutor {
}
}
private boolean questsQuit(final Player player, String[] args) {
private void questsQuit(final Player player, String[] args) {
if (plugin.getSettings().canAllowQuitting() == true) {
if (((Player) player).hasPermission("quests.quit")) {
if (args.length == 1) {
player.sendMessage(ChatColor.RED + Lang.get(player, "COMMAND_QUIT_HELP"));
return true;
return;
}
Quester quester = plugin.getQuester(player.getUniqueId());
if (quester.getCurrentQuests().isEmpty() == false) {
Quest quest = plugin.getQuest(MiscUtil.concatArgArray(args, 1, args.length - 1, ' '));
if (quest == null) {
Quest q = plugin.getQuest(MiscUtil.concatArgArray(args, 1, args.length - 1, ' '));
if (q != null) {
QuestQuitEvent event = new QuestQuitEvent(q, quester);
plugin.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) {
return;
}
quester.hardQuit(q);
String msg = Lang.get("questQuit");
msg = msg.replace("<quest>", ChatColor.DARK_PURPLE + q.getName() + ChatColor.YELLOW);
player.sendMessage(ChatColor.YELLOW + msg);
quester.saveData();
quester.loadData();
quester.updateJournal();
} else {
player.sendMessage(ChatColor.RED + Lang.get(player, "questNotFound"));
return true;
}
quester.hardQuit(quest);
String msg = Lang.get("questQuit");
msg = msg.replace("<quest>", ChatColor.DARK_PURPLE + quest.getName() + ChatColor.YELLOW);
player.sendMessage(ChatColor.YELLOW + msg);
quester.saveData();
quester.loadData();
quester.updateJournal();
return true;
} else {
player.sendMessage(ChatColor.YELLOW + Lang.get(player, "noActiveQuest"));
return true;
}
} else {
player.sendMessage(ChatColor.RED + Lang.get(player, "NoPermission"));
return true;
}
} else {
player.sendMessage(ChatColor.YELLOW + Lang.get(player, "questQuitDisabled"));
return true;
}
}
@ -684,6 +687,11 @@ public class CmdExecutor implements CommandExecutor {
if (questToFind != null) {
final Quest q = questToFind;
final Quester quester = plugin.getQuester(player.getUniqueId());
QuestTakeEvent event = new QuestTakeEvent(q, quester);
plugin.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) {
return;
}
if (quester.getCurrentQuests().size() >= plugin.getSettings().getMaxQuests() && plugin.getSettings().getMaxQuests() > 0) {
String msg = Lang.get(player, "questMaxAllowed");
msg = msg.replace("<number>", String.valueOf(plugin.getSettings().getMaxQuests()));

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
@ -140,7 +140,7 @@ public class NpcListener implements Listener {
// TODO translate enchantment names
for (Entry<Enchantment, Integer> e : esmeta.getStoredEnchants().entrySet()) {
player.sendMessage(ChatColor.GRAY + "\u2515 " + ChatColor.DARK_GREEN
+ Quester.prettyEnchantmentString(e.getKey()) + " " + RomanNumeral.getNumeral(e.getValue()) + "\n");
+ ItemUtil.getPrettyEnchantmentName(e.getKey()) + " " + RomanNumeral.getNumeral(e.getValue()) + "\n");
}
}
}

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
@ -9,6 +9,7 @@
* 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.particle;
import java.util.Map;

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
@ -9,6 +9,7 @@
* 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.particle;
import java.util.HashMap;

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
@ -9,6 +9,7 @@
* 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.particle;
import java.util.HashMap;

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
@ -16,9 +16,9 @@ import java.util.LinkedList;
import java.util.List;
import me.blackvein.quests.QuestFactory;
import me.blackvein.quests.Quester;
import me.blackvein.quests.Quests;
import me.blackvein.quests.util.CK;
import me.blackvein.quests.util.ItemUtil;
import me.blackvein.quests.util.Lang;
import org.bukkit.ChatColor;
@ -54,7 +54,7 @@ public class BlocksPrompt extends FixedSetPrompt {
LinkedList<String> names = (LinkedList<String>) context.getSessionData(pref + CK.S_BREAK_NAMES);
LinkedList<Integer> amnts = (LinkedList<Integer>) context.getSessionData(pref + CK.S_BREAK_AMOUNTS);
for (int i = 0; i < names.size(); i++) {
text += ChatColor.GRAY + " - " + ChatColor.BLUE + Quester.prettyItemString(names.get(i)) + ChatColor.GRAY + " x " + ChatColor.DARK_AQUA + amnts.get(i) + "\n";
text += ChatColor.GRAY + " - " + ChatColor.BLUE + ItemUtil.getPrettyItemName(names.get(i)) + ChatColor.GRAY + " x " + ChatColor.DARK_AQUA + amnts.get(i) + "\n";
}
}
if (context.getSessionData(pref + CK.S_DAMAGE_NAMES) == null) {
@ -64,7 +64,7 @@ public class BlocksPrompt extends FixedSetPrompt {
LinkedList<String> names = (LinkedList<String>) context.getSessionData(pref + CK.S_DAMAGE_NAMES);
LinkedList<Integer> amnts = (LinkedList<Integer>) context.getSessionData(pref + CK.S_DAMAGE_AMOUNTS);
for (int i = 0; i < names.size(); i++) {
text += ChatColor.GRAY + " - " + ChatColor.BLUE + Quester.prettyItemString(names.get(i)) + ChatColor.GRAY + " x " + ChatColor.DARK_AQUA + amnts.get(i) + "\n";
text += ChatColor.GRAY + " - " + ChatColor.BLUE + ItemUtil.getPrettyItemName(names.get(i)) + ChatColor.GRAY + " x " + ChatColor.DARK_AQUA + amnts.get(i) + "\n";
}
}
if (context.getSessionData(pref + CK.S_PLACE_NAMES) == null) {
@ -74,7 +74,7 @@ public class BlocksPrompt extends FixedSetPrompt {
LinkedList<String> names = (LinkedList<String>) context.getSessionData(pref + CK.S_PLACE_NAMES);
LinkedList<Integer> amnts = (LinkedList<Integer>) context.getSessionData(pref + CK.S_PLACE_AMOUNTS);
for (int i = 0; i < names.size(); i++) {
text += ChatColor.GRAY + " - " + ChatColor.BLUE + Quester.prettyItemString(names.get(i)) + ChatColor.GRAY + " x " + ChatColor.DARK_AQUA + amnts.get(i) + "\n";
text += ChatColor.GRAY + " - " + ChatColor.BLUE + ItemUtil.getPrettyItemName(names.get(i)) + ChatColor.GRAY + " x " + ChatColor.DARK_AQUA + amnts.get(i) + "\n";
}
}
if (context.getSessionData(pref + CK.S_USE_NAMES) == null) {
@ -84,7 +84,7 @@ public class BlocksPrompt extends FixedSetPrompt {
LinkedList<String> names = (LinkedList<String>) context.getSessionData(pref + CK.S_USE_NAMES);
LinkedList<Integer> amnts = (LinkedList<Integer>) context.getSessionData(pref + CK.S_USE_AMOUNTS);
for (int i = 0; i < names.size(); i++) {
text += ChatColor.GRAY + " - " + ChatColor.BLUE + Quester.prettyItemString(names.get(i)) + ChatColor.GRAY + " x " + ChatColor.DARK_AQUA + amnts.get(i) + "\n";
text += ChatColor.GRAY + " - " + ChatColor.BLUE + ItemUtil.getPrettyItemName(names.get(i)) + ChatColor.GRAY + " x " + ChatColor.DARK_AQUA + amnts.get(i) + "\n";
}
}
if (context.getSessionData(pref + CK.S_CUT_NAMES) == null) {
@ -94,7 +94,7 @@ public class BlocksPrompt extends FixedSetPrompt {
LinkedList<String> names = (LinkedList<String>) context.getSessionData(pref + CK.S_CUT_NAMES);
LinkedList<Integer> amnts = (LinkedList<Integer>) context.getSessionData(pref + CK.S_CUT_AMOUNTS);
for (int i = 0; i < names.size(); i++) {
text += ChatColor.GRAY + " - " + ChatColor.BLUE + Quester.prettyItemString(names.get(i)) + ChatColor.GRAY + " x " + ChatColor.DARK_AQUA + amnts.get(i) + "\n";
text += ChatColor.GRAY + " - " + ChatColor.BLUE + ItemUtil.getPrettyItemName(names.get(i)) + ChatColor.GRAY + " x " + ChatColor.DARK_AQUA + amnts.get(i) + "\n";
}
}
text += ChatColor.GREEN + "" + ChatColor.BOLD + "6 " + ChatColor.RESET + ChatColor.DARK_PURPLE + "- " + Lang.get("done") + "\n";
@ -140,7 +140,7 @@ public class BlocksPrompt extends FixedSetPrompt {
} else {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("stageEditorSetBlockNames") + "\n";
for (String s : getBlockNames(context)) {
text += ChatColor.GRAY + " - " + ChatColor.AQUA + Quester.prettyItemString(s) + "\n";
text += ChatColor.GRAY + " - " + ChatColor.AQUA + ItemUtil.getPrettyItemName(s) + "\n";
}
if (context.getSessionData(pref + CK.S_BREAK_AMOUNTS) == null) {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("stageEditorSetBlockAmounts") + " (" + Lang.get("noneSet") + ")\n";
@ -357,7 +357,7 @@ public class BlocksPrompt extends FixedSetPrompt {
} else {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("stageEditorSetBlockNames") + "\n";
for (String s : getBlockNames(context)) {
text += ChatColor.GRAY + " - " + ChatColor.AQUA + Quester.prettyItemString(s) + "\n";
text += ChatColor.GRAY + " - " + ChatColor.AQUA + ItemUtil.getPrettyItemName(s) + "\n";
}
if (context.getSessionData(pref + CK.S_DAMAGE_AMOUNTS) == null) {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("stageEditorSetDamageAmounts") + " (" + Lang.get("noneSet") + ")\n";
@ -574,7 +574,7 @@ public class BlocksPrompt extends FixedSetPrompt {
} else {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("stageEditorSetBlockNames") + "\n";
for (String s : getBlockNames(context)) {
text += ChatColor.GRAY + " - " + ChatColor.AQUA + Quester.prettyItemString(s) + "\n";
text += ChatColor.GRAY + " - " + ChatColor.AQUA + ItemUtil.getPrettyItemName(s) + "\n";
}
if (context.getSessionData(pref + CK.S_PLACE_AMOUNTS) == null) {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("stageEditorSetPlaceAmounts") + " (" + Lang.get("noneSet") + ")\n";
@ -791,7 +791,7 @@ public class BlocksPrompt extends FixedSetPrompt {
} else {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("stageEditorSetBlockNames") + "\n";
for (String s : getBlockNames(context)) {
text += ChatColor.GRAY + " - " + ChatColor.AQUA + Quester.prettyItemString(s) + "\n";
text += ChatColor.GRAY + " - " + ChatColor.AQUA + ItemUtil.getPrettyItemName(s) + "\n";
}
if (context.getSessionData(pref + CK.S_USE_AMOUNTS) == null) {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("stageEditorSetUseAmounts") + " (" + Lang.get("noneSet") + ")\n";
@ -1008,7 +1008,7 @@ public class BlocksPrompt extends FixedSetPrompt {
} else {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("stageEditorSetBlockNames") + "\n";
for (String s : getBlockNames(context)) {
text += ChatColor.GRAY + " - " + ChatColor.AQUA + Quester.prettyItemString(s) + "\n";
text += ChatColor.GRAY + " - " + ChatColor.AQUA + ItemUtil.getPrettyItemName(s) + "\n";
}
if (context.getSessionData(pref + CK.S_CUT_AMOUNTS) == null) {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("stageEditorSetCutAmounts") + " (" + Lang.get("noneSet") + ")\n";

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN

View File

@ -1,3 +1,15 @@
/*******************************************************************************************************
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
* NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************************************/
package me.blackvein.quests.prompts;
import java.text.DecimalFormat;

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
@ -32,7 +32,6 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import me.blackvein.quests.Quester;
import me.blackvein.quests.Quests;
import me.blackvein.quests.util.ItemUtil;
import me.blackvein.quests.util.Lang;
@ -376,7 +375,7 @@ public class ItemStackPrompt extends FixedSetPrompt {
public String getPromptText(ConversationContext cc) {
String text = ChatColor.LIGHT_PURPLE + Lang.get("enchantmentsTitle") + "\n";
for (Enchantment e : Enchantment.values()) {
text += ChatColor.GREEN + Quester.prettyEnchantmentString(e) + ", ";
text += ChatColor.GREEN + ItemUtil.getPrettyEnchantmentName(e) + ", ";
}
text = text.substring(0, text.length() - 2);
return text + "\n" + ChatColor.YELLOW + Lang.get("itemCreateEnterEnch");
@ -386,10 +385,10 @@ public class ItemStackPrompt extends FixedSetPrompt {
public Prompt acceptInput(ConversationContext cc, String input) {
String s = input.replace(":", "");
if (s.equalsIgnoreCase(Lang.get("cmdClear")) == false && s.equalsIgnoreCase(Lang.get("cmdCancel")) == false) {
Enchantment e = Quests.getEnchantmentPretty(MiscUtil.getCapitalized(s));
Enchantment e = ItemUtil.getEnchantmentFromPrettyName(MiscUtil.getCapitalized(s));
if (e != null) {
cc.setSessionData("tempEnchant", e);
return new LevelPrompt(Quester.prettyEnchantmentString(e));
return new LevelPrompt(ItemUtil.getPrettyEnchantmentName(e));
} else {
cc.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("itemCreateInvalidEnch"));
return new EnchantmentPrompt();
@ -490,14 +489,14 @@ public class ItemStackPrompt extends FixedSetPrompt {
String item;
if (cc.getSessionData("tempDisplay") == null) {
String name = (String) cc.getSessionData("tempName");
item = ChatColor.AQUA + Quester.prettyItemString(name);
item = ChatColor.AQUA + ItemUtil.getPrettyItemName(name);
if (cc.getSessionData("tempData") != null) {
item += ":" + ChatColor.BLUE + (Short) cc.getSessionData("tempData");
}
} else {
item = ChatColor.LIGHT_PURPLE + "" + ChatColor.ITALIC + (String) cc.getSessionData("tempDisplay") + ChatColor.RESET + "" + ChatColor.GRAY + " (";
String name = (String) cc.getSessionData("tempName");
item += ChatColor.AQUA + Quester.prettyItemString(name);
item += ChatColor.AQUA + ItemUtil.getPrettyItemName(name);
if (cc.getSessionData("tempData") != null) {
item += ":" + ChatColor.BLUE + (Short) cc.getSessionData("tempData");
}
@ -513,7 +512,7 @@ public class ItemStackPrompt extends FixedSetPrompt {
@SuppressWarnings("unchecked")
Map<Enchantment, Integer> enchantments = (Map<Enchantment, Integer>) cc.getSessionData("tempEnchantments");
for (Entry<Enchantment, Integer> e : enchantments.entrySet()) {
item += ChatColor.GRAY + " - " + ChatColor.RED + Quester.prettyEnchantmentString(e.getKey()) + " " + RomanNumeral.getNumeral(e.getValue()) + "\n";
item += ChatColor.GRAY + " - " + ChatColor.RED + ItemUtil.getPrettyEnchantmentName(e.getKey()) + " " + RomanNumeral.getNumeral(e.getValue()) + "\n";
}
}
if (cc.getSessionData("tempLore") != null) {

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
@ -16,7 +16,6 @@ import java.util.LinkedList;
import java.util.List;
import me.blackvein.quests.QuestFactory;
import me.blackvein.quests.Quester;
import me.blackvein.quests.Quests;
import me.blackvein.quests.util.CK;
import me.blackvein.quests.util.ItemUtil;
@ -90,7 +89,8 @@ public class ItemsPrompt extends FixedSetPrompt {
LinkedList<String> names = (LinkedList<String>) context.getSessionData(pref + CK.S_ENCHANT_NAMES);
LinkedList<Integer> amnts = (LinkedList<Integer>) context.getSessionData(pref + CK.S_ENCHANT_AMOUNTS);
for (int i = 0; i < enchants.size(); i++) {
text += ChatColor.GRAY + " - " + ChatColor.BLUE + Quester.prettyItemString(names.get(i)) + ChatColor.GRAY + " " + Lang.get("with") + " " + ChatColor.AQUA + Quester.prettyEnchantmentString(Quests.getEnchantment(enchants.get(i))) + ChatColor.GRAY + " x " + ChatColor.DARK_AQUA + amnts.get(i) + "\n";
text += ChatColor.GRAY + " - " + ChatColor.BLUE + ItemUtil.getPrettyItemName(names.get(i)) + ChatColor.GRAY + " " + Lang.get("with") + " " + ChatColor.AQUA
+ ItemUtil.getPrettyEnchantmentName(ItemUtil.getEnchantmentFromProperName(enchants.get(i))) + ChatColor.GRAY + " x " + ChatColor.DARK_AQUA + amnts.get(i) + "\n";
}
}
text += ChatColor.GREEN + "" + ChatColor.BOLD + "4 " + ChatColor.RESET + ChatColor.DARK_PURPLE + "- " + Lang.get("done") + "\n";
@ -255,7 +255,7 @@ public class ItemsPrompt extends FixedSetPrompt {
} else {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("stageEditorSetItemNames") + "\n";
for (String s : getEnchantItems(context)) {
text += ChatColor.GRAY + " - " + ChatColor.AQUA + Quester.prettyItemString(s) + "\n";
text += ChatColor.GRAY + " - " + ChatColor.AQUA + ItemUtil.getPrettyItemName(s) + "\n";
}
}
if (context.getSessionData(pref + CK.S_ENCHANT_AMOUNTS) == null) {
@ -349,9 +349,9 @@ public class ItemsPrompt extends FixedSetPrompt {
String text = ChatColor.LIGHT_PURPLE + "- " + ChatColor.DARK_PURPLE + Lang.get("stageEditorEnchantments") + ChatColor.LIGHT_PURPLE + " -\n";
for (int i = 0; i < Enchantment.values().length; i++) {
if (i == Enchantment.values().length - 1) {
text += ChatColor.GREEN + Quester.prettyEnchantmentString(Enchantment.values()[i]) + " ";
text += ChatColor.GREEN + ItemUtil.getPrettyEnchantmentName(Enchantment.values()[i]) + " ";
} else {
text += ChatColor.GREEN + Quester.prettyEnchantmentString(Enchantment.values()[i]) + ", ";
text += ChatColor.GREEN + ItemUtil.getPrettyEnchantmentName(Enchantment.values()[i]) + ", ";
}
}
text = text.substring(0, text.length() - 1);
@ -368,9 +368,9 @@ public class ItemsPrompt extends FixedSetPrompt {
s = s.trim();
valid = false;
for (Enchantment e : Enchantment.values()) {
if (Quester.prettyEnchantmentString(e).equalsIgnoreCase(s)) {
if (ItemUtil.getPrettyEnchantmentName(e).equalsIgnoreCase(s)) {
if (enchs.contains(s) == false) {
enchs.add(Quester.prettyEnchantmentString(e));
enchs.add(ItemUtil.getPrettyEnchantmentName(e));
valid = true;
break;
} else {

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
@ -31,7 +31,6 @@ import org.bukkit.entity.Player;
import org.bukkit.entity.Tameable;
import me.blackvein.quests.QuestFactory;
import me.blackvein.quests.Quester;
import me.blackvein.quests.Quests;
import me.blackvein.quests.util.CK;
import me.blackvein.quests.util.Lang;
@ -64,7 +63,7 @@ public class MobsPrompt extends FixedSetPrompt {
LinkedList<Integer> amnts = (LinkedList<Integer>) context.getSessionData(pref + CK.S_MOB_AMOUNTS);
if (context.getSessionData(pref + CK.S_MOB_KILL_LOCATIONS) == null) {
for (int i = 0; i < mobs.size(); i++) {
text += ChatColor.GRAY + " - " + ChatColor.AQUA + Quester.prettyMobString(Quests.getMobType(mobs.get(i))) + ChatColor.GRAY + " x " + ChatColor.DARK_AQUA + amnts.get(i) + "\n";
text += ChatColor.GRAY + " - " + ChatColor.AQUA + MiscUtil.getPrettyMobName(Quests.getMobType(mobs.get(i))) + ChatColor.GRAY + " x " + ChatColor.DARK_AQUA + amnts.get(i) + "\n";
}
} else {
LinkedList<String> locs = (LinkedList<String>) context.getSessionData(pref + CK.S_MOB_KILL_LOCATIONS);
@ -73,7 +72,7 @@ public class MobsPrompt extends FixedSetPrompt {
for (int i = 0; i < mobs.size(); i++) {
String msg = Lang.get("blocksWithin");
msg = msg.replaceAll("<amount>", ChatColor.DARK_PURPLE + "" + radii.get(i) + ChatColor.GRAY);
text += ChatColor.GRAY + " - " + ChatColor.BLUE + Quester.prettyMobString(Quests.getMobType(mobs.get(i))) + ChatColor.GRAY + " x " + ChatColor.DARK_AQUA + amnts.get(i) + ChatColor.GRAY + msg + ChatColor.YELLOW + names.get(i) + " (" + locs.get(i) + ")\n";
text += ChatColor.GRAY + " - " + ChatColor.BLUE + MiscUtil.getPrettyMobName(Quests.getMobType(mobs.get(i))) + ChatColor.GRAY + " x " + ChatColor.DARK_AQUA + amnts.get(i) + ChatColor.GRAY + msg + ChatColor.YELLOW + names.get(i) + " (" + locs.get(i) + ")\n";
}
}
}
@ -612,7 +611,7 @@ public class MobsPrompt extends FixedSetPrompt {
if (Quests.getMobType(s) != null) {
final EntityType type = Quests.getMobType(s);
if (type.isAlive() || Tameable.class.isAssignableFrom(type.getEntityClass())) {
mobTypes.add(Quester.prettyMobString(type));
mobTypes.add(MiscUtil.getPrettyMobName(type));
context.setSessionData(pref + CK.S_TAME_TYPES, mobTypes);
} else {
player.sendMessage(ChatColor.LIGHT_PURPLE + s + " " + ChatColor.RED + Lang.get("stageEditorInvalidMob"));
@ -751,9 +750,9 @@ public class MobsPrompt extends FixedSetPrompt {
final DyeColor[] colArr = DyeColor.values();
for (int i = 0; i < colArr.length; i++) {
if (i < (colArr.length - 1)) {
cols += Quests.getDyeString(colArr[i]) + ", ";
cols += MiscUtil.getDyeString(colArr[i]) + ", ";
} else {
cols += Quests.getDyeString(colArr[i]) + "\n";
cols += MiscUtil.getDyeString(colArr[i]) + "\n";
}
}
return cols + ChatColor.YELLOW + Lang.get("stageEditorShearColorsPrompt");
@ -765,8 +764,8 @@ public class MobsPrompt extends FixedSetPrompt {
if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false) {
LinkedList<String> colors = new LinkedList<String>();
for (String s : input.split(" ")) {
if (Quests.getDyeColor(s) != null) {
colors.add(Quests.getDyeString(Quests.getDyeColor(s)));
if (MiscUtil.getDyeColor(s) != null) {
colors.add(MiscUtil.getDyeString(MiscUtil.getDyeColor(s)));
context.setSessionData(pref + CK.S_SHEAR_COLORS, colors);
} else {
player.sendMessage(ChatColor.LIGHT_PURPLE + s + " " + ChatColor.RED + Lang.get("stageEditorInvalidDye"));

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
@ -32,11 +32,11 @@ import com.herocraftonline.heroes.characters.classes.HeroClass;
import me.blackvein.quests.CustomReward;
import me.blackvein.quests.QuestFactory;
import me.blackvein.quests.Quester;
import me.blackvein.quests.Quests;
import me.blackvein.quests.util.CK;
import me.blackvein.quests.util.ItemUtil;
import me.blackvein.quests.util.Lang;
import me.blackvein.quests.util.MiscUtil;
public class RewardsPrompt extends FixedSetPrompt {
@ -502,7 +502,7 @@ public class RewardsPrompt extends FixedSetPrompt {
for (String s : args) {
if (Quests.getMcMMOSkill(s) != null) {
if (skills.contains(s) == false) {
skills.add(Quester.getCapitalized(s));
skills.add(MiscUtil.getCapitalized(s));
} else {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("listDuplicate"));
return new mcMMOSkillsPrompt();

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
@ -33,8 +33,6 @@ import org.bukkit.inventory.meta.EnchantmentStorageMeta;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.PotionMeta;
import me.blackvein.quests.Quester;
public class ItemUtil {
/**
@ -442,7 +440,7 @@ public class ItemUtil {
if (is.getEnchantments().isEmpty() == false) {
text += " " + ChatColor.GRAY + Lang.get("with") + ChatColor.DARK_PURPLE;
for (Entry<Enchantment, Integer> e : is.getEnchantments().entrySet()) {
text += " " + Quester.prettyEnchantmentString(e.getKey()) + ":" + e.getValue();
text += " " + ItemUtil.getPrettyEnchantmentName(e.getKey()) + ":" + e.getValue();
}
}
text += ChatColor.AQUA + " x " + is.getAmount();
@ -468,7 +466,7 @@ public class ItemUtil {
if (is.hasItemMeta() && is.getItemMeta().hasDisplayName()) {
text = "" + ChatColor.DARK_AQUA + ChatColor.ITALIC + is.getItemMeta().getDisplayName() + ChatColor.RESET + ChatColor.AQUA + " x " + is.getAmount();
} else {
text = ChatColor.AQUA + Quester.prettyItemString(is.getType().name());
text = ChatColor.AQUA + getPrettyItemName(is.getType().name());
if (is.getDurability() != 0) {
text += ChatColor.AQUA + ":" + is.getDurability();
}
@ -491,7 +489,7 @@ public class ItemUtil {
if (is.hasItemMeta() && is.getItemMeta().hasDisplayName()) {
text = "" + ChatColor.DARK_AQUA + ChatColor.ITALIC + is.getItemMeta().getDisplayName();
} else {
text = ChatColor.AQUA + Quester.prettyItemString(is.getType().name());
text = ChatColor.AQUA + getPrettyItemName(is.getType().name());
}
return text;
}
@ -525,4 +523,124 @@ public class ItemUtil {
return false;
return is.getItemMeta().getDisplayName().equals(ChatColor.LIGHT_PURPLE + Lang.get("journalTitle"));
}
/**
* Cleans up item names. 'WOODEN_BUTTON' becomes 'Wooden Button'
*
* @param itemName any item name, ideally
* @return cleaned-up string
*/
public static String getPrettyItemName(String itemName) {
String baseString = Material.matchMaterial(itemName).toString();
String[] substrings = baseString.split("_");
String prettyString = "";
int size = 1;
for (String s : substrings) {
prettyString = prettyString.concat(MiscUtil.getCapitalized(s));
if (size < substrings.length) {
prettyString = prettyString.concat(" ");
}
size++;
}
return prettyString;
}
/**
* Gets player-friendly name from enchantment. 'FIRE_ASPECT' becomes 'Fire Aspect'
*
* @param e Enchantment to get pretty localized name of
* @return pretty localized name
*/
public static String getPrettyEnchantmentName(Enchantment e) {
String prettyString = getEnchantmentName(e);
prettyString = MiscUtil.capitalsToSpaces(prettyString);
return prettyString;
}
/**
* Gets name of enchantment exactly as it appears in lang file
*
* @param e Enchantment to get localized name of
* @return localized name
*/
@SuppressWarnings("deprecation") // since 1.13
private static String getEnchantmentName(Enchantment e) {
try {
return (Lang.get("ENCHANTMENT_" + e.getName()));
} catch (NullPointerException ne) {
Bukkit.getLogger().warning(e.getName() + " was not found in Lang.yml, please ask the developer to "
+ "update the file or simply add an entry for the enchantment");
return e.getName().toLowerCase().replace("_", " ");
}
}
@SuppressWarnings("deprecation") // since 1.13
public static Enchantment getEnchantmentFromProperName(String enchant) {
String ench = Lang.getKey(enchant.replace(" ", ""));
ench = ench.replace("ENCHANTMENT_", "");
Enchantment e = Enchantment.getByName(ench);
return e != null ? e : getEnchantmentFromProperLegacyName(ench.replace(" ", ""));
}
public static Enchantment getEnchantmentFromProperLegacyName(String enchant) {
if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_ARROW_DAMAGE"))) {
return Enchantment.ARROW_DAMAGE;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_ARROW_FIRE"))) {
return Enchantment.ARROW_FIRE;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_ARROW_INFINITE"))) {
return Enchantment.ARROW_INFINITE;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_ARROW_KNOCKBACK"))) {
return Enchantment.ARROW_KNOCKBACK;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_DAMAGE_ALL"))) {
return Enchantment.DAMAGE_ALL;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_DAMAGE_ARTHROPODS"))) {
return Enchantment.DAMAGE_ARTHROPODS;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_DAMAGE_UNDEAD"))) {
return Enchantment.DAMAGE_UNDEAD;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_DIG_SPEED"))) {
return Enchantment.DIG_SPEED;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_DURABILITY"))) {
return Enchantment.DURABILITY;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_FIRE_ASPECT"))) {
return Enchantment.FIRE_ASPECT;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_KNOCKBACK"))) {
return Enchantment.KNOCKBACK;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_LOOT_BONUS_BLOCKS"))) {
return Enchantment.LOOT_BONUS_BLOCKS;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_LOOT_BONUS_MOBS"))) {
return Enchantment.LOOT_BONUS_MOBS;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_LUCK"))) {
return Enchantment.LOOT_BONUS_MOBS;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_LURE"))) {
return Enchantment.LOOT_BONUS_MOBS;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_OXYGEN"))) {
return Enchantment.OXYGEN;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_PROTECTION_ENVIRONMENTAL"))) {
return Enchantment.PROTECTION_ENVIRONMENTAL;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_PROTECTION_EXPLOSIONS"))) {
return Enchantment.PROTECTION_EXPLOSIONS;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_PROTECTION_FALL"))) {
return Enchantment.PROTECTION_FALL;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_PROTECTION_FIRE"))) {
return Enchantment.PROTECTION_FIRE;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_PROTECTION_PROJECTILE"))) {
return Enchantment.PROTECTION_PROJECTILE;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_SILK_TOUCH"))) {
return Enchantment.SILK_TOUCH;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_THORNS"))) {
return Enchantment.THORNS;
} else if (enchant.equalsIgnoreCase(Lang.get("ENCHANTMENT_WATER_WORKER"))) {
return Enchantment.WATER_WORKER;
} else {
return null;
}
}
public static Enchantment getEnchantmentFromPrettyName(String enchant) {
while (MiscUtil.spaceToCapital(enchant) != null) {
enchant = MiscUtil.spaceToCapital(enchant);
}
return getEnchantmentFromProperName(enchant);
}
}

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
@ -15,19 +15,44 @@ package me.blackvein.quests.util;
import java.util.LinkedList;
import org.bukkit.ChatColor;
import org.bukkit.Color;
import org.bukkit.DyeColor;
import org.bukkit.entity.EntityType;
public class MiscUtil {
public static String getCapitalized(String s) {
if (s.isEmpty()) {
return s;
public static String getCapitalized(String input) {
if (input.isEmpty()) {
return input;
}
s = s.toLowerCase();
String s2 = s.substring(0, 1);
s2 = s2.toUpperCase();
s = s.substring(1, s.length());
return s2 + s;
String firstLetter = input.substring(0, 1);
String remainder = input.substring(1);
String capitalized = firstLetter.toUpperCase() + remainder.toLowerCase();
return capitalized;
}
/**
* Gets player-friendly name from type. 'ENDER_DRAGON' becomes 'Ender Dragon'
*
* @param type any mob type, ideally
* @return cleaned-up string
*/
public static String getPrettyMobName(EntityType type) {
String baseString = type.toString();
String[] substrings = baseString.split("_");
String prettyString = "";
int size = 1;
for (String s : substrings) {
prettyString = prettyString.concat(getCapitalized(s));
if (size < substrings.length) {
prettyString = prettyString.concat(" ");
}
size++;
}
if (type.equals((EntityType.OCELOT))) {
prettyString = "Ocelot";
}
return prettyString;
}
public static String getProperMobName(EntityType type) {
@ -51,6 +76,65 @@ public class MiscUtil {
return null;
}
public static String getPrettyDyeColorName(DyeColor color) {
return Lang.get("COLOR_" + color.name());
}
public static DyeColor getDyeColor(String s) {
String col = Lang.getKey(getCapitalized(s));
col = col.replace("COLOR_", "");
DyeColor color = null;
try {
color = DyeColor.valueOf(col);
} catch (IllegalArgumentException e) {
// Do nothing
}
return color != null ? color : getDyeColorLegacy(s);
}
public static DyeColor getDyeColorLegacy(String s) {
if (s.equalsIgnoreCase("Black") || s.equalsIgnoreCase(Lang.get("COLOR_BLACK"))) {
return DyeColor.BLACK;
} else if (s.equalsIgnoreCase("Blue") || s.equalsIgnoreCase(Lang.get("COLOR_BLUE"))) {
return DyeColor.BLUE;
} else if (s.equalsIgnoreCase("Brown") || s.equalsIgnoreCase(Lang.get("COLOR_BROWN"))) {
return DyeColor.BROWN;
} else if (s.equalsIgnoreCase("Cyan") || s.equalsIgnoreCase(Lang.get("COLOR_CYAN"))) {
return DyeColor.CYAN;
} else if (s.equalsIgnoreCase("Gray") || s.equalsIgnoreCase(Lang.get("COLOR_GRAY"))) {
return DyeColor.GRAY;
} else if (s.equalsIgnoreCase("Green") || s.equalsIgnoreCase(Lang.get("COLOR_GREEN"))) {
return DyeColor.GREEN;
} else if (s.equalsIgnoreCase("LightBlue") || s.equalsIgnoreCase(Lang.get("COLOR_LIGHT_BLUE"))) {
return DyeColor.LIGHT_BLUE;
} else if (s.equalsIgnoreCase("Lime") || s.equalsIgnoreCase(Lang.get("COLOR_LIME"))) {
return DyeColor.LIME;
} else if (s.equalsIgnoreCase("Magenta") || s.equalsIgnoreCase(Lang.get("COLOR_MAGENTA"))) {
return DyeColor.MAGENTA;
} else if (s.equalsIgnoreCase("Orange") || s.equalsIgnoreCase(Lang.get("COLOR_ORAGE"))) {
return DyeColor.ORANGE;
} else if (s.equalsIgnoreCase("Pink") || s.equalsIgnoreCase(Lang.get("COLOR_PINK"))) {
return DyeColor.PINK;
} else if (s.equalsIgnoreCase("Purple") || s.equalsIgnoreCase(Lang.get("COLOR_PURPLE"))) {
return DyeColor.PURPLE;
} else if (s.equalsIgnoreCase("Red") || s.equalsIgnoreCase(Lang.get("COLOR_RED"))) {
return DyeColor.RED;
// 1.13 changed DyeColor.SILVER -> DyeColor.LIGHT_GRAY
} else if (s.equalsIgnoreCase("Silver") || s.equalsIgnoreCase("LightGray") || s.equalsIgnoreCase(Lang.get("COLOR_SILVER"))) {
return DyeColor.getByColor(Color.SILVER);
} else if (s.equalsIgnoreCase("White") || s.equalsIgnoreCase(Lang.get("COLOR_WHITE"))) {
return DyeColor.WHITE;
} else if (s.equalsIgnoreCase("Yellow") || s.equalsIgnoreCase(Lang.get("COLOR_YELLOW"))) {
return DyeColor.YELLOW;
} else {
return null;
}
}
public static String getDyeString(DyeColor dc) {
return Lang.get("COLOR_" + dc.name());
}
public static String concatArgArray(String[] args, int startingIndex, int endingIndex, char delimiter) {
String s = "";
for (int i = startingIndex; i <= endingIndex; i++) {
@ -87,4 +171,38 @@ public class MiscUtil {
}
return toReturn;
}
/**
* Adds a single space in front of all capital letters
*
* @param s string to process
* @return processed string
*/
public static String capitalsToSpaces(String s) {
int max = s.length();
for (int i = 1; i < max; i++) {
if (Character.isUpperCase(s.charAt(i))) {
s = s.substring(0, i) + " " + s.substring(i);
i++;
max++;
}
}
return s;
}
/**
* Capitalize character after space
*
* @param s string to process
* @return processed string
*/
public static String spaceToCapital(String s) {
int index = s.indexOf(' ');
if (index == -1) {
return null;
}
s = s.substring(0, (index + 1)) + Character.toUpperCase(s.charAt(index + 1)) + s.substring(index + 2);
s = s.replaceFirst(" ", "");
return s;
}
}

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
@ -43,5 +43,4 @@ public class RomanNumeral {
}
return map.get(l) + getNumeral(number-l);
}
}

View File

@ -1,5 +1,5 @@
/*******************************************************************************************************
* Continued by FlyingPikachu/HappyPikachu with permission from _Blackvein_. All rights reserved.
* Continued by PikaMug (formerly HappyPikachu) with permission from _Blackvein_. All rights reserved.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN

View File

@ -18,4 +18,3 @@ show-titles: true
translate-names: true
translate-subcommands: false
use-compass: true
use-gps-plugin: true

View File

@ -6,12 +6,12 @@
<groupId>me.blackvein.quests</groupId>
<artifactId>quests-parent</artifactId>
<version>3.6.9</version>
<version>3.7.0</version>
<name>quests</name>
<url>https://github.com/PikaMug/Quests/</url>
<properties>
<revision>3.6.9</revision>
<revision>3.7.0</revision>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>me.blackvein.quests</groupId>
<artifactId>quests-parent</artifactId>
<version>3.6.9</version>
<version>3.7.0</version>
</parent>
<properties>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>me.blackvein.quests</groupId>
<artifactId>quests-parent</artifactId>
<version>3.6.9</version>
<version>3.7.0</version>
</parent>
<properties>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>me.blackvein.quests</groupId>
<artifactId>quests-parent</artifactId>
<version>3.6.9</version>
<version>3.7.0</version>
</parent>
<properties>