Merge 1.20.4 into 1.20.5
This commit is contained in:
commit
585fdb9e99
|
|
@ -1,25 +0,0 @@
|
|||
package org.embeddedt.modernfix.forge.mixin.perf.forge_registry_lambda;
|
||||
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Overwrite;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
|
||||
@Mixin(targets = {"net/minecraftforge/registries/RegistryDelegate"})
|
||||
public class RegistryDelegateMixin {
|
||||
@Shadow private ResourceLocation name;
|
||||
|
||||
/**
|
||||
* @author embeddedt
|
||||
* @reason avoid allocation in hashCode()
|
||||
*/
|
||||
@Overwrite(remap = false)
|
||||
public int hashCode() {
|
||||
ResourceLocation name = this.name;
|
||||
if(name != null) {
|
||||
return name.hashCode();
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -28,7 +28,7 @@ import java.util.*;
|
|||
*/
|
||||
public class ModelBakeEventHelper {
|
||||
// TODO: make into config option
|
||||
private static final Set<String> INCOMPATIBLE_MODS = ImmutableSet.of("industrialforegoing", "vampirism", "embers");
|
||||
private static final Set<String> INCOMPATIBLE_MODS = ImmutableSet.of("industrialforegoing", "vampirism", "elevatorid", "embers");
|
||||
private final Map<ResourceLocation, BakedModel> modelRegistry;
|
||||
private final Set<ResourceLocation> topLevelModelLocations;
|
||||
private final MutableGraph<String> dependencyGraph;
|
||||
|
|
|
|||
|
|
@ -1,111 +0,0 @@
|
|||
package org.embeddedt.modernfix.neoforge.mixin.perf.dynamic_resources.ctm;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import net.minecraft.client.renderer.ItemBlockRenderTypes;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.client.resources.model.*;
|
||||
import net.minecraft.core.Holder;
|
||||
import net.minecraft.core.registries.BuiltInRegistries;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.neoforged.neoforge.client.ChunkRenderTypeSet;
|
||||
import org.embeddedt.modernfix.ModernFix;
|
||||
import org.embeddedt.modernfix.ModernFixClient;
|
||||
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
|
||||
import org.embeddedt.modernfix.annotation.RequiresMod;
|
||||
import org.embeddedt.modernfix.api.entrypoint.ModernFixClientIntegration;
|
||||
import org.embeddedt.modernfix.api.helpers.ModelHelpers;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Overwrite;
|
||||
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.CallbackInfo;
|
||||
import team.chisel.ctm.client.util.CTMPackReloadListener;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
@Mixin(CTMPackReloadListener.class)
|
||||
@RequiresMod("ctm")
|
||||
@ClientOnlyMixin
|
||||
public abstract class CTMPackReloadListenerMixin implements ModernFixClientIntegration {
|
||||
/* caches the original render checks */
|
||||
@Shadow(remap = false) @Final private static Map<Holder.Reference<Block>, Predicate<RenderType>> blockRenderChecks;
|
||||
|
||||
private static Map<Holder.Reference<Block>, Predicate<RenderType>> renderCheckOverrides = new ConcurrentHashMap<>();
|
||||
|
||||
private static ChunkRenderTypeSet DEFAULT_TYPE_SET = ChunkRenderTypeSet.of(RenderType.solid());
|
||||
|
||||
@Shadow(remap = false) protected abstract Predicate<RenderType> getLayerCheck(BlockState state, BakedModel model);
|
||||
|
||||
@Shadow(remap = false) protected abstract ChunkRenderTypeSet getExistingRenderCheck(Block block);
|
||||
|
||||
@Inject(method = "<init>", at = @At("RETURN"))
|
||||
private void onInit(CallbackInfo ci) {
|
||||
ModernFixClient.CLIENT_INTEGRATIONS.add(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* @author embeddedt
|
||||
* @reason handle layer changes dynamically
|
||||
*/
|
||||
@Overwrite(remap = false)
|
||||
@SuppressWarnings("removal")
|
||||
private void refreshLayerHacks() {
|
||||
renderCheckOverrides.clear();
|
||||
if(blockRenderChecks.isEmpty()) {
|
||||
for(Block block : BuiltInRegistries.BLOCK) {
|
||||
Holder.Reference<Block> holder = block.builtInRegistryHolder();
|
||||
ChunkRenderTypeSet original = this.getExistingRenderCheck(block);
|
||||
if(original == null)
|
||||
original = DEFAULT_TYPE_SET;
|
||||
blockRenderChecks.put(holder, original::contains);
|
||||
ItemBlockRenderTypes.setRenderLayer(block, type -> this.useOverrideIfPresent(holder, type));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean useOverrideIfPresent(Holder.Reference<Block> delegate, RenderType type) {
|
||||
Predicate<RenderType> override = renderCheckOverrides.get(delegate);
|
||||
if(override == null)
|
||||
override = blockRenderChecks.get(delegate);
|
||||
return override.test(type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BakedModel onBakedModelLoad(ResourceLocation location, UnbakedModel baseModel, BakedModel originalModel, ModelState modelState, ModelBakery bakery) {
|
||||
if(!(location instanceof ModelResourceLocation))
|
||||
return originalModel;
|
||||
if(true) throw new UnsupportedOperationException("not ported yet");
|
||||
/*
|
||||
if(!(originalModel instanceof AbstractCTMBakedModel || originalModel instanceof WeightedBakedModel || originalModel instanceof MultiPartBakedModel))
|
||||
return originalModel;
|
||||
*/
|
||||
/* we construct a new ResourceLocation because an MRL is coming in */
|
||||
Block block = BuiltInRegistries.BLOCK.getOptional(new ResourceLocation(location.getNamespace(), location.getPath())).orElse(null);
|
||||
Holder.Reference<Block> delegate = block != null ? block.builtInRegistryHolder() : null;
|
||||
if(block == null || block == Blocks.AIR || renderCheckOverrides.containsKey(delegate))
|
||||
return originalModel;
|
||||
/* find all states that match this MRL */
|
||||
ImmutableList<BlockState> allStates;
|
||||
try {
|
||||
allStates = ModelHelpers.getBlockStateForLocation(block.getStateDefinition(), (ModelResourceLocation)location);
|
||||
} catch(RuntimeException e) {
|
||||
ModernFix.LOGGER.error("Couldn't get state for MRL " + location, e);
|
||||
return originalModel;
|
||||
}
|
||||
for(BlockState state : allStates) {
|
||||
Predicate<RenderType> newPredicate = this.getLayerCheck(state, originalModel);
|
||||
if(newPredicate != null) {
|
||||
renderCheckOverrides.put(delegate, newPredicate);
|
||||
return originalModel;
|
||||
}
|
||||
}
|
||||
return originalModel;
|
||||
}
|
||||
}
|
||||
|
|
@ -46,7 +46,7 @@ public abstract class TextureMetadataHandlerMixin implements ModernFixClientInte
|
|||
@Override
|
||||
public BakedModel onBakedModelLoad(ResourceLocation rl, UnbakedModel rootModel, BakedModel baked, ModelState state, ModelBakery bakery) {
|
||||
if(true) throw new UnsupportedOperationException("not ported yet");
|
||||
if (false /*!(baked instanceof AbstractCTMBakedModel) && !baked.isCustomRenderer()*/) {
|
||||
if (rl instanceof ModelResourceLocation && false /* !(baked instanceof AbstractCTMBakedModel) && !baked.isCustomRenderer() */) {
|
||||
Deque<ResourceLocation> dependencies = new ArrayDeque<>();
|
||||
Set<ResourceLocation> seenModels = new HashSet<>();
|
||||
dependencies.push(rl);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user