Skip to content
This repository was archived by the owner on Mar 29, 2022. It is now read-only.

Commit cfa6513

Browse files
committed
more helper functions
1 parent 3f58cd9 commit cfa6513

File tree

7 files changed

+142
-18
lines changed

7 files changed

+142
-18
lines changed

src/main/java/mod/linguardium/itemnbtmodels/Main.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,39 @@
11
package mod.linguardium.itemnbtmodels;
22

3+
import mod.linguardium.itemnbtmodels.compat.CITParser;
4+
import net.fabricmc.api.ClientModInitializer;
5+
import net.fabricmc.api.EnvType;
6+
import net.fabricmc.api.Environment;
37
import net.fabricmc.api.ModInitializer;
48

9+
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents;
10+
import net.fabricmc.fabric.api.client.model.ModelAppender;
11+
import net.fabricmc.fabric.api.client.model.ModelLoadingRegistry;
12+
import net.fabricmc.fabric.api.client.model.ModelResourceProvider;
13+
import net.fabricmc.fabric.api.resource.ResourceManagerHelper;
14+
import net.minecraft.client.util.ModelIdentifier;
15+
import net.minecraft.resource.ResourceManager;
16+
import net.minecraft.resource.ResourceReloadListener;
17+
import net.minecraft.util.Identifier;
518
import org.apache.logging.log4j.Level;
619
import org.apache.logging.log4j.LogManager;
720
import org.apache.logging.log4j.Logger;
821

9-
public class Main implements ModInitializer {
22+
import java.util.Collection;
23+
import java.util.function.Consumer;
24+
@Environment(EnvType.CLIENT)
25+
public class Main implements ClientModInitializer {
1026

1127
public static Logger LOGGER = LogManager.getLogger();
1228

1329
public static final String MOD_ID = "itemnbtmodels";
1430
public static final String MOD_NAME = "ItemNbtModels";
1531

1632
@Override
17-
public void onInitialize() {
33+
public void onInitializeClient() {
1834
log(Level.INFO, "Initializing");
35+
//ModelLoadingRegistry.INSTANCE.registerAppender(CITParser::ModelLoaderListener);
36+
//ModelLoadingRegistry.INSTANCE.registerVariantProvider(CITParser.CITVariantProvider::new);
1937
//TODO: Initializer
2038
}
2139

src/main/java/mod/linguardium/itemnbtmodels/api/NbtMatcher.java

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,10 @@
55
import com.mojang.brigadier.exceptions.CommandSyntaxException;
66
import jdk.nashorn.api.scripting.NashornScriptEngineFactory;
77
import net.minecraft.command.arguments.NbtPathArgumentType;
8-
import net.minecraft.enchantment.EnchantmentHelper;
8+
import net.minecraft.entity.LivingEntity;
99
import net.minecraft.item.ItemStack;
1010
import net.minecraft.nbt.Tag;
1111
import net.minecraft.text.Text;
12-
import net.minecraft.util.Identifier;
13-
import net.minecraft.util.registry.Registry;
1412

1513
import javax.script.Bindings;
1614
import javax.script.ScriptEngine;
@@ -33,8 +31,9 @@ static public class NbtCheckValue {
3331

3432
public static class StackMatcher {
3533
ItemStack stack;
36-
StackMatcher(ItemStack itemStack) {
37-
stack = itemStack;
34+
LivingEntity entity;
35+
StackMatcher(ItemStack itemStack, LivingEntity entity) {
36+
stack = itemStack; this.entity=entity;
3837
}
3938
public Long Number(String string) {
4039
Long l = 0L;
@@ -63,9 +62,22 @@ public String Text(String string) {
6362
return t.asString();
6463
return "";
6564
}
66-
public Integer Enchantment(String string) {
67-
return EnchantmentHelper.getLevel(Registry.ENCHANTMENT.get(new Identifier(string)),stack);
65+
public Integer Count() {
66+
return stack.getCount();
6867
}
68+
public Boolean MainHand() {
69+
return entity.getMainHandStack().equals(stack);
70+
}
71+
public Boolean OffHand() {
72+
return entity.getOffHandStack().equals(stack);
73+
}
74+
public Integer Damage() {
75+
return stack.getDamage();
76+
}
77+
public Integer MaxDamage() {
78+
return stack.getMaxDamage();
79+
}
80+
6981
public String path(String string) {
7082
try {
7183
Tag ret = null;
@@ -78,14 +90,11 @@ public String path(String string) {
7890
}
7991

8092
}
81-
public static boolean matches(ItemStack stack, NbtCheckValue pred) {
93+
public static boolean matches(ItemStack stack, LivingEntity entity, NbtCheckValue pred) {
8294
Bindings bindings = Engine.createBindings();
83-
bindings.put("Nbt",new StackMatcher(stack.copy()));
84-
//Value bindings = context.getBindings("js");
85-
//bindings.putMember("Nbt",new StackMatcher(stack.copy()));
95+
bindings.put("Nbt",new StackMatcher(stack,entity));
8696
try {
8797
Object retval = Engine.eval(pred.eval,bindings);
88-
//Value retval = context.eval("js", pred.eval);
8998
if (retval instanceof Boolean)
9099
return (Boolean)retval;
91100
}catch(ScriptException ignored) { }
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package mod.linguardium.itemnbtmodels.compat;
2+
3+
import com.google.common.collect.Lists;
4+
import com.google.gson.JsonElement;
5+
import mod.linguardium.itemnbtmodels.Main;
6+
import net.fabricmc.api.EnvType;
7+
import net.fabricmc.api.Environment;
8+
import net.fabricmc.fabric.api.client.model.ModelProviderContext;
9+
import net.fabricmc.fabric.api.client.model.ModelProviderException;
10+
import net.fabricmc.fabric.api.client.model.ModelResourceProvider;
11+
import net.fabricmc.fabric.api.client.model.ModelVariantProvider;
12+
import net.fabricmc.fabric.api.object.builder.v1.client.model.FabricModelPredicateProviderRegistry;
13+
import net.fabricmc.fabric.api.renderer.v1.model.FabricBakedModel;
14+
import net.minecraft.client.MinecraftClient;
15+
import net.minecraft.client.render.model.UnbakedModel;
16+
import net.minecraft.client.render.model.json.JsonUnbakedModel;
17+
import net.minecraft.client.util.ModelIdentifier;
18+
import net.minecraft.resource.Resource;
19+
import net.minecraft.resource.ResourceManager;
20+
import net.minecraft.util.Identifier;
21+
import org.apache.logging.log4j.Level;
22+
23+
import java.io.IOException;
24+
import java.io.InputStreamReader;
25+
import java.io.Reader;
26+
import java.nio.charset.StandardCharsets;
27+
import java.util.Collection;
28+
import java.util.List;
29+
import java.util.function.Consumer;
30+
@Environment(EnvType.CLIENT)
31+
public class CITParser {
32+
33+
private String LoadPropertiesFile(Identifier id) {
34+
return "";
35+
}
36+
public static void applyPropertiesFiles() {
37+
38+
}
39+
public static void ModelLoaderListener(ResourceManager manager, Consumer<ModelIdentifier> processor) {
40+
List<Identifier> models = Lists.newArrayList(manager.findResources("optifine/cit",
41+
(string) -> string.endsWith(".json")));
42+
for(Identifier id : models) {
43+
ModelIdentifier modelId = new ModelIdentifier(new Identifier(id.getNamespace(),id.getPath().replace(".json","")),"");
44+
processor.accept(modelId);
45+
}
46+
}
47+
public static class CITVariantProvider implements ModelVariantProvider {
48+
private final ResourceManager manager;
49+
public CITVariantProvider(ResourceManager resourceManager) {
50+
this.manager=resourceManager;
51+
}
52+
53+
@Override
54+
public UnbakedModel loadModelVariant(ModelIdentifier mId, ModelProviderContext context) throws ModelProviderException {
55+
if (mId.getPath().startsWith("optifine/cit")) {
56+
//JsonUnbakedModel jsonUnbakedModel = this.loadModelFromJson(identifier2);
57+
//this.putModel(modelIdentifier, jsonUnbakedModel);
58+
//this.unbakedModels.put(identifier2, jsonUnbakedModel);
59+
Resource resource = null;
60+
Identifier file = new Identifier(mId.getNamespace(),mId.getPath()+".json");
61+
try {
62+
resource = manager.getResource(file);
63+
InputStreamReader reader = new InputStreamReader(resource.getInputStream(), StandardCharsets.UTF_8);
64+
JsonUnbakedModel ubModel = JsonUnbakedModel.deserialize(reader);
65+
ubModel.id=mId.toString();
66+
return ubModel;
67+
} catch (IOException e) {
68+
Main.log(Level.ERROR,"Unable to load model json: "+mId);
69+
}
70+
}
71+
return null;
72+
}
73+
}
74+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package mod.linguardium.itemnbtmodels.mixin;
2+
3+
import mod.linguardium.itemnbtmodels.compat.CITParser;
4+
import net.fabricmc.api.EnvType;
5+
import net.fabricmc.api.Environment;
6+
import net.minecraft.client.color.block.BlockColors;
7+
import net.minecraft.client.render.model.ModelLoader;
8+
import net.minecraft.resource.ResourceManager;
9+
import net.minecraft.util.profiler.Profiler;
10+
import org.spongepowered.asm.mixin.Mixin;
11+
import org.spongepowered.asm.mixin.injection.At;
12+
import org.spongepowered.asm.mixin.injection.Inject;
13+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
14+
15+
@Environment(EnvType.CLIENT)
16+
@Mixin(ModelLoader.class)
17+
public class ModelLoaderMixin {
18+
@Inject(at=@At("RETURN"),method="<init>")
19+
private void applyCITModelPredicates(ResourceManager resourceManager, BlockColors blockColors, Profiler profiler, int i, CallbackInfo ci) {
20+
//CITParser.applyPropertiesFiles();
21+
}
22+
}

src/main/java/mod/linguardium/itemnbtmodels/mixin/ModelOverrideMixin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public List<NbtMatcher.NbtCheckValue> getNbtPredicates() {
3333
@Inject(at=@At(value="FIELD", target="net/minecraft/client/render/model/json/ModelOverride.predicateToThresholds:Ljava/util/Map;"),method="matches", cancellable = true)
3434
private void checkNBTPredicatesFirst(ItemStack stack, ClientWorld world, LivingEntity entity, CallbackInfoReturnable<Boolean> cir) {
3535
for(NbtMatcher.NbtCheckValue predicate : getNbtPredicates()) {
36-
if (!NbtMatcher.matches(stack, predicate)) {
36+
if (!NbtMatcher.matches(stack, entity, predicate)) {
3737
cir.setReturnValue(false);
3838
}
3939
}

src/main/resources/fabric.mod.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
"environment": "*",
1515
"entrypoints": {
1616
"main": [
17-
"mod.linguardium.itemnbtmodels.Main"
17+
1818
],
19-
"client": [],
19+
"client": ["mod.linguardium.itemnbtmodels.Main"],
2020
"server": []
2121
},
2222
"mixins": [

src/main/resources/itemnbtmodels.mixins.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22
"required": true,
33
"package": "mod.linguardium.itemnbtmodels.mixin",
44
"compatibilityLevel": "JAVA_8",
5-
"mixins": [ ],
5+
"mixins": [],
66
"client": [
7+
"ModelLoaderMixin",
78
"ModelOverrideDeserializerMixin",
89
"ModelOverrideMixin"
910
],

0 commit comments

Comments
 (0)