Compare commits

...
28 Commits
Author SHA1 Message Date
Ruling-0 da55c3b12c Merge remote-tracking branch 'origin/master' into mu 2026-10-24 09:01:08 -05:00
Ruling-0 9f74331116 Merge remote-tracking branch 'origin/master' into mu 2026-10-12 11:27:47 -05:00
Ruling-0 cdac4cc4a8 Bump MaterialLib to 0.24.0-mu 2026-10-11 18:25:32 -05:00
Ruling-0 9958dd45ff Bump MaterialLib to 0.21.0-mu 2026-10-09 21:16:39 -05:00
Ruling-0 a25879aaad Bump MaterialLib to 0.20.0-mu 2026-10-09 19:03:07 -05:00
Ruling-0 d8c5870a91 Merge remote-tracking branch 'origin/master' into mu 2026-10-09 18:56:18 -05:00
Ruling-0 96260fe68b Bump MaterialLib to 0.19.0-mu 2026-10-06 15:02:21 -05:00
Ruling-0 f44536d2e8 Merge remote-tracking branch 'origin/master' into mu 2026-10-05 13:22:17 -05:00
Ruling-0 fa8342cfed Bump MaterialLib to 0.18.0-mu 2026-10-04 12:35:02 -05:00
Ruling-0 82ddc4da41 Bump MaterialLib to 0.17.0-mu 2026-10-04 12:16:02 -05:00
Ruling-0 3d1d2f79e5 Bump MaterialLib to 0.16.0-mu 2026-10-04 02:48:31 -05:00
Ruling-0 867651ecab Bump MaterialLib to 0.15.0-mu 2026-09-30 13:01:52 -05:00
Ruling-0 0674aae0ec Merge remote-tracking branch 'origin/master' into mu 2026-09-30 11:33:15 -05:00
Ruling-0 5277fd36f5 Bump MaterialLib to 0.14.0-mu 2026-09-30 11:03:30 -05:00
Ruling-0 b6b31eca33 Bump MaterialLib to 0.13.0-mu 2026-09-29 16:57:41 -05:00
Ruling-0 0dbeae9f68 Bump MaterialLib to 0.12.0-mu 2026-09-29 07:22:41 -05:00
Ruling-0 f0547b5ca6 Merge remote-tracking branch 'origin/master' into mu 2026-09-28 07:38:24 -05:00
Ruling-0 e7a252a0de Bump MaterialLib to 0.11.0-mu 2026-09-22 09:54:05 -05:00
Ruling-0 442118d2e4 Merge remote-tracking branch 'origin/master' into mu 2026-09-20 11:21:25 -05:00
Ruling-0 972d0e4f3c Merge remote-tracking branch 'origin/master' into mu 2026-09-17 16:25:45 -05:00
Ruling-0 bffef55cb8 Merge remote-tracking branch 'origin/master' into mu 2026-09-15 16:10:19 -05:00
Ruling-0 e1d19e0bfc Merge remote-tracking branch 'origin/master' into mu 2026-09-09 12:51:25 -05:00
Ruling-0 b0c5f6fcda Bump MaterialLib to 0.10.0-mu 2026-08-29 22:33:14 -05:00
Ruling-0 953638be05 Merge remote-tracking branch 'origin/master' into mu 2026-08-29 22:19:17 -05:00
Ruling-0 e53d728baf Doc and code style pass 2026-08-20 17:53:20 -05:00
Ruling-0 58b63671ce Clean up ml resolver docs 2026-08-17 21:27:08 -05:00
Ruling-0 a1631b0f58 Resolve MaterialLib ml references in stack config entries 2026-08-17 20:18:14 -05:00
Ruling-0 eafd9ff4a3 Add MaterialLib compileOnly dependency 2026-08-17 20:18:14 -05:00
6 changed files with 73 additions and 3 deletions

No files matched your search

+1
View File
@@ -12,6 +12,7 @@ dependencies {
compileOnly('maven.modrinth:forge-essentials:7.5.1')
compileOnly('com.cardinalstar.cubicchunks:CubicChunks1710:v0.1.14-alpha:dev')
compileOnly('com.ruling_0:MaterialLib:0.24.0-mu:dev')
antlr('org.antlr:antlr4:4.13.2')
shadowImplementation('org.antlr:antlr4-runtime:4.13.2')
+1
View File
@@ -1,6 +1,7 @@
// Add any additional repositories for your dependencies here
repositories {
mavenLocal()
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
@@ -14,11 +14,13 @@ import com.google.common.eventbus.Subscribe;
import codechicken.core.CommonUtils;
import codechicken.core.launch.CodeChickenCorePlugin;
import codechicken.nei.api.API;
import codechicken.nei.api.IConfigureNEI;
import codechicken.nei.asm.NEICorePlugin;
import codechicken.nei.config.IMCHandler;
import codechicken.nei.guihook.HideousLinkedList;
import codechicken.nei.recipe.GuiRecipeTab;
import codechicken.nei.recipe.stackinfo.MaterialLibStackStringifyHandler;
import cpw.mods.fml.client.FMLFileResourcePack;
import cpw.mods.fml.client.FMLFolderResourcePack;
import cpw.mods.fml.common.DummyModContainer;
@@ -114,6 +116,10 @@ public class NEIModContainer extends DummyModContainer {
IMCForNEI.IMCSender();
}
ServerHandler.load();
if (Loader.isModLoaded("materiallib")) {
API.registerStackStringifyHandler(new MaterialLibStackStringifyHandler());
}
}
@Subscribe
@@ -9,6 +9,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -541,14 +542,22 @@ public class SubsetWidget extends Button implements ItemFilterProvider {
return;
}
final AtomicInteger resolved = new AtomicInteger();
final AtomicInteger invalid = new AtomicInteger();
Stream.of(dir.listFiles()).filter(file -> !file.isDirectory()).forEach(file -> {
ClientHandler.loadSettingsFile(
"subsets/" + file.getName(),
lines -> parseFile(file.getName(), lines.collect(Collectors.toList())));
lines -> parseFile(file.getName(), lines.collect(Collectors.toList()), resolved, invalid));
});
if (resolved.get() + invalid.get() > 0) {
NEIClientConfig.logger.info("Resolved {} MaterialLib entries ({} invalid)", resolved.get(), invalid.get());
}
}
private static void parseFile(String resource, List<String> itemStrings) {
private static void parseFile(String resource, List<String> itemStrings, AtomicInteger resolved,
AtomicInteger invalid) {
final JsonParser parser = new JsonParser();
final int dotIndex = resource.lastIndexOf('.');
final String subsetNamespace = dotIndex > 0 ? resource.substring(0, dotIndex) : resource;
@@ -578,7 +587,13 @@ public class SubsetWidget extends Button implements ItemFilterProvider {
final NBTBase nbt = NBTJson.toNbt(parser.parse(itemStr));
if (nbt instanceof NBTTagCompound tag) {
((ItemStackSet) processedTag.filter).add(StackInfo.loadFromNBT(tag));
final ItemStack stack = StackInfo.loadFromNBT(tag);
if (tag.getString("strId").startsWith(StackInfo.MATERIALLIB_PREFIX)) {
(stack != null ? resolved : invalid).incrementAndGet();
}
((ItemStackSet) processedTag.filter).add(stack);
} else {
throw new IllegalArgumentException(
"Expected NBTTagCompound but got " + nbt.getClass().getSimpleName());
@@ -28,6 +28,10 @@ import codechicken.nei.util.NBTHelper;
public class StackInfo {
/// Prefix of the MaterialLib reference form `ml:<MaterialName>:<shapeToken>`, which config entries carry in
/// place of an id and metadata.
public static final String MATERIALLIB_PREFIX = "ml:";
private static final FluidStack NULL_FLUID = new FluidStack(FluidRegistry.WATER, 0);
public static final List<IStackStringifyHandler> stackStringifyHandlers = new ArrayList<>();
private static final Map<String, HashMap<String, String[]>> guidfilters = new HashMap<>();
@@ -0,0 +1,43 @@
package codechicken.nei.recipe.stackinfo;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import com.ruling_0.materiallib.api.StackResolver;
import codechicken.nei.api.IStackStringifyHandler;
import codechicken.nei.recipe.StackInfo;
/// Resolves config entries written in the MaterialLib reference form `ml:<MaterialName>:<shapeToken>` (see
/// [StackInfo#MATERIALLIB_PREFIX]) through [StackResolver], so an entry keeps naming the same item across sessions
/// that renumber item metadata. The resolved stack carries the metadata MaterialLib currently assigns, ignoring any
/// `Damage` on the entry. Entries in any other form are left to the other handlers.
///
/// Registered only behind a `Loader.isModLoaded("materiallib")` gate, so this class never classloads without
/// MaterialLib present.
public class MaterialLibStackStringifyHandler implements IStackStringifyHandler {
@Override
public ItemStack convertNBTToItemStack(NBTTagCompound nbtTag) {
final String strId = nbtTag.getString("strId");
if (!strId.startsWith(StackInfo.MATERIALLIB_PREFIX)) {
return null;
}
final String[] parts = strId.split(":");
if (parts.length != 3) {
return null;
}
final ItemStack stack = StackResolver.getStack(parts[1], parts[2], nbtTag.getInteger("Count"));
if (stack != null && nbtTag.hasKey("tag")) {
stack.setTagCompound((NBTTagCompound) nbtTag.getCompoundTag("tag").copy());
}
return stack;
}
}