From 60ed93e13b585d207110b30fa794820401af13e9 Mon Sep 17 00:00:00 2001 From: DanLT Date: Fri, 3 Sep 2021 11:22:59 -0800 Subject: [PATCH] Convert ores to deepslate / nondeepslate depending on src fixes #593 --- .../engine/modifier/IrisDepositModifier.java | 3 +- .../java/com/volmit/iris/util/data/B.java | 82 ++++++++++++++++++- 2 files changed, 81 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/volmit/iris/engine/modifier/IrisDepositModifier.java b/src/main/java/com/volmit/iris/engine/modifier/IrisDepositModifier.java index ca8fa9a80..980ed1a34 100644 --- a/src/main/java/com/volmit/iris/engine/modifier/IrisDepositModifier.java +++ b/src/main/java/com/volmit/iris/engine/modifier/IrisDepositModifier.java @@ -24,6 +24,7 @@ import com.volmit.iris.engine.object.IrisBiome; import com.volmit.iris.engine.object.IrisDepositGenerator; import com.volmit.iris.engine.object.IrisObject; import com.volmit.iris.engine.object.IrisRegion; +import com.volmit.iris.util.data.B; import com.volmit.iris.util.data.HeightMap; import com.volmit.iris.util.hunk.Hunk; import com.volmit.iris.util.math.RNG; @@ -122,7 +123,7 @@ public class IrisDepositModifier extends EngineAssignedModifier { if(!getEngine().getMantle().isCarved((cx << 4) + nx, ny, (cz << 4) + nz)) { - data.set(nx, ny, nz, clump.getBlocks().get(j)); + data.set(nx, ny, nz, B.toDeepSlateOre(data.get(nx, ny, nz), clump.getBlocks().get(j))); } } } diff --git a/src/main/java/com/volmit/iris/util/data/B.java b/src/main/java/com/volmit/iris/util/data/B.java index 0730ef792..d5d99a6a1 100644 --- a/src/main/java/com/volmit/iris/util/data/B.java +++ b/src/main/java/com/volmit/iris/util/data/B.java @@ -22,9 +22,8 @@ import com.volmit.iris.Iris; import com.volmit.iris.core.IrisSettings; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.scheduling.ChronoLatch; -import it.unimi.dsi.fastutil.ints.IntOpenHashSet; -import it.unimi.dsi.fastutil.ints.IntSet; -import it.unimi.dsi.fastutil.ints.IntSets; +import it.unimi.dsi.fastutil.ints.*; +import net.minecraft.world.level.levelgen.OreVeinifier; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.data.BlockData; @@ -43,6 +42,9 @@ public class B { private static final Material AIR_MATERIAL = Material.AIR; private static final BlockData AIR = AIR_MATERIAL.createBlockData(); private static final IntSet foliageCache = buildFoliageCache(); + private static final IntSet deepslateCache = buildDeepslateCache(); + private static final Int2IntMap normal2DeepslateCache = buildNormal2DeepslateCache(); + private static final Int2IntMap deepslate2NormalCache = buildNormal2DeepslateCache(); private static final IntSet decorantCache = buildDecorantCache(); private static final IntSet storageCache = buildStorageCache(); private static final IntSet storageChestCache = buildStorageChestCache(); @@ -84,6 +86,54 @@ public class B { return IntSets.unmodifiable(b); } + private static IntSet buildDeepslateCache() { + IntSet b = new IntOpenHashSet(); + Arrays.stream(new Material[]{ + DEEPSLATE, + DEEPSLATE_BRICKS, + DEEPSLATE_BRICK_SLAB, + DEEPSLATE_BRICK_STAIRS, + DEEPSLATE_BRICK_WALL, + DEEPSLATE_TILE_SLAB, + DEEPSLATE_TILES, + DEEPSLATE_TILE_STAIRS, + DEEPSLATE_TILE_WALL, + CRACKED_DEEPSLATE_TILES + }).forEach((i) -> b.add(i.ordinal())); + + return IntSets.unmodifiable(b); + } + + private static Int2IntMap buildNormal2DeepslateCache() { + Int2IntMap b = new Int2IntOpenHashMap(); + + b.put(COAL_ORE.ordinal(), DEEPSLATE_COAL_ORE.ordinal()); + b.put(EMERALD_ORE.ordinal(), DEEPSLATE_EMERALD_ORE.ordinal()); + b.put(DIAMOND_ORE.ordinal(), DEEPSLATE_DIAMOND_ORE.ordinal()); + b.put(COPPER_ORE.ordinal(), DEEPSLATE_COPPER_ORE.ordinal()); + b.put(GOLD_ORE.ordinal(), DEEPSLATE_GOLD_ORE.ordinal()); + b.put(IRON_ORE.ordinal(), DEEPSLATE_IRON_ORE.ordinal()); + b.put(LAPIS_ORE.ordinal(), DEEPSLATE_LAPIS_ORE.ordinal()); + b.put(REDSTONE_ORE.ordinal(), DEEPSLATE_REDSTONE_ORE.ordinal()); + + return b; + } + + private static Int2IntMap buildDeepslate2NormalCache() { + Int2IntMap b = new Int2IntOpenHashMap(); + + b.put(DEEPSLATE_COAL_ORE.ordinal(), COAL_ORE.ordinal()); + b.put(DEEPSLATE_EMERALD_ORE.ordinal(), EMERALD_ORE.ordinal()); + b.put(DEEPSLATE_DIAMOND_ORE.ordinal(), DIAMOND_ORE.ordinal()); + b.put(DEEPSLATE_COPPER_ORE.ordinal(), COPPER_ORE.ordinal()); + b.put(DEEPSLATE_GOLD_ORE.ordinal(), GOLD_ORE.ordinal()); + b.put(DEEPSLATE_IRON_ORE.ordinal(), IRON_ORE.ordinal()); + b.put(DEEPSLATE_LAPIS_ORE.ordinal(), LAPIS_ORE.ordinal()); + b.put(DEEPSLATE_REDSTONE_ORE.ordinal(), REDSTONE_ORE.ordinal()); + + return b; + } + private static IntSet buildDecorantCache() { IntSet b = new IntOpenHashSet(); Arrays.stream(new Material[]{ @@ -216,6 +266,32 @@ public class B { return IntSets.unmodifiable(b); } + public static BlockData toDeepSlateOre(BlockData block, BlockData ore) { + int key = ore.getMaterial().ordinal(); + + if(isDeepSlate(block)) + { + if(normal2DeepslateCache.containsKey(key)) + { + return Material.values()[normal2DeepslateCache.get(key)].createBlockData(); + } + } + + else + { + if(deepslate2NormalCache.containsKey(key)) + { + return Material.values()[deepslate2NormalCache.get(key)].createBlockData(); + } + } + + return ore; + } + + public static boolean isDeepSlate(BlockData blockData) { + return deepslateCache.contains(blockData.getMaterial().ordinal()); + } + public static boolean isOre(BlockData blockData) { return blockData.getMaterial().name().endsWith("_ORE"); }