Merge remote-tracking branch 'origin/1.20' into 1.20.4
This commit is contained in:
commit
501db5b84a
|
|
@ -28,7 +28,7 @@ import java.util.*;
|
||||||
*/
|
*/
|
||||||
public class ModelBakeEventHelper {
|
public class ModelBakeEventHelper {
|
||||||
// TODO: make into config option
|
// 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 Map<ResourceLocation, BakedModel> modelRegistry;
|
||||||
private final Set<ResourceLocation> topLevelModelLocations;
|
private final Set<ResourceLocation> topLevelModelLocations;
|
||||||
private final MutableGraph<String> dependencyGraph;
|
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
|
@Override
|
||||||
public BakedModel onBakedModelLoad(ResourceLocation rl, UnbakedModel rootModel, BakedModel baked, ModelState state, ModelBakery bakery) {
|
public BakedModel onBakedModelLoad(ResourceLocation rl, UnbakedModel rootModel, BakedModel baked, ModelState state, ModelBakery bakery) {
|
||||||
if(true) throw new UnsupportedOperationException("not ported yet");
|
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<>();
|
Deque<ResourceLocation> dependencies = new ArrayDeque<>();
|
||||||
Set<ResourceLocation> seenModels = new HashSet<>();
|
Set<ResourceLocation> seenModels = new HashSet<>();
|
||||||
dependencies.push(rl);
|
dependencies.push(rl);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user