From 05a6d46a0d510a4b1bfff3bd4300f07e2d62aa7d Mon Sep 17 00:00:00 2001 From: Indyuce Date: Sun, 27 Dec 2020 23:58:27 +0100 Subject: [PATCH] !Separated BlockType#place and BlockType#regen --- .../Indyuce/mmocore/api/block/BlockType.java | 19 +++++++++++++------ .../mmocore/api/block/SkullBlockType.java | 14 ++++++++------ .../mmocore/api/block/VanillaBlockType.java | 19 ++++++++++--------- .../mmocore/manager/CustomBlockManager.java | 8 +++----- 4 files changed, 34 insertions(+), 26 deletions(-) diff --git a/src/main/java/net/Indyuce/mmocore/api/block/BlockType.java b/src/main/java/net/Indyuce/mmocore/api/block/BlockType.java index f9af5a46..aa86aa21 100644 --- a/src/main/java/net/Indyuce/mmocore/api/block/BlockType.java +++ b/src/main/java/net/Indyuce/mmocore/api/block/BlockType.java @@ -1,13 +1,20 @@ package net.Indyuce.mmocore.api.block; -import org.bukkit.Location; import org.bukkit.block.Block; import net.Indyuce.mmocore.api.block.BlockInfo.RegeneratingBlock; public interface BlockType { - void place(Location loc, RegeneratingBlock regenerating); - void regen(Location loc, RegeneratingBlock regenerating); + + /** + * Called when placing temporary blocks + */ + void place(RegeneratingBlock placed); + + /** + * Called when regenerating an older block with block regen + */ + void regenerate(RegeneratingBlock regenerating); /** * Generates a key used to store the BlockInfo instance in the manager map, @@ -16,9 +23,9 @@ public interface BlockType { String generateKey(); /** - * GenerateKey() determines if the block is handled by that block type, - * breakRestrictions(Block) applies some extra break restrictions; returns - * TRUE if the block can be broken + * Applies some extra break restrictions; returns TRUE if the block can be + * broken. This method is used to prevent non mature crops from being broken + * for example */ boolean breakRestrictions(Block block); } diff --git a/src/main/java/net/Indyuce/mmocore/api/block/SkullBlockType.java b/src/main/java/net/Indyuce/mmocore/api/block/SkullBlockType.java index 5482de8d..43581090 100644 --- a/src/main/java/net/Indyuce/mmocore/api/block/SkullBlockType.java +++ b/src/main/java/net/Indyuce/mmocore/api/block/SkullBlockType.java @@ -1,12 +1,13 @@ package net.Indyuce.mmocore.api.block; +import org.bukkit.Location; +import org.bukkit.block.Block; + import net.Indyuce.mmocore.api.block.BlockInfo.RegeneratingBlock; import net.Indyuce.mmocore.api.util.MMOCoreUtils; import net.mmogroup.mmolib.MMOLib; import net.mmogroup.mmolib.api.MMOLineConfig; import net.mmogroup.mmolib.version.VersionMaterial; -import org.bukkit.Location; -import org.bukkit.block.Block; public class SkullBlockType implements BlockType { private final String value; @@ -26,7 +27,8 @@ public class SkullBlockType implements BlockType { } @Override - public void place(Location loc, RegeneratingBlock block) { + public void place(RegeneratingBlock block) { + Location loc = block.getLocation(); loc.getBlock().setType(VersionMaterial.PLAYER_HEAD.toMaterial()); // save skull orientation if replaced block is a player head @@ -37,14 +39,14 @@ public class SkullBlockType implements BlockType { } @Override - public void regen(Location loc, RegeneratingBlock block) { - // This makes sure that if a skull loses it's original rotation + public void regenerate(RegeneratingBlock block) { + Location loc = block.getLocation(); + // This makes sure that if a skull loses its original rotation // it can revert back to it when the base block is regenerated loc.getBlock().setBlockData(block.getBlockData()); MMOLib.plugin.getVersion().getWrapper().setSkullValue(loc.getBlock(), value); } - @Override public String generateKey() { return "vanilla-skull-" + value; diff --git a/src/main/java/net/Indyuce/mmocore/api/block/VanillaBlockType.java b/src/main/java/net/Indyuce/mmocore/api/block/VanillaBlockType.java index cfa368b1..60066aa2 100644 --- a/src/main/java/net/Indyuce/mmocore/api/block/VanillaBlockType.java +++ b/src/main/java/net/Indyuce/mmocore/api/block/VanillaBlockType.java @@ -1,6 +1,5 @@ package net.Indyuce.mmocore.api.block; -import net.mmogroup.mmolib.MMOLib; import org.apache.commons.lang.Validate; import org.bukkit.Location; import org.bukkit.Material; @@ -15,8 +14,8 @@ public class VanillaBlockType implements BlockType { private final Material type; /* - * allows to plant back crops with a custom age so that it does not always have - * to full grow again + * allows to plant back crops with a custom age so that it does not always + * have to full grow again */ private final int age; @@ -39,10 +38,11 @@ public class VanillaBlockType implements BlockType { } @Override - public void place(Location loc, RegeneratingBlock block) { - loc.getBlock().setType(type); + public void place(RegeneratingBlock block) { + Location loc = block.getLocation(); + block.getLocation().getBlock().setType(type); - BlockData state = loc.getBlock().getBlockData(); + BlockData state = block.getLocation().getBlock().getBlockData(); if (age > 0 && state instanceof Ageable) { ((Ageable) state).setAge(age); loc.getBlock().setBlockData(state); @@ -50,7 +50,9 @@ public class VanillaBlockType implements BlockType { } @Override - public void regen(Location loc, RegeneratingBlock block) { + public void regenerate(RegeneratingBlock block) { + Location loc = block.getLocation(); + loc.getBlock().setType(type); // Sets the original blocks old data (only when regenerating) loc.getBlock().setBlockData(block.getBlockData()); } @@ -62,7 +64,6 @@ public class VanillaBlockType implements BlockType { @Override public boolean breakRestrictions(Block block) { - return age == 0 - || (block.getBlockData() instanceof Ageable && ((Ageable) block.getBlockData()).getAge() >= age); + return age == 0 || (block.getBlockData() instanceof Ageable && ((Ageable) block.getBlockData()).getAge() >= age); } } diff --git a/src/main/java/net/Indyuce/mmocore/manager/CustomBlockManager.java b/src/main/java/net/Indyuce/mmocore/manager/CustomBlockManager.java index c9c74abb..47722315 100644 --- a/src/main/java/net/Indyuce/mmocore/manager/CustomBlockManager.java +++ b/src/main/java/net/Indyuce/mmocore/manager/CustomBlockManager.java @@ -106,7 +106,7 @@ public class CustomBlockManager extends MMOManager { } if (info.getRegeneratingBlock().getRegenerationInfo().hasTemporaryBlock()) - info.getRegeneratingBlock().getRegenerationInfo().getTemporaryBlock().place(info.getLocation(), info); + info.getRegeneratingBlock().getRegenerationInfo().getTemporaryBlock().place(info); } /** @@ -119,12 +119,10 @@ public class CustomBlockManager extends MMOManager { * This prevents any issue when editing lists being iterated */ private void regen(RegeneratingBlock info, boolean shutdown) { - Location infoLocation = info.getLocation(); // Get the chunk and load it async if needed. - PaperLib.getChunkAtAsync(infoLocation).whenComplete((chunk, ex) -> { - info.getRegeneratingBlock().getBlock().place(infoLocation, info); - info.getRegeneratingBlock().getBlock().regen(infoLocation, info); + PaperLib.getChunkAtAsync(info.getLocation()).whenComplete((chunk, ex) -> { + info.getRegeneratingBlock().getBlock().regenerate(info); info.getLocation().getBlock().getState().update(); if (!shutdown) active.remove(info);