Update item override patch to 1.18
This commit is contained in:
parent
6fda7393b3
commit
d9b9586af3
|
|
@ -1,24 +1,15 @@
|
||||||
package org.embeddedt.modernfix.common.mixin.perf.dynamic_resources;
|
package org.embeddedt.modernfix.common.mixin.perf.dynamic_resources;
|
||||||
|
|
||||||
import net.minecraft.client.renderer.block.model.ItemOverride;
|
|
||||||
import net.minecraft.client.renderer.block.model.ItemOverrides;
|
import net.minecraft.client.renderer.block.model.ItemOverrides;
|
||||||
import net.minecraft.client.resources.model.BakedModel;
|
import net.minecraft.client.resources.model.BakedModel;
|
||||||
import org.embeddedt.modernfix.dynamicresources.ItemOverrideBakedModel;
|
import org.embeddedt.modernfix.dynamicresources.ItemOverrideBakedModel;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
import org.spongepowered.asm.mixin.injection.ModifyArg;
|
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
|
|
||||||
import java.util.function.Function;
|
|
||||||
|
|
||||||
@Mixin(ItemOverrides.class)
|
@Mixin(ItemOverrides.class)
|
||||||
public class ItemOverridesMixin {
|
public class ItemOverridesMixin {
|
||||||
@ModifyArg(method = "*", at = @At(value = "INVOKE", target = "Ljava/util/stream/Stream;map(Ljava/util/function/Function;)Ljava/util/stream/Stream;"), index = 0)
|
|
||||||
private Function<ItemOverride, BakedModel> itemToBaked(Function<ItemOverride, BakedModel> original) {
|
|
||||||
return override -> ItemOverrideBakedModel.of(override.getModel());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Inject(method = "resolve", at = @At("RETURN"), cancellable = true)
|
@Inject(method = "resolve", at = @At("RETURN"), cancellable = true)
|
||||||
private void getRealModel(CallbackInfoReturnable<BakedModel> cir) {
|
private void getRealModel(CallbackInfoReturnable<BakedModel> cir) {
|
||||||
BakedModel original = cir.getReturnValue();
|
BakedModel original = cir.getReturnValue();
|
||||||
|
|
|
||||||
|
|
@ -32,3 +32,5 @@ accessible method net/minecraft/client/gui/screens/Screen addRenderableWidget (L
|
||||||
accessible field net/minecraft/client/KeyMapping ALL Ljava/util/Map;
|
accessible field net/minecraft/client/KeyMapping ALL Ljava/util/Map;
|
||||||
accessible field net/minecraft/server/packs/resources/MultiPackResourceManager namespacedManagers Ljava/util/Map;
|
accessible field net/minecraft/server/packs/resources/MultiPackResourceManager namespacedManagers Ljava/util/Map;
|
||||||
accessible field net/minecraft/resources/RegistryOps registryAccess Lnet/minecraft/core/RegistryAccess;
|
accessible field net/minecraft/resources/RegistryOps registryAccess Lnet/minecraft/core/RegistryAccess;
|
||||||
|
accessible field net/minecraft/client/renderer/block/model/ItemOverrides$BakedOverride model Lnet/minecraft/client/resources/model/BakedModel;
|
||||||
|
mutable field net/minecraft/client/renderer/block/model/ItemOverrides$BakedOverride model Lnet/minecraft/client/resources/model/BakedModel;
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
package org.embeddedt.modernfix.fabric.mixin.perf.dynamic_resources;
|
||||||
|
|
||||||
|
import net.minecraft.client.renderer.block.model.BlockModel;
|
||||||
|
import net.minecraft.client.renderer.block.model.ItemOverride;
|
||||||
|
import net.minecraft.client.renderer.block.model.ItemOverrides;
|
||||||
|
import net.minecraft.client.resources.model.BakedModel;
|
||||||
|
import net.minecraft.client.resources.model.ModelBakery;
|
||||||
|
import net.minecraft.client.resources.model.UnbakedModel;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import org.embeddedt.modernfix.dynamicresources.ItemOverrideBakedModel;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
|
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
@Mixin(ItemOverrides.class)
|
||||||
|
public class ItemOverridesFabricMixin {
|
||||||
|
@Inject(method = "bakeModel", at = @At("HEAD"), cancellable = true)
|
||||||
|
private void useDynamicallyBakedModel(ModelBakery baker, BlockModel model, Function<ResourceLocation, UnbakedModel> modelGetter, ItemOverride override, CallbackInfoReturnable<BakedModel> cir) {
|
||||||
|
cir.setReturnValue(ItemOverrideBakedModel.of(override.getModel()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,45 @@
|
||||||
|
package org.embeddedt.modernfix.forge.mixin.perf.dynamic_resources;
|
||||||
|
|
||||||
|
import net.minecraft.client.renderer.block.model.ItemOverride;
|
||||||
|
import net.minecraft.client.renderer.block.model.ItemOverrides;
|
||||||
|
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
||||||
|
import net.minecraft.client.resources.model.BakedModel;
|
||||||
|
import net.minecraft.client.resources.model.Material;
|
||||||
|
import net.minecraft.client.resources.model.ModelBakery;
|
||||||
|
import net.minecraft.client.resources.model.UnbakedModel;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import org.embeddedt.modernfix.dynamicresources.ItemOverrideBakedModel;
|
||||||
|
import org.spongepowered.asm.mixin.Final;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
|
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
@Mixin(ItemOverrides.class)
|
||||||
|
public class ItemOverridesForgeMixin {
|
||||||
|
@Shadow @Final private ItemOverrides.BakedOverride[] overrides;
|
||||||
|
private volatile boolean forceLoadedModels = false;
|
||||||
|
|
||||||
|
@Inject(method = "bakeModel", at = @At("HEAD"), cancellable = true, remap = false)
|
||||||
|
private void useDynamicallyBakedModel(ModelBakery baker, UnbakedModel model, Function<ResourceLocation, UnbakedModel> function, Function<Material, TextureAtlasSprite> textureGetter, ItemOverride override, CallbackInfoReturnable<BakedModel> cir) {
|
||||||
|
cir.setReturnValue(ItemOverrideBakedModel.of(override.getModel()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject(method = "getOverrides", at = @At("HEAD"), remap = false)
|
||||||
|
private void doForceloadModels(CallbackInfoReturnable<ItemOverrides.BakedOverride> cir) {
|
||||||
|
if(!forceLoadedModels) {
|
||||||
|
synchronized (this) {
|
||||||
|
if(!forceLoadedModels) {
|
||||||
|
for(ItemOverrides.BakedOverride override : overrides) {
|
||||||
|
if(override != null && override.model instanceof ItemOverrideBakedModel)
|
||||||
|
override.model = ((ItemOverrideBakedModel)override.model).getRealModel();
|
||||||
|
}
|
||||||
|
forceLoadedModels = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user