Patch multi-stack item delivery, fixes #1821

This commit is contained in:
PikaMug 2021-11-08 03:17:03 -05:00
parent 5c166f2041
commit ee97390f8e
2 changed files with 14 additions and 16 deletions

View File

@ -77,8 +77,6 @@ import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.stream.Collectors;
//import de.erethon.dungeonsxl.player.DGroup;
public class Quester implements Comparable<Quester> {
private final Quests plugin;
@ -2217,7 +2215,7 @@ public class Quester implements Comparable<Quester> {
}
if (newAmount >= toDeliver) {
found.setAmount(toDeliver);
getQuestData(quest).itemsDelivered.set(items.indexOf(found), found);
getQuestData(quest).itemsDelivered.set(items.indexOf(found), found.clone());
if ((itemStack.getAmount() + amount) >= toDeliver) {
// Take away remaining amount to be delivered
final ItemStack clone = itemStack.clone();
@ -2232,14 +2230,14 @@ public class Quester implements Comparable<Quester> {
// Multiplayer
dispatchMultiplayerObjectives(quest, getCurrentStage(quest), (final Quester q) -> {
q.getQuestData(quest).itemsDelivered.set(items.indexOf(found), found);
q.getQuestData(quest).itemsDelivered.set(items.indexOf(found), found.clone());
q.finishObjective(quest, new Objective(type, new ItemStack(m, 1), found), null, null, null,
null, null, null, null);
return null;
});
} else {
found.setAmount(newAmount);
getQuestData(quest).itemsDelivered.set(items.indexOf(found), found);
getQuestData(quest).itemsDelivered.set(items.indexOf(found), found.clone());
player.getInventory().setItem(index, null);
player.updateInventory();
final String[] message = ConfigUtil.parseStringWithPossibleLineBreaks(getCurrentStage(quest)

View File

@ -206,13 +206,13 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
// 8 - Setup commands
if (getCommand("quests") != null) {
Objects.requireNonNull(getCommand("quests")).setExecutor(cmdExecutor);
Objects.requireNonNull(getCommand("quests")).setExecutor(getCommandExecutor());
}
if (getCommand("questadmin") != null) {
Objects.requireNonNull(getCommand("questadmin")).setExecutor(cmdExecutor);
Objects.requireNonNull(getCommand("questadmin")).setExecutor(getCommandExecutor());
}
if (getCommand("quest") != null) {
Objects.requireNonNull(getCommand("quest")).setExecutor(cmdExecutor);
Objects.requireNonNull(getCommand("quest")).setExecutor(getCommandExecutor());
}
// 9 - Build conversation factories
@ -226,18 +226,18 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
.withLocalEcho(false).addConversationAbandonedListener(this);
// 10 - Register listeners
getServer().getPluginManager().registerEvents(blockListener, this);
getServer().getPluginManager().registerEvents(itemListener, this);
getServer().getPluginManager().registerEvents(getBlockListener(), this);
getServer().getPluginManager().registerEvents(getItemListener(), this);
depends.linkCitizens();
getServer().getPluginManager().registerEvents(playerListener, this);
getServer().getPluginManager().registerEvents(getPlayerListener(), this);
if (settings.getStrictPlayerMovement() > 0) {
final long ticks = settings.getStrictPlayerMovement() * 20L;
getServer().getScheduler().scheduleSyncRepeatingTask(this, moveThread, ticks, ticks);
getServer().getScheduler().scheduleSyncRepeatingTask(this, getPlayerMoveThread(), ticks, ticks);
}
if (depends.getPartyProvider() != null) {
getServer().getPluginManager().registerEvents(uniteListener, this);
getServer().getPluginManager().registerEvents(getUniteListener(), this);
} else if (depends.getPartiesApi() != null) {
getServer().getPluginManager().registerEvents(partiesListener, this);
getServer().getPluginManager().registerEvents(getPartiesListener(), this);
}
// 11 - Attempt to check for updates
@ -472,7 +472,7 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
* @return a collection of all online Questers
*/
public Collection<Quester> getOnlineQuesters() {
final Collection<Quester> questers = new ConcurrentSkipListSet<>();;
final Collection<Quester> questers = new ConcurrentSkipListSet<>();
for (final Quester q : getOfflineQuesters()) {
if (q.getOfflinePlayer().isOnline()) {
// Workaround for issues with the compass on fast join
@ -3147,7 +3147,7 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
+ stageNum + ".sheep-to-shear");
final List<Integer> shearAmounts = config.getIntegerList("quests." + questKey
+ ".stages.ordered." + stageNum + ".sheep-amounts");
for (String color : sheep) {
for (final String color : sheep) {
DyeColor dc = null;
if (color.equalsIgnoreCase("NULL")) {
dc = DyeColor.WHITE;