diff --git a/core/src/main/java/com/volmit/iris/core/commands/CommandObject.java b/core/src/main/java/com/volmit/iris/core/commands/CommandObject.java index 57293f222..899ff7270 100644 --- a/core/src/main/java/com/volmit/iris/core/commands/CommandObject.java +++ b/core/src/main/java/com/volmit/iris/core/commands/CommandObject.java @@ -28,6 +28,7 @@ import com.volmit.iris.core.tools.IrisConverter; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.object.*; import com.volmit.iris.util.data.Cuboid; +import com.volmit.iris.util.data.IrisCustomData; import com.volmit.iris.util.data.registry.Materials; import com.volmit.iris.util.decree.DecreeExecutor; import com.volmit.iris.util.decree.DecreeOrigin; @@ -77,7 +78,10 @@ public class CommandObject implements DecreeExecutor { futureBlockChanges.put(block, block.getBlockData()); - block.setBlockData(d); + if (d instanceof IrisCustomData data) { + block.setBlockData(data.getBase()); + Iris.warn("Tried to place custom block at " + x + ", " + y + ", " + z + " which is not supported!"); + } else block.setBlockData(d); } @Override 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 19c3b0935..02bf058a8 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 @@ -2,7 +2,7 @@ package com.volmit.iris.core.link; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.util.collection.KMap; -import com.volmit.iris.util.data.IrisBlockData; +import com.volmit.iris.util.data.IrisCustomData; import lombok.Getter; import lombok.NonNull; import lombok.RequiredArgsConstructor; @@ -49,7 +49,7 @@ public abstract class ExternalDataProvider { * @param blockId The id of the block to get * @param state The state of the block to get * @return Corresponding {@link BlockData} to the blockId - * may return {@link IrisBlockData} for blocks that need a world for placement + * may return {@link IrisCustomData} for blocks that need a world for placement * @throws MissingResourceException when the blockId is invalid */ @NotNull @@ -77,7 +77,7 @@ public abstract class ExternalDataProvider { /** * This method is used for placing blocks that need to use the plugins api - * it will only be called when the {@link ExternalDataProvider#getBlockData(Identifier, KMap)} returned a {@link IrisBlockData} + * it will only be called when the {@link ExternalDataProvider#getBlockData(Identifier, KMap)} returned a {@link IrisCustomData} * * @param engine The engine of the world the block is being placed in * @param block The block where the block should be placed 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 84f0a7a44..5f5a358fd 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 @@ -6,7 +6,7 @@ import com.volmit.iris.core.service.ExternalDataSVC; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.collection.KMap; -import com.volmit.iris.util.data.IrisBlockData; +import com.volmit.iris.util.data.IrisCustomData; import com.volmit.iris.util.reflect.WrappedField; import com.volmit.iris.util.reflect.WrappedReturningMethod; import org.bukkit.Bukkit; @@ -64,7 +64,7 @@ public class HMCLeavesDataProvider extends ExternalDataProvider { BlockData blockData = Bukkit.createBlockData(material); if (IrisSettings.get().getGenerator().preventLeafDecay && blockData instanceof Leaves leaves) leaves.setPersistent(true); - return new IrisBlockData(blockData, ExternalDataSVC.buildState(blockId, state)); + return new IrisCustomData(blockData, ExternalDataSVC.buildState(blockId, state)); } @NotNull diff --git a/core/src/main/java/com/volmit/iris/core/link/MythicCrucibleDataProvider.java b/core/src/main/java/com/volmit/iris/core/link/MythicCrucibleDataProvider.java index 4c7a3cd88..d62462c38 100644 --- a/core/src/main/java/com/volmit/iris/core/link/MythicCrucibleDataProvider.java +++ b/core/src/main/java/com/volmit/iris/core/link/MythicCrucibleDataProvider.java @@ -27,7 +27,7 @@ import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.data.B; -import com.volmit.iris.util.data.IrisBlockData; +import com.volmit.iris.util.data.IrisCustomData; import com.volmit.iris.util.math.RNG; import io.lumine.mythic.bukkit.BukkitAdapter; import io.lumine.mythic.bukkit.utils.serialize.Chroma; @@ -71,7 +71,7 @@ public class MythicCrucibleDataProvider extends ExternalDataProvider { CustomBlockItemContext blockItemContext = crucibleItem.getBlockData(); FurnitureItemContext furnitureItemContext = crucibleItem.getFurnitureData(); if (furnitureItemContext != null) { - return new IrisBlockData(B.getAir(), ExternalDataSVC.buildState(blockId, state)); + return new IrisCustomData(B.getAir(), ExternalDataSVC.buildState(blockId, state)); } else if (blockItemContext != null) { return blockItemContext.getBlockData(); } diff --git a/core/src/main/java/com/volmit/iris/core/link/NexoDataProvider.java b/core/src/main/java/com/volmit/iris/core/link/NexoDataProvider.java index 82463bb60..cf30f26c7 100644 --- a/core/src/main/java/com/volmit/iris/core/link/NexoDataProvider.java +++ b/core/src/main/java/com/volmit/iris/core/link/NexoDataProvider.java @@ -11,7 +11,7 @@ import com.volmit.iris.engine.data.cache.Cache; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.data.B; -import com.volmit.iris.util.data.IrisBlockData; +import com.volmit.iris.util.data.IrisCustomData; import com.volmit.iris.util.math.RNG; import org.bukkit.Color; import org.bukkit.block.Block; @@ -49,9 +49,9 @@ public class NexoDataProvider extends ExternalDataProvider { BlockData data = NexoBlocks.blockData(blockId.key()); if (data == null) throw new MissingResourceException("Failed to find BlockData!", blockId.namespace(), blockId.key()); - return new IrisBlockData(data, blockState); + return new IrisCustomData(data, blockState); } else if (NexoFurniture.isFurniture(blockId.key())) { - return new IrisBlockData(B.getAir(), blockState); + return new IrisCustomData(B.getAir(), blockState); } throw new MissingResourceException("Failed to find BlockData!", blockId.namespace(), blockId.key()); diff --git a/core/src/main/java/com/volmit/iris/core/service/TreeSVC.java b/core/src/main/java/com/volmit/iris/core/service/TreeSVC.java index c9ee3c62f..58be7738c 100644 --- a/core/src/main/java/com/volmit/iris/core/service/TreeSVC.java +++ b/core/src/main/java/com/volmit/iris/core/service/TreeSVC.java @@ -27,6 +27,7 @@ import com.volmit.iris.engine.platform.PlatformChunkGenerator; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.data.Cuboid; +import com.volmit.iris.util.data.IrisCustomData; import com.volmit.iris.util.math.BlockPosition; import com.volmit.iris.util.math.RNG; import com.volmit.iris.util.plugin.IrisService; @@ -34,7 +35,6 @@ import com.volmit.iris.util.scheduling.J; import org.bukkit.*; import org.bukkit.block.Block; import org.bukkit.block.BlockState; -import org.bukkit.block.TileState; import org.bukkit.block.data.BlockData; import org.bukkit.block.data.type.Sapling; import org.bukkit.event.EventHandler; @@ -142,7 +142,9 @@ public class TreeSVC implements IrisService { public void set(int x, int y, int z, BlockData d) { Block b = event.getWorld().getBlockAt(x, y, z); BlockState state = b.getState(); - state.setBlockData(d); + if (d instanceof IrisCustomData data) + state.setBlockData(data.getBase()); + else state.setBlockData(d); blockStateList.add(b.getState()); dataCache.put(new Location(event.getWorld(), x, y, z), d); } @@ -213,12 +215,17 @@ public class TreeSVC implements IrisService { block = false; if (!iGrow.isCancelled()) { - for (BlockState block : iGrow.getBlocks()) { - Location l = block.getLocation(); + for (BlockState state : iGrow.getBlocks()) { + Location l = state.getLocation(); - if (dataCache.containsKey(l)) { - l.getBlock().setBlockData(dataCache.get(l), false); - } + BlockData d = dataCache.get(l); + if (d == null) continue; + Block block = l.getBlock(); + + if (d instanceof IrisCustomData data) { + block.setBlockData(data.getBase(), false); + Iris.service(ExternalDataSVC.class).processUpdate(engine, block, data.getCustom()); + } else block.setBlockData(d); } } }); diff --git a/core/src/main/java/com/volmit/iris/engine/data/chunk/LinkedTerrainChunk.java b/core/src/main/java/com/volmit/iris/engine/data/chunk/LinkedTerrainChunk.java index 015efd0e9..b726610cb 100644 --- a/core/src/main/java/com/volmit/iris/engine/data/chunk/LinkedTerrainChunk.java +++ b/core/src/main/java/com/volmit/iris/engine/data/chunk/LinkedTerrainChunk.java @@ -21,7 +21,7 @@ package com.volmit.iris.engine.data.chunk; import com.volmit.iris.core.nms.BiomeBaseInjector; import com.volmit.iris.core.nms.INMS; import com.volmit.iris.util.data.IrisBiomeStorage; -import com.volmit.iris.util.data.IrisBlockData; +import com.volmit.iris.util.data.IrisCustomData; import lombok.Setter; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -121,7 +121,7 @@ public class LinkedTerrainChunk implements TerrainChunk { @Override public synchronized void setBlock(int x, int y, int z, BlockData blockData) { - if (blockData instanceof IrisBlockData d) + if (blockData instanceof IrisCustomData d) blockData = d.getBase(); rawChunkData.setBlock(x, y, z, blockData); } diff --git a/core/src/main/java/com/volmit/iris/engine/data/chunk/MCATerrainChunk.java b/core/src/main/java/com/volmit/iris/engine/data/chunk/MCATerrainChunk.java index 2da3db43a..d4c1cbf8d 100644 --- a/core/src/main/java/com/volmit/iris/engine/data/chunk/MCATerrainChunk.java +++ b/core/src/main/java/com/volmit/iris/engine/data/chunk/MCATerrainChunk.java @@ -20,7 +20,7 @@ package com.volmit.iris.engine.data.chunk; import com.volmit.iris.Iris; import com.volmit.iris.core.nms.BiomeBaseInjector; -import com.volmit.iris.util.data.IrisBlockData; +import com.volmit.iris.util.data.IrisCustomData; import com.volmit.iris.util.nbt.mca.Chunk; import com.volmit.iris.util.nbt.mca.NBTWorld; import lombok.AllArgsConstructor; @@ -89,7 +89,7 @@ public class MCATerrainChunk implements TerrainChunk { if (blockData == null) { Iris.error("NULL BD"); } - if (blockData instanceof IrisBlockData data) + if (blockData instanceof IrisCustomData data) blockData = data.getBase(); mcaChunk.setBlockStateAt(xx, y, zz, NBTWorld.getCompound(blockData), false); 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 56ed99c0c..8d08771fd 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 @@ -42,7 +42,7 @@ import com.volmit.iris.util.context.ChunkContext; import com.volmit.iris.util.context.IrisContext; import com.volmit.iris.util.data.B; import com.volmit.iris.util.data.DataProvider; -import com.volmit.iris.util.data.IrisBlockData; +import com.volmit.iris.util.data.IrisCustomData; import com.volmit.iris.util.documentation.BlockCoordinates; import com.volmit.iris.util.documentation.ChunkCoordinates; import com.volmit.iris.util.format.C; @@ -259,10 +259,8 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat if (B.isUpdatable(data)) { getMantle().updateBlock(x, y, z); } - if (data instanceof IrisBlockData d) { - getMantle().getMantle().set(x, y, z, d.getCustom()); - } else { - getMantle().getMantle().remove(x, y, z, Identifier.class); + if (data instanceof IrisCustomData) { + getMantle().getMantle().flag(x >> 4, z >> 4, MantleFlag.CUSTOM, true); } } diff --git a/core/src/main/java/com/volmit/iris/engine/framework/placer/WorldObjectPlacer.java b/core/src/main/java/com/volmit/iris/engine/framework/placer/WorldObjectPlacer.java index 1d334e14b..d7a943eda 100644 --- a/core/src/main/java/com/volmit/iris/engine/framework/placer/WorldObjectPlacer.java +++ b/core/src/main/java/com/volmit/iris/engine/framework/placer/WorldObjectPlacer.java @@ -13,6 +13,7 @@ import com.volmit.iris.engine.object.IrisLootTable; import com.volmit.iris.engine.object.TileData; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.data.B; +import com.volmit.iris.util.data.IrisCustomData; import com.volmit.iris.util.math.RNG; import lombok.EqualsAndHashCode; import lombok.Getter; @@ -78,7 +79,11 @@ public class WorldObjectPlacer implements IObjectPlacer { } } - block.setBlockData(d); + + if (d instanceof IrisCustomData data) { + block.setBlockData(data.getBase()); + Iris.warn("Tried to place custom block at " + x + ", " + y + ", " + z + " which is not supported!"); + } else block.setBlockData(d); } @Override diff --git a/core/src/main/java/com/volmit/iris/engine/jigsaw/PlannedStructure.java b/core/src/main/java/com/volmit/iris/engine/jigsaw/PlannedStructure.java index 374e5f1bb..d6a49b58f 100644 --- a/core/src/main/java/com/volmit/iris/engine/jigsaw/PlannedStructure.java +++ b/core/src/main/java/com/volmit/iris/engine/jigsaw/PlannedStructure.java @@ -25,7 +25,6 @@ import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.framework.placer.WorldObjectPlacer; import com.volmit.iris.engine.object.*; import com.volmit.iris.util.collection.KList; -import com.volmit.iris.util.data.IrisBlockData; import com.volmit.iris.util.mantle.Mantle; import com.volmit.iris.util.math.Position2; import com.volmit.iris.util.math.RNG; @@ -155,9 +154,6 @@ public class PlannedStructure { return v.place(xx, height, zz, placer, options, rng, (b, data) -> { e.set(b.getX(), b.getY(), b.getZ(), v.getLoadKey() + "@" + id); e.set(b.getX(), b.getY(), b.getZ(), container); - if (data instanceof IrisBlockData d) { - e.set(b.getX(), b.getY(), b.getZ(), d.getCustom()); - } }, null, getData().getEngine() != null ? getData() : eng.getData()) != -1; } diff --git a/core/src/main/java/com/volmit/iris/engine/mantle/EngineMantle.java b/core/src/main/java/com/volmit/iris/engine/mantle/EngineMantle.java index da5b11ae8..b55ce9e7f 100644 --- a/core/src/main/java/com/volmit/iris/engine/mantle/EngineMantle.java +++ b/core/src/main/java/com/volmit/iris/engine/mantle/EngineMantle.java @@ -34,6 +34,7 @@ import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.context.ChunkContext; import com.volmit.iris.util.context.IrisContext; import com.volmit.iris.util.data.B; +import com.volmit.iris.util.data.IrisCustomData; import com.volmit.iris.util.documentation.BlockCoordinates; import com.volmit.iris.util.documentation.ChunkCoordinates; import com.volmit.iris.util.hunk.Hunk; @@ -104,7 +105,10 @@ public interface EngineMantle extends IObjectPlacer { @Override default void set(int x, int y, int z, BlockData d) { - getMantle().set(x, y, z, d == null ? AIR : d); + if (d instanceof IrisCustomData data) { + getMantle().set(x, y, z, data.getBase()); + getMantle().set(x, y, z, data.getCustom()); + } else getMantle().set(x, y, z, d == null ? AIR : d); } @Override diff --git a/core/src/main/java/com/volmit/iris/engine/mantle/MantleWriter.java b/core/src/main/java/com/volmit/iris/engine/mantle/MantleWriter.java index d4f08be48..4c32af6d8 100644 --- a/core/src/main/java/com/volmit/iris/engine/mantle/MantleWriter.java +++ b/core/src/main/java/com/volmit/iris/engine/mantle/MantleWriter.java @@ -29,6 +29,7 @@ import com.volmit.iris.engine.object.IrisPosition; import com.volmit.iris.engine.object.TileData; import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.collection.KSet; +import com.volmit.iris.util.data.IrisCustomData; import com.volmit.iris.util.function.Function3; import com.volmit.iris.util.mantle.Mantle; import com.volmit.iris.util.mantle.MantleChunk; @@ -166,7 +167,10 @@ public class MantleWriter implements IObjectPlacer, AutoCloseable { @Override public void set(int x, int y, int z, BlockData d) { - setData(x, y, z, d); + if (d instanceof IrisCustomData data) { + setData(x, y, z, data.getBase()); + setData(x, y, z, data.getCustom()); + } else setData(x, y, z, d); } @Override diff --git a/core/src/main/java/com/volmit/iris/engine/mantle/components/MantleObjectComponent.java b/core/src/main/java/com/volmit/iris/engine/mantle/components/MantleObjectComponent.java index 8a0514500..b8d4f9fd8 100644 --- a/core/src/main/java/com/volmit/iris/engine/mantle/components/MantleObjectComponent.java +++ b/core/src/main/java/com/volmit/iris/engine/mantle/components/MantleObjectComponent.java @@ -29,7 +29,6 @@ import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.collection.KSet; import com.volmit.iris.util.context.ChunkContext; import com.volmit.iris.util.data.B; -import com.volmit.iris.util.data.IrisBlockData; import com.volmit.iris.util.documentation.BlockCoordinates; import com.volmit.iris.util.documentation.ChunkCoordinates; import com.volmit.iris.util.format.Form; @@ -116,9 +115,6 @@ public class MantleObjectComponent extends IrisMantleComponent { if (objectPlacement.isDolphinTarget() && objectPlacement.isUnderwater() && B.isStorageChest(data)) { writer.setData(b.getX(), b.getY(), b.getZ(), MatterStructurePOI.BURIED_TREASURE); } - if (data instanceof IrisBlockData d) { - writer.setData(b.getX(), b.getY(), b.getZ(), d.getCustom()); - } }, null, getData()); } } diff --git a/core/src/main/java/com/volmit/iris/engine/mode/ModeOverworld.java b/core/src/main/java/com/volmit/iris/engine/mode/ModeOverworld.java index 3645b7d8c..c3a04ba73 100644 --- a/core/src/main/java/com/volmit/iris/engine/mode/ModeOverworld.java +++ b/core/src/main/java/com/volmit/iris/engine/mode/ModeOverworld.java @@ -25,10 +25,7 @@ import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.framework.EngineMode; import com.volmit.iris.engine.framework.EngineStage; import com.volmit.iris.engine.framework.IrisEngineMode; -import com.volmit.iris.engine.modifier.IrisCarveModifier; -import com.volmit.iris.engine.modifier.IrisDepositModifier; -import com.volmit.iris.engine.modifier.IrisPerfectionModifier; -import com.volmit.iris.engine.modifier.IrisPostModifier; +import com.volmit.iris.engine.modifier.*; import org.bukkit.block.data.BlockData; public class ModeOverworld extends IrisEngineMode implements EngineMode { @@ -41,6 +38,7 @@ public class ModeOverworld extends IrisEngineMode implements EngineMode { var post = new IrisPostModifier(getEngine()); var deposit = new IrisDepositModifier(getEngine()); var perfection = new IrisPerfectionModifier(getEngine()); + var custom = new IrisCustomModifier(getEngine()); EngineStage sBiome = (x, z, k, p, m, c) -> biome.actuate(x, z, p, m, c); EngineStage sGenMatter = (x, z, k, p, m, c) -> generateMatter(x >> 4, z >> 4, m, c); EngineStage sTerrain = (x, z, k, p, m, c) -> terrain.actuate(x, z, k, m, c); @@ -50,6 +48,7 @@ public class ModeOverworld extends IrisEngineMode implements EngineMode { EngineStage sPost = (x, z, k, p, m, c) -> post.modify(x, z, k, m, c); EngineStage sInsertMatter = (x, z, K, p, m, c) -> getMantle().insertMatter(x >> 4, z >> 4, BlockData.class, K, m); EngineStage sPerfection = (x, z, k, p, m, c) -> perfection.modify(x, z, k, m, c); + EngineStage sCustom = (x, z, k, p, m, c) -> custom.modify(x, z, k, m, c); registerStage(burst( sGenMatter, @@ -65,6 +64,6 @@ public class ModeOverworld extends IrisEngineMode implements EngineMode { sDecorant )); registerStage(sPerfection); - + registerStage(sCustom); } } diff --git a/core/src/main/java/com/volmit/iris/engine/modifier/IrisCarveModifier.java b/core/src/main/java/com/volmit/iris/engine/modifier/IrisCarveModifier.java index c5a5f9e5f..4f15b12ca 100644 --- a/core/src/main/java/com/volmit/iris/engine/modifier/IrisCarveModifier.java +++ b/core/src/main/java/com/volmit/iris/engine/modifier/IrisCarveModifier.java @@ -57,7 +57,7 @@ public class IrisCarveModifier extends EngineAssignedModifier { public void onModify(int x, int z, Hunk output, boolean multicore, ChunkContext context) { PrecisionStopwatch p = PrecisionStopwatch.start(); Mantle mantle = getEngine().getMantle().getMantle(); - MantleChunk mc = getEngine().getMantle().getMantle().getChunk(x, z); + MantleChunk mc = getEngine().getMantle().getMantle().getChunk(x, z).use(); KMap> positions = new KMap<>(); KMap walls = new KMap<>(); Consumer4 iterator = (xx, yy, zz, c) -> { @@ -166,6 +166,7 @@ public class IrisCarveModifier extends EngineAssignedModifier { }); getEngine().getMetrics().getDeposit().put(p.getMilliseconds()); + mc.release(); } private void processZone(Hunk output, MantleChunk mc, Mantle mantle, CaveZone zone, int rx, int rz, int xx, int zz) { diff --git a/core/src/main/java/com/volmit/iris/engine/modifier/IrisCustomModifier.java b/core/src/main/java/com/volmit/iris/engine/modifier/IrisCustomModifier.java new file mode 100644 index 000000000..161600101 --- /dev/null +++ b/core/src/main/java/com/volmit/iris/engine/modifier/IrisCustomModifier.java @@ -0,0 +1,43 @@ +package com.volmit.iris.engine.modifier; +import com.volmit.iris.core.link.Identifier; +import com.volmit.iris.engine.framework.Engine; +import com.volmit.iris.engine.framework.EngineAssignedModifier; +import com.volmit.iris.util.context.ChunkContext; +import com.volmit.iris.util.data.IrisCustomData; +import com.volmit.iris.util.hunk.Hunk; +import com.volmit.iris.util.mantle.MantleFlag; +import com.volmit.iris.util.parallel.BurstExecutor; +import com.volmit.iris.util.parallel.MultiBurst; +import org.bukkit.block.data.BlockData; +public class IrisCustomModifier extends EngineAssignedModifier { + public IrisCustomModifier(Engine engine) { + super(engine, "Custom"); + } + @Override + public void onModify(int x, int z, Hunk output, boolean multicore, ChunkContext context) { + var mc = getEngine().getMantle().getMantle().getChunk(x >> 4, z >> 4); + if (!mc.isFlagged(MantleFlag.CUSTOM_ACTIVE)) return; + mc.use(); + + BurstExecutor burst = MultiBurst.burst.burst(output.getHeight()); + burst.setMulticore(multicore); + for (int y = 0; y < output.getHeight(); y++) { + int finalY = y; + burst.queue(() -> { + for (int rX = 0; rX < output.getWidth(); rX++) { + for (int rZ = 0; rZ < output.getDepth(); rZ++) { + BlockData b = output.get(rX, finalY, rZ); + if (!(b instanceof IrisCustomData d)) continue; + + mc.getOrCreate(finalY >> 4) + .slice(Identifier.class) + .set(rX, finalY & 15, rZ, d.getCustom()); + output.set(rX, finalY, rZ, d.getBase()); + } + } + }); + } + burst.complete(); + mc.release(); + } +} \ No newline at end of file diff --git a/core/src/main/java/com/volmit/iris/engine/object/IrisObject.java b/core/src/main/java/com/volmit/iris/engine/object/IrisObject.java index 6691720dd..d32ac045e 100644 --- a/core/src/main/java/com/volmit/iris/engine/object/IrisObject.java +++ b/core/src/main/java/com/volmit/iris/engine/object/IrisObject.java @@ -29,7 +29,7 @@ import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.context.IrisContext; import com.volmit.iris.util.data.B; -import com.volmit.iris.util.data.IrisBlockData; +import com.volmit.iris.util.data.IrisCustomData; import com.volmit.iris.util.format.Form; import com.volmit.iris.util.interpolation.IrisInterpolation; import com.volmit.iris.util.json.JSONObject; @@ -53,8 +53,6 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; -import org.bukkit.block.BlockState; -import org.bukkit.block.TileState; import org.bukkit.block.data.BlockData; import org.bukkit.block.data.MultipleFacing; import org.bukkit.block.data.Waterlogged; @@ -943,7 +941,7 @@ public class IrisObject extends IrisRegistrant { if (j.isExact() ? k.matches(data) : k.getMaterial().equals(data.getMaterial())) { BlockData newData = j.getReplace(rng, i.getX() + x, i.getY() + y, i.getZ() + z, rdata).clone(); - if (newData.getMaterial() == data.getMaterial() && !(newData instanceof IrisBlockData || data instanceof IrisBlockData)) + if (newData.getMaterial() == data.getMaterial() && !(newData instanceof IrisCustomData || data instanceof IrisCustomData)) data = data.merge(newData); else data = newData; diff --git a/core/src/main/java/com/volmit/iris/util/data/IrisBlockData.java b/core/src/main/java/com/volmit/iris/util/data/IrisCustomData.java similarity index 92% rename from core/src/main/java/com/volmit/iris/util/data/IrisBlockData.java rename to core/src/main/java/com/volmit/iris/util/data/IrisCustomData.java index b5cd4030c..c02ea2879 100644 --- a/core/src/main/java/com/volmit/iris/util/data/IrisBlockData.java +++ b/core/src/main/java/com/volmit/iris/util/data/IrisCustomData.java @@ -15,7 +15,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @Data -public class IrisBlockData implements BlockData { +public class IrisCustomData implements BlockData { private final @NonNull BlockData base; private final @NotNull Identifier custom; @@ -40,12 +40,12 @@ public class IrisBlockData implements BlockData { @NotNull @Override public BlockData merge(@NotNull BlockData blockData) { - return new IrisBlockData(base.merge(blockData), custom); + return new IrisCustomData(base.merge(blockData), custom); } @Override public boolean matches(@Nullable BlockData blockData) { - if (blockData instanceof IrisBlockData b) + if (blockData instanceof IrisCustomData b) return custom.equals(b.custom) && base.matches(b.base); return base.matches(blockData); } @@ -53,7 +53,7 @@ public class IrisBlockData implements BlockData { @NotNull @Override public BlockData clone() { - return new IrisBlockData(base.clone(), custom); + return new IrisCustomData(base.clone(), custom); } @NotNull diff --git a/core/src/main/java/com/volmit/iris/util/hunk/view/ChunkDataHunkView.java b/core/src/main/java/com/volmit/iris/util/hunk/view/ChunkDataHunkView.java index 62cb7fc61..b27c22fa1 100644 --- a/core/src/main/java/com/volmit/iris/util/hunk/view/ChunkDataHunkView.java +++ b/core/src/main/java/com/volmit/iris/util/hunk/view/ChunkDataHunkView.java @@ -19,7 +19,7 @@ package com.volmit.iris.util.hunk.view; import com.volmit.iris.util.data.B; -import com.volmit.iris.util.data.IrisBlockData; +import com.volmit.iris.util.data.IrisCustomData; import com.volmit.iris.util.hunk.Hunk; import org.bukkit.block.data.BlockData; import org.bukkit.generator.ChunkGenerator.ChunkData; @@ -73,7 +73,7 @@ public class ChunkDataHunkView implements Hunk { } try { - if (t instanceof IrisBlockData d) + if (t instanceof IrisCustomData d) t = d.getBase(); chunk.setBlock(x, y + chunk.getMinHeight(), z, t); } catch (Throwable ignored) { diff --git a/core/src/main/java/com/volmit/iris/util/mantle/MantleFlag.java b/core/src/main/java/com/volmit/iris/util/mantle/MantleFlag.java index fc2b9762f..81c4a8504 100644 --- a/core/src/main/java/com/volmit/iris/util/mantle/MantleFlag.java +++ b/core/src/main/java/com/volmit/iris/util/mantle/MantleFlag.java @@ -35,7 +35,8 @@ public enum MantleFlag { ETCHED, TILE, CUSTOM, - DISCOVERED; + DISCOVERED, + CUSTOM_ACTIVE; static StateList getStateList() { return new StateList(MantleFlag.values()); diff --git a/core/src/main/java/com/volmit/iris/util/matter/slices/BlockMatter.java b/core/src/main/java/com/volmit/iris/util/matter/slices/BlockMatter.java index cf6eef776..5322ca5de 100644 --- a/core/src/main/java/com/volmit/iris/util/matter/slices/BlockMatter.java +++ b/core/src/main/java/com/volmit/iris/util/matter/slices/BlockMatter.java @@ -18,7 +18,7 @@ package com.volmit.iris.util.matter.slices; -import com.volmit.iris.util.data.IrisBlockData; +import com.volmit.iris.util.data.IrisCustomData; import com.volmit.iris.util.data.palette.Palette; import com.volmit.iris.util.matter.Sliced; import org.bukkit.Bukkit; @@ -41,7 +41,7 @@ public class BlockMatter extends RawMatter { public BlockMatter(int width, int height, int depth) { super(width, height, depth, BlockData.class); registerWriter(World.class, ((w, d, x, y, z) -> { - if (d instanceof IrisBlockData c) + if (d instanceof IrisCustomData c) w.getBlockAt(x, y, z).setBlockData(c.getBase()); else w.getBlockAt(x, y, z).setBlockData(d); }));