diff --git a/src/main/java/org/betterx/bclib/complexmaterials/BCLWoodType.java b/src/main/java/org/betterx/bclib/complexmaterials/BCLWoodType.java new file mode 100644 index 00000000..a09d2de8 --- /dev/null +++ b/src/main/java/org/betterx/bclib/complexmaterials/BCLWoodType.java @@ -0,0 +1,12 @@ +package org.betterx.bclib.complexmaterials; + +import net.minecraft.world.level.block.state.properties.WoodType; + +public class BCLWoodType extends WoodType { + private String modID; + + protected BCLWoodType(String modID, String string) { + super(string); + this.modID = modID; + } +} diff --git a/src/main/java/org/betterx/bclib/complexmaterials/WoodenComplexMaterial.java b/src/main/java/org/betterx/bclib/complexmaterials/WoodenComplexMaterial.java index 0eceebdd..3ee5cdd1 100644 --- a/src/main/java/org/betterx/bclib/complexmaterials/WoodenComplexMaterial.java +++ b/src/main/java/org/betterx/bclib/complexmaterials/WoodenComplexMaterial.java @@ -19,6 +19,7 @@ import net.minecraft.world.item.Items; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.properties.WoodType; import net.minecraft.world.level.material.MaterialColor; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -53,6 +54,8 @@ public class WoodenComplexMaterial extends ComplexMaterial { public final MaterialColor planksColor; public final MaterialColor woodColor; + public final WoodType woodType; + public WoodenComplexMaterial( String modID, String baseName, @@ -63,6 +66,7 @@ public class WoodenComplexMaterial extends ComplexMaterial { super(modID, baseName, receipGroupPrefix); this.planksColor = planksColor; this.woodColor = woodColor; + this.woodType = WoodType.register(new BCLWoodType(modID, baseName)); } @Override diff --git a/src/main/java/org/betterx/bclib/mixin/client/SignEditScreenMixin.java b/src/main/java/org/betterx/bclib/mixin/client/SignEditScreenMixin.java index 2a8e10a1..df16a396 100644 --- a/src/main/java/org/betterx/bclib/mixin/client/SignEditScreenMixin.java +++ b/src/main/java/org/betterx/bclib/mixin/client/SignEditScreenMixin.java @@ -5,7 +5,7 @@ import org.betterx.bclib.client.render.BaseSignBlockEntityRenderer; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; -import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.inventory.AbstractSignEditScreen; import net.minecraft.client.gui.screens.inventory.SignEditScreen; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.blockentity.SignRenderer; @@ -14,22 +14,17 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.SignBlockEntity; import net.minecraft.world.level.block.state.BlockState; -import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.At.Shift; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyArg; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.LocalCapture; @Mixin(SignEditScreen.class) -public abstract class SignEditScreenMixin extends Screen { - @Shadow - @Final - private SignBlockEntity sign; +public abstract class SignEditScreenMixin extends AbstractSignEditScreen { + @Shadow private SignRenderer.SignModel signModel; @Unique @@ -37,27 +32,21 @@ public abstract class SignEditScreenMixin extends Screen { @Unique private boolean bclib_isSign; - protected SignEditScreenMixin(Component component) { - super(component); + public SignEditScreenMixin(SignBlockEntity signBlockEntity, boolean bl) { + super(signBlockEntity, bl); } - @Inject(method = "render(Lcom/mojang/blaze3d/vertex/PoseStack;IIF)V", locals = LocalCapture.CAPTURE_FAILSOFT, at = @At(ordinal = 1, - value = "INVOKE", - target = "Lcom/mojang/blaze3d/vertex/PoseStack;pushPose()V", - shift = Shift.BEFORE - )) - private void bclib_checkOffset( - PoseStack poseStack, - int i, - int j, - float f, - CallbackInfo ci, - float g, - BlockState blockState, + public SignEditScreenMixin( + SignBlockEntity signBlockEntity, boolean bl, - boolean bl2, - float h + Component component ) { + super(signBlockEntity, bl, component); + } + + + @Inject(method = "offsetSign", at = @At("TAIL")) + private void bclib_offsetSign(PoseStack poseStack, BlockState blockState, CallbackInfo ci) { bclib_isSign = blockState.getBlock() instanceof BaseSignBlock; if (bclib_isSign) { bclib_renderStick = blockState.getValue(BaseSignBlock.FLOOR); @@ -67,8 +56,8 @@ public abstract class SignEditScreenMixin extends Screen { } } - @ModifyArg(method = "render(Lcom/mojang/blaze3d/vertex/PoseStack;IIF)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/model/geom/ModelPart;render(Lcom/mojang/blaze3d/vertex/PoseStack;Lcom/mojang/blaze3d/vertex/VertexConsumer;II)V"), index = 1) - private VertexConsumer bclib_signRender(VertexConsumer consumer) { + @ModifyArg(method = "renderSignBackground", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/model/geom/ModelPart;render(Lcom/mojang/blaze3d/vertex/PoseStack;Lcom/mojang/blaze3d/vertex/VertexConsumer;II)V"), index = 1) + private VertexConsumer bclib_renderSignBackground(VertexConsumer consumer) { if (bclib_isSign) { signModel.stick.visible = bclib_renderStick; Block block = sign.getBlockState().getBlock(); diff --git a/src/main/resources/bclib.accesswidener b/src/main/resources/bclib.accesswidener index 3edfe56a..b440760e 100644 --- a/src/main/resources/bclib.accesswidener +++ b/src/main/resources/bclib.accesswidener @@ -22,6 +22,6 @@ accessible method net/minecraft/world/entity/ai/village/poi/PoiTypes register (L accessible method net/minecraft/world/level/levelgen/SurfaceRules$SequenceRuleSource (Ljava/util/List;)V accessible method net/minecraft/core/Registry registerSimple (Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/core/Registry$RegistryBootstrap;)Lnet/minecraft/core/Registry; accessible method net/minecraft/world/entity/SpawnPlacements register (Lnet/minecraft/world/entity/EntityType;Lnet/minecraft/world/entity/SpawnPlacements$Type;Lnet/minecraft/world/level/levelgen/Heightmap$Types;Lnet/minecraft/world/entity/SpawnPlacements$SpawnPredicate;)V - +accessible method net/minecraft/world/level/block/state/properties/WoodType register (Lnet/minecraft/world/level/block/state/properties/WoodType;)Lnet/minecraft/world/level/block/state/properties/WoodType; #Fields accessible field net/minecraft/world/entity/ai/village/poi/PoiTypes TYPE_BY_STATE Ljava/util/Map; \ No newline at end of file