[Feature] Support for hanging Signs

This commit is contained in:
Frank 2023-05-20 23:46:40 +02:00
parent 490ad640cd
commit d4d5c74349
9 changed files with 140 additions and 9 deletions

View file

@ -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));
}
}

View file

@ -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);

View file

@ -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);
}
}

View file

@ -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;

View file

@ -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<WoodenComplexMaterial> {
@NotNull
public static final String WALL_SUFFFIX = "wall_hanging_sign";
public HangingSign() {
super("hanging_sign");
}
@Override
public void addBlockEntry(WoodenComplexMaterial parentMaterial, Consumer<BlockEntry> 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<RecipeEntry> 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()
));
}
}

View file

@ -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<WoodenComplexMaterial> {
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(

View file

@ -19,6 +19,7 @@ public class WoodSlots {
public static final MaterialSlot<WoodenComplexMaterial> DOOR = new Door();
public static final MaterialSlot<WoodenComplexMaterial> LADDER = new Ladder();
public static final Sign SIGN = new Sign();
public static final HangingSign HANGING_SIGN = new HangingSign();
public static final MaterialSlot<WoodenComplexMaterial> CHEST = new Chest();
public static final MaterialSlot<WoodenComplexMaterial> BARREL = new Barrel();
public static final MaterialSlot<WoodenComplexMaterial> CRAFTING_TABLE = new CraftingTable();
@ -28,6 +29,7 @@ public class WoodSlots {
public static final MaterialSlot<WoodenComplexMaterial> 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;
}

View file

@ -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);
}
}
}
}

View file

@ -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;