Track progress through int, part 5. See #2250

This commit is contained in:
PikaMug 2024-07-14 16:41:57 -04:00
parent c9c4979d60
commit 217620a4db
2 changed files with 42 additions and 68 deletions

View File

@ -1162,7 +1162,6 @@ public class BukkitQuester implements Quester {
* @param formatNames Whether to format item/entity names, if applicable
* @return List of detailed objectives
*/
@SuppressWarnings("deprecation")
public LinkedList<Objective> getCurrentObjectives(final Quest quest, final boolean ignoreOverrides,
final boolean formatNames) {
if (quest == null) {
@ -2155,7 +2154,7 @@ public class BukkitQuester implements Quester {
}
for (final Integer match : matches) {
final int amount = bukkitQuestData.itemsCrafted.get(match);
final int goal = ((BukkitStage) getCurrentStage(quest)).getItemsToCraft().get(match).getAmount();
final ItemStack goal = ((BukkitStage) getCurrentStage(quest)).getItemsToCraft().get(match);
final ObjectiveType type = ObjectiveType.CRAFT_ITEM;
final BukkitQuesterPreUpdateObjectiveEvent preEvent = new BukkitQuesterPreUpdateObjectiveEvent(this, quest,
@ -2164,8 +2163,7 @@ public class BukkitQuester implements Quester {
final int progress = crafted.getAmount() + amount;
bukkitQuestData.itemsCrafted.set(match, progress);
final Material m = crafted.getType();
if (progress >= goal) {
if (progress >= goal.getAmount()) {
finishObjective(quest, new BukkitObjective(type, null, progress, goal), null, null, null, null,
null, null, null);
@ -2205,7 +2203,7 @@ public class BukkitQuester implements Quester {
}
for (final Integer match : matches) {
final int amount = bukkitQuestData.itemsSmelted.get(match);
final int goal = ((BukkitStage) getCurrentStage(quest)).getItemsToSmelt().get(match).getAmount();
final ItemStack goal = ((BukkitStage) getCurrentStage(quest)).getItemsToSmelt().get(match);
final ObjectiveType type = ObjectiveType.SMELT_ITEM;
final BukkitQuesterPreUpdateObjectiveEvent preEvent = new BukkitQuesterPreUpdateObjectiveEvent(this, quest,
@ -2214,8 +2212,7 @@ public class BukkitQuester implements Quester {
final int progress = smelted.getAmount() + amount;
bukkitQuestData.itemsSmelted.set(match, progress);
final Material m = smelted.getType();
if (progress >= goal) {
if (progress >= goal.getAmount()) {
finishObjective(quest, new BukkitObjective(type, null, progress, goal), null, null, null, null,
null, null, null);
@ -2258,7 +2255,7 @@ public class BukkitQuester implements Quester {
}
for (final Integer match : matches) {
final int amount = bukkitQuestData.itemsEnchanted.get(match);
final int goal = ((BukkitStage) getCurrentStage(quest)).getItemsToEnchant().get(match).getAmount();
final ItemStack goal = ((BukkitStage) getCurrentStage(quest)).getItemsToEnchant().get(match);
final ObjectiveType type = ObjectiveType.ENCHANT_ITEM;
final BukkitQuesterPreUpdateObjectiveEvent preEvent = new BukkitQuesterPreUpdateObjectiveEvent(this, quest,
@ -2267,8 +2264,7 @@ public class BukkitQuester implements Quester {
final int progress = enchantedBook.getAmount() + amount;
bukkitQuestData.itemsEnchanted.set(match, progress);
final Material m = enchantedBook.getType();
if (progress >= goal) {
if (progress >= goal.getAmount()) {
finishObjective(quest, new BukkitObjective(type, null, progress, goal), null, null, null, null,
null, null, null);
@ -2316,7 +2312,7 @@ public class BukkitQuester implements Quester {
}
for (final Integer match : matches) {
final int amount = bukkitQuestData.itemsEnchanted.get(match);
final int goal = ((BukkitStage) getCurrentStage(quest)).getItemsToEnchant().get(match).getAmount();
final ItemStack goal = ((BukkitStage) getCurrentStage(quest)).getItemsToEnchant().get(match);
final ObjectiveType type = ObjectiveType.ENCHANT_ITEM;
final BukkitQuesterPreUpdateObjectiveEvent preEvent = new BukkitQuesterPreUpdateObjectiveEvent(this, quest,
@ -2325,8 +2321,7 @@ public class BukkitQuester implements Quester {
final int progress = enchanted.getAmount() + amount;
bukkitQuestData.itemsEnchanted.set(match, progress);
final Material m = enchanted.getType();
if (progress >= goal) {
if (progress >= goal.getAmount()) {
finishObjective(quest, new BukkitObjective(type, null, progress, goal), null, null, null, null,
null, null, null);
@ -2366,7 +2361,7 @@ public class BukkitQuester implements Quester {
}
for (final Integer match : matches) {
final int amount = bukkitQuestData.itemsBrewed.get(match);
final int goal = ((BukkitStage) getCurrentStage(quest)).getItemsToBrew().get(match).getAmount();
final ItemStack goal = ((BukkitStage) getCurrentStage(quest)).getItemsToBrew().get(match);
final ObjectiveType type = ObjectiveType.BREW_ITEM;
final BukkitQuesterPreUpdateObjectiveEvent preEvent = new BukkitQuesterPreUpdateObjectiveEvent(this, quest,
@ -2375,8 +2370,7 @@ public class BukkitQuester implements Quester {
final int progress = brewed.getAmount() + amount;
bukkitQuestData.itemsBrewed.set(match, progress);
final Material m = brewed.getType();
if (progress >= goal) {
if (progress >= goal.getAmount()) {
finishObjective(quest, new BukkitObjective(type, null, progress, goal), null, null, null, null,
null, null, null);
@ -2416,7 +2410,7 @@ public class BukkitQuester implements Quester {
}
for (final Integer match : matches) {
final int amount = bukkitQuestData.itemsConsumed.get(match);
final int goal = ((BukkitStage) getCurrentStage(quest)).getItemsToConsume().get(match).getAmount();
final ItemStack goal = ((BukkitStage) getCurrentStage(quest)).getItemsToConsume().get(match);
final ObjectiveType type = ObjectiveType.CONSUME_ITEM;
final BukkitQuesterPreUpdateObjectiveEvent preEvent = new BukkitQuesterPreUpdateObjectiveEvent(this, quest,
@ -2425,8 +2419,7 @@ public class BukkitQuester implements Quester {
final int progress = consumed.getAmount() + amount;
bukkitQuestData.itemsConsumed.set(match, progress);
final Material m = consumed.getType();
if (progress >= goal) {
if (progress >= goal.getAmount()) {
finishObjective(quest, new BukkitObjective(type, null, progress, goal), null, null, null, null,
null, null, null);
@ -2475,7 +2468,7 @@ public class BukkitQuester implements Quester {
continue;
}
final int amount = bukkitQuestData.itemsDelivered.get(match);
final int goal = ((BukkitStage) getCurrentStage(quest)).getItemsToDeliver().get(match).getAmount();
final ItemStack goal = ((BukkitStage) getCurrentStage(quest)).getItemsToDeliver().get(match);
final ObjectiveType type = ObjectiveType.DELIVER_ITEM;
final Set<String> dispatchedQuestIDs = new HashSet<>();
@ -2484,18 +2477,17 @@ public class BukkitQuester implements Quester {
plugin.getServer().getPluginManager().callEvent(preEvent);
final int progress = delivered.getAmount() + amount;
final Material m = delivered.getType();
final int index = player.getInventory().first(delivered);
if (index == -1) {
// Already delivered in previous loop
return;
}
bukkitQuestData.itemsDelivered.set(match, progress);
if (progress >= goal) {
if ((delivered.getAmount() + amount) >= goal) {
if (progress >= goal.getAmount()) {
if ((delivered.getAmount() + amount) >= goal.getAmount()) {
// Take away remaining amount to be delivered
final ItemStack clone = delivered.clone();
clone.setAmount(delivered.getAmount() - (goal - amount));
clone.setAmount(delivered.getAmount() - (goal.getAmount() - amount));
player.getInventory().setItem(index, clone);
} else {
player.getInventory().setItem(index, null);
@ -2509,7 +2501,7 @@ public class BukkitQuester implements Quester {
final String[] message = BukkitConfigUtil.parseStringWithPossibleLineBreaks(getCurrentStage(quest)
.getDeliverMessages().get(new Random().nextInt(getCurrentStage(quest)
.getDeliverMessages().size())), getCurrentStage(quest).getItemDeliveryTargets()
.get(match), goal - progress);
.get(match), goal.getAmount() - progress);
player.sendMessage(message);
}
@ -3418,30 +3410,12 @@ public class BukkitQuester implements Quester {
return true;
}
/**
* Gets an item with 0 amount (ideal), unless server is on certain builds of Paper
* server software, in which case gets an item with 1 amount (not ideal)
*
* @param type Material of item
* @param durability Durability of item
* @return item with 0 or 1 amount
*/
@SuppressWarnings("deprecation")
private ItemStack getLowItemStack(final Material type, final short durability) {
try {
return new ItemStack(type, 0, durability);
} catch (IllegalArgumentException e) {
return new ItemStack(type, 1, durability);
}
}
/**
* Add empty map values per Quest stage
*
* @param quest Quest with at least one stage
* @param stage Where first stage is '0'
*/
@SuppressWarnings("deprecation")
public void addEmptiesFor(final Quest quest, final int stage) {
final BukkitQuestProgress data = new BukkitQuestProgress(this);
data.setDoJournalUpdate(false);
@ -3491,7 +3465,7 @@ public class BukkitQuester implements Quester {
}
if (!bukkitStage.getItemsToEnchant().isEmpty()) {
for (final ItemStack ignored : bukkitStage.getItemsToEnchant()) {
data.blocksUsed.add(0);
data.itemsEnchanted.add(0);
}
}
if (!bukkitStage.getItemsToBrew().isEmpty()) {

View File

@ -175,95 +175,95 @@ public class BukkitQuesterYamlStorage implements QuesterStorageImpl {
final BukkitQuestProgress bukkitQuestData = (BukkitQuestProgress) quester.getQuestDataOrDefault(quest);
if (questSec.contains("blocks-broken-amounts")) {
final List<Integer> brokenAmounts = questSec.getIntegerList("blocks-broken-amounts");
quester.getQuestDataOrDefault(quest).setBlocksBroken(new LinkedList<>(brokenAmounts));
bukkitQuestData.setBlocksBroken(new LinkedList<>(brokenAmounts));
}
if (questSec.contains("blocks-damaged-amounts")) {
final List<Integer> damagedAmounts = questSec.getIntegerList("blocks-damaged-amounts");
quester.getQuestDataOrDefault(quest).setBlocksDamaged(new LinkedList<>(damagedAmounts));
bukkitQuestData.setBlocksDamaged(new LinkedList<>(damagedAmounts));
}
if (questSec.contains("blocks-placed-amounts")) {
final List<Integer> placedAmounts = questSec.getIntegerList("blocks-placed-amounts");
quester.getQuestDataOrDefault(quest).setBlocksPlaced(new LinkedList<>(placedAmounts));
bukkitQuestData.setBlocksPlaced(new LinkedList<>(placedAmounts));
}
if (questSec.contains("blocks-used-amounts")) {
final List<Integer> usedAmounts = questSec.getIntegerList("blocks-used-amounts");
quester.getQuestDataOrDefault(quest).setBlocksUsed(new LinkedList<>(usedAmounts));
bukkitQuestData.setBlocksUsed(new LinkedList<>(usedAmounts));
}
if (questSec.contains("blocks-cut-amounts")) {
final List<Integer> cutAmounts = questSec.getIntegerList("blocks-cut-amounts");
quester.getQuestDataOrDefault(quest).setBlocksCut(new LinkedList<>(cutAmounts));
bukkitQuestData.setBlocksCut(new LinkedList<>(cutAmounts));
}
if (questSec.contains("item-craft-amounts")) {
final List<Integer> craftAmounts = questSec.getIntegerList("item-craft-amounts");
quester.getQuestDataOrDefault(quest).setItemsCrafted(new LinkedList<>(craftAmounts));
bukkitQuestData.setItemsCrafted(new LinkedList<>(craftAmounts));
}
if (questSec.contains("item-smelt-amounts")) {
final List<Integer> smeltAmounts = questSec.getIntegerList("item-smelt-amounts");
quester.getQuestDataOrDefault(quest).setItemsSmelted(new LinkedList<>(smeltAmounts));
bukkitQuestData.setItemsSmelted(new LinkedList<>(smeltAmounts));
}
if (questSec.contains("item-enchant-amounts")) {
final List<Integer> enchantAmounts = questSec.getIntegerList("item-enchant-amounts");
quester.getQuestDataOrDefault(quest).setItemsEnchanted(new LinkedList<>(enchantAmounts));
bukkitQuestData.setItemsEnchanted(new LinkedList<>(enchantAmounts));
}
if (questSec.contains("item-brew-amounts")) {
final List<Integer> brewAmounts = questSec.getIntegerList("item-brew-amounts");
quester.getQuestDataOrDefault(quest).setItemsBrewed(new LinkedList<>(brewAmounts));
bukkitQuestData.setItemsBrewed(new LinkedList<>(brewAmounts));
}
if (questSec.contains("item-consume-amounts")) {
final List<Integer> consumeAmounts = questSec.getIntegerList("item-consume-amounts");
quester.getQuestDataOrDefault(quest).setItemsConsumed(new LinkedList<>(consumeAmounts));
bukkitQuestData.setItemsConsumed(new LinkedList<>(consumeAmounts));
}
if (questSec.contains("item-delivery-amounts")) {
final List<Integer> deliveryAmounts = questSec.getIntegerList("item-delivery-amounts");
quester.getQuestDataOrDefault(quest).setItemsDelivered(new LinkedList<>(deliveryAmounts));
bukkitQuestData.setItemsDelivered(new LinkedList<>(deliveryAmounts));
}
if (questSec.contains("has-talked-to")) {
final List<Boolean> talkAmount = questSec.getBooleanList("has-talked-to");
quester.getQuestDataOrDefault(quest).setNpcsInteracted(new LinkedList<>(talkAmount));
bukkitQuestData.setNpcsInteracted(new LinkedList<>(talkAmount));
}
if (questSec.contains("npc-killed-amounts")) {
final List<Integer> npcAmounts = questSec.getIntegerList("npc-killed-amounts");
quester.getQuestDataOrDefault(quest).setNpcsNumKilled(new LinkedList<>(npcAmounts));
bukkitQuestData.setNpcsNumKilled(new LinkedList<>(npcAmounts));
} else if (questSec.contains("citizen-amounts-killed")) {
// Legacy
final List<Integer> npcAmounts = questSec.getIntegerList("citizen-amounts-killed");
quester.getQuestDataOrDefault(quest).setNpcsNumKilled(new LinkedList<>(npcAmounts));
bukkitQuestData.setNpcsNumKilled(new LinkedList<>(npcAmounts));
}
if (questSec.contains("cows-milked")) {
quester.getQuestDataOrDefault(quest).setCowsMilked(questSec.getInt("cows-milked"));
bukkitQuestData.setCowsMilked(questSec.getInt("cows-milked"));
}
if (questSec.contains("fish-caught")) {
quester.getQuestDataOrDefault(quest).setFishCaught(questSec.getInt("fish-caught"));
bukkitQuestData.setFishCaught(questSec.getInt("fish-caught"));
}
if (questSec.contains("players-killed")) {
quester.getQuestDataOrDefault(quest).setPlayersKilled(questSec.getInt("players-killed"));
bukkitQuestData.setPlayersKilled(questSec.getInt("players-killed"));
}
if (questSec.contains("mobs-killed-amounts")) {
final List<Integer> mobAmounts = questSec.getIntegerList("mobs-killed-amounts");
quester.getQuestDataOrDefault(quest).setMobNumKilled(new LinkedList<>(mobAmounts));
bukkitQuestData.setMobNumKilled(new LinkedList<>(mobAmounts));
}
if (questSec.contains("has-reached-location")) {
final List<Boolean> hasReached = questSec.getBooleanList("has-reached-location");
quester.getQuestDataOrDefault(quest).setLocationsReached(new LinkedList<>(hasReached));
bukkitQuestData.setLocationsReached(new LinkedList<>(hasReached));
}
if (questSec.contains("mob-tame-amounts")) {
final List<Integer> tameAmounts = questSec.getIntegerList("mob-tame-amounts");
quester.getQuestDataOrDefault(quest).setMobsTamed(new LinkedList<>(tameAmounts));
bukkitQuestData.setMobsTamed(new LinkedList<>(tameAmounts));
}
if (questSec.contains("sheep-sheared")) {
final List<Integer> sheepAmounts = questSec.getIntegerList("sheep-sheared");
quester.getQuestDataOrDefault(quest).setSheepSheared(new LinkedList<>(sheepAmounts));
bukkitQuestData.setSheepSheared(new LinkedList<>(sheepAmounts));
}
if (questSec.contains("passwords-said")) {
final List<Boolean> passAmounts = questSec.getBooleanList("passwords-said");
quester.getQuestDataOrDefault(quest).setPasswordsSaid(new LinkedList<>(passAmounts));
bukkitQuestData.setPasswordsSaid(new LinkedList<>(passAmounts));
}
if (questSec.contains("custom-objective-counts")) {
final List<Integer> customObjCounts = questSec.getIntegerList("custom-objective-counts");
quester.getQuestDataOrDefault(quest).setCustomObjectiveCounts(new LinkedList<>(customObjCounts));
bukkitQuestData.setCustomObjectiveCounts(new LinkedList<>(customObjCounts));
}
if (questSec.contains("stage-delay")) {
quester.getQuestDataOrDefault(quest).setDelayTimeLeft(questSec.getLong("stage-delay"));
bukkitQuestData.setDelayTimeLeft(questSec.getLong("stage-delay"));
}
questProgress.put(quest, bukkitQuestData);
}