diff options
| author | Krakenied <Krakenied1@gmail.com> | 2022-08-22 23:21:10 +0200 |
|---|---|---|
| committer | Krakenied <Krakenied1@gmail.com> | 2022-08-23 05:20:18 +0200 |
| commit | 826da674adc55748d85623af1fab5d4e327df732 (patch) | |
| tree | 87d99432c77e8cbd6cc8e9053209678ba9f50631 /bukkit/src/main/java/com | |
| parent | 8ed5f8c564138a7eb84864eeb4ebcf8929f21102 (diff) | |
Apply fixes to smelting task type as well
Diffstat (limited to 'bukkit/src/main/java/com')
6 files changed, 49 insertions, 51 deletions
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java index 04897c00..e4b20118 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java @@ -219,8 +219,7 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests { if (version <= 8) { versionSpecificHandler = new VersionSpecificHandler8(); } else switch (version) { - case 9, 10, 11, 12, 13 -> versionSpecificHandler = new VersionSpecificHandler9(); - case 14, 15 -> versionSpecificHandler = new VersionSpecificHandler14(); + case 9, 10, 11, 12, 13, 14, 15 -> versionSpecificHandler = new VersionSpecificHandler9(); default -> versionSpecificHandler = new VersionSpecificHandler16(); } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler.java index 7fd1b1e8..f1b750cd 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler.java @@ -2,12 +2,12 @@ package com.leonardobishop.quests.bukkit.hook.versionspecific; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.ItemStack; //TODO move titles, itemgetter, other version specific shite in here public interface VersionSpecificHandler { + @SuppressWarnings("unused") int getMinecraftVersion(); boolean isPlayerGliding(Player player); @@ -16,11 +16,11 @@ public interface VersionSpecificHandler { boolean isOffHandSwap(ClickType clickType); + @SuppressWarnings("BooleanMethodIsAlwaysInverted") boolean isOffHandEmpty(Player player); int getAvailableSpace(Player player, ItemStack newItemStack); - boolean isFurnaceInventoryType(InventoryType type); - + @SuppressWarnings("BooleanMethodIsAlwaysInverted") boolean isHotbarMoveAndReaddSupported(); } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler14.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler14.java deleted file mode 100644 index 659f7fa9..00000000 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler14.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.leonardobishop.quests.bukkit.hook.versionspecific; - -import org.bukkit.event.inventory.InventoryType; - -public class VersionSpecificHandler14 extends VersionSpecificHandler9 implements VersionSpecificHandler { - - @Override - public int getMinecraftVersion() { - return 14; - } - - @Override - public boolean isFurnaceInventoryType(InventoryType type) { - return type == InventoryType.BLAST_FURNACE || type == InventoryType.FURNACE || type == InventoryType.SMOKER; - } -} diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler16.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler16.java index 66ae87e2..5e82a499 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler16.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler16.java @@ -4,7 +4,7 @@ import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; -public class VersionSpecificHandler16 extends VersionSpecificHandler14 implements VersionSpecificHandler { +public class VersionSpecificHandler16 extends VersionSpecificHandler9 implements VersionSpecificHandler { @Override public int getMinecraftVersion() { diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler8.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler8.java index 2760a6f8..386f692d 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler8.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler8.java @@ -2,7 +2,6 @@ package com.leonardobishop.quests.bukkit.hook.versionspecific; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; @@ -56,11 +55,6 @@ public class VersionSpecificHandler8 implements VersionSpecificHandler { } @Override - public boolean isFurnaceInventoryType(InventoryType type) { - return type == InventoryType.FURNACE; - } - - @Override public boolean isHotbarMoveAndReaddSupported() { return true; } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/SmeltingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/SmeltingTaskType.java index 5c8de362..fd987618 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/SmeltingTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/SmeltingTaskType.java @@ -2,6 +2,7 @@ package com.leonardobishop.quests.bukkit.tasktype.type; import com.google.common.collect.HashBasedTable; import com.google.common.collect.Table; +import com.google.common.math.IntMath; import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin; import com.leonardobishop.quests.bukkit.item.QuestItem; import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType; @@ -18,8 +19,12 @@ import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.InventoryAction; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryType; +import org.bukkit.inventory.FurnaceInventory; import org.bukkit.inventory.ItemStack; +import java.math.RoundingMode; +import java.util.Arrays; + public final class SmeltingTaskType extends BukkitTaskType { private final BukkitQuestsPlugin plugin; @@ -33,6 +38,11 @@ public final class SmeltingTaskType extends BukkitTaskType { super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "amount")); super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "amount")); super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "data")); + super.addConfigValidator(TaskUtils.useAcceptedValuesConfigValidator(this, Arrays.asList( + "smoker", + "blast_furnace", + "furnace" + ), "mode")); } @Override @@ -42,24 +52,34 @@ public final class SmeltingTaskType extends BukkitTaskType { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onInventoryClick(InventoryClickEvent event) { - ItemStack item = event.getCurrentItem(); - ItemStack cursor = event.getCursor(); - InventoryType inventoryType = event.getInventory().getType(); - - if (event.getRawSlot() != 2 || !plugin.getVersionSpecificHandler().isFurnaceInventoryType(inventoryType) - || item == null || item.getType() == Material.AIR || event.getAction() == InventoryAction.NOTHING - || event.getAction() == InventoryAction.COLLECT_TO_CURSOR && cursor != null && cursor.getAmount() == cursor.getMaxStackSize() - || event.getClick() == ClickType.NUMBER_KEY && event.getAction() == InventoryAction.HOTBAR_MOVE_AND_READD - || event.getClick() == ClickType.DROP && event.getAction() == InventoryAction.DROP_ONE_SLOT && event.getCursor() != null - || !(event.getWhoClicked() instanceof Player player)) { + //noinspection DuplicatedCode + if (!(event.getInventory() instanceof FurnaceInventory) || event.getRawSlot() != 2 + || (event.getCurrentItem() == null || event.getCurrentItem().getType() == Material.AIR) + || event.getAction() == InventoryAction.NOTHING + || event.getAction() == InventoryAction.COLLECT_TO_CURSOR && event.getClick() == ClickType.DOUBLE_CLICK && (event.getCursor() != null && event.getCursor().getType() != Material.AIR) && ((event.getCursor().getAmount() + event.getCurrentItem().getAmount() > event.getCursor().getMaxStackSize()) || event.getCursor().getType() != event.getCurrentItem().getType()) // does not apply to crafting tables lol + || event.getAction() == InventoryAction.HOTBAR_MOVE_AND_READD && event.getClick() == ClickType.NUMBER_KEY && !plugin.getVersionSpecificHandler().isHotbarMoveAndReaddSupported() // https://discord.com/channels/211910297810632704/510553623022010371/1011035743331819550 + || event.getAction() == InventoryAction.DROP_ONE_SLOT && event.getClick() == ClickType.DROP && (event.getCursor() != null && event.getCursor().getType() != Material.AIR) // https://github.com/LMBishop/Quests/issues/430 + || event.getAction() == InventoryAction.DROP_ALL_SLOT && event.getClick() == ClickType.CONTROL_DROP && (event.getCursor() != null && event.getCursor().getType() != Material.AIR) // https://github.com/LMBishop/Quests/issues/430 + || event.getAction() == InventoryAction.UNKNOWN && event.getClick() == ClickType.UNKNOWN // for better ViaVersion support + || !(event.getWhoClicked() instanceof Player player) + || plugin.getVersionSpecificHandler().isOffHandSwap(event.getClick()) && !plugin.getVersionSpecificHandler().isOffHandEmpty(player)) { return; } - int eventAmount = item.getAmount(); - if (event.isShiftClick()) { - eventAmount = Math.min(eventAmount, plugin.getVersionSpecificHandler().getAvailableSpace(player, item)); - if (eventAmount == 0) { - return; + ItemStack item = event.getCurrentItem(); + + int eventAmount; + if (event.getAction() == InventoryAction.DROP_ONE_SLOT) { + eventAmount = 1; + } else if (event.getAction() == InventoryAction.PICKUP_HALF) { + eventAmount = IntMath.divide(item.getAmount(), 2, RoundingMode.CEILING); + } else { + eventAmount = item.getAmount(); + if (event.isShiftClick() && event.getClick() != ClickType.CONTROL_DROP) { // https://github.com/LMBishop/Quests/issues/317 + eventAmount = Math.min(eventAmount, plugin.getVersionSpecificHandler().getAvailableSpace(player, item)); + if (eventAmount == 0) { + return; + } } } @@ -68,6 +88,8 @@ public final class SmeltingTaskType extends BukkitTaskType { return; } + final InventoryType inventoryType = event.getInventory().getType(); + for (TaskUtils.PendingTask pendingTask : TaskUtils.getApplicableTasks(player.getPlayer(), qPlayer, this, TaskUtils.TaskConstraint.WORLD)) { Quest quest = pendingTask.quest(); Task task = pendingTask.task(); @@ -75,8 +97,8 @@ public final class SmeltingTaskType extends BukkitTaskType { super.debug("Player smelted item", quest.getId(), task.getId(), player.getUniqueId()); - if (task.getConfigValue("mode") != null - && !inventoryType.toString().equalsIgnoreCase(task.getConfigValue("mode").toString())) { + final String mode = (String) task.getConfigValue("mode"); + if (mode != null && !inventoryType.name().equalsIgnoreCase(mode)) { super.debug("Specific mode is required, but the actual mode '" + inventoryType + "' does not match, continuing...", quest.getId(), task.getId(), player.getUniqueId()); continue; } @@ -95,16 +117,15 @@ public final class SmeltingTaskType extends BukkitTaskType { } } - int smeltedItemsNeeded = (int) task.getConfigValue("amount"); + int amount = (int) task.getConfigValue("amount"); int progress = TaskUtils.getIntegerTaskProgress(taskProgress); - int newAmount = progress + eventAmount; - taskProgress.setProgress(newAmount); - super.debug("Updating task progress (now " + (newAmount) + ")", quest.getId(), task.getId(), player.getUniqueId()); + taskProgress.setProgress(progress + eventAmount); + super.debug("Updating task progress (now " + (progress + eventAmount) + ")", quest.getId(), task.getId(), player.getUniqueId()); - if (newAmount >= smeltedItemsNeeded) { + if ((int) taskProgress.getProgress() >= amount) { super.debug("Marking task as complete", quest.getId(), task.getId(), player.getUniqueId()); - taskProgress.setProgress(newAmount); + taskProgress.setProgress(amount); taskProgress.setCompleted(true); } } |
