Update item override patch to 1.18

This commit is contained in:
embeddedt 2023-07-19 12:08:15 -04:00
parent 6fda7393b3
commit d9b9586af3
No known key found for this signature in database
GPG Key ID: A69433EC199B5613
4 changed files with 72 additions and 10 deletions

View File

@ -1,24 +1,15 @@
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.resources.model.BakedModel;
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.ModifyArg;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import java.util.function.Function;
@Mixin(ItemOverrides.class)
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)
private void getRealModel(CallbackInfoReturnable<BakedModel> cir) {
BakedModel original = cir.getReturnValue();

View File

@ -31,4 +31,6 @@ accessible class net/minecraft/server/MinecraftServer$ReloadableResources
accessible method net/minecraft/client/gui/screens/Screen addRenderableWidget (Lnet/minecraft/client/gui/components/events/GuiEventListener;)Lnet/minecraft/client/gui/components/events/GuiEventListener;
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/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;

View File

@ -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()));
}
}

View File

@ -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;
}
}
}
}
}