diff --git a/src/main/java/org/betterx/bclib/blocks/signs/BaseHangingSignBlock.java b/src/main/java/org/betterx/bclib/blocks/signs/BaseHangingSignBlock.java new file mode 100644 index 00000000..6ade17fa --- /dev/null +++ b/src/main/java/org/betterx/bclib/blocks/signs/BaseHangingSignBlock.java @@ -0,0 +1,45 @@ +package org.betterx.bclib.blocks.signs; + +import org.betterx.bclib.complexmaterials.BCLWoodTypeWrapper; +import org.betterx.bclib.complexmaterials.BehaviourBuilders; +import org.betterx.bclib.interfaces.BlockModelProvider; +import org.betterx.bclib.interfaces.CustomItemProvider; + +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.HangingSignItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.CeilingHangingSignBlock; +import net.minecraft.world.level.block.StandingSignBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.RotationSegment; +import net.minecraft.world.level.block.state.properties.WoodType; +import net.minecraft.world.level.material.MapColor; + +public class BaseHangingSignBlock extends CeilingHangingSignBlock implements BlockModelProvider, CustomItemProvider { + public final BaseWallHangingSignBlock wallSign; + + public BaseHangingSignBlock(WoodType type) { + this(type, MapColor.WOOD); + } + + public BaseHangingSignBlock(BCLWoodTypeWrapper type) { + this(type.type, type.color); + } + + public BaseHangingSignBlock(WoodType type, MapColor color) { + super(BehaviourBuilders.createSign(color), type); + this.wallSign = new BaseWallHangingSignBlock(BehaviourBuilders.createWallSign(color, this), type); + } + + + @Override + public float getYRotationDegrees(BlockState blockState) { + return RotationSegment.convertToDegrees(blockState.getValue(StandingSignBlock.ROTATION)); + } + + @Override + public BlockItem getCustomItem(ResourceLocation blockID, Item.Properties settings) { + return new HangingSignItem(this, wallSign, settings.stacksTo(16)); + } +} diff --git a/src/main/java/org/betterx/bclib/blocks/BaseSignBlock.java b/src/main/java/org/betterx/bclib/blocks/signs/BaseSignBlock.java similarity index 92% rename from src/main/java/org/betterx/bclib/blocks/BaseSignBlock.java rename to src/main/java/org/betterx/bclib/blocks/signs/BaseSignBlock.java index 846bde64..263088a9 100644 --- a/src/main/java/org/betterx/bclib/blocks/BaseSignBlock.java +++ b/src/main/java/org/betterx/bclib/blocks/signs/BaseSignBlock.java @@ -1,4 +1,4 @@ -package org.betterx.bclib.blocks; +package org.betterx.bclib.blocks.signs; import org.betterx.bclib.complexmaterials.BCLWoodTypeWrapper; import org.betterx.bclib.complexmaterials.BehaviourBuilders; @@ -10,7 +10,6 @@ import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; import net.minecraft.world.item.SignItem; import net.minecraft.world.level.block.StandingSignBlock; -import net.minecraft.world.level.block.WallSignBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.RotationSegment; import net.minecraft.world.level.block.state.properties.WoodType; @@ -18,7 +17,7 @@ import net.minecraft.world.level.material.MapColor; @SuppressWarnings("deprecation") public class BaseSignBlock extends StandingSignBlock implements BlockModelProvider, CustomItemProvider { - public final WallSignBlock wallSign; + public final BaseWallSignBlock wallSign; public BaseSignBlock(WoodType type) { this(type, MapColor.WOOD); diff --git a/src/main/java/org/betterx/bclib/blocks/signs/BaseWallHangingSignBlock.java b/src/main/java/org/betterx/bclib/blocks/signs/BaseWallHangingSignBlock.java new file mode 100644 index 00000000..6cc6e830 --- /dev/null +++ b/src/main/java/org/betterx/bclib/blocks/signs/BaseWallHangingSignBlock.java @@ -0,0 +1,13 @@ +package org.betterx.bclib.blocks.signs; + +import net.minecraft.world.level.block.WallHangingSignBlock; +import net.minecraft.world.level.block.state.properties.WoodType; + +public class BaseWallHangingSignBlock extends WallHangingSignBlock { + public BaseWallHangingSignBlock( + Properties properties, + WoodType woodType + ) { + super(properties, woodType); + } +} diff --git a/src/main/java/org/betterx/bclib/blocks/BaseWallSignBlock.java b/src/main/java/org/betterx/bclib/blocks/signs/BaseWallSignBlock.java similarity index 88% rename from src/main/java/org/betterx/bclib/blocks/BaseWallSignBlock.java rename to src/main/java/org/betterx/bclib/blocks/signs/BaseWallSignBlock.java index 01b206dc..d7c97d01 100644 --- a/src/main/java/org/betterx/bclib/blocks/BaseWallSignBlock.java +++ b/src/main/java/org/betterx/bclib/blocks/signs/BaseWallSignBlock.java @@ -1,4 +1,4 @@ -package org.betterx.bclib.blocks; +package org.betterx.bclib.blocks.signs; import net.minecraft.world.level.block.WallSignBlock; import net.minecraft.world.level.block.state.properties.WoodType; diff --git a/src/main/java/org/betterx/bclib/complexmaterials/set/wood/HangingSign.java b/src/main/java/org/betterx/bclib/complexmaterials/set/wood/HangingSign.java new file mode 100644 index 00000000..4d871394 --- /dev/null +++ b/src/main/java/org/betterx/bclib/complexmaterials/set/wood/HangingSign.java @@ -0,0 +1,65 @@ +package org.betterx.bclib.complexmaterials.set.wood; + +import org.betterx.bclib.blocks.signs.BaseHangingSignBlock; +import org.betterx.bclib.complexmaterials.WoodenComplexMaterial; +import org.betterx.bclib.complexmaterials.entry.BlockEntry; +import org.betterx.bclib.complexmaterials.entry.MaterialSlot; +import org.betterx.bclib.complexmaterials.entry.RecipeEntry; +import org.betterx.bclib.recipes.BCLRecipeBuilder; + +import net.minecraft.data.recipes.RecipeCategory; +import net.minecraft.tags.BlockTags; +import net.minecraft.tags.ItemTags; +import net.minecraft.world.item.Items; + +import java.util.function.Consumer; +import org.jetbrains.annotations.NotNull; + +public class HangingSign extends MaterialSlot { + @NotNull + public static final String WALL_SUFFFIX = "wall_hanging_sign"; + + public HangingSign() { + super("hanging_sign"); + } + + @Override + public void addBlockEntry(WoodenComplexMaterial parentMaterial, Consumer adder) { + var signEntry = new BlockEntry( + suffix, + (complexMaterial, settings) -> new BaseHangingSignBlock(parentMaterial.woodType) + ).setBlockTags(BlockTags.CEILING_HANGING_SIGNS) + .setItemTags(ItemTags.HANGING_SIGNS); + + var wallSignEntry = new BlockEntry( + WALL_SUFFFIX, + false, + (complexMaterial, settings) -> { + if (complexMaterial.getBlock(suffix) instanceof BaseHangingSignBlock sign) { + return sign.wallSign; + } + return null; + } + ).setBlockTags(BlockTags.WALL_HANGING_SIGNS); + adder.accept(signEntry); + adder.accept(wallSignEntry); + } + + @Override + public void addRecipeEntry( + WoodenComplexMaterial parentMaterial, + Consumer adder + ) { + adder.accept(new RecipeEntry(suffix, (mat, id) -> + BCLRecipeBuilder + .crafting(id, parentMaterial.getBlock(suffix)) + .setOutputCount(3) + .setShape("###", "###", " I ") + .addMaterial('#', parentMaterial.getBlock(WoodSlots.PLANKS)) + .addMaterial('I', Items.STICK) + .setGroup("sign") + .setCategory(RecipeCategory.DECORATIONS) + .build() + )); + } +} diff --git a/src/main/java/org/betterx/bclib/complexmaterials/set/wood/Sign.java b/src/main/java/org/betterx/bclib/complexmaterials/set/wood/Sign.java index 4f141ee5..1916fe53 100644 --- a/src/main/java/org/betterx/bclib/complexmaterials/set/wood/Sign.java +++ b/src/main/java/org/betterx/bclib/complexmaterials/set/wood/Sign.java @@ -1,6 +1,6 @@ package org.betterx.bclib.complexmaterials.set.wood; -import org.betterx.bclib.blocks.BaseSignBlock; +import org.betterx.bclib.blocks.signs.BaseSignBlock; import org.betterx.bclib.complexmaterials.WoodenComplexMaterial; import org.betterx.bclib.complexmaterials.entry.BlockEntry; import org.betterx.bclib.complexmaterials.entry.MaterialSlot; @@ -28,7 +28,7 @@ public class Sign extends MaterialSlot { var signEntry = new BlockEntry( suffix, (complexMaterial, settings) -> new BaseSignBlock(parentMaterial.woodType) - ).setBlockTags(BlockTags.SIGNS) + ).setBlockTags(BlockTags.STANDING_SIGNS) .setItemTags(ItemTags.SIGNS); var wallSignEntry = new BlockEntry( diff --git a/src/main/java/org/betterx/bclib/complexmaterials/set/wood/WoodSlots.java b/src/main/java/org/betterx/bclib/complexmaterials/set/wood/WoodSlots.java index f9aba280..59428652 100644 --- a/src/main/java/org/betterx/bclib/complexmaterials/set/wood/WoodSlots.java +++ b/src/main/java/org/betterx/bclib/complexmaterials/set/wood/WoodSlots.java @@ -19,6 +19,7 @@ public class WoodSlots { public static final MaterialSlot DOOR = new Door(); public static final MaterialSlot LADDER = new Ladder(); public static final Sign SIGN = new Sign(); + public static final HangingSign HANGING_SIGN = new HangingSign(); public static final MaterialSlot CHEST = new Chest(); public static final MaterialSlot BARREL = new Barrel(); public static final MaterialSlot CRAFTING_TABLE = new CraftingTable(); @@ -28,6 +29,7 @@ public class WoodSlots { public static final MaterialSlot CHEST_BOAT = new ChestBoat(); public static final String WALL_SIGN = Sign.WALL_SUFFFIX; + public static final String WALL_HANGING_SIGN = HangingSign.WALL_SUFFFIX; public static final String SAPLING = AbstractSaplingSlot.SAPLING_SUFFIX; } diff --git a/src/main/java/org/betterx/bclib/mixin/common/signs/BlockEntityTypeMixin.java b/src/main/java/org/betterx/bclib/mixin/common/signs/BlockEntityTypeMixin.java index 335cbb99..848eaba9 100644 --- a/src/main/java/org/betterx/bclib/mixin/common/signs/BlockEntityTypeMixin.java +++ b/src/main/java/org/betterx/bclib/mixin/common/signs/BlockEntityTypeMixin.java @@ -1,7 +1,9 @@ package org.betterx.bclib.mixin.common.signs; -import org.betterx.bclib.blocks.BaseSignBlock; -import org.betterx.bclib.blocks.BaseWallSignBlock; +import org.betterx.bclib.blocks.signs.BaseHangingSignBlock; +import org.betterx.bclib.blocks.signs.BaseSignBlock; +import org.betterx.bclib.blocks.signs.BaseWallHangingSignBlock; +import org.betterx.bclib.blocks.signs.BaseWallSignBlock; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntityType; @@ -22,6 +24,11 @@ public class BlockEntityTypeMixin { if ((block instanceof BaseSignBlock) || (block instanceof BaseWallSignBlock)) { cir.setReturnValue(true); } + } else if (self == BlockEntityType.HANGING_SIGN) { + final Block block = blockState.getBlock(); + if ((block instanceof BaseHangingSignBlock) || (block instanceof BaseWallHangingSignBlock)) { + cir.setReturnValue(true); + } } } } diff --git a/src/main/java/org/betterx/bclib/registry/BaseBlockEntities.java b/src/main/java/org/betterx/bclib/registry/BaseBlockEntities.java index 1870f1f4..c77d10a5 100644 --- a/src/main/java/org/betterx/bclib/registry/BaseBlockEntities.java +++ b/src/main/java/org/betterx/bclib/registry/BaseBlockEntities.java @@ -9,7 +9,7 @@ import org.betterx.bclib.blockentities.DynamicBlockEntityType.BlockEntitySupplie import org.betterx.bclib.blocks.BaseBarrelBlock; import org.betterx.bclib.blocks.BaseChestBlock; import org.betterx.bclib.blocks.BaseFurnaceBlock; -import org.betterx.bclib.blocks.BaseSignBlock; +import org.betterx.bclib.blocks.signs.BaseSignBlock; import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries;