diff --git a/core/src/main/java/com/volmit/iris/core/link/ExternalDataProvider.java b/core/src/main/java/com/volmit/iris/core/link/ExternalDataProvider.java index b3104d2e5..7e3b4d00e 100644 --- a/core/src/main/java/com/volmit/iris/core/link/ExternalDataProvider.java +++ b/core/src/main/java/com/volmit/iris/core/link/ExternalDataProvider.java @@ -4,7 +4,7 @@ import com.volmit.iris.engine.framework.Engine; import lombok.Getter; import lombok.RequiredArgsConstructor; import org.bukkit.Bukkit; -import org.bukkit.Location; +import org.bukkit.block.Block; import org.bukkit.block.data.BlockData; import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.Plugin; @@ -30,7 +30,7 @@ public abstract class ExternalDataProvider { public abstract BlockData getBlockData(Identifier blockId) throws MissingResourceException; public abstract ItemStack getItemStack(Identifier itemId) throws MissingResourceException; - public void processUpdate(Engine engine, Location location, Identifier blockId) {}; + public void processUpdate(Engine engine, Block block, Identifier blockId) {}; public abstract Identifier[] getBlockTypes(); diff --git a/core/src/main/java/com/volmit/iris/core/link/HMCLeavesDataProvider.java b/core/src/main/java/com/volmit/iris/core/link/HMCLeavesDataProvider.java index 2f7d87222..3e0a384c9 100644 --- a/core/src/main/java/com/volmit/iris/core/link/HMCLeavesDataProvider.java +++ b/core/src/main/java/com/volmit/iris/core/link/HMCLeavesDataProvider.java @@ -9,7 +9,9 @@ import com.volmit.iris.util.reflect.WrappedReturningMethod; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.block.Block; import org.bukkit.block.data.BlockData; +import org.bukkit.block.data.type.Leaves; import org.bukkit.inventory.ItemStack; import java.util.Map; @@ -54,7 +56,10 @@ public class HMCLeavesDataProvider extends ExternalDataProvider { Material material = worldBlockType.invoke(o, new Object[0]); if (material == null) throw new MissingResourceException("Failed to find BlockData!", blockId.namespace(), blockId.key()); - return new IrisBlockData(Bukkit.createBlockData(material), blockId); + BlockData blockData = Bukkit.createBlockData(material); + if (blockData instanceof Leaves leaves) + leaves.setPersistent(true); + return new IrisBlockData(blockData, blockId); } @Override @@ -65,8 +70,10 @@ public class HMCLeavesDataProvider extends ExternalDataProvider { } @Override - public void processUpdate(Engine engine, Location location, Identifier blockId) { - setCustomBlock.invoke(apiInstance, new Object[]{location, blockId.key(), true}); + public void processUpdate(Engine engine, Block block, Identifier blockId) { + Boolean result = setCustomBlock.invoke(apiInstance, new Object[]{block.getLocation(), blockId.key(), true}); + if (result == null || !result) + Iris.warn("Failed to set custom block! " + blockId.key() + " " + block.getX() + " " + block.getY() + " " + block.getZ()); } @Override diff --git a/core/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java b/core/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java index feaacb769..58e21883d 100644 --- a/core/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java +++ b/core/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java @@ -36,9 +36,8 @@ import io.th0rgal.oraxen.mechanics.provided.gameplay.furniture.FurnitureMechanic import io.th0rgal.oraxen.mechanics.provided.gameplay.noteblock.NoteBlockMechanicFactory; import io.th0rgal.oraxen.mechanics.provided.gameplay.stringblock.StringBlockMechanicFactory; import org.bukkit.Bukkit; -import org.bukkit.Chunk; -import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.block.Block; import org.bukkit.block.data.BlockData; import org.bukkit.block.data.MultipleFacing; import org.bukkit.inventory.ItemStack; @@ -90,10 +89,10 @@ public class OraxenDataProvider extends ExternalDataProvider { } @Override - public void processUpdate(Engine engine, Location location, Identifier blockId) { + public void processUpdate(Engine engine, Block block, Identifier blockId) { Mechanic mechanic = getFactory(blockId).getMechanic(blockId.key()); if (mechanic instanceof FurnitureMechanic f) { - f.place(location); + f.place(block.getLocation()); } } diff --git a/core/src/main/java/com/volmit/iris/core/service/ExternalDataSVC.java b/core/src/main/java/com/volmit/iris/core/service/ExternalDataSVC.java index d466269ad..53f566586 100644 --- a/core/src/main/java/com/volmit/iris/core/service/ExternalDataSVC.java +++ b/core/src/main/java/com/volmit/iris/core/service/ExternalDataSVC.java @@ -25,7 +25,7 @@ import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.plugin.IrisService; import lombok.Data; import org.bukkit.Bukkit; -import org.bukkit.Location; +import org.bukkit.block.Block; import org.bukkit.block.data.BlockData; import org.bukkit.event.EventHandler; import org.bukkit.event.server.PluginEnableEvent; @@ -111,13 +111,13 @@ public class ExternalDataSVC implements IrisService { } } - public void processUpdate(Engine engine, Location location, Identifier blockId) { + public void processUpdate(Engine engine, Block block, Identifier blockId) { Optional provider = activeProviders.stream().filter(p -> p.isValidProvider(blockId, true)).findFirst(); if (provider.isEmpty()) { Iris.warn("No matching Provider found for modded material \"%s\"!", blockId); return; } - provider.get().processUpdate(engine, location, blockId); + provider.get().processUpdate(engine, block, blockId); } public Identifier[] getAllBlockIdentifiers() { diff --git a/core/src/main/java/com/volmit/iris/engine/framework/Engine.java b/core/src/main/java/com/volmit/iris/engine/framework/Engine.java index d80b23d1b..e1f6560dc 100644 --- a/core/src/main/java/com/volmit/iris/engine/framework/Engine.java +++ b/core/src/main/java/com/volmit/iris/engine/framework/Engine.java @@ -259,6 +259,8 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat } if (data instanceof IrisBlockData d) { getMantle().getMantle().set(x, y, z, d.getCustom()); + } else { + getMantle().getMantle().remove(x, y, z, Identifier.class); } } @@ -285,7 +287,7 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat })); getMantle().getMantle().raiseFlag(c.getX(), c.getZ(), MantleFlag.CUSTOM, () -> J.s(() -> { getMantle().getMantle().iterateChunk(c.getX(), c.getZ(), Identifier.class, (x, y, z, v) -> { - Iris.service(ExternalDataSVC.class).processUpdate(this, new Location(c.getWorld(), x, y + getWorld().minHeight(), z), v); + Iris.service(ExternalDataSVC.class).processUpdate(this, c.getBlock(x & 15, y + getWorld().minHeight(), z & 15), v); }); }));