-
Notifications
You must be signed in to change notification settings - Fork 28
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
testing alternative implementation for texture features #1
- Loading branch information
Showing
13 changed files
with
765 additions
and
369 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
|
62 changes: 62 additions & 0 deletions
62
common/src/main/java/traben/entity_texture_features/mixin/MixinModelPart.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | ||
} | ||
} | ||
|
||
|
||
|
||
|
||
} |
158 changes: 158 additions & 0 deletions
158
common/src/main/java/traben/entity_texture_features/mixin/MixinRenderLayer.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
// } | ||
} |
53 changes: 53 additions & 0 deletions
53
...in/java/traben/entity_texture_features/mixin/entity/MixinBlockEntityRenderDispatcher.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
}; | ||
} | ||
} |
44 changes: 44 additions & 0 deletions
44
...rc/main/java/traben/entity_texture_features/mixin/entity/MixinEntityRenderDispatcher.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
}; | ||
} | ||
} |
Oops, something went wrong.