mirror of
https://github.com/PikaMug/Quests.git
synced 2024-11-26 04:36:06 +01:00
Improved error for null stage on block objective, fixes #1739
This commit is contained in:
parent
a89da8920c
commit
95c8da0590
@ -12,9 +12,15 @@
|
||||
|
||||
package me.blackvein.quests.listeners;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import me.blackvein.quests.Objective;
|
||||
import me.blackvein.quests.Quest;
|
||||
import me.blackvein.quests.Quester;
|
||||
import me.blackvein.quests.Quests;
|
||||
import me.blackvein.quests.enums.ObjectiveType;
|
||||
import me.blackvein.quests.events.quester.QuesterPostUpdateObjectiveEvent;
|
||||
import me.blackvein.quests.events.quester.QuesterPreUpdateObjectiveEvent;
|
||||
import me.blackvein.quests.util.ItemUtil;
|
||||
import me.blackvein.quests.util.Lang;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
@ -30,15 +36,8 @@ import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.inventory.EquipmentSlot;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import me.blackvein.quests.Objective;
|
||||
import me.blackvein.quests.Quest;
|
||||
import me.blackvein.quests.Quester;
|
||||
import me.blackvein.quests.Quests;
|
||||
import me.blackvein.quests.enums.ObjectiveType;
|
||||
import me.blackvein.quests.events.quester.QuesterPostUpdateObjectiveEvent;
|
||||
import me.blackvein.quests.events.quester.QuesterPreUpdateObjectiveEvent;
|
||||
import me.blackvein.quests.util.ItemUtil;
|
||||
import me.blackvein.quests.util.Lang;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
public class BlockListener implements Listener {
|
||||
|
||||
@ -63,104 +62,107 @@ public class BlockListener implements Listener {
|
||||
final Set<String> dispatchedPlaceQuestIDs = new HashSet<String>();
|
||||
final Set<String> dispatchedCutQuestIDs = new HashSet<String>();
|
||||
for (final Quest quest : plugin.getLoadedQuests()) {
|
||||
if (evt.isCancelled() == false) {
|
||||
if (!evt.isCancelled()) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
continue;
|
||||
}
|
||||
if (quester.getCurrentQuests().containsKey(quest)
|
||||
&& quester.getCurrentStage(quest).containsObjective(breakType)) {
|
||||
if (quest.getOptions().canIgnoreSilkTouch()
|
||||
&& player.getItemInHand().containsEnchantment(Enchantment.SILK_TOUCH)) {
|
||||
player.sendMessage(ChatColor.RED + Lang.get(player, "optionSilkTouchFail")
|
||||
.replace("<quest>", quest.getName()));
|
||||
} else {
|
||||
quester.breakBlock(quest, blockItemStack);
|
||||
|
||||
// Multiplayer
|
||||
dispatchedBreakQuestIDs.addAll(quester.dispatchMultiplayerEverything(quest, breakType,
|
||||
(final Quester q, final Quest cq) -> {
|
||||
if (!dispatchedBreakQuestIDs.contains(cq.getId())) {
|
||||
q.breakBlock(cq, blockItemStack);
|
||||
}
|
||||
return null;
|
||||
}));
|
||||
if (quester.getCurrentQuests().containsKey(quest)) {
|
||||
if (quester.getCurrentStage(quest) == null) {
|
||||
plugin.getLogger().severe("Player " + player.getName() + " (" + player.getUniqueId()
|
||||
+ ") has invalid stage for quest " + quest.getName() + " (" + quest.getId() + ")");
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (quester.getCurrentQuests().containsKey(quest)
|
||||
&& quester.getCurrentStage(quest).containsObjective(placeType)) {
|
||||
for (final ItemStack is : quester.getQuestData(quest).blocksPlaced) {
|
||||
if (evt.getBlock().getType().equals(is.getType()) && is.getAmount() > 0) {
|
||||
ItemStack toPlace = new ItemStack(is.getType(), 64);
|
||||
for (final ItemStack stack : quester.getCurrentStage(quest).getBlocksToPlace()) {
|
||||
if (ItemUtil.compareItems(is, stack, true) == 0) {
|
||||
toPlace = stack;
|
||||
}
|
||||
}
|
||||
|
||||
final QuesterPreUpdateObjectiveEvent preEvent
|
||||
= new QuesterPreUpdateObjectiveEvent(quester, quest,
|
||||
new Objective(placeType, is.getAmount(), toPlace.getAmount()));
|
||||
plugin.getServer().getPluginManager().callEvent(preEvent);
|
||||
|
||||
final int index = quester.getQuestData(quest).blocksPlaced.indexOf(is);
|
||||
final int newAmount = is.getAmount() - 1;
|
||||
is.setAmount(newAmount);
|
||||
quester.getQuestData(quest).blocksPlaced.set(index, is);
|
||||
|
||||
final QuesterPostUpdateObjectiveEvent postEvent
|
||||
= new QuesterPostUpdateObjectiveEvent(quester, quest,
|
||||
new Objective(placeType, newAmount, toPlace.getAmount()));
|
||||
plugin.getServer().getPluginManager().callEvent(postEvent);
|
||||
if (quester.getCurrentStage(quest).containsObjective(breakType)) {
|
||||
if (quest.getOptions().canIgnoreSilkTouch()
|
||||
&& player.getItemInHand().containsEnchantment(Enchantment.SILK_TOUCH)) {
|
||||
player.sendMessage(ChatColor.RED + Lang.get(player, "optionSilkTouchFail")
|
||||
.replace("<quest>", quest.getName()));
|
||||
} else {
|
||||
quester.breakBlock(quest, blockItemStack);
|
||||
|
||||
// Multiplayer
|
||||
dispatchedBreakQuestIDs.addAll(quester.dispatchMultiplayerEverything(quest, breakType,
|
||||
(final Quester q, final Quest cq) -> {
|
||||
if (!dispatchedBreakQuestIDs.contains(cq.getId())) {
|
||||
q.breakBlock(cq, blockItemStack);
|
||||
}
|
||||
return null;
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
dispatchedPlaceQuestIDs.addAll(quester.dispatchMultiplayerEverything(quest, placeType,
|
||||
(final Quester q, final Quest cq) -> {
|
||||
if (!dispatchedPlaceQuestIDs.contains(cq.getId())) {
|
||||
for (final ItemStack is : q.getQuestData(cq).blocksPlaced) {
|
||||
if (quester.getCurrentStage(quest).containsObjective(placeType)) {
|
||||
for (final ItemStack is : quester.getQuestData(quest).blocksPlaced) {
|
||||
if (evt.getBlock().getType().equals(is.getType()) && is.getAmount() > 0) {
|
||||
ItemStack toPlace = new ItemStack(is.getType(), 64);
|
||||
for (final ItemStack stack : quester.getCurrentStage(cq).getBlocksToPlace()) {
|
||||
for (final ItemStack stack : quester.getCurrentStage(quest).getBlocksToPlace()) {
|
||||
if (ItemUtil.compareItems(is, stack, true) == 0) {
|
||||
toPlace = stack;
|
||||
}
|
||||
}
|
||||
|
||||
final QuesterPreUpdateObjectiveEvent preEvent
|
||||
= new QuesterPreUpdateObjectiveEvent(q, cq,
|
||||
|
||||
final QuesterPreUpdateObjectiveEvent preEvent
|
||||
= new QuesterPreUpdateObjectiveEvent(quester, quest,
|
||||
new Objective(placeType, is.getAmount(), toPlace.getAmount()));
|
||||
plugin.getServer().getPluginManager().callEvent(preEvent);
|
||||
|
||||
final int index = q.getQuestData(cq).blocksPlaced.indexOf(is);
|
||||
|
||||
final int index = quester.getQuestData(quest).blocksPlaced.indexOf(is);
|
||||
final int newAmount = is.getAmount() - 1;
|
||||
is.setAmount(newAmount);
|
||||
q.getQuestData(cq).blocksPlaced.set(index, is);
|
||||
|
||||
final QuesterPostUpdateObjectiveEvent postEvent
|
||||
= new QuesterPostUpdateObjectiveEvent(q, cq,
|
||||
new Objective(placeType, newAmount, toPlace.getAmount()));
|
||||
quester.getQuestData(quest).blocksPlaced.set(index, is);
|
||||
|
||||
final QuesterPostUpdateObjectiveEvent postEvent
|
||||
= new QuesterPostUpdateObjectiveEvent(quester, quest,
|
||||
new Objective(placeType, newAmount, toPlace.getAmount()));
|
||||
plugin.getServer().getPluginManager().callEvent(postEvent);
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}));
|
||||
if (quester.getCurrentQuests().containsKey(quest)
|
||||
&& quester.getCurrentStage(quest).containsObjective(cutType)) {
|
||||
if (player.getItemInHand().getType().equals(Material.SHEARS)) {
|
||||
quester.cutBlock(quest, blockItemStack);
|
||||
}
|
||||
}
|
||||
dispatchedCutQuestIDs.addAll(quester.dispatchMultiplayerEverything(quest, cutType,
|
||||
(final Quester q, final Quest cq) -> {
|
||||
if (!dispatchedCutQuestIDs.contains(cq.getId())) {
|
||||
dispatchedPlaceQuestIDs.addAll(quester.dispatchMultiplayerEverything(quest, placeType,
|
||||
(final Quester q, final Quest cq) -> {
|
||||
if (!dispatchedPlaceQuestIDs.contains(cq.getId())) {
|
||||
for (final ItemStack is : q.getQuestData(cq).blocksPlaced) {
|
||||
if (evt.getBlock().getType().equals(is.getType()) && is.getAmount() > 0) {
|
||||
ItemStack toPlace = new ItemStack(is.getType(), 64);
|
||||
for (final ItemStack stack : quester.getCurrentStage(cq).getBlocksToPlace()) {
|
||||
if (ItemUtil.compareItems(is, stack, true) == 0) {
|
||||
toPlace = stack;
|
||||
}
|
||||
}
|
||||
|
||||
final QuesterPreUpdateObjectiveEvent preEvent
|
||||
= new QuesterPreUpdateObjectiveEvent(q, cq,
|
||||
new Objective(placeType, is.getAmount(), toPlace.getAmount()));
|
||||
plugin.getServer().getPluginManager().callEvent(preEvent);
|
||||
|
||||
final int index = q.getQuestData(cq).blocksPlaced.indexOf(is);
|
||||
final int newAmount = is.getAmount() - 1;
|
||||
is.setAmount(newAmount);
|
||||
q.getQuestData(cq).blocksPlaced.set(index, is);
|
||||
|
||||
final QuesterPostUpdateObjectiveEvent postEvent
|
||||
= new QuesterPostUpdateObjectiveEvent(q, cq,
|
||||
new Objective(placeType, newAmount, toPlace.getAmount()));
|
||||
plugin.getServer().getPluginManager().callEvent(postEvent);
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}));
|
||||
if (quester.getCurrentStage(quest).containsObjective(cutType)) {
|
||||
if (player.getItemInHand().getType().equals(Material.SHEARS)) {
|
||||
q.cutBlock(cq, blockItemStack);
|
||||
quester.cutBlock(quest, blockItemStack);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}));
|
||||
dispatchedCutQuestIDs.addAll(quester.dispatchMultiplayerEverything(quest, cutType,
|
||||
(final Quester q, final Quest cq) -> {
|
||||
if (!dispatchedCutQuestIDs.contains(cq.getId())) {
|
||||
if (player.getItemInHand().getType().equals(Material.SHEARS)) {
|
||||
q.cutBlock(cq, blockItemStack);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user