From 4775f836cf12dc366bba5b8341b823675ab71280 Mon Sep 17 00:00:00 2001 From: Reider745 <70357814+Reider745@users.noreply.github.com> Date: Fri, 6 Feb 2026 15:04:34 +0300 Subject: [PATCH] improve: setCreativeCategory & mapping --- .../reider745/hooks/block/BlockPalette.java | 20 ++++++++++++++++--- .../java/com/reider745/item/ItemMethod.java | 8 ++++++-- .../innercore/game/block/BlockState.java | 5 +++++ .../innercore/api/NativeItem.java | 8 ++++---- 4 files changed, 32 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/reider745/hooks/block/BlockPalette.java b/src/main/java/com/reider745/hooks/block/BlockPalette.java index e4708def..7529f543 100644 --- a/src/main/java/com/reider745/hooks/block/BlockPalette.java +++ b/src/main/java/com/reider745/hooks/block/BlockPalette.java @@ -30,6 +30,8 @@ import org.cloudburstmc.nbt.NbtMap; import org.jetbrains.annotations.Nullable; import org.json.JSONObject; +import java.io.File; +import java.nio.file.Files; import java.util.*; import java.util.concurrent.atomic.AtomicReference; @@ -209,6 +211,15 @@ public class BlockPalette { } // custom runtime block + final JSONObject EMPTY = new JSONObject(); + JSONObject blockMapping = EMPTY; + try { + blockMapping = new JSONObject(Files.readString(new File("block_mapping.json").toPath())); + } catch (Exception e) { + e.printStackTrace(); + } + + JSONObject statesValues = blockMapping.optJSONObject("states_values", EMPTY); AtomicReference RUNTIME_ID = new AtomicReference<>(Integer.MAX_VALUE); CustomBlock.blocks.forEach((id, manager) -> { @@ -224,12 +235,15 @@ public class BlockPalette { var builderState = NbtMap.builder(); state.keySet().forEach((name) -> { - builderState.putInt(name, state.getInt(name)); + JSONObject convert = statesValues.optJSONObject(name, EMPTY); + int value = state.getInt(name); + builderState.put(name, convert.has(String.valueOf(value)) ? convert.get(String.valueOf(value)) : value); }); builder.put("states", builderState.build()); builder.putString("name", manager.textId); builder.putInt("version", VERSION_STATE); + var nbt = builder.build(); nbt.hashCode(); if(!blockStateMapping.containsState(nbt)) { @@ -334,7 +348,7 @@ public class BlockPalette { runtimeId = legacyToRuntimeId.get(id << Block.DATA_BITS); if (runtimeId == -1 && id != BlockID.INFO_UPDATE) { - logger.debug("failed to locate state for id: " + id + ":" + meta); + logger.info("failed to locate state for id: " + id + ":" + meta); runtimeId = legacyToRuntimeId.get(BlockID.INFO_UPDATE << Block.DATA_BITS); if (runtimeId == -1) @@ -402,7 +416,7 @@ public class BlockPalette { for (NbtMap key : paletteMap.keySet()) { if (key.getString("name").equals(id) && damage == levelDbRuntimeIdToData.getOrDefault(key, 0)) { - logger.warning("Replacing a unit with low compatibility: " + id); + logger.warning("Replacing a unit with low compatibility: " + id + " " + customVanilla.build() + " " + key); snapshot = paletteMap.get(key); CACHE_PALETTE.put(vanilla, snapshot); break; diff --git a/src/main/java/com/reider745/item/ItemMethod.java b/src/main/java/com/reider745/item/ItemMethod.java index a31a46ec..13fd229a 100644 --- a/src/main/java/com/reider745/item/ItemMethod.java +++ b/src/main/java/com/reider745/item/ItemMethod.java @@ -12,6 +12,8 @@ import com.zhekasmirnov.innercore.api.mod.adaptedscript.AdaptedScriptAPI.IDRegis import com.zhekasmirnov.innercore.api.runtime.other.NameTranslation; import it.unimi.dsi.fastutil.ints.Int2BooleanMap; import it.unimi.dsi.fastutil.ints.Int2BooleanOpenHashMap; +import it.unimi.dsi.fastutil.ints.Int2IntMap; +import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap; import java.util.ArrayList; import java.util.HashMap; @@ -65,8 +67,10 @@ public class ItemMethod { manager.put(PropertiesNames.MAX_STACK, stack); } - public static void setCreativeCategory(CustomManager manager, int val) { - manager.put(PropertiesNames.CREATIVE_CATEGORY, val); + private static final Int2IntMap CREATIVE_CATEGORY = new Int2IntOpenHashMap(); + + public static void setCreativeCategory(int id, int val) { + CREATIVE_CATEGORY.put(id, val); } public static int getCreativeCategory(int id) { diff --git a/src/main/java/com/zhekasmirnov/apparatus/adapter/innercore/game/block/BlockState.java b/src/main/java/com/zhekasmirnov/apparatus/adapter/innercore/game/block/BlockState.java index e2878cc4..aaa0a771 100644 --- a/src/main/java/com/zhekasmirnov/apparatus/adapter/innercore/game/block/BlockState.java +++ b/src/main/java/com/zhekasmirnov/apparatus/adapter/innercore/game/block/BlockState.java @@ -69,6 +69,11 @@ public class BlockState { return null; } + @JSStaticFunction + public static int getBlockStateCapacity(int id) { + return CAPACITY_STATES.getOrDefault(id, 0); + } + public final int id; public final int data; public final int runtimeId; diff --git a/src/main/java/com/zhekasmirnov/innercore/api/NativeItem.java b/src/main/java/com/zhekasmirnov/innercore/api/NativeItem.java index 1189c82d..2fb068a8 100644 --- a/src/main/java/com/zhekasmirnov/innercore/api/NativeItem.java +++ b/src/main/java/com/zhekasmirnov/innercore/api/NativeItem.java @@ -101,7 +101,7 @@ public class NativeItem { } public void setCreativeCategory(int val) { - setCreativeCategory(properties, val); + setCreativeCategory(id, val); } @Deprecated(since = "Zote") @@ -263,8 +263,8 @@ public class NativeItem { // JIC if something changed, check PlayerOffhandInventory.OFFHAND_ITEMS } - public static void setCreativeCategory(CustomManager manager, int val) { - ItemMethod.setCreativeCategory(manager, val); + public static void setCreativeCategory(int id, int val) { + ItemMethod.setCreativeCategory(id, val); } @Deprecated(since = "Zote") @@ -305,7 +305,7 @@ public class NativeItem { public static void setCreativeCategoryForId(int id, int category) { - ItemMethod.setCreativeCategory(CustomManager.getFor(id), category); + ItemMethod.setCreativeCategory(id, category); } public static String getNameForId(int id, int data) {