make standing signs rotatable in normal directions

This commit is contained in:
Sen 2025-07-20 17:05:18 +02:00
parent ba3e80b15c
commit 1b52b26f15
Signed by: sen
GPG key ID: 3AC50A6F47D1B722
8 changed files with 54 additions and 56 deletions

View file

@ -682,7 +682,7 @@ public class RenderGlobal
TileEntity tileentity1 = this.theWorld.getTileEntity(blockpos); TileEntity tileentity1 = this.theWorld.getTileEntity(blockpos);
Block block = this.theWorld.getState(blockpos).getBlock(); Block block = this.theWorld.getState(blockpos).getBlock();
if (tileentity1 != null && (block instanceof BlockChest || block instanceof BlockSign)) if (tileentity1 != null && block instanceof BlockSign)
{ {
TileEntityRenderer.instance.renderTile(tileentity1, partialTicks, destroyblockprogress.getPartialBlockDamage()); TileEntityRenderer.instance.renderTile(tileentity1, partialTicks, destroyblockprogress.getPartialBlockDamage());
} }
@ -1565,7 +1565,7 @@ public class RenderGlobal
double d5 = (double)blockpos.getZ() - d2; double d5 = (double)blockpos.getZ() - d2;
Block block = this.theWorld.getState(blockpos).getBlock(); Block block = this.theWorld.getState(blockpos).getBlock();
if (!(block instanceof BlockChest) && !(block instanceof BlockSign)) if (!(block instanceof BlockSign))
{ {
if (d3 * d3 + d4 * d4 + d5 * d5 > 1024.0D) if (d3 * d3 + d4 * d4 + d5 * d5 > 1024.0D)
{ {

View file

@ -137,7 +137,7 @@ public class RenderItem
private void renderBuiltin(ItemStack stack) { private void renderBuiltin(ItemStack stack) {
if(stack.getItem().getBlock() instanceof BlockStandingSign sign) { if(stack.getItem().getBlock() instanceof BlockStandingSign sign) {
this.state = sign.getState().withProperty(BlockStandingSign.ROTATION, 8); this.state = sign.getState();
TileEntityRenderer.instance.renderItem(this.sign, 0.0D, 0.0D, 0.0D, 0.0F); TileEntityRenderer.instance.renderItem(this.sign, 0.0D, 0.0D, 0.0D, 0.0F);
this.state = null; this.state = null;
} }

View file

@ -31,7 +31,23 @@ public class SignRenderer extends TileRenderer<TileEntitySign>
if (state.getBlock() == Blocks.sign) if (state.getBlock() == Blocks.sign)
{ {
GL11.glTranslatef((float)x + 0.5F, (float)y + 0.75F * f, (float)z + 0.5F); GL11.glTranslatef((float)x + 0.5F, (float)y + 0.75F * f, (float)z + 0.5F);
float f1 = state.getBlock() == Blocks.sign ? (float)(state.getValue(BlockStandingSign.ROTATION) * 360) / 16.0F : 0.0F; int r = state.getBlock() == Blocks.sign ? state.getValue(BlockWallSign.FACING).getIndex() : 0;
float f1 = 0.0F;
if (r == 2)
{
f1 = 180.0F;
}
if (r == 4)
{
f1 = 90.0F;
}
if (r == 5)
{
f1 = -90.0F;
}
GL11.glRotatef(-f1, 0.0F, 1.0F, 0.0F); GL11.glRotatef(-f1, 0.0F, 1.0F, 0.0F);
this.model.signStick.showModel = true; this.model.signStick.showModel = true;
} }

View file

@ -10,7 +10,6 @@ import client.world.WorldClient;
import common.collect.Maps; import common.collect.Maps;
import common.entity.Entity; import common.entity.Entity;
import common.tileentity.TileEntity; import common.tileentity.TileEntity;
import common.tileentity.TileEntityChest;
import common.tileentity.TileEntityDisplay; import common.tileentity.TileEntityDisplay;
import common.tileentity.TileEntitySign; import common.tileentity.TileEntitySign;
import common.util.BlockPos; import common.util.BlockPos;

View file

@ -3,9 +3,12 @@ package common.block.tile;
import common.block.Block; import common.block.Block;
import common.block.ITileEntityProvider; import common.block.ITileEntityProvider;
import common.block.Material; import common.block.Material;
import common.block.Rotatable;
import common.entity.npc.EntityNPC; import common.entity.npc.EntityNPC;
import common.init.Items; import common.init.Items;
import common.item.CheatTab;
import common.item.Item; import common.item.Item;
import common.properties.Property;
import common.tileentity.TileEntity; import common.tileentity.TileEntity;
import common.tileentity.TileEntitySign; import common.tileentity.TileEntitySign;
import common.util.BlockPos; import common.util.BlockPos;
@ -16,7 +19,7 @@ import common.world.IBlockAccess;
import common.world.State; import common.world.State;
import common.world.World; import common.world.World;
public class BlockSign extends Block implements ITileEntityProvider public class BlockSign extends Block implements ITileEntityProvider, Rotatable
{ {
public BlockSign() public BlockSign()
{ {
@ -24,6 +27,8 @@ public class BlockSign extends Block implements ITileEntityProvider
float f = 0.25F; float f = 0.25F;
float f1 = 1.0F; float f1 = 1.0F;
this.setBlockBounds(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, f1, 0.5F + f); this.setBlockBounds(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, f1, 0.5F + f);
this.setDefaultState(this.getBaseState().withProperty(FACING, Facing.NORTH));
this.setTab(CheatTab.DECORATION);
} }
public boolean onUse(World worldIn, BlockPos pos, State state, EntityNPC playerIn, Facing side, float hitX, float hitY, float hitZ) public boolean onUse(World worldIn, BlockPos pos, State state, EntityNPC playerIn, Facing side, float hitX, float hitY, float hitZ)
@ -127,6 +132,11 @@ public class BlockSign extends Block implements ITileEntityProvider
{ {
return !this.hasInvalidNeighbor(worldIn, pos) && super.canPlace(worldIn, pos); return !this.hasInvalidNeighbor(worldIn, pos) && super.canPlace(worldIn, pos);
} }
protected Property[] getProperties()
{
return new Property[] {FACING};
}
public boolean isXrayVisible() public boolean isXrayVisible()
{ {

View file

@ -1,34 +1,41 @@
package common.block.tile; package common.block.tile;
import common.block.Block; import common.block.Block;
import common.block.Rotatable;
import common.entity.npc.EntityNPC; import common.entity.npc.EntityNPC;
import common.init.Blocks; import common.init.Blocks;
import common.item.CheatTab; import common.item.CheatTab;
import common.item.Item;
import common.item.ItemStack; import common.item.ItemStack;
import common.properties.Property;
import common.properties.PropertyInteger; import common.properties.PropertyInteger;
import common.tileentity.TileEntity; import common.tileentity.TileEntity;
import common.tileentity.TileEntitySign; import common.tileentity.TileEntitySign;
import common.util.BlockPos; import common.util.BlockPos;
import common.util.ExtMath; import common.util.ExtMath;
import common.util.Facing; import common.util.Facing;
import common.world.IWorldAccess;
import common.world.State; import common.world.State;
import common.world.World; import common.world.World;
public class BlockStandingSign extends BlockSign public class BlockStandingSign extends BlockSign implements Rotatable
{ {
public static final PropertyInteger ROTATION = PropertyInteger.create("rotation", 0, 15); public void setBlockBounds(IWorldAccess worldIn, BlockPos pos)
public BlockStandingSign()
{ {
this.setDefaultState(this.getBaseState().withProperty(ROTATION, Integer.valueOf(0))); Facing enumfacing = (Facing)worldIn.getState(pos).getValue(FACING);
this.setTab(CheatTab.DECORATION); this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
switch (enumfacing)
{
case NORTH:
case SOUTH:
this.setBlockBounds(0.0f, 0.0f, 0.5f - 0.0625f, 1.0f, 1.0f, 0.5f + 0.0625f);
break;
case WEST:
case EAST:
this.setBlockBounds(0.5f - 0.0625f, 0.0f, 0.0f, 0.5f + 0.0625f, 1.0f, 1.0f);
}
} }
/**
* Called when a neighboring block changes.
*/
public void onUpdate(World worldIn, BlockPos pos, State state, Block neighborBlock) public void onUpdate(World worldIn, BlockPos pos, State state, Block neighborBlock)
{ {
if (!worldIn.getState(pos.down()).getBlock().getMaterial().isSolid()) if (!worldIn.getState(pos.down()).getBlock().getMaterial().isSolid())
@ -40,11 +47,6 @@ public class BlockStandingSign extends BlockSign
super.onUpdate(worldIn, pos, state, neighborBlock); super.onUpdate(worldIn, pos, state, neighborBlock);
} }
protected Property[] getProperties()
{
return new Property[] {ROTATION};
}
public boolean place(ItemStack stack, EntityNPC playerIn, World worldIn, BlockPos pos, Facing side, float hitX, float hitY, float hitZ) public boolean place(ItemStack stack, EntityNPC playerIn, World worldIn, BlockPos pos, Facing side, float hitX, float hitY, float hitZ)
{ {
if (side == Facing.DOWN) if (side == Facing.DOWN)
@ -75,8 +77,7 @@ public class BlockStandingSign extends BlockSign
{ {
if (side == Facing.UP) if (side == Facing.UP)
{ {
int i = ExtMath.floord((double)((playerIn.rotYaw + 180.0F) * 16.0F / 360.0F) + 0.5D) & 15; worldIn.setState(pos, Blocks.sign.getState().withProperty(BlockStandingSign.FACING, playerIn.getHorizontalFacing().getOpposite()), 3);
worldIn.setState(pos, Blocks.sign.getState().withProperty(BlockStandingSign.ROTATION, Integer.valueOf(i)), 3);
} }
else else
{ {

View file

@ -2,8 +2,6 @@ package common.block.tile;
import common.block.Block; import common.block.Block;
import common.block.Rotatable; import common.block.Rotatable;
import common.item.Item;
import common.properties.Property;
import common.util.BlockPos; import common.util.BlockPos;
import common.util.Facing; import common.util.Facing;
import common.world.IWorldAccess; import common.world.IWorldAccess;
@ -12,12 +10,6 @@ import common.world.World;
public class BlockWallSign extends BlockSign implements Rotatable public class BlockWallSign extends BlockSign implements Rotatable
{ {
public BlockWallSign()
{
this.setDefaultState(this.getBaseState().withProperty(FACING, Facing.NORTH));
}
public void setBlockBounds(IWorldAccess worldIn, BlockPos pos) public void setBlockBounds(IWorldAccess worldIn, BlockPos pos)
{ {
Facing enumfacing = (Facing)worldIn.getState(pos).getValue(FACING); Facing enumfacing = (Facing)worldIn.getState(pos).getValue(FACING);
@ -47,9 +39,6 @@ public class BlockWallSign extends BlockSign implements Rotatable
} }
} }
/**
* Called when a neighboring block changes.
*/
public void onUpdate(World worldIn, BlockPos pos, State state, Block neighborBlock) public void onUpdate(World worldIn, BlockPos pos, State state, Block neighborBlock)
{ {
Facing enumfacing = (Facing)state.getValue(FACING); Facing enumfacing = (Facing)state.getValue(FACING);
@ -62,11 +51,6 @@ public class BlockWallSign extends BlockSign implements Rotatable
super.onUpdate(worldIn, pos, state, neighborBlock); super.onUpdate(worldIn, pos, state, neighborBlock);
} }
protected Property[] getProperties()
{
return new Property[] {FACING};
}
protected boolean hasRegisteredItem() { protected boolean hasRegisteredItem() {
return false; return false;

View file

@ -687,22 +687,10 @@ public abstract class Converter {
mapBlock(Blocks.lit_furnace.getState().withProperty(BlockFurnace.FACING, Facing.SOUTH), 62, 3, 9, 15); mapBlock(Blocks.lit_furnace.getState().withProperty(BlockFurnace.FACING, Facing.SOUTH), 62, 3, 9, 15);
mapBlock(Blocks.lit_furnace.getState().withProperty(BlockFurnace.FACING, Facing.WEST), 62, 4, 10); mapBlock(Blocks.lit_furnace.getState().withProperty(BlockFurnace.FACING, Facing.WEST), 62, 4, 10);
mapBlock(Blocks.lit_furnace.getState().withProperty(BlockFurnace.FACING, Facing.EAST), 62, 5, 11); mapBlock(Blocks.lit_furnace.getState().withProperty(BlockFurnace.FACING, Facing.EAST), 62, 5, 11);
mapBlock(Blocks.sign.getState().withProperty(BlockStandingSign.ROTATION, 0), 63, 0); mapBlock(Blocks.sign.getState().withProperty(BlockStandingSign.FACING, Facing.SOUTH), 63, 0, 1, 14, 15);
mapBlock(Blocks.sign.getState().withProperty(BlockStandingSign.ROTATION, 1), 63, 1); mapBlock(Blocks.sign.getState().withProperty(BlockStandingSign.FACING, Facing.WEST), 63, 2, 3, 4, 5);
mapBlock(Blocks.sign.getState().withProperty(BlockStandingSign.ROTATION, 2), 63, 2); mapBlock(Blocks.sign.getState().withProperty(BlockStandingSign.FACING, Facing.NORTH), 63, 6, 7, 8, 9);
mapBlock(Blocks.sign.getState().withProperty(BlockStandingSign.ROTATION, 3), 63, 3); mapBlock(Blocks.sign.getState().withProperty(BlockStandingSign.FACING, Facing.EAST), 63, 10, 11, 12, 13);
mapBlock(Blocks.sign.getState().withProperty(BlockStandingSign.ROTATION, 4), 63, 4);
mapBlock(Blocks.sign.getState().withProperty(BlockStandingSign.ROTATION, 5), 63, 5);
mapBlock(Blocks.sign.getState().withProperty(BlockStandingSign.ROTATION, 6), 63, 6);
mapBlock(Blocks.sign.getState().withProperty(BlockStandingSign.ROTATION, 7), 63, 7);
mapBlock(Blocks.sign.getState().withProperty(BlockStandingSign.ROTATION, 8), 63, 8);
mapBlock(Blocks.sign.getState().withProperty(BlockStandingSign.ROTATION, 9), 63, 9);
mapBlock(Blocks.sign.getState().withProperty(BlockStandingSign.ROTATION, 10), 63, 10);
mapBlock(Blocks.sign.getState().withProperty(BlockStandingSign.ROTATION, 11), 63, 11);
mapBlock(Blocks.sign.getState().withProperty(BlockStandingSign.ROTATION, 12), 63, 12);
mapBlock(Blocks.sign.getState().withProperty(BlockStandingSign.ROTATION, 13), 63, 13);
mapBlock(Blocks.sign.getState().withProperty(BlockStandingSign.ROTATION, 14), 63, 14);
mapBlock(Blocks.sign.getState().withProperty(BlockStandingSign.ROTATION, 15), 63, 15);
mapBlock(Blocks.oak_door, 64); mapBlock(Blocks.oak_door, 64);
mapBlock(Blocks.ladder.getState().withProperty(BlockLadder.FACING, Facing.NORTH), 65); mapBlock(Blocks.ladder.getState().withProperty(BlockLadder.FACING, Facing.NORTH), 65);
mapBlock(Blocks.ladder.getState().withProperty(BlockLadder.FACING, Facing.SOUTH), 65, 3, 9, 15); mapBlock(Blocks.ladder.getState().withProperty(BlockLadder.FACING, Facing.SOUTH), 65, 3, 9, 15);