From e497d763c4e9da17ed67d8fe9ce6ff8e530b8482 Mon Sep 17 00:00:00 2001 From: Flo56958 Date: Fri, 1 Mar 2024 16:37:59 +0100 Subject: [PATCH] Fix some Farming Oversights --- .../minetinker/api/gui/ButtonAction.java | 2 +- .../de/flo56958/minetinker/api/gui/GUI.java | 5 ++++ .../minetinker/modifiers/types/Drilling.java | 2 +- .../minetinker/modifiers/types/Echoing.java | 2 +- .../minetinker/modifiers/types/Farming.java | 25 +++++++++---------- .../minetinker/modifiers/types/Homing.java | 2 +- .../minetinker/modifiers/types/Magical.java | 4 +-- .../minetinker/modifiers/types/MultiShot.java | 4 +-- .../modifiers/types/Photosynthesis.java | 2 +- .../minetinker/modifiers/types/Power.java | 4 +-- .../modifiers/types/ShadowDive.java | 2 +- .../minetinker/modifiers/types/Tanky.java | 4 +-- .../minetinker/modifiers/types/Timber.java | 8 +++--- .../modifiers/types/VoidNetting.java | 4 +-- .../utils/ItemStatisticsHandler.java | 2 +- 15 files changed, 38 insertions(+), 34 deletions(-) diff --git a/src/main/java/de/flo56958/minetinker/api/gui/ButtonAction.java b/src/main/java/de/flo56958/minetinker/api/gui/ButtonAction.java index 3b6da129..2c6fa8c2 100644 --- a/src/main/java/de/flo56958/minetinker/api/gui/ButtonAction.java +++ b/src/main/java/de/flo56958/minetinker/api/gui/ButtonAction.java @@ -138,7 +138,7 @@ public void run(@NotNull final Player player) { } private void afterRun(@NotNull final Player player) { - Bukkit.getScheduler().runTaskLater(MineTinker.getPlugin(), + Bukkit.getScheduler().runTaskLater(this.button.getWindow().getGUI().getPlugin(), () -> button.getWindow().getGUI().show(player, button.getWindow()), 10); } } diff --git a/src/main/java/de/flo56958/minetinker/api/gui/GUI.java b/src/main/java/de/flo56958/minetinker/api/gui/GUI.java index 4b3c0cc9..159f3fb6 100644 --- a/src/main/java/de/flo56958/minetinker/api/gui/GUI.java +++ b/src/main/java/de/flo56958/minetinker/api/gui/GUI.java @@ -29,8 +29,13 @@ public class GUI implements Listener { private final List windows = Collections.synchronizedList(new ArrayList<>()); + private final JavaPlugin plugin; + public JavaPlugin getPlugin() { + return plugin; + } + private volatile boolean isClosed = true; public GUI(@NotNull final JavaPlugin plugin) { diff --git a/src/main/java/de/flo56958/minetinker/modifiers/types/Drilling.java b/src/main/java/de/flo56958/minetinker/modifiers/types/Drilling.java index d644dba2..b5a06f7a 100644 --- a/src/main/java/de/flo56958/minetinker/modifiers/types/Drilling.java +++ b/src/main/java/de/flo56958/minetinker/modifiers/types/Drilling.java @@ -152,7 +152,7 @@ public void effect(MTBlockBreakEvent event) { final float hardness = block.getType().getHardness(); final BlockFace finalFace = face.getOppositeFace(); - Bukkit.getScheduler().runTask(MineTinker.getPlugin(), () -> { + Bukkit.getScheduler().runTask(this.getSource(), () -> { for (int i = 1; i <= level; i++) { if (!drillingBlockBreak(block.getRelative(finalFace, i), hardness, player, tool)) break; diff --git a/src/main/java/de/flo56958/minetinker/modifiers/types/Echoing.java b/src/main/java/de/flo56958/minetinker/modifiers/types/Echoing.java index 3455614a..6e4c6924 100644 --- a/src/main/java/de/flo56958/minetinker/modifiers/types/Echoing.java +++ b/src/main/java/de/flo56958/minetinker/modifiers/types/Echoing.java @@ -164,7 +164,7 @@ public void reload() { this.radiusPerLevel = config.getInt("RadiusPerLevel", 10); if (isAllowed()) - this.taskID = Bukkit.getScheduler().scheduleSyncRepeatingTask(MineTinker.getPlugin(), + this.taskID = Bukkit.getScheduler().scheduleSyncRepeatingTask(this.getSource(), this.runnable, 5 * 20L, tickTime); else this.taskID = -1; diff --git a/src/main/java/de/flo56958/minetinker/modifiers/types/Farming.java b/src/main/java/de/flo56958/minetinker/modifiers/types/Farming.java index 658ca59f..95bd5d4a 100644 --- a/src/main/java/de/flo56958/minetinker/modifiers/types/Farming.java +++ b/src/main/java/de/flo56958/minetinker/modifiers/types/Farming.java @@ -37,7 +37,8 @@ public class Farming extends Modifier implements Listener { Material.CARROTS, Material.CARROT, Material.POTATOES, Material.POTATO, Material.BEETROOTS, Material.BEETROOT_SEEDS, - Material.NETHER_WART, Material.NETHER_WART + Material.NETHER_WART, Material.NETHER_WART, + Material.COCOA, Material.COCOA_BEANS ); private int boneMealDurabilityCost; @@ -122,11 +123,10 @@ public void onBoneMealTry(@NotNull final MTPlayerInteractEvent event) { if (block.getBlockData() instanceof Ageable ageable && ageable.getAge() == ageable.getMaximumAge()) return; // check if block is bone meal-able - block.applyBoneMeal(event.getEvent().getBlockFace()); + if (!block.applyBoneMeal(event.getEvent().getBlockFace())) return; final int damage = boneMealDurabilityCost - (boneMealDurabilityCostReductionPerLevel * (modManager.getModLevel(tool, this) - 1)); DataHandler.triggerItemDamage(player, tool, damage); - } @EventHandler(ignoreCancelled = true) @@ -141,24 +141,23 @@ private void onBlockBreak(@NotNull final MTBlockBreakEvent event) { final ItemStack tool = event.getTool(); if (!modManager.hasMod(tool, this)) return; - final Material material = block.getType(); - final Material required = materialMap.get(material); + final Material blockType = block.getType(); + final Material requiredItem = materialMap.get(blockType); - if (required == null) return; + if (requiredItem == null) return; - Bukkit.getScheduler().runTaskLater(getSource(), () -> { + Bukkit.getScheduler().runTaskLater(this.getSource(), () -> { if (player.getGameMode() == GameMode.CREATIVE || !requireSeeds) { - block.setType(material); + block.setType(blockType); return; } - for (ItemStack itemStack : player.getInventory().getContents()) { - if (itemStack == null || itemStack.getType() != required) - // This is necessary as even though this is annotated @NotNull, it's still null sometimes - continue; + for (final ItemStack itemStack : player.getInventory().getContents()) { + if (itemStack == null || itemStack.getType() != requiredItem) continue; itemStack.setAmount(itemStack.getAmount() - 1); - block.setType(material); + block.setType(blockType); + break; } }, 1L); } diff --git a/src/main/java/de/flo56958/minetinker/modifiers/types/Homing.java b/src/main/java/de/flo56958/minetinker/modifiers/types/Homing.java index 5849127c..b9324697 100644 --- a/src/main/java/de/flo56958/minetinker/modifiers/types/Homing.java +++ b/src/main/java/de/flo56958/minetinker/modifiers/types/Homing.java @@ -144,6 +144,6 @@ public void run() { } }; - Bukkit.getServer().getScheduler().runTaskLater(getSource(), runnable, 3); + Bukkit.getServer().getScheduler().runTaskLater(this.getSource(), runnable, 3); } } diff --git a/src/main/java/de/flo56958/minetinker/modifiers/types/Magical.java b/src/main/java/de/flo56958/minetinker/modifiers/types/Magical.java index 5ac26d15..c819813c 100644 --- a/src/main/java/de/flo56958/minetinker/modifiers/types/Magical.java +++ b/src/main/java/de/flo56958/minetinker/modifiers/types/Magical.java @@ -142,10 +142,10 @@ public void onShoot(final MTProjectileLaunchEvent event) { ChatWriter.logModifier(player, event, this, tool, "Cost(" + this.experienceCost + ")"); for (int i = 1; i < 30; i++) { - Bukkit.getScheduler().runTaskLater(MineTinker.getPlugin(), () -> arrow.setVelocity(velocity.clone()), i * 20L); + Bukkit.getScheduler().runTaskLater(this.getSource(), () -> arrow.setVelocity(velocity.clone()), i * 20L); } - Bukkit.getScheduler().runTaskLater(MineTinker.getPlugin(), () -> arrow.setGravity(true), 30 * 20L); + Bukkit.getScheduler().runTaskLater(this.getSource(), () -> arrow.setGravity(true), 30 * 20L); } @EventHandler(priority = EventPriority.LOWEST) diff --git a/src/main/java/de/flo56958/minetinker/modifiers/types/MultiShot.java b/src/main/java/de/flo56958/minetinker/modifiers/types/MultiShot.java index 4dc3c2cf..c1e8db37 100644 --- a/src/main/java/de/flo56958/minetinker/modifiers/types/MultiShot.java +++ b/src/main/java/de/flo56958/minetinker/modifiers/types/MultiShot.java @@ -134,7 +134,7 @@ public void onHit(final EntityDamageByEntityEvent event) { entity.setMaximumNoDamageTicks(0); event.setCancelled(false); - Bukkit.getScheduler().runTaskLater(MineTinker.getPlugin(), () -> entity.setMaximumNoDamageTicks(20), 20); + Bukkit.getScheduler().runTaskLater(this.getSource(), () -> entity.setMaximumNoDamageTicks(20), 20); } @EventHandler(ignoreCancelled = true) @@ -193,7 +193,7 @@ public void onShoot(final MTProjectileLaunchEvent event) { if (!hasArrow) break; } - Bukkit.getScheduler().runTaskLater(MineTinker.getPlugin(), () -> { + Bukkit.getScheduler().runTaskLater(this.getSource(), () -> { final Arrow arr = loc.getWorld().spawnArrow(loc, vel, (float) vel.length(), (float) spread); arr.setShooter(player); arr.setShotFromCrossbow(arrow.isShotFromCrossbow()); diff --git a/src/main/java/de/flo56958/minetinker/modifiers/types/Photosynthesis.java b/src/main/java/de/flo56958/minetinker/modifiers/types/Photosynthesis.java index f53f5753..d5b330ad 100644 --- a/src/main/java/de/flo56958/minetinker/modifiers/types/Photosynthesis.java +++ b/src/main/java/de/flo56958/minetinker/modifiers/types/Photosynthesis.java @@ -246,7 +246,7 @@ public void reload() { for (final Player player : Bukkit.getOnlinePlayers()) data.putIfAbsent(player.getUniqueId(), new Tupel(player.getLocation(), System.currentTimeMillis(), false)); - this.taskID = Bukkit.getScheduler().scheduleSyncRepeatingTask(MineTinker.getPlugin(), this.runnable, 5 * 20L, this.tickTime); + this.taskID = Bukkit.getScheduler().scheduleSyncRepeatingTask(this.getSource(), this.runnable, 5 * 20L, this.tickTime); } else this.taskID = -1; } diff --git a/src/main/java/de/flo56958/minetinker/modifiers/types/Power.java b/src/main/java/de/flo56958/minetinker/modifiers/types/Power.java index a57742fc..dcf1b646 100644 --- a/src/main/java/de/flo56958/minetinker/modifiers/types/Power.java +++ b/src/main/java/de/flo56958/minetinker/modifiers/types/Power.java @@ -251,7 +251,7 @@ public void onInteract(@NotNull MTPlayerInteractEvent event) { if (b.getType().isAir()) continue; if (events.putIfAbsent(b.getLocation(), 0) != null) continue; - Bukkit.getScheduler().runTaskLater(getSource(), + Bukkit.getScheduler().runTaskLater(this.getSource(), () -> Bukkit.getPluginManager().callEvent( new PlayerInteractEvent(player, event.getEvent().getAction(), tool, b, event.getEvent().getBlockFace())), 1); @@ -351,7 +351,7 @@ public void createStrippedLogs(@NotNull final MTPlayerInteractEvent event) { private void powerBlockBreak(@Nullable final Block block, final float centralBlockHardness, final Player player, final ItemStack tool, final BlockFace face) { if (block == null) return; - Bukkit.getScheduler().runTask(MineTinker.getPlugin(), () -> { + Bukkit.getScheduler().runTask(this.getSource(), () -> { if (treatAsWhitelist ^ blacklist.contains(block.getType())) return; if (block.getDrops(tool).isEmpty()) return; if (block.getType().getHardness() > centralBlockHardness + 2) // + 2 so you can mine ore as well diff --git a/src/main/java/de/flo56958/minetinker/modifiers/types/ShadowDive.java b/src/main/java/de/flo56958/minetinker/modifiers/types/ShadowDive.java index ef1418b1..f01a08db 100644 --- a/src/main/java/de/flo56958/minetinker/modifiers/types/ShadowDive.java +++ b/src/main/java/de/flo56958/minetinker/modifiers/types/ShadowDive.java @@ -127,7 +127,7 @@ public void reload() { this.description = this.description.replaceAll("%level", String.valueOf(this.requiredLightLevel)); - if (this.isAllowed()) task = Bukkit.getScheduler().runTaskTimer(MineTinker.getPlugin(), runnable, 0,5); + if (this.isAllowed()) task = Bukkit.getScheduler().runTaskTimer(this.getSource(), runnable, 0,5); } private void hidePlayer(Player p, int level) { diff --git a/src/main/java/de/flo56958/minetinker/modifiers/types/Tanky.java b/src/main/java/de/flo56958/minetinker/modifiers/types/Tanky.java index 3418d16b..e5e7c270 100644 --- a/src/main/java/de/flo56958/minetinker/modifiers/types/Tanky.java +++ b/src/main/java/de/flo56958/minetinker/modifiers/types/Tanky.java @@ -146,7 +146,7 @@ public void onJoin(PlayerJoinEvent event) { if (modManager.isArmorViable(chest) && modManager.hasMod(chest, this)) { health = DataHandler.getTag(chest, "modifier_tanky_health_save", PersistentDataType.DOUBLE); if (health != null && health > 0) { - Bukkit.getScheduler().runTaskLater(MineTinker.getPlugin(), () -> { + Bukkit.getScheduler().runTaskLater(this.getSource(), () -> { try { event.getPlayer().setHealth(health); } catch(IllegalArgumentException ignored) {} @@ -160,7 +160,7 @@ public void onJoin(PlayerJoinEvent event) { if (modManager.isArmorViable(chest) && modManager.hasMod(chest, this)) { health = DataHandler.getTag(chest, "modifier_tanky_health_save", PersistentDataType.DOUBLE); if (health != null) { - Bukkit.getScheduler().runTaskLater(MineTinker.getPlugin(), () -> event.getPlayer().setHealth(health), 10L); + Bukkit.getScheduler().runTaskLater(this.getSource(), () -> event.getPlayer().setHealth(health), 10L); DataHandler.removeTag(chest, "modifier_tanky_health_save"); } else return; } else return; diff --git a/src/main/java/de/flo56958/minetinker/modifiers/types/Timber.java b/src/main/java/de/flo56958/minetinker/modifiers/types/Timber.java index 9647dab9..2ac5acfa 100644 --- a/src/main/java/de/flo56958/minetinker/modifiers/types/Timber.java +++ b/src/main/java/de/flo56958/minetinker/modifiers/types/Timber.java @@ -135,7 +135,7 @@ public void effect(@NotNull MTBlockBreakEvent event) { final int sap_idx = block.getType().toString().lastIndexOf('_'); final Material saplingType = Material.getMaterial(block.getType().toString().substring(0, sap_idx) + "_SAPLING"); - Bukkit.getScheduler().runTaskAsynchronously(MineTinker.getPlugin(), () -> { + Bukkit.getScheduler().runTaskAsynchronously(this.getSource(), () -> { final HashSet trunkBlocks = new HashSet<>(); final ArrayList groundBlocks = new ArrayList<>(); if (!parseTree(block, trunkBlocks, groundBlocks, allowed) && !ToolType.SHEARS.contains(tool.getType())) return; @@ -143,7 +143,7 @@ public void effect(@NotNull MTBlockBreakEvent event) { // Sort blocks by distance to the original block (closest first) and break them in that order trunkBlocksList.sort(Comparator.comparingDouble(o -> (o.getLocation().distance(block.getLocation())))); for (final Block trunkBlock : trunkBlocksList) { - Bukkit.getScheduler().runTask(MineTinker.getPlugin(), () -> { + Bukkit.getScheduler().runTask(this.getSource(), () -> { events.put(trunkBlock.getLocation(), 0); try { DataHandler.playerBreakBlock(player, trunkBlock, tool); @@ -153,7 +153,7 @@ public void effect(@NotNull MTBlockBreakEvent event) { }); } - Bukkit.getScheduler().runTask(MineTinker.getPlugin(), () -> { + Bukkit.getScheduler().runTask(this.getSource(), () -> { //Track stats final int stat = DataHandler.getTagOrDefault(tool, getKey() + "_stat_used", PersistentDataType.INTEGER, 0); DataHandler.setTag(tool, getKey() + "_stat_used", stat + 1, PersistentDataType.INTEGER); @@ -169,7 +169,7 @@ public void effect(@NotNull MTBlockBreakEvent event) { })); // try to place saplings on all ground blocks - Bukkit.getScheduler().runTask(MineTinker.getPlugin(), () -> { + Bukkit.getScheduler().runTask(this.getSource(), () -> { for (final Block groundBlock : groundBlocks) { for (final ItemStack stack : player.getInventory().getContents()) { if (stack == null) continue; diff --git a/src/main/java/de/flo56958/minetinker/modifiers/types/VoidNetting.java b/src/main/java/de/flo56958/minetinker/modifiers/types/VoidNetting.java index dfa4ef90..11047780 100644 --- a/src/main/java/de/flo56958/minetinker/modifiers/types/VoidNetting.java +++ b/src/main/java/de/flo56958/minetinker/modifiers/types/VoidNetting.java @@ -120,7 +120,7 @@ public void onDamage(EntityDamageEvent event) { // Add small cooldown to improve server performance setCooldown(armor, 500 /* ms */); - Bukkit.getScheduler().runTaskAsynchronously(MineTinker.getPlugin(), () -> { + Bukkit.getScheduler().runTaskAsynchronously(this.getSource(), () -> { // run effect async as it does not need to stop all action on server if search takes to long final World world = player.getWorld(); Location loc = player.getLocation(); @@ -156,7 +156,7 @@ public void onDamage(EntityDamageEvent event) { this.getCooldown(level) / 1000)); final Location finalLoc = loc; - Bukkit.getScheduler().runTask(MineTinker.getPlugin(), () -> { //Teleport needs to be in sync + Bukkit.getScheduler().runTask(this.getSource(), () -> { //Teleport needs to be in sync // Slow the fall player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW_FALLING, 20, 0, false)); player.teleport(finalLoc); diff --git a/src/main/java/de/flo56958/minetinker/utils/ItemStatisticsHandler.java b/src/main/java/de/flo56958/minetinker/utils/ItemStatisticsHandler.java index 6baa0a6b..81e8450c 100644 --- a/src/main/java/de/flo56958/minetinker/utils/ItemStatisticsHandler.java +++ b/src/main/java/de/flo56958/minetinker/utils/ItemStatisticsHandler.java @@ -36,7 +36,7 @@ public class ItemStatisticsHandler implements Listener { @NotNull public static GUI getGUI(final ItemStack item) { GUI gui = new GUI(MineTinker.getPlugin()); - Bukkit.getScheduler().runTaskLater(MineTinker.getPlugin(), gui::close, 5 * 60 * 20); + Bukkit.getScheduler().runTaskLater(gui.getPlugin(), gui::close, 5 * 60 * 20); List mods = ModManager.instance().getAllowedMods(); mods.sort(Comparator.comparing(Modifier::getName));