From 743410d3ee4294f526a6d744dccf74aa41889b2c Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Mon, 24 Jun 2024 13:16:56 +0200 Subject: [PATCH 1/6] add nms method to get biome color --- .../com/volmit/iris/core/nms/INMSBinding.java | 5 +++++ .../iris/core/nms/container/BiomeColor.java | 10 +++++++++ .../iris/core/nms/v1_19_R1/NMSBinding.java | 21 +++++++++++++++++++ .../iris/core/nms/v1_19_R2/NMSBinding.java | 21 +++++++++++++++++++ .../iris/core/nms/v1_19_R3/NMSBinding.java | 21 +++++++++++++++++++ .../iris/core/nms/v1_20_R1/NMSBinding.java | 21 +++++++++++++++++++ .../iris/core/nms/v1_20_R2/NMSBinding.java | 21 +++++++++++++++++++ .../iris/core/nms/v1_20_R3/NMSBinding.java | 21 +++++++++++++++++++ .../iris/core/nms/v1_20_R4/NMSBinding.java | 21 +++++++++++++++++++ 9 files changed, 162 insertions(+) create mode 100644 core/src/main/java/com/volmit/iris/core/nms/container/BiomeColor.java diff --git a/core/src/main/java/com/volmit/iris/core/nms/INMSBinding.java b/core/src/main/java/com/volmit/iris/core/nms/INMSBinding.java index da90e6fb2..e3bb1a1bf 100644 --- a/core/src/main/java/com/volmit/iris/core/nms/INMSBinding.java +++ b/core/src/main/java/com/volmit/iris/core/nms/INMSBinding.java @@ -18,6 +18,7 @@ package com.volmit.iris.core.nms; +import com.volmit.iris.core.nms.container.BiomeColor; import com.volmit.iris.core.nms.datapack.DataVersion; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.util.collection.KList; @@ -39,6 +40,8 @@ import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.generator.ChunkGenerator; import org.bukkit.inventory.ItemStack; +import java.awt.*; + public interface INMSBinding { boolean hasTile(Location l); @@ -112,6 +115,8 @@ public interface INMSBinding { Entity spawnEntity(Location location, EntityType type, CreatureSpawnEvent.SpawnReason reason); + Color getBiomeColor(Location location, BiomeColor type); + default DataVersion getDataVersion() { return DataVersion.V1192; } diff --git a/core/src/main/java/com/volmit/iris/core/nms/container/BiomeColor.java b/core/src/main/java/com/volmit/iris/core/nms/container/BiomeColor.java new file mode 100644 index 000000000..58bc4a5a1 --- /dev/null +++ b/core/src/main/java/com/volmit/iris/core/nms/container/BiomeColor.java @@ -0,0 +1,10 @@ +package com.volmit.iris.core.nms.container; + +public enum BiomeColor { + FOG, + WATER, + WATER_FOG, + SKY, + FOLIAGE, + GRASS +} diff --git a/nms/v1_19_R1/src/main/java/com/volmit/iris/core/nms/v1_19_R1/NMSBinding.java b/nms/v1_19_R1/src/main/java/com/volmit/iris/core/nms/v1_19_R1/NMSBinding.java index 49c921288..78aaf4281 100644 --- a/nms/v1_19_R1/src/main/java/com/volmit/iris/core/nms/v1_19_R1/NMSBinding.java +++ b/nms/v1_19_R1/src/main/java/com/volmit/iris/core/nms/v1_19_R1/NMSBinding.java @@ -1,5 +1,6 @@ package com.volmit.iris.core.nms.v1_19_R1; +import java.awt.Color; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; @@ -12,6 +13,8 @@ import java.util.List; import java.util.Vector; import java.util.concurrent.atomic.AtomicInteger; +import com.volmit.iris.core.nms.container.BiomeColor; +import net.minecraft.world.level.LevelReader; import org.bukkit.*; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; @@ -517,6 +520,24 @@ public class NMSBinding implements INMSBinding { return ((CraftWorld) location.getWorld()).spawn(location, type.getEntityClass(), null, reason); } + @Override + public Color getBiomeColor(Location location, BiomeColor type) { + LevelReader reader = ((CraftWorld) location.getWorld()).getHandle(); + var holder = reader.getBiome(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ())); + var biome = holder.value(); + if (biome == null) throw new IllegalArgumentException("Invalid biome: " + holder.unwrapKey().orElse(null)); + + int rgba = switch (type) { + case FOG -> biome.getFogColor(); + case WATER -> biome.getWaterColor(); + case WATER_FOG -> biome.getWaterFogColor(); + case SKY -> biome.getSkyColor(); + case FOLIAGE -> biome.getFoliageColor(); + case GRASS -> biome.getGrassColor(location.getBlockX(), location.getBlockZ()); + }; + return new Color(rgba, true); + } + private static Field getField(Class clazz, Class fieldType) throws NoSuchFieldException { try { for (Field f : clazz.getDeclaredFields()) { diff --git a/nms/v1_19_R2/src/main/java/com/volmit/iris/core/nms/v1_19_R2/NMSBinding.java b/nms/v1_19_R2/src/main/java/com/volmit/iris/core/nms/v1_19_R2/NMSBinding.java index 8aa76bc52..22d5c134c 100644 --- a/nms/v1_19_R2/src/main/java/com/volmit/iris/core/nms/v1_19_R2/NMSBinding.java +++ b/nms/v1_19_R2/src/main/java/com/volmit/iris/core/nms/v1_19_R2/NMSBinding.java @@ -1,5 +1,6 @@ package com.volmit.iris.core.nms.v1_19_R2; +import java.awt.Color; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; @@ -12,6 +13,8 @@ import java.util.List; import java.util.Vector; import java.util.concurrent.atomic.AtomicInteger; +import com.volmit.iris.core.nms.container.BiomeColor; +import net.minecraft.world.level.LevelReader; import org.bukkit.*; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; @@ -519,6 +522,24 @@ public class NMSBinding implements INMSBinding { return ((CraftWorld) location.getWorld()).spawn(location, type.getEntityClass(), null, reason); } + @Override + public Color getBiomeColor(Location location, BiomeColor type) { + LevelReader reader = ((CraftWorld) location.getWorld()).getHandle(); + var holder = reader.getBiome(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ())); + var biome = holder.value(); + if (biome == null) throw new IllegalArgumentException("Invalid biome: " + holder.unwrapKey().orElse(null)); + + int rgba = switch (type) { + case FOG -> biome.getFogColor(); + case WATER -> biome.getWaterColor(); + case WATER_FOG -> biome.getWaterFogColor(); + case SKY -> biome.getSkyColor(); + case FOLIAGE -> biome.getFoliageColor(); + case GRASS -> biome.getGrassColor(location.getBlockX(), location.getBlockZ()); + }; + return new Color(rgba, true); + } + private static Field getField(Class clazz, Class fieldType) throws NoSuchFieldException { try { for (Field f : clazz.getDeclaredFields()) { diff --git a/nms/v1_19_R3/src/main/java/com/volmit/iris/core/nms/v1_19_R3/NMSBinding.java b/nms/v1_19_R3/src/main/java/com/volmit/iris/core/nms/v1_19_R3/NMSBinding.java index c32354ae9..1ca069069 100644 --- a/nms/v1_19_R3/src/main/java/com/volmit/iris/core/nms/v1_19_R3/NMSBinding.java +++ b/nms/v1_19_R3/src/main/java/com/volmit/iris/core/nms/v1_19_R3/NMSBinding.java @@ -1,5 +1,6 @@ package com.volmit.iris.core.nms.v1_19_R3; +import java.awt.Color; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; @@ -12,6 +13,8 @@ import java.util.List; import java.util.Vector; import java.util.concurrent.atomic.AtomicInteger; +import com.volmit.iris.core.nms.container.BiomeColor; +import net.minecraft.world.level.LevelReader; import org.bukkit.*; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; @@ -523,6 +526,24 @@ public class NMSBinding implements INMSBinding { return ((CraftWorld) location.getWorld()).spawn(location, type.getEntityClass(), null, reason); } + @Override + public Color getBiomeColor(Location location, BiomeColor type) { + LevelReader reader = ((CraftWorld) location.getWorld()).getHandle(); + var holder = reader.getBiome(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ())); + var biome = holder.value(); + if (biome == null) throw new IllegalArgumentException("Invalid biome: " + holder.unwrapKey().orElse(null)); + + int rgba = switch (type) { + case FOG -> biome.getFogColor(); + case WATER -> biome.getWaterColor(); + case WATER_FOG -> biome.getWaterFogColor(); + case SKY -> biome.getSkyColor(); + case FOLIAGE -> biome.getFoliageColor(); + case GRASS -> biome.getGrassColor(location.getBlockX(), location.getBlockZ()); + }; + return new Color(rgba, true); + } + private static Field getField(Class clazz, Class fieldType) throws NoSuchFieldException { try { for (Field f : clazz.getDeclaredFields()) { diff --git a/nms/v1_20_R1/src/main/java/com/volmit/iris/core/nms/v1_20_R1/NMSBinding.java b/nms/v1_20_R1/src/main/java/com/volmit/iris/core/nms/v1_20_R1/NMSBinding.java index 165f97808..5f858b0e8 100644 --- a/nms/v1_20_R1/src/main/java/com/volmit/iris/core/nms/v1_20_R1/NMSBinding.java +++ b/nms/v1_20_R1/src/main/java/com/volmit/iris/core/nms/v1_20_R1/NMSBinding.java @@ -3,6 +3,7 @@ package com.volmit.iris.core.nms.v1_20_R1; import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.volmit.iris.Iris; import com.volmit.iris.core.nms.INMSBinding; +import com.volmit.iris.core.nms.container.BiomeColor; import com.volmit.iris.engine.data.cache.AtomicCache; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.util.collection.KList; @@ -27,6 +28,7 @@ import net.minecraft.nbt.TagParser; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.EntityDimensions; +import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; @@ -55,6 +57,7 @@ import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import sun.misc.Unsafe; +import java.awt.Color; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; @@ -522,6 +525,24 @@ public class NMSBinding implements INMSBinding { biomeSource.set(serverLevel.getChunkSource().chunkMap.generator, customBiomeSource); } + @Override + public Color getBiomeColor(Location location, BiomeColor type) { + LevelReader reader = ((CraftWorld) location.getWorld()).getHandle(); + var holder = reader.getBiome(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ())); + var biome = holder.value(); + if (biome == null) throw new IllegalArgumentException("Invalid biome: " + holder.unwrapKey().orElse(null)); + + int rgba = switch (type) { + case FOG -> biome.getFogColor(); + case WATER -> biome.getWaterColor(); + case WATER_FOG -> biome.getWaterFogColor(); + case SKY -> biome.getSkyColor(); + case FOLIAGE -> biome.getFoliageColor(); + case GRASS -> biome.getGrassColor(location.getBlockX(), location.getBlockZ()); + }; + return new Color(rgba, true); + } + private static Field getField(Class clazz, Class fieldType) throws NoSuchFieldException { try { for (Field f : clazz.getDeclaredFields()) { diff --git a/nms/v1_20_R2/src/main/java/com/volmit/iris/core/nms/v1_20_R2/NMSBinding.java b/nms/v1_20_R2/src/main/java/com/volmit/iris/core/nms/v1_20_R2/NMSBinding.java index 73a15d89c..05620adfb 100644 --- a/nms/v1_20_R2/src/main/java/com/volmit/iris/core/nms/v1_20_R2/NMSBinding.java +++ b/nms/v1_20_R2/src/main/java/com/volmit/iris/core/nms/v1_20_R2/NMSBinding.java @@ -1,5 +1,6 @@ package com.volmit.iris.core.nms.v1_20_R2; +import java.awt.Color; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; @@ -12,6 +13,8 @@ import java.util.List; import java.util.Vector; import java.util.concurrent.atomic.AtomicInteger; +import com.volmit.iris.core.nms.container.BiomeColor; +import net.minecraft.world.level.LevelReader; import org.bukkit.*; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; @@ -520,6 +523,24 @@ public class NMSBinding implements INMSBinding { return ((CraftWorld) location.getWorld()).spawn(location, type.getEntityClass(), null, reason); } + @Override + public Color getBiomeColor(Location location, BiomeColor type) { + LevelReader reader = ((CraftWorld) location.getWorld()).getHandle(); + var holder = reader.getBiome(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ())); + var biome = holder.value(); + if (biome == null) throw new IllegalArgumentException("Invalid biome: " + holder.unwrapKey().orElse(null)); + + int rgba = switch (type) { + case FOG -> biome.getFogColor(); + case WATER -> biome.getWaterColor(); + case WATER_FOG -> biome.getWaterFogColor(); + case SKY -> biome.getSkyColor(); + case FOLIAGE -> biome.getFoliageColor(); + case GRASS -> biome.getGrassColor(location.getBlockX(), location.getBlockZ()); + }; + return new Color(rgba, true); + } + private static Field getField(Class clazz, Class fieldType) throws NoSuchFieldException { try { for (Field f : clazz.getDeclaredFields()) { diff --git a/nms/v1_20_R3/src/main/java/com/volmit/iris/core/nms/v1_20_R3/NMSBinding.java b/nms/v1_20_R3/src/main/java/com/volmit/iris/core/nms/v1_20_R3/NMSBinding.java index 01fa75d94..eb1739ab7 100644 --- a/nms/v1_20_R3/src/main/java/com/volmit/iris/core/nms/v1_20_R3/NMSBinding.java +++ b/nms/v1_20_R3/src/main/java/com/volmit/iris/core/nms/v1_20_R3/NMSBinding.java @@ -1,5 +1,6 @@ package com.volmit.iris.core.nms.v1_20_R3; +import java.awt.Color; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; @@ -12,6 +13,8 @@ import java.util.List; import java.util.Vector; import java.util.concurrent.atomic.AtomicInteger; +import com.volmit.iris.core.nms.container.BiomeColor; +import net.minecraft.world.level.LevelReader; import org.bukkit.*; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; @@ -521,6 +524,24 @@ public class NMSBinding implements INMSBinding { return ((CraftWorld) location.getWorld()).spawn(location, type.getEntityClass(), null, reason); } + @Override + public Color getBiomeColor(Location location, BiomeColor type) { + LevelReader reader = ((CraftWorld) location.getWorld()).getHandle(); + var holder = reader.getBiome(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ())); + var biome = holder.value(); + if (biome == null) throw new IllegalArgumentException("Invalid biome: " + holder.unwrapKey().orElse(null)); + + int rgba = switch (type) { + case FOG -> biome.getFogColor(); + case WATER -> biome.getWaterColor(); + case WATER_FOG -> biome.getWaterFogColor(); + case SKY -> biome.getSkyColor(); + case FOLIAGE -> biome.getFoliageColor(); + case GRASS -> biome.getGrassColor(location.getBlockX(), location.getBlockZ()); + }; + return new Color(rgba, true); + } + private static Field getField(Class clazz, Class fieldType) throws NoSuchFieldException { try { for (Field f : clazz.getDeclaredFields()) { diff --git a/nms/v1_20_R4/src/main/java/com/volmit/iris/core/nms/v1_20_R4/NMSBinding.java b/nms/v1_20_R4/src/main/java/com/volmit/iris/core/nms/v1_20_R4/NMSBinding.java index 59f90620b..3c85c8b83 100644 --- a/nms/v1_20_R4/src/main/java/com/volmit/iris/core/nms/v1_20_R4/NMSBinding.java +++ b/nms/v1_20_R4/src/main/java/com/volmit/iris/core/nms/v1_20_R4/NMSBinding.java @@ -1,5 +1,6 @@ package com.volmit.iris.core.nms.v1_20_R4; +import java.awt.Color; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; @@ -12,9 +13,11 @@ import java.util.List; import java.util.Vector; import java.util.concurrent.atomic.AtomicInteger; +import com.volmit.iris.core.nms.container.BiomeColor; import com.volmit.iris.core.nms.datapack.DataVersion; import net.minecraft.core.component.DataComponents; import net.minecraft.world.item.component.CustomData; +import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.chunk.status.ChunkStatus; import org.bukkit.*; import org.bukkit.block.Biome; @@ -524,6 +527,24 @@ public class NMSBinding implements INMSBinding { return ((CraftWorld) location.getWorld()).spawn(location, type.getEntityClass(), null, reason); } + @Override + public Color getBiomeColor(Location location, BiomeColor type) { + LevelReader reader = ((CraftWorld) location.getWorld()).getHandle(); + var holder = reader.getBiome(new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ())); + var biome = holder.value(); + if (biome == null) throw new IllegalArgumentException("Invalid biome: " + holder.unwrapKey().orElse(null)); + + int rgba = switch (type) { + case FOG -> biome.getFogColor(); + case WATER -> biome.getWaterColor(); + case WATER_FOG -> biome.getWaterFogColor(); + case SKY -> biome.getSkyColor(); + case FOLIAGE -> biome.getFoliageColor(); + case GRASS -> biome.getGrassColor(location.getBlockX(), location.getBlockZ()); + }; + return new Color(rgba, true); + } + private static Field getField(Class clazz, Class fieldType) throws NoSuchFieldException { try { for (Field f : clazz.getDeclaredFields()) { From 6c3f3dc8894b5c7ff756f6173c51e00d86206357 Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Mon, 24 Jun 2024 13:17:11 +0200 Subject: [PATCH 2/6] update oraxen api --- build.gradle | 2 ++ core/build.gradle | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 937842a4f..40fb51da1 100644 --- a/build.gradle +++ b/build.gradle @@ -39,6 +39,7 @@ registerCustomOutputTask('Pixel', 'C://Users/repix/Iris Dimension Engine/1.20.4 // ========================== UNIX ============================== registerCustomOutputTaskUnix('CyberpwnLT', '/Users/danielmills/development/server/plugins') registerCustomOutputTaskUnix('PsychoLT', '/Volumes/PRO-G40/Minecraft/MinecraftDevelopment/Server/plugins') +registerCustomOutputTaskUnix('CrazyDev22LT', '/home/julian/Desktop/server/plugins') // ============================================================== def NMS_BINDINGS = Map.of( @@ -251,6 +252,7 @@ allprojects { maven { url "https://repo.triumphteam.dev/snapshots" } maven { url "https://repo.mineinabyss.com/releases" } maven { url 'https://hub.jeff-media.com/nexus/repository/jeff-media-public/' } + maven { url "https://repo.oraxen.com/releases" } } dependencies { diff --git a/core/build.gradle b/core/build.gradle index d1c25950d..70d2adbc7 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -62,7 +62,7 @@ dependencies { // Third Party Integrations compileOnly 'com.ticxo.playeranimator:PlayerAnimator:R1.2.7' - compileOnly 'com.github.oraxen:oraxen:1.158.0' + compileOnly 'io.th0rgal:oraxen:1.173.0' compileOnly 'com.github.LoneDev6:api-itemsadder:3.4.1-r4' compileOnly 'com.github.PlaceholderAPI:placeholderapi:2.11.3' compileOnly 'com.github.Ssomar-Developement:SCore:4.23.10.8' From 48f901fc8c33b2882bba1ff8cf79e79f771f3d84 Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Tue, 25 Jun 2024 13:33:44 +0200 Subject: [PATCH 3/6] handle null pointer --- .../java/com/volmit/iris/core/loader/ResourceLoader.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/com/volmit/iris/core/loader/ResourceLoader.java b/core/src/main/java/com/volmit/iris/core/loader/ResourceLoader.java index dd0a1b068..6575abd37 100644 --- a/core/src/main/java/com/volmit/iris/core/loader/ResourceLoader.java +++ b/core/src/main/java/com/volmit/iris/core/loader/ResourceLoader.java @@ -362,7 +362,12 @@ public class ResourceLoader implements MeteredCache { if (folderCache.get() == null) { KList fc = new KList<>(); - for (File i : root.listFiles()) { + File[] files = root.listFiles(); + if (files == null) { + throw new IllegalStateException("Failed to list files in " + root); + } + + for (File i : files) { if (i.isDirectory()) { if (i.getName().equals(folderName)) { fc.add(i); From 29526a80a981a2e58191a1add69c9f02f126fa60 Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Tue, 25 Jun 2024 13:35:34 +0200 Subject: [PATCH 4/6] improve custom block/item api to allow custom settings --- .../iris/core/link/EcoItemsDataProvider.java | 5 +- .../link/ExecutableItemsDataProvider.java | 5 +- .../iris/core/link/ExternalDataProvider.java | 16 ++++- .../iris/core/link/HMCLeavesDataProvider.java | 10 ++- .../iris/core/link/ItemAdderDataProvider.java | 5 +- .../iris/core/link/MMOItemsDataProvider.java | 28 +++++++- .../iris/core/link/OraxenDataProvider.java | 69 +++++++++++++++++-- .../iris/core/nms/v1X/NMSBinding1X.java | 8 +++ .../iris/core/service/ExternalDataSVC.java | 42 +++++++++-- .../volmit/iris/engine/object/IrisLoot.java | 3 +- 10 files changed, 163 insertions(+), 28 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/core/link/EcoItemsDataProvider.java b/core/src/main/java/com/volmit/iris/core/link/EcoItemsDataProvider.java index 615256e66..d42684e7e 100644 --- a/core/src/main/java/com/volmit/iris/core/link/EcoItemsDataProvider.java +++ b/core/src/main/java/com/volmit/iris/core/link/EcoItemsDataProvider.java @@ -2,6 +2,7 @@ package com.volmit.iris.core.link; import com.volmit.iris.Iris; import com.volmit.iris.util.collection.KList; +import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.reflect.WrappedField; import com.willfp.ecoitems.items.EcoItem; import com.willfp.ecoitems.items.EcoItems; @@ -33,12 +34,12 @@ public class EcoItemsDataProvider extends ExternalDataProvider { } @Override - public BlockData getBlockData(Identifier blockId) throws MissingResourceException { + public BlockData getBlockData(Identifier blockId, KMap state) throws MissingResourceException { throw new MissingResourceException("Failed to find BlockData!", blockId.namespace(), blockId.key()); } @Override - public ItemStack getItemStack(Identifier itemId) throws MissingResourceException { + public ItemStack getItemStack(Identifier itemId, KMap customNbt) throws MissingResourceException { EcoItem item = EcoItems.INSTANCE.getByID(itemId.key()); if (item == null) throw new MissingResourceException("Failed to find Item!", itemId.namespace(), itemId.key()); return itemStack.get(item).clone(); diff --git a/core/src/main/java/com/volmit/iris/core/link/ExecutableItemsDataProvider.java b/core/src/main/java/com/volmit/iris/core/link/ExecutableItemsDataProvider.java index 8112a4595..27a3251b2 100644 --- a/core/src/main/java/com/volmit/iris/core/link/ExecutableItemsDataProvider.java +++ b/core/src/main/java/com/volmit/iris/core/link/ExecutableItemsDataProvider.java @@ -3,6 +3,7 @@ package com.volmit.iris.core.link; import com.ssomar.score.api.executableitems.ExecutableItemsAPI; import com.volmit.iris.Iris; import com.volmit.iris.util.collection.KList; +import com.volmit.iris.util.collection.KMap; import org.bukkit.block.data.BlockData; import org.bukkit.inventory.ItemStack; @@ -20,12 +21,12 @@ public class ExecutableItemsDataProvider extends ExternalDataProvider { } @Override - public BlockData getBlockData(Identifier blockId) throws MissingResourceException { + public BlockData getBlockData(Identifier blockId, KMap state) throws MissingResourceException { throw new MissingResourceException("Failed to find BlockData!", blockId.namespace(), blockId.key()); } @Override - public ItemStack getItemStack(Identifier itemId) throws MissingResourceException { + public ItemStack getItemStack(Identifier itemId, KMap customNbt) throws MissingResourceException { return ExecutableItemsAPI.getExecutableItemsManager().getExecutableItem(itemId.key()) .map(item -> item.buildItem(1, Optional.empty())) .orElseThrow(() -> new MissingResourceException("Failed to find ItemData!", itemId.namespace(), itemId.key())); 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 7e3b4d00e..77e2b9c90 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 @@ -1,6 +1,7 @@ package com.volmit.iris.core.link; import com.volmit.iris.engine.framework.Engine; +import com.volmit.iris.util.collection.KMap; import lombok.Getter; import lombok.RequiredArgsConstructor; import org.bukkit.Bukkit; @@ -27,10 +28,19 @@ public abstract class ExternalDataProvider { public abstract void init(); - public abstract BlockData getBlockData(Identifier blockId) throws MissingResourceException; + public BlockData getBlockData(Identifier blockId) throws MissingResourceException { + return getBlockData(blockId, new KMap<>()); + } - public abstract ItemStack getItemStack(Identifier itemId) throws MissingResourceException; - public void processUpdate(Engine engine, Block block, Identifier blockId) {}; + public abstract BlockData getBlockData(Identifier blockId, KMap state) throws MissingResourceException; + + public ItemStack getItemStack(Identifier itemId) throws MissingResourceException { + return getItemStack(itemId, new KMap<>()); + } + + public abstract ItemStack getItemStack(Identifier itemId, KMap customNbt) throws MissingResourceException; + + 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 44c695a28..21207a22f 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 @@ -2,8 +2,10 @@ package com.volmit.iris.core.link; import com.volmit.iris.Iris; import com.volmit.iris.core.IrisSettings; +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.reflect.WrappedField; import com.volmit.iris.util.reflect.WrappedReturningMethod; @@ -50,7 +52,7 @@ public class HMCLeavesDataProvider extends ExternalDataProvider { } @Override - public BlockData getBlockData(Identifier blockId) throws MissingResourceException { + public BlockData getBlockData(Identifier blockId, KMap state) throws MissingResourceException { Object o = blockDataMap.get(blockId.key()); if (o == null) throw new MissingResourceException("Failed to find BlockData!", blockId.namespace(), blockId.key()); @@ -60,11 +62,11 @@ 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, blockId); + return new IrisBlockData(blockData, ExternalDataSVC.buildState(blockId, state)); } @Override - public ItemStack getItemStack(Identifier itemId) throws MissingResourceException { + public ItemStack getItemStack(Identifier itemId, KMap customNbt) throws MissingResourceException { if (!itemDataField.containsKey(itemId.key())) throw new MissingResourceException("Failed to find ItemData!", itemId.namespace(), itemId.key()); return itemDataField.get(itemId.key()).get(); @@ -72,6 +74,8 @@ public class HMCLeavesDataProvider extends ExternalDataProvider { @Override public void processUpdate(Engine engine, Block block, Identifier blockId) { + var pair = ExternalDataSVC.parseState(blockId); + blockId = pair.getA(); Boolean result = setCustomBlock.invoke(apiInstance, new Object[]{block.getLocation(), blockId.key(), false}); if (result == null || !result) Iris.warn("Failed to set custom block! " + blockId.key() + " " + block.getX() + " " + block.getY() + " " + block.getZ()); diff --git a/core/src/main/java/com/volmit/iris/core/link/ItemAdderDataProvider.java b/core/src/main/java/com/volmit/iris/core/link/ItemAdderDataProvider.java index 67f594323..e08e8fd7d 100644 --- a/core/src/main/java/com/volmit/iris/core/link/ItemAdderDataProvider.java +++ b/core/src/main/java/com/volmit/iris/core/link/ItemAdderDataProvider.java @@ -2,6 +2,7 @@ package com.volmit.iris.core.link; import com.volmit.iris.Iris; import com.volmit.iris.util.collection.KList; +import com.volmit.iris.util.collection.KMap; import dev.lone.itemsadder.api.CustomBlock; import dev.lone.itemsadder.api.CustomStack; import org.bukkit.block.data.BlockData; @@ -32,12 +33,12 @@ public class ItemAdderDataProvider extends ExternalDataProvider { } @Override - public BlockData getBlockData(Identifier blockId) throws MissingResourceException { + public BlockData getBlockData(Identifier blockId, KMap state) throws MissingResourceException { return CustomBlock.getBaseBlockData(blockId.toString()); } @Override - public ItemStack getItemStack(Identifier itemId) throws MissingResourceException { + public ItemStack getItemStack(Identifier itemId, KMap customNbt) throws MissingResourceException { CustomStack stack = CustomStack.getInstance(itemId.toString()); if (stack == null) { throw new MissingResourceException("Failed to find ItemData!", itemId.namespace(), itemId.key()); diff --git a/core/src/main/java/com/volmit/iris/core/link/MMOItemsDataProvider.java b/core/src/main/java/com/volmit/iris/core/link/MMOItemsDataProvider.java index 4445f3e9d..b402f32ab 100644 --- a/core/src/main/java/com/volmit/iris/core/link/MMOItemsDataProvider.java +++ b/core/src/main/java/com/volmit/iris/core/link/MMOItemsDataProvider.java @@ -2,6 +2,7 @@ package com.volmit.iris.core.link; import com.volmit.iris.Iris; import com.volmit.iris.util.collection.KList; +import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.scheduling.J; import net.Indyuce.mmoitems.MMOItems; import net.Indyuce.mmoitems.api.Type; @@ -26,7 +27,7 @@ public class MMOItemsDataProvider extends ExternalDataProvider { } @Override - public BlockData getBlockData(Identifier blockId) throws MissingResourceException { + public BlockData getBlockData(Identifier blockId, KMap state) throws MissingResourceException { int id = -1; try { id = Integer.parseInt(blockId.key()); @@ -37,12 +38,33 @@ public class MMOItemsDataProvider extends ExternalDataProvider { } @Override - public ItemStack getItemStack(Identifier itemId) throws MissingResourceException { + public ItemStack getItemStack(Identifier itemId, KMap customNbt) throws MissingResourceException { String[] parts = itemId.namespace().split("_", 2); if (parts.length != 2) throw new MissingResourceException("Failed to find ItemData!", itemId.namespace(), itemId.key()); CompletableFuture future = new CompletableFuture<>(); - Runnable run = () -> future.complete(api().getItem(parts[1], itemId.key())); + Runnable run = () -> { + try { + var type = api().getTypes().get(parts[1]); + int level = customNbt.containsKey("level") ? (int) customNbt.get("level") : -1; + var tier = api().getTiers().get(String.valueOf(customNbt.get("tier"))); + + ItemStack itemStack; + if (type == null) { + future.complete(null); + return; + } + + if (level != -1 && tier != null) { + itemStack = api().getItem(type, itemId.key(), level, tier); + } else { + itemStack = api().getItem(type, itemId.key()); + } + future.complete(itemStack); + } catch (Throwable e) { + future.completeExceptionally(e); + } + }; if (Bukkit.isPrimaryThread()) run.run(); else J.s(run); ItemStack item = null; 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 58e21883d..a685edc00 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 @@ -19,10 +19,16 @@ package com.volmit.iris.core.link; import com.volmit.iris.Iris; +import com.volmit.iris.core.nms.INMS; +import com.volmit.iris.core.nms.container.BiomeColor; +import com.volmit.iris.core.service.ExternalDataSVC; +import com.volmit.iris.engine.data.cache.Cache; 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.math.RNG; import com.volmit.iris.util.reflect.WrappedField; import io.th0rgal.oraxen.api.OraxenItems; import io.th0rgal.oraxen.items.ItemBuilder; @@ -36,15 +42,22 @@ 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.Color; import org.bukkit.Material; import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; import org.bukkit.block.data.BlockData; import org.bukkit.block.data.MultipleFacing; +import org.bukkit.entity.Entity; +import org.bukkit.entity.ItemDisplay; +import org.bukkit.entity.ItemFrame; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.PotionMeta; import java.util.Map; import java.util.MissingResourceException; import java.util.Optional; +import java.util.function.Consumer; public class OraxenDataProvider extends ExternalDataProvider { @@ -66,7 +79,7 @@ public class OraxenDataProvider extends ExternalDataProvider { } @Override - public BlockData getBlockData(Identifier blockId) throws MissingResourceException { + public BlockData getBlockData(Identifier blockId, KMap state) throws MissingResourceException { MechanicFactory factory = getFactory(blockId); if (factory instanceof NoteBlockMechanicFactory f) return f.createNoteBlockData(blockId.key()); @@ -77,22 +90,70 @@ public class OraxenDataProvider extends ExternalDataProvider { } else if (factory instanceof StringBlockMechanicFactory f) { return f.createTripwireData(blockId.key()); } else if (factory instanceof FurnitureFactory) { - return new IrisBlockData(B.getAir(), blockId); + return new IrisBlockData(B.getAir(), ExternalDataSVC.buildState(blockId, state)); } else throw new MissingResourceException("Failed to find BlockData!", blockId.namespace(), blockId.key()); } @Override - public ItemStack getItemStack(Identifier itemId) throws MissingResourceException { + public ItemStack getItemStack(Identifier itemId, KMap customNbt) throws MissingResourceException { Optional opt = OraxenItems.getOptionalItemById(itemId.key()); return opt.orElseThrow(() -> new MissingResourceException("Failed to find ItemData!", itemId.namespace(), itemId.key())).build(); } @Override public void processUpdate(Engine engine, Block block, Identifier blockId) { + var pair = ExternalDataSVC.parseState(blockId); + var state = pair.getB(); + blockId = pair.getA(); Mechanic mechanic = getFactory(blockId).getMechanic(blockId.key()); if (mechanic instanceof FurnitureMechanic f) { - f.place(block.getLocation()); + float yaw = 0; + BlockFace face = BlockFace.NORTH; + + long seed = engine.getSeedManager().getSeed() + Cache.key(block.getX(), block.getZ()) + block.getY(); + RNG rng = new RNG(seed); + if ("true".equals(state.get("randomYaw"))) { + yaw = rng.f(0, 360); + } else if (state.containsKey("yaw")) { + yaw = Float.parseFloat(state.get("yaw")); + } + if ("true".equals(state.get("randomFace"))) { + BlockFace[] faces = BlockFace.values(); + face = faces[rng.i(0, faces.length - 1)]; + } else if (state.containsKey("face")) { + face = BlockFace.valueOf(state.get("face").toUpperCase()); + } + if (face == BlockFace.SELF) { + face = BlockFace.NORTH; + } + ItemStack itemStack = OraxenItems.getItemById(f.getItemID()).build(); + Entity entity = f.place(block.getLocation(), itemStack, yaw, face, false); + + Consumer setter = null; + if (entity instanceof ItemFrame frame) { + itemStack = frame.getItem(); + setter = frame::setItem; + } else if (entity instanceof ItemDisplay display) { + itemStack = display.getItemStack(); + setter = display::setItemStack; + } + if (setter == null || itemStack == null) return; + + BiomeColor type = null; + try { + type = BiomeColor.valueOf(state.get("matchBiome").toUpperCase()); + } catch (NullPointerException | IllegalArgumentException ignored) {} + + if (type != null) { + var biomeColor = INMS.get().getBiomeColor(block.getLocation(), type); + var potionColor = Color.fromARGB(biomeColor.getAlpha(), biomeColor.getRed(), biomeColor.getGreen(), biomeColor.getBlue()); + if (itemStack.getItemMeta() instanceof PotionMeta meta) { + meta.setColor(potionColor); + itemStack.setItemMeta(meta); + } + } + setter.accept(itemStack); } } diff --git a/core/src/main/java/com/volmit/iris/core/nms/v1X/NMSBinding1X.java b/core/src/main/java/com/volmit/iris/core/nms/v1X/NMSBinding1X.java index e99478753..8ce6caba8 100644 --- a/core/src/main/java/com/volmit/iris/core/nms/v1X/NMSBinding1X.java +++ b/core/src/main/java/com/volmit/iris/core/nms/v1X/NMSBinding1X.java @@ -20,6 +20,7 @@ package com.volmit.iris.core.nms.v1X; import com.volmit.iris.Iris; import com.volmit.iris.core.nms.INMSBinding; +import com.volmit.iris.core.nms.container.BiomeColor; import com.volmit.iris.core.nms.container.BlockPos; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.util.collection.KList; @@ -40,6 +41,8 @@ import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.generator.ChunkGenerator; import org.bukkit.inventory.ItemStack; +import java.awt.*; + public class NMSBinding1X implements INMSBinding { private static final boolean supportsCustomHeight = testCustomHeight(); @@ -97,6 +100,11 @@ public class NMSBinding1X implements INMSBinding { return location.getWorld().spawnEntity(location, type); } + @Override + public Color getBiomeColor(Location location, BiomeColor type) { + return Color.GREEN; + } + @Override public void deserializeTile(CompoundTag s, Location newPosition) { 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 e70e1c1d4..4c31f2312 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 @@ -20,8 +20,10 @@ package com.volmit.iris.core.service; import com.volmit.iris.Iris; import com.volmit.iris.core.link.*; +import com.volmit.iris.core.nms.container.Pair; 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.plugin.IrisService; import lombok.Data; import org.bukkit.Bukkit; @@ -31,8 +33,8 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.server.PluginEnableEvent; import org.bukkit.inventory.ItemStack; -import java.util.MissingResourceException; -import java.util.Optional; +import java.util.*; +import java.util.stream.Collectors; @Data public class ExternalDataSVC implements IrisService { @@ -93,26 +95,29 @@ public class ExternalDataSVC implements IrisService { } } - public Optional getBlockData(Identifier key) { - Optional provider = activeProviders.stream().filter(p -> p.isValidProvider(key, false)).findFirst(); + public Optional getBlockData(final Identifier key) { + var pair = parseState(key); + Identifier mod = pair.getA(); + + Optional provider = activeProviders.stream().filter(p -> p.isValidProvider(mod, false)).findFirst(); if (provider.isEmpty()) return Optional.empty(); try { - return Optional.of(provider.get().getBlockData(key)); + return Optional.of(provider.get().getBlockData(mod, pair.getB())); } catch (MissingResourceException e) { Iris.error(e.getMessage() + " - [" + e.getClassName() + ":" + e.getKey() + "]"); return Optional.empty(); } } - public Optional getItemStack(Identifier key) { + public Optional getItemStack(Identifier key, KMap customNbt) { Optional provider = activeProviders.stream().filter(p -> p.isValidProvider(key, true)).findFirst(); if (provider.isEmpty()) { Iris.warn("No matching Provider found for modded material \"%s\"!", key); return Optional.empty(); } try { - return Optional.of(provider.get().getItemStack(key)); + return Optional.of(provider.get().getItemStack(key, customNbt)); } catch (MissingResourceException e) { Iris.error(e.getMessage() + " - [" + e.getClassName() + ":" + e.getKey() + "]"); return Optional.empty(); @@ -139,4 +144,27 @@ public class ExternalDataSVC implements IrisService { activeProviders.forEach(p -> names.add(p.getItemTypes())); return names.toArray(new Identifier[0]); } + + public static Pair> parseState(Identifier key) { + if (!key.key().contains("[") || !key.key().contains("]")) { + return new Pair<>(key, new KMap<>()); + } + String state = key.key().split("\\Q[\\E")[1].split("\\Q]\\E")[0]; + KMap stateMap = new KMap<>(); + if (!state.isEmpty()) { + Arrays.stream(state.split(",")).forEach(s -> stateMap.put(s.split("=")[0], s.split("=")[1])); + } + return new Pair<>(new Identifier(key.namespace(), key.key().split("\\Q[\\E")[0]), stateMap); + } + + public static Identifier buildState(Identifier key, KMap state) { + if (state.isEmpty()) { + return key; + } + String path = state.entrySet() + .stream() + .map(e -> e.getKey() + "=" + e.getValue()) + .collect(Collectors.joining(",", key.key() + "[", "]")); + return new Identifier(key.namespace(), path); + } } diff --git a/core/src/main/java/com/volmit/iris/engine/object/IrisLoot.java b/core/src/main/java/com/volmit/iris/engine/object/IrisLoot.java index d7001f233..ae7f5e121 100644 --- a/core/src/main/java/com/volmit/iris/engine/object/IrisLoot.java +++ b/core/src/main/java/com/volmit/iris/engine/object/IrisLoot.java @@ -29,7 +29,6 @@ import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.data.B; import com.volmit.iris.util.format.C; import com.volmit.iris.util.format.Form; -import com.volmit.iris.util.json.JSONObject; import com.volmit.iris.util.math.RNG; import com.volmit.iris.util.noise.CNG; import lombok.AllArgsConstructor; @@ -146,7 +145,7 @@ public class IrisLoot { // TODO Better Third Party Item Acquisition private ItemStack getItemStack(RNG rng) { if (!type.startsWith("minecraft:") && type.contains(":")) { - Optional opt = Iris.service(ExternalDataSVC.class).getItemStack(Identifier.fromString(type)); + Optional opt = Iris.service(ExternalDataSVC.class).getItemStack(Identifier.fromString(type), customNbt); if (opt.isEmpty()) { Iris.warn("Unknown Material: " + type); return new ItemStack(Material.AIR); From 88ea43fbbe3882a25d60c9862c99f103ffbff30a Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Fri, 28 Jun 2024 18:14:52 +0200 Subject: [PATCH 5/6] fix post processing for custom blocks not applying to objects --- .../java/com/volmit/iris/engine/jigsaw/PlannedStructure.java | 4 ++++ .../iris/engine/mantle/components/MantleObjectComponent.java | 4 ++++ 2 files changed, 8 insertions(+) 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 77d4157f7..9ee15169b 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,6 +25,7 @@ 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; @@ -149,6 +150,9 @@ 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/components/MantleObjectComponent.java b/core/src/main/java/com/volmit/iris/engine/mantle/components/MantleObjectComponent.java index 8333e796f..d8ee933f0 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 @@ -27,6 +27,7 @@ import com.volmit.iris.engine.object.*; 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.mantle.MantleFlag; @@ -103,6 +104,9 @@ 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()); } } From 4c68d99c6f3581c827cb9b1c631f908307599c12 Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Sun, 21 Jul 2024 15:50:45 +0200 Subject: [PATCH 6/6] fix returning black color in biomes without a color override --- .../java/com/volmit/iris/core/link/OraxenDataProvider.java | 1 + .../java/com/volmit/iris/core/nms/v1_19_R2/NMSBinding.java | 6 ++++++ .../java/com/volmit/iris/core/nms/v1_19_R3/NMSBinding.java | 6 ++++++ .../java/com/volmit/iris/core/nms/v1_20_R1/NMSBinding.java | 6 ++++++ .../java/com/volmit/iris/core/nms/v1_20_R2/NMSBinding.java | 6 ++++++ .../java/com/volmit/iris/core/nms/v1_20_R3/NMSBinding.java | 6 ++++++ .../java/com/volmit/iris/core/nms/v1_20_R4/NMSBinding.java | 6 ++++++ 7 files changed, 37 insertions(+) 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 a685edc00..233701866 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 @@ -147,6 +147,7 @@ public class OraxenDataProvider extends ExternalDataProvider { if (type != null) { var biomeColor = INMS.get().getBiomeColor(block.getLocation(), type); + if (biomeColor == null) return; var potionColor = Color.fromARGB(biomeColor.getAlpha(), biomeColor.getRed(), biomeColor.getGreen(), biomeColor.getBlue()); if (itemStack.getItemMeta() instanceof PotionMeta meta) { meta.setColor(potionColor); diff --git a/nms/v1_19_R2/src/main/java/com/volmit/iris/core/nms/v1_19_R2/NMSBinding.java b/nms/v1_19_R2/src/main/java/com/volmit/iris/core/nms/v1_19_R2/NMSBinding.java index 22d5c134c..f5f778002 100644 --- a/nms/v1_19_R2/src/main/java/com/volmit/iris/core/nms/v1_19_R2/NMSBinding.java +++ b/nms/v1_19_R2/src/main/java/com/volmit/iris/core/nms/v1_19_R2/NMSBinding.java @@ -537,6 +537,12 @@ public class NMSBinding implements INMSBinding { case FOLIAGE -> biome.getFoliageColor(); case GRASS -> biome.getGrassColor(location.getBlockX(), location.getBlockZ()); }; + if (rgba == 0) { + if (BiomeColor.FOLIAGE == type && biome.getSpecialEffects().getFoliageColorOverride().isEmpty()) + return null; + if (BiomeColor.GRASS == type && biome.getSpecialEffects().getGrassColorOverride().isEmpty()) + return null; + } return new Color(rgba, true); } diff --git a/nms/v1_19_R3/src/main/java/com/volmit/iris/core/nms/v1_19_R3/NMSBinding.java b/nms/v1_19_R3/src/main/java/com/volmit/iris/core/nms/v1_19_R3/NMSBinding.java index 1ca069069..0cbf158bd 100644 --- a/nms/v1_19_R3/src/main/java/com/volmit/iris/core/nms/v1_19_R3/NMSBinding.java +++ b/nms/v1_19_R3/src/main/java/com/volmit/iris/core/nms/v1_19_R3/NMSBinding.java @@ -541,6 +541,12 @@ public class NMSBinding implements INMSBinding { case FOLIAGE -> biome.getFoliageColor(); case GRASS -> biome.getGrassColor(location.getBlockX(), location.getBlockZ()); }; + if (rgba == 0) { + if (BiomeColor.FOLIAGE == type && biome.getSpecialEffects().getFoliageColorOverride().isEmpty()) + return null; + if (BiomeColor.GRASS == type && biome.getSpecialEffects().getGrassColorOverride().isEmpty()) + return null; + } return new Color(rgba, true); } diff --git a/nms/v1_20_R1/src/main/java/com/volmit/iris/core/nms/v1_20_R1/NMSBinding.java b/nms/v1_20_R1/src/main/java/com/volmit/iris/core/nms/v1_20_R1/NMSBinding.java index 5f858b0e8..cb8323009 100644 --- a/nms/v1_20_R1/src/main/java/com/volmit/iris/core/nms/v1_20_R1/NMSBinding.java +++ b/nms/v1_20_R1/src/main/java/com/volmit/iris/core/nms/v1_20_R1/NMSBinding.java @@ -540,6 +540,12 @@ public class NMSBinding implements INMSBinding { case FOLIAGE -> biome.getFoliageColor(); case GRASS -> biome.getGrassColor(location.getBlockX(), location.getBlockZ()); }; + if (rgba == 0) { + if (BiomeColor.FOLIAGE == type && biome.getSpecialEffects().getFoliageColorOverride().isEmpty()) + return null; + if (BiomeColor.GRASS == type && biome.getSpecialEffects().getGrassColorOverride().isEmpty()) + return null; + } return new Color(rgba, true); } diff --git a/nms/v1_20_R2/src/main/java/com/volmit/iris/core/nms/v1_20_R2/NMSBinding.java b/nms/v1_20_R2/src/main/java/com/volmit/iris/core/nms/v1_20_R2/NMSBinding.java index 05620adfb..9d073f4a7 100644 --- a/nms/v1_20_R2/src/main/java/com/volmit/iris/core/nms/v1_20_R2/NMSBinding.java +++ b/nms/v1_20_R2/src/main/java/com/volmit/iris/core/nms/v1_20_R2/NMSBinding.java @@ -538,6 +538,12 @@ public class NMSBinding implements INMSBinding { case FOLIAGE -> biome.getFoliageColor(); case GRASS -> biome.getGrassColor(location.getBlockX(), location.getBlockZ()); }; + if (rgba == 0) { + if (BiomeColor.FOLIAGE == type && biome.getSpecialEffects().getFoliageColorOverride().isEmpty()) + return null; + if (BiomeColor.GRASS == type && biome.getSpecialEffects().getGrassColorOverride().isEmpty()) + return null; + } return new Color(rgba, true); } diff --git a/nms/v1_20_R3/src/main/java/com/volmit/iris/core/nms/v1_20_R3/NMSBinding.java b/nms/v1_20_R3/src/main/java/com/volmit/iris/core/nms/v1_20_R3/NMSBinding.java index eb1739ab7..7334bb040 100644 --- a/nms/v1_20_R3/src/main/java/com/volmit/iris/core/nms/v1_20_R3/NMSBinding.java +++ b/nms/v1_20_R3/src/main/java/com/volmit/iris/core/nms/v1_20_R3/NMSBinding.java @@ -539,6 +539,12 @@ public class NMSBinding implements INMSBinding { case FOLIAGE -> biome.getFoliageColor(); case GRASS -> biome.getGrassColor(location.getBlockX(), location.getBlockZ()); }; + if (rgba == 0) { + if (BiomeColor.FOLIAGE == type && biome.getSpecialEffects().getFoliageColorOverride().isEmpty()) + return null; + if (BiomeColor.GRASS == type && biome.getSpecialEffects().getGrassColorOverride().isEmpty()) + return null; + } return new Color(rgba, true); } diff --git a/nms/v1_20_R4/src/main/java/com/volmit/iris/core/nms/v1_20_R4/NMSBinding.java b/nms/v1_20_R4/src/main/java/com/volmit/iris/core/nms/v1_20_R4/NMSBinding.java index 3c85c8b83..744230307 100644 --- a/nms/v1_20_R4/src/main/java/com/volmit/iris/core/nms/v1_20_R4/NMSBinding.java +++ b/nms/v1_20_R4/src/main/java/com/volmit/iris/core/nms/v1_20_R4/NMSBinding.java @@ -542,6 +542,12 @@ public class NMSBinding implements INMSBinding { case FOLIAGE -> biome.getFoliageColor(); case GRASS -> biome.getGrassColor(location.getBlockX(), location.getBlockZ()); }; + if (rgba == 0) { + if (BiomeColor.FOLIAGE == type && biome.getSpecialEffects().getFoliageColorOverride().isEmpty()) + return null; + if (BiomeColor.GRASS == type && biome.getSpecialEffects().getGrassColorOverride().isEmpty()) + return null; + } return new Color(rgba, true); }