/
Drawbridge.java
128 lines (102 loc) · 3.69 KB
/
Drawbridge.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package slimeknights.tmechworks.blocks;
import net.minecraft.block.Block;
import net.minecraft.block.BlockPistonBase;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.PropertyDirection;
import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.IStringSerializable;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import java.util.Locale;
import javax.annotation.Nonnull;
import slimeknights.mantle.block.BlockInventory;
import slimeknights.tmechworks.blocks.logic.DrawbridgeLogic;
import slimeknights.tmechworks.blocks.logic.DrawbridgeLogicBase;
public class Drawbridge extends BlockInventory
{
public static final PropertyDirection FACING = PropertyDirection.create("facing");
public static final PropertyEnum<DrawbridgeType> TYPE = PropertyEnum.create("type", DrawbridgeType.class, DrawbridgeType.values());
public Drawbridge ()
{
super(Material.IRON);
this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH).withProperty(TYPE, DrawbridgeType.NORMAL));
}
@Override public int getMetaFromState (IBlockState state)
{
return ((DrawbridgeType) state.getValue(TYPE)).ordinal();
}
@Override public IBlockState getStateFromMeta (int meta)
{
return getDefaultState().withProperty(TYPE, DrawbridgeType.values()[meta]);
}
@Nonnull @Override public TileEntity createNewTileEntity (@Nonnull World worldIn, int meta)
{
try
{
return DrawbridgeType.values()[meta].tileEntityClass.newInstance();
}
catch (InstantiationException | IllegalAccessException e)
{
e.printStackTrace();
}
return null;
}
@Override protected boolean openGui (EntityPlayer player, World world, BlockPos pos)
{
return false;
}
@Override protected BlockStateContainer createBlockState ()
{
return new BlockStateContainer(this, FACING, TYPE);
}
@Override public IBlockState getActualState (IBlockState state, IBlockAccess worldIn, BlockPos pos)
{
DrawbridgeLogicBase baseLogic = (DrawbridgeLogicBase) worldIn.getTileEntity(pos);
EnumFacing face = EnumFacing.NORTH;
if (baseLogic != null)
{
face = baseLogic.getFacingDirection();
}
return state.withProperty(FACING, face);
}
@Override public void onBlockPlacedBy (World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack)
{
DrawbridgeLogicBase baseLogic = (DrawbridgeLogicBase) worldIn.getTileEntity(pos);
if (baseLogic == null)
{
return;
}
baseLogic.setFacingDirection(BlockPistonBase.getFacingFromEntity(pos, placer));
}
@Override public void neighborChanged (IBlockState state, World worldIn, BlockPos pos, Block blockIn)
{
DrawbridgeLogicBase logicBase = (DrawbridgeLogicBase) worldIn.getTileEntity(pos);
if (logicBase != null)
{
logicBase.updateRedstone();
}
}
public enum DrawbridgeType implements IStringSerializable
{
NORMAL(DrawbridgeLogic.class),
ADVANCED(DrawbridgeLogicBase.class),
EXTENDED(DrawbridgeLogicBase.class);
public final Class<? extends DrawbridgeLogicBase> tileEntityClass;
DrawbridgeType (Class<? extends DrawbridgeLogicBase> te)
{
tileEntityClass = te;
}
@Override public String getName ()
{
return this.toString().toLowerCase(Locale.US);
}
}
}