Skip to content

Instantly share code, notes, and snippets.

@rikka0w0
Last active August 10, 2020 14:13
Show Gist options
  • Save rikka0w0/624a1ce9b9db633a194c394af7eb5d02 to your computer and use it in GitHub Desktop.
Save rikka0w0/624a1ce9b9db633a194c394af7eb5d02 to your computer and use it in GitHub Desktop.
MixinModelLoader
// 1.14.4 -> 1.16.1
// ISprite -> IModelTransform
// IModelState -> IForgeModelTransform
// ITransformation -> IForgeTransformationMatrix
@Mixin(value = ModelLoader.class)
public abstract class MixinModelLoader implements ForgeModelLoader {
@Inject(method = "bake", at = @At("HEAD"))
public void qwwq(CallbackInfoReturnable ci) {
return;
}
}
@Mixin(value = ModelLoader.class, priority = 9999)
@Implements(@Interface(iface = VanillaModelLoader.class, prefix = "PML$"))
public abstract class MixinModelLoaderStage2 implements ForgeModelLoader {
///////////////////////////////////////////////////
/// ModelLoader.bake and Forge's getBakedModel
///////////////////////////////////////////////////
@Unique
private static final ThreadLocal<Stack<Function<Identifier, Sprite>>> textureGetterStack = ThreadLocal.withInitial(Stack::new);
@Shadow
public abstract BakedModel bake(Identifier identifier, ModelBakeSettings settings);
// We rename the original function so that its calls are redirected to here.
@Intrinsic(displace = true)
public BakedModel PML$bake(Identifier identifier, ModelBakeSettings settings) {
textureGetterStack.get().push(getSpriteMap()::getSprite);
BakedModel bakedModel = bake(identifier, settings);
textureGetterStack.get().pop();
return bakedModel;
}
@Override
public BakedModel getBakedModel(Identifier identifier, ModelBakeSettings settings, Function<Identifier, Sprite> textureGetter) {
textureGetterStack.get().push(textureGetter);
BakedModel bakedModel = bake(identifier, settings);
textureGetterStack.get().pop();
return bakedModel;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment