Skip to content

Commit

Permalink
testing alternative implementation for texture features #1
Browse files Browse the repository at this point in the history
  • Loading branch information
Traben-0 committed Nov 20, 2023
1 parent 9076fd0 commit 3a583f6
Show file tree
Hide file tree
Showing 13 changed files with 765 additions and 369 deletions.
3 changes: 3 additions & 0 deletions common/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
[**ETF Changelog:**]




[4.6.1]

Several fixes, primarily for the random property system rewrite in 4.6.0
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package traben.entity_texture_features.mixin;

import net.minecraft.client.model.ModelPart;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.VertexConsumer;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.util.Identifier;
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.CallbackInfo;
import traben.entity_texture_features.ETFClientCommon;
import traben.entity_texture_features.texture_features.ETFRenderContext;

@Mixin(ModelPart.class)
public abstract class MixinModelPart {
@Shadow public abstract void render(MatrixStack matrices, VertexConsumer vertices, int light, int overlay, float red, float green, float blue, float alpha);

@Inject(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumer;IIFFFF)V",
at = @At(value = "HEAD"))
private void etf$findOutIfInitialModelPart(MatrixStack matrices, VertexConsumer vertices, int light, int overlay, float red, float green, float blue, float alpha, CallbackInfo ci) {
// if(ETFRenderContext.getCurrentTopPart() == null){
// ETFRenderContext.setCurrentTopPart(this);
// }
ETFRenderContext.incrementCurrentModelPartDepth();
}

@Inject(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumer;IIFFFF)V",
at = @At(value = "RETURN"))
private void etf$doEmissiveIfInitialPart(MatrixStack matrices, VertexConsumer vertices, int light, int overlay, float red, float green, float blue, float alpha, CallbackInfo ci) {
//run code if this is the initial topmost rendered part
ETFRenderContext.decrementCurrentModelPartDepth();
if(ETFRenderContext.getCurrentModelPartDepth() == 0){// ETFRenderContext.getCurrentTopPart() == this){
//ETFRenderContext.setCurrentTopPart(null);
if(ETFRenderContext.isRenderReady()) {
Identifier emissive = ETFRenderContext.getCurrentETFTexture().getEmissiveIdentifierOfCurrentState();
if (emissive != null) {
//VertexConsumer emissiveConsumer = ETFRenderContext.getCurrentProvider().getBuffer(etf$ENTITY_TRANSLUCENT_CULL_Z_OFFSET.apply(emissive));//RenderLayer.getEntityTranslucentCull(emissive));
VertexConsumer emissiveConsumer = ETFRenderContext.getCurrentProvider()
.getBuffer(RenderLayer.getEntityTranslucentCull(emissive));//todo options


//ensure this doesnt trigger again
ETFRenderContext.incrementCurrentModelPartDepth();
render(matrices, emissiveConsumer, ETFClientCommon.EMISSIVE_FEATURE_LIGHT_VALUE, overlay, red, green, blue, alpha);

//reset whatever render layer statics this establishes
ETFRenderContext.getCurrentProvider().getBuffer(ETFRenderContext.getCurrentRenderLayer());

//that should be it ???
}
}
//ensure model count is reset
ETFRenderContext.resetCurrentModelPartDepth();
}
}




}
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
package traben.entity_texture_features.mixin;

import net.minecraft.client.render.RenderLayer;
import net.minecraft.util.Identifier;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.ModifyVariable;
import traben.entity_texture_features.texture_features.ETFManager;
import traben.entity_texture_features.texture_features.ETFRenderContext;


@Mixin(RenderLayer.class)
public class MixinRenderLayer {


@Unique
private static Identifier etf$getETFVariantOf(Identifier identifier){

if(ETFRenderContext.getCurrentEntity() == null)//todo is this too wide of a net?
return identifier;

//System.out.println("trying="+identifier.toString());

return ETFManager.getInstance().getETFTexture(identifier, ETFRenderContext.getCurrentEntity(), ETFManager.TextureSource.ENTITY,false)
.getTextureIdentifier(ETFRenderContext.getCurrentEntity());
}



@ModifyVariable(
method = "getEntitySolid",
at = @At(value = "HEAD"),
index = 0, argsOnly = true)
private static Identifier etf$mixinLayer(Identifier value) {
return etf$getETFVariantOf(value);
}

@ModifyVariable(
method = "getEyes",
at = @At(value = "HEAD"),
index = 0, argsOnly = true)
private static Identifier etf$mixinLayer2(Identifier value) {
return etf$getETFVariantOf(value);
}
@ModifyVariable(
method = "getEnergySwirl",
at = @At(value = "HEAD"),
index = 0, argsOnly = true)
private static Identifier etf$mixinLayer3(Identifier value) {
return etf$getETFVariantOf(value);
}

@ModifyVariable(
method = "getEntityAlpha",
at = @At(value = "HEAD"),
index = 0, argsOnly = true)
private static Identifier etf$mixinLayer4(Identifier value) {
return etf$getETFVariantOf(value);
}

@ModifyVariable(
method = "getItemEntityTranslucentCull",
at = @At(value = "HEAD"),
index = 0, argsOnly = true)
private static Identifier etf$mixinLayer5(Identifier value) {
return etf$getETFVariantOf(value);
}

@ModifyVariable(
method = "getEntityCutout",
at = @At(value = "HEAD"),
index = 0, argsOnly = true)
private static Identifier etf$mixinLayer6(Identifier value) {
return etf$getETFVariantOf(value);
}

@ModifyVariable(
method = "getEntityCutoutNoCull(Lnet/minecraft/util/Identifier;Z)Lnet/minecraft/client/render/RenderLayer;",
at = @At(value = "HEAD"),
index = 0, argsOnly = true)
private static Identifier etf$mixinLayer7(Identifier value) {
return etf$getETFVariantOf(value);
}

@ModifyVariable(
method = "getEntityCutoutNoCullZOffset(Lnet/minecraft/util/Identifier;Z)Lnet/minecraft/client/render/RenderLayer;",
at = @At(value = "HEAD"),
index = 0, argsOnly = true)
private static Identifier etf$mixinLayer8(Identifier value) {
return etf$getETFVariantOf(value);
}

@ModifyVariable(
method = "getEntityDecal",
at = @At(value = "HEAD"),
index = 0, argsOnly = true)
private static Identifier etf$mixinLayer9(Identifier value) {
return etf$getETFVariantOf(value);
}

@ModifyVariable(
method = "getEntityNoOutline",
at = @At(value = "HEAD"),
index = 0, argsOnly = true)
private static Identifier etf$mixinLayer10(Identifier value) {
return etf$getETFVariantOf(value);
}

@ModifyVariable(
method = "getEntitySmoothCutout",
at = @At(value = "HEAD"),
index = 0, argsOnly = true)
private static Identifier etf$mixinLayer11(Identifier value) {
return etf$getETFVariantOf(value);
}

@ModifyVariable(
method = "getEntityTranslucent(Lnet/minecraft/util/Identifier;Z)Lnet/minecraft/client/render/RenderLayer;",
at = @At(value = "HEAD"),
index = 0, argsOnly = true)
private static Identifier etf$mixinLayer12(Identifier value) {
return etf$getETFVariantOf(value);
}

@ModifyVariable(
method = "getEntityTranslucentCull",
at = @At(value = "HEAD"),
index = 0, argsOnly = true)
private static Identifier etf$mixinLayer13(Identifier value) {
return etf$getETFVariantOf(value);
}

@ModifyVariable(
method = "getEntityTranslucentEmissive(Lnet/minecraft/util/Identifier;Z)Lnet/minecraft/client/render/RenderLayer;",
at = @At(value = "HEAD"),
index = 0, argsOnly = true)
private static Identifier etf$mixinLayer14(Identifier value) {
return etf$getETFVariantOf(value);
}

@ModifyVariable(
method = "getArmorCutoutNoCull",
at = @At(value = "HEAD"),
index = 0, argsOnly = true)
private static Identifier etf$mixinLayer15(Identifier value) {
return etf$getETFVariantOf(value);
}

// @ModifyVariable(
// method = "get",
// at = @At(value = "INVOKE_ASSIGN", target = "Ljava/util/function/Function;apply(Ljava/lang/Object;)Ljava/lang/Object;"),
// index = 0,
// argsOnly = true)
// private static Identifier etf$mixinLayer15(Identifier value) {
// return etf$getETFVariantOf(value);
// }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package traben.entity_texture_features.mixin.entity;

import net.minecraft.block.entity.BlockEntity;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher;
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.ModifyVariable;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import traben.entity_texture_features.texture_features.ETFRenderContext;
import traben.entity_texture_features.utils.entity_wrappers.ETFBlockEntityWrapper;

@Mixin(BlockEntityRenderDispatcher.class)
public class MixinBlockEntityRenderDispatcher {
@Inject(method = "runReported",
at = @At(value = "HEAD"))
private static void etf$grabContext(BlockEntity blockEntity, Runnable runnable, CallbackInfo ci) {
ETFRenderContext.setCurrentEntity(new ETFBlockEntityWrapper(blockEntity, blockEntity.getPos().hashCode()));

}

@Inject(method = "runReported",
at = @At(value = "RETURN"))
private static void etf$clearContext(BlockEntity blockEntity, Runnable runnable, CallbackInfo ci) {
ETFRenderContext.reset();
}

@ModifyVariable(
method = "method_23080",
at = @At(value = "HEAD"),
index = 3,
argsOnly = true)
private static VertexConsumerProvider etf$injectIntoGetBuffer(VertexConsumerProvider vertexConsumers) {
ETFRenderContext.setCurrentProvider(vertexConsumers);
return layer -> {
ETFRenderContext.setCurrentRenderLayer(layer);
return vertexConsumers.getBuffer(layer);
};
}
@ModifyVariable(
method = "method_23081",
at = @At(value = "HEAD"),
index = 4,
argsOnly = true)
private static VertexConsumerProvider etf$injectIntoGetBuffer2(VertexConsumerProvider vertexConsumers) {
ETFRenderContext.setCurrentProvider(vertexConsumers);
return layer -> {
ETFRenderContext.setCurrentRenderLayer(layer);
return vertexConsumers.getBuffer(layer);
};
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package traben.entity_texture_features.mixin.entity;

import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.entity.EntityRenderDispatcher;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.Entity;
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.CallbackInfo;
import traben.entity_texture_features.texture_features.ETFRenderContext;
import traben.entity_texture_features.utils.entity_wrappers.ETFEntityWrapper;

@Mixin(EntityRenderDispatcher.class)
public class MixinEntityRenderDispatcher {
@Inject(method = "render",
at = @At(value = "HEAD"))
private <E extends Entity> void etf$grabContext(E entity, double x, double y, double z, float yaw, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, CallbackInfo ci) {
ETFRenderContext.setCurrentEntity(new ETFEntityWrapper(entity));
ETFRenderContext.setCurrentProvider(vertexConsumers);

}

@Inject(method = "render",
at = @At(value = "RETURN"))
private <E extends Entity> void etf$clearContext(E entity, double x, double y, double z, float yaw, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, CallbackInfo ci) {
ETFRenderContext.reset();

}


@ModifyArg(
method = "render",
at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/EntityRenderer;render(Lnet/minecraft/entity/Entity;FFLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V"),
index = 4
)
private VertexConsumerProvider etf$injectIntoGetBuffer(VertexConsumerProvider vertexConsumers) {
return layer -> {
ETFRenderContext.setCurrentRenderLayer(layer);
return vertexConsumers.getBuffer(layer);
};
}
}
Loading

0 comments on commit 3a583f6

Please sign in to comment.