Add LDLib connected textures integration
This commit is contained in:
parent
32a8800344
commit
64a427fa62
|
|
@ -56,6 +56,7 @@ dependencies {
|
||||||
modCompileOnly("dev.latvian.mods:kubejs-forge:${kubejs_version}")
|
modCompileOnly("dev.latvian.mods:kubejs-forge:${kubejs_version}")
|
||||||
//modRuntimeOnly("curse.maven:ferritecore-429235:4441949")
|
//modRuntimeOnly("curse.maven:ferritecore-429235:4441949")
|
||||||
modCompileOnly("curse.maven:ctm-267602:${ctm_version}")
|
modCompileOnly("curse.maven:ctm-267602:${ctm_version}")
|
||||||
|
modCompileOnly("curse.maven:ldlib-626676:${ldlib_version}")
|
||||||
|
|
||||||
modCompileOnly("curse.maven:supermartijncore-454372:4455391")
|
modCompileOnly("curse.maven:supermartijncore-454372:4455391")
|
||||||
modCompileOnly("vazkii.patchouli:Patchouli:1.19.2-77")
|
modCompileOnly("vazkii.patchouli:Patchouli:1.19.2-77")
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,102 @@
|
||||||
|
package org.embeddedt.modernfix.forge.mixin.perf.dynamic_resources.ldlib;
|
||||||
|
|
||||||
|
import com.lowdragmc.lowdraglib.LDLib;
|
||||||
|
import com.lowdragmc.lowdraglib.client.ClientProxy;
|
||||||
|
import com.lowdragmc.lowdraglib.client.forge.ClientProxyImpl;
|
||||||
|
import com.lowdragmc.lowdraglib.client.model.custommodel.LDLMetadataSection;
|
||||||
|
import com.lowdragmc.lowdraglib.client.model.forge.CustomBakedModelImpl;
|
||||||
|
import com.lowdragmc.lowdraglib.client.model.forge.LDLRendererModel;
|
||||||
|
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.ModelResourceLocation;
|
||||||
|
import net.minecraft.client.resources.model.ModelState;
|
||||||
|
import net.minecraft.client.resources.model.UnbakedModel;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
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.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
|
import java.util.ArrayDeque;
|
||||||
|
import java.util.Deque;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
@Mixin(ClientProxyImpl.class)
|
||||||
|
@ClientOnlyMixin
|
||||||
|
@RequiresMod("ldlib")
|
||||||
|
public abstract class ClientProxyImplMixin implements ModernFixClientIntegration {
|
||||||
|
@Inject(method = "<init>", at = @At("RETURN"))
|
||||||
|
private void registerIntegration(CallbackInfo ci) {
|
||||||
|
ModernFixClient.CLIENT_INTEGRATIONS.add(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Redirect(method = "modelBake", at = @At(value = "INVOKE", target = "Ljava/util/Map;entrySet()Ljava/util/Set;", ordinal = 0), remap = false)
|
||||||
|
private Set<?> disableLoop(Map<?, ?> map) {
|
||||||
|
return Set.of();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BakedModel onBakedModelLoad(ResourceLocation rl, UnbakedModel rootModel, BakedModel baked, ModelState state, ModelBakery bakery, Function<Material, TextureAtlasSprite> textureGetter) {
|
||||||
|
if (baked == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (rl instanceof ModelResourceLocation && rootModel != null) {
|
||||||
|
if (baked instanceof LDLRendererModel) {
|
||||||
|
return baked;
|
||||||
|
}
|
||||||
|
if (baked.isCustomRenderer()) { // Nothing we can add to builtin models
|
||||||
|
return baked;
|
||||||
|
}
|
||||||
|
Deque<ResourceLocation> dependencies = new ArrayDeque<>();
|
||||||
|
Set<ResourceLocation> seenModels = new HashSet<>();
|
||||||
|
dependencies.push(rl);
|
||||||
|
seenModels.add(rl);
|
||||||
|
boolean shouldWrap = ClientProxy.WRAPPED_MODELS.getOrDefault(rl, false);
|
||||||
|
// Breadth-first loop through dependencies, exiting as soon as a CTM texture is found, and skipping duplicates/cycles
|
||||||
|
while (!shouldWrap && !dependencies.isEmpty()) {
|
||||||
|
ResourceLocation dep = dependencies.pop();
|
||||||
|
UnbakedModel model;
|
||||||
|
try {
|
||||||
|
model = dep == rl ? rootModel : bakery.getModel(dep);
|
||||||
|
} catch (Exception e) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
Set<Material> textures = new HashSet<>(ClientProxy.SCRAPED_TEXTURES.get(dep));
|
||||||
|
for (Material tex : textures) {
|
||||||
|
// Cache all dependent texture metadata
|
||||||
|
// At least one texture has CTM metadata, so we should wrap this baked
|
||||||
|
if (!LDLMetadataSection.getMetadata(LDLMetadataSection.spriteToAbsolute(tex.texture())).isMissing()) { // TODO lazy
|
||||||
|
shouldWrap = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!shouldWrap) {
|
||||||
|
for (ResourceLocation newDep : model.getDependencies()) {
|
||||||
|
if (seenModels.add(newDep)) {
|
||||||
|
dependencies.push(newDep);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
LDLib.LOGGER.error("Error loading baked dependency {} for baked {}. Skipping...", dep, rl, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ClientProxy.WRAPPED_MODELS.put(rl, shouldWrap);
|
||||||
|
if (shouldWrap) {
|
||||||
|
return new CustomBakedModelImpl(baked);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return baked;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -13,6 +13,7 @@ refined_storage_version=4392788
|
||||||
jei_version=15.8.0.11
|
jei_version=15.8.0.11
|
||||||
rei_version=11.0.597
|
rei_version=11.0.597
|
||||||
ctm_version=5983309
|
ctm_version=5983309
|
||||||
|
ldlib_version=5927130
|
||||||
kubejs_version=1902.6.0-build.142
|
kubejs_version=1902.6.0-build.142
|
||||||
rhino_version=1902.2.2-build.268
|
rhino_version=1902.2.2-build.268
|
||||||
supported_minecraft_versions=1.20.1
|
supported_minecraft_versions=1.20.1
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user