Merge remote-tracking branch 'origin/1.16' into 1.18

This commit is contained in:
embeddedt 2023-07-19 11:51:00 -04:00
commit 6fda7393b3
No known key found for this signature in database
GPG Key ID: A69433EC199B5613
4 changed files with 115 additions and 1 deletions

View File

@ -0,0 +1,30 @@
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();
if(original instanceof ItemOverrideBakedModel) {
ItemOverrideBakedModel override = (ItemOverrideBakedModel)original;
cir.setReturnValue(override.getRealModel());
}
}
}

View File

@ -31,6 +31,8 @@ public class ModernFixEarlyConfig {
private final Map<String, Option> options = new HashMap<>();
private final Multimap<String, Option> optionsByCategory = HashMultimap.create();
private static final boolean ALLOW_OVERRIDE_OVERRIDES = Boolean.getBoolean("modernfix.unsupported.allowOverriding");
public static final boolean OPTIFINE_PRESENT;
private File configFile;
@ -263,6 +265,9 @@ public class ModernFixEarlyConfig {
}
private void readProperties(Properties props) {
if(ALLOW_OVERRIDE_OVERRIDES)
LOGGER.fatal("JVM argument given to override mod overrides. Issues opened with this option present will be ignored unless they can be reproduced without.");
for (Map.Entry<Object, Object> entry : props.entrySet()) {
String key = (String) entry.getKey();
String value = (String) entry.getValue();
@ -285,7 +290,7 @@ public class ModernFixEarlyConfig {
continue;
}
if(!option.isModDefined())
if(ALLOW_OVERRIDE_OVERRIDES || !option.isModDefined())
option.setEnabled(enabled, true);
else
LOGGER.warn("Option '{}' already disabled by a mod. Ignoring user configuration", key);

View File

@ -22,6 +22,7 @@ import java.util.function.BiFunction;
import java.util.stream.Collectors;
public class DynamicBakedModelProvider implements Map<ResourceLocation, BakedModel> {
public static DynamicBakedModelProvider currentInstance = null;
private final ModelBakery bakery;
private final Map<Triple<ResourceLocation, Transformation, Boolean>, BakedModel> bakedCache;
private final Map<ResourceLocation, BakedModel> permanentOverrides;
@ -72,6 +73,7 @@ public class DynamicBakedModelProvider implements Map<ResourceLocation, BakedMod
this.bakery = bakery;
this.bakedCache = cache;
this.permanentOverrides = Collections.synchronizedMap(new Object2ObjectOpenHashMap<>());
currentInstance = this;
}
public void setMissingModel(BakedModel model) {

View File

@ -0,0 +1,77 @@
package org.embeddedt.modernfix.dynamicresources;
import com.google.common.collect.ImmutableList;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.renderer.block.model.ItemOverrides;
import net.minecraft.client.renderer.block.model.ItemTransforms;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.core.Direction;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.block.state.BlockState;
import org.jetbrains.annotations.Nullable;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.concurrent.ConcurrentHashMap;
/**
* Delegate model that stores the location of an actual baked model, for use in ItemOverrides.
*/
public class ItemOverrideBakedModel implements BakedModel {
private static final Map<ResourceLocation, ItemOverrideBakedModel> OVERRIDE_MODELS = new ConcurrentHashMap<>();
public final ResourceLocation realLocation;
private ItemOverrideBakedModel(ResourceLocation realLocation) {
this.realLocation = realLocation;
}
public static ItemOverrideBakedModel of(ResourceLocation realLocation) {
return OVERRIDE_MODELS.computeIfAbsent(realLocation, ItemOverrideBakedModel::new);
}
public BakedModel getRealModel() {
return DynamicBakedModelProvider.currentInstance.get(realLocation);
}
@Override
public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction direction, Random random) {
return ImmutableList.of();
}
@Override
public boolean useAmbientOcclusion() {
return false;
}
@Override
public boolean isGui3d() {
return false;
}
@Override
public boolean usesBlockLight() {
return false;
}
@Override
public boolean isCustomRenderer() {
return false;
}
@Override
public TextureAtlasSprite getParticleIcon() {
return null;
}
@Override
public ItemTransforms getTransforms() {
return ItemTransforms.NO_TRANSFORMS;
}
@Override
public ItemOverrides getOverrides() {
return null;
}
}