590 lines
23 KiB
Java
Executable file
590 lines
23 KiB
Java
Executable file
package game.block;
|
|
|
|
import game.entity.types.EntityLiving;
|
|
import game.init.Blocks;
|
|
import game.init.SoundEvent;
|
|
import game.item.CheatTab;
|
|
import game.item.ItemStack;
|
|
import game.material.Material;
|
|
import game.model.ModelRotation;
|
|
import game.properties.IProperty;
|
|
import game.properties.PropertyBool;
|
|
import game.properties.PropertyDirection;
|
|
import game.renderer.BlockLayer;
|
|
import game.renderer.blockmodel.ModelBlock;
|
|
import game.rng.Random;
|
|
import game.world.BlockPos;
|
|
import game.world.BoundingBox;
|
|
import game.world.Facing;
|
|
import game.world.IWorldAccess;
|
|
import game.world.State;
|
|
import game.world.World;
|
|
import game.world.WorldServer;
|
|
|
|
public class BlockTripWireHook extends Block
|
|
{
|
|
public static final PropertyDirection FACING = PropertyDirection.create("facing", Facing.Plane.HORIZONTAL);
|
|
public static final PropertyBool POWERED = PropertyBool.create("powered");
|
|
public static final PropertyBool ATTACHED = PropertyBool.create("attached");
|
|
public static final PropertyBool SUSPENDED = PropertyBool.create("suspended");
|
|
|
|
public BlockTripWireHook()
|
|
{
|
|
super(Material.circuits);
|
|
this.setDefaultState(this.getBaseState().withProperty(FACING, Facing.NORTH).withProperty(POWERED, Boolean.valueOf(false)).withProperty(ATTACHED, Boolean.valueOf(false)).withProperty(SUSPENDED, Boolean.valueOf(false)));
|
|
this.setTab(CheatTab.tabTech);
|
|
// this.setTickRandomly(true);
|
|
}
|
|
|
|
/**
|
|
* Get the actual Block state of this Block at the given position. This applies properties not visible in the
|
|
* metadata, such as fence connections.
|
|
*/
|
|
public State getActualState(State state, IWorldAccess worldIn, BlockPos pos)
|
|
{
|
|
return state.withProperty(SUSPENDED, Boolean.valueOf(!World.isSolidSurface(worldIn.getState(pos.down()))));
|
|
}
|
|
|
|
public BoundingBox getCollisionBoundingBox(World worldIn, BlockPos pos, State state)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* Used to determine ambient occlusion and culling when rebuilding chunks for render
|
|
*/
|
|
public boolean isOpaqueCube()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
public boolean isFullCube()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Check whether this Block can be placed on the given side
|
|
*/
|
|
public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, Facing side)
|
|
{
|
|
return side.getAxis().isHorizontal() && worldIn.getState(pos.offset(side.getOpposite())).getBlock().isNormalCube();
|
|
}
|
|
|
|
public boolean canPlaceBlockAt(World worldIn, BlockPos pos)
|
|
{
|
|
for (Facing enumfacing : Facing.Plane.HORIZONTAL)
|
|
{
|
|
if (worldIn.getState(pos.offset(enumfacing)).getBlock().isNormalCube())
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the
|
|
* IBlockstate
|
|
*/
|
|
public State onBlockPlaced(World worldIn, BlockPos pos, Facing facing, float hitX, float hitY, float hitZ, int meta, EntityLiving placer)
|
|
{
|
|
State iblockstate = this.getState().withProperty(POWERED, Boolean.valueOf(false)).withProperty(ATTACHED, Boolean.valueOf(false)).withProperty(SUSPENDED, Boolean.valueOf(false));
|
|
|
|
if (facing.getAxis().isHorizontal())
|
|
{
|
|
iblockstate = iblockstate.withProperty(FACING, facing);
|
|
}
|
|
|
|
return iblockstate;
|
|
}
|
|
|
|
/**
|
|
* Called by ItemBlocks after a block is set in the world, to allow post-place logic
|
|
*/
|
|
public void onBlockPlacedBy(World worldIn, BlockPos pos, State state, EntityLiving placer, ItemStack stack)
|
|
{
|
|
this.triggerHookAt(worldIn, pos, state, false, false, -1, (State)null);
|
|
}
|
|
|
|
/**
|
|
* Called when a neighboring block changes.
|
|
*/
|
|
public void onNeighborBlockChange(World worldIn, BlockPos pos, State state, Block neighborBlock)
|
|
{
|
|
if (neighborBlock != this)
|
|
{
|
|
if (this.checkForDrop(worldIn, pos, state))
|
|
{
|
|
Facing enumfacing = (Facing)state.getValue(FACING);
|
|
|
|
if (!worldIn.getState(pos.offset(enumfacing.getOpposite())).getBlock().isNormalCube())
|
|
{
|
|
this.dropBlockAsItem(worldIn, pos, state, 0);
|
|
worldIn.setBlockToAir(pos);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public void triggerHookAt(World worldIn, BlockPos pos, State hookState, boolean removed, boolean triggered, int wireDist, State wireState)
|
|
{
|
|
Facing enumfacing = (Facing)hookState.getValue(FACING);
|
|
boolean attached = ((Boolean)hookState.getValue(ATTACHED)).booleanValue();
|
|
boolean powered = ((Boolean)hookState.getValue(POWERED)).booleanValue();
|
|
boolean floating = !worldIn.isBlockSolid(pos.down());
|
|
boolean nowAttached = !removed;
|
|
boolean nowPowered = false;
|
|
int i = 0;
|
|
State[] aiblockstate = new State[42];
|
|
|
|
for (int j = 1; j < 42; ++j)
|
|
{
|
|
BlockPos blockpos = pos.offset(enumfacing, j);
|
|
State iblockstate = worldIn.getState(blockpos);
|
|
|
|
if (iblockstate.getBlock() == Blocks.tripwire_hook)
|
|
{
|
|
if (iblockstate.getValue(FACING) == enumfacing.getOpposite())
|
|
{
|
|
i = j;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
if (iblockstate.getBlock() != Blocks.string && j != wireDist)
|
|
{
|
|
aiblockstate[j] = null;
|
|
nowAttached = false;
|
|
}
|
|
else
|
|
{
|
|
if (j == wireDist)
|
|
{
|
|
iblockstate = wireState == null ? iblockstate : wireState; // (State)Objects.firstNonNull(wireState, iblockstate);
|
|
}
|
|
|
|
boolean flag5 = !((Boolean)iblockstate.getValue(BlockTripWire.DISARMED)).booleanValue();
|
|
boolean flag6 = ((Boolean)iblockstate.getValue(BlockTripWire.POWERED)).booleanValue();
|
|
boolean flag7 = ((Boolean)iblockstate.getValue(BlockTripWire.SUSPENDED)).booleanValue();
|
|
nowAttached &= flag7 == floating;
|
|
nowPowered |= flag5 && flag6;
|
|
aiblockstate[j] = iblockstate;
|
|
|
|
if (j == wireDist)
|
|
{
|
|
worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn, pos));
|
|
nowAttached &= flag5;
|
|
}
|
|
}
|
|
}
|
|
|
|
nowAttached = nowAttached & i > 1;
|
|
nowPowered = nowPowered & nowAttached;
|
|
State iblockstate1 = this.getState().withProperty(ATTACHED, Boolean.valueOf(nowAttached)).withProperty(POWERED, Boolean.valueOf(nowPowered));
|
|
|
|
if (i > 0)
|
|
{
|
|
BlockPos blockpos1 = pos.offset(enumfacing, i);
|
|
Facing enumfacing1 = enumfacing.getOpposite();
|
|
worldIn.setState(blockpos1, iblockstate1.withProperty(FACING, enumfacing1), 3);
|
|
this.notifyTriggered(worldIn, blockpos1, enumfacing1);
|
|
this.playerTriggerSounds(worldIn, blockpos1, nowAttached, nowPowered, attached, powered);
|
|
}
|
|
|
|
this.playerTriggerSounds(worldIn, pos, nowAttached, nowPowered, attached, powered);
|
|
|
|
if (!removed)
|
|
{
|
|
worldIn.setState(pos, iblockstate1.withProperty(FACING, enumfacing), 3);
|
|
|
|
if (triggered)
|
|
{
|
|
this.notifyTriggered(worldIn, pos, enumfacing);
|
|
}
|
|
}
|
|
|
|
if (attached != nowAttached)
|
|
{
|
|
for (int k = 1; k < i; ++k)
|
|
{
|
|
BlockPos blockpos2 = pos.offset(enumfacing, k);
|
|
State iblockstate2 = aiblockstate[k];
|
|
|
|
if (iblockstate2 != null && worldIn.getState(blockpos2).getBlock() != Blocks.air)
|
|
{
|
|
worldIn.setState(blockpos2, iblockstate2.withProperty(ATTACHED, Boolean.valueOf(nowAttached)), 3);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Called randomly when setTickRandomly is set to true (used by e.g. crops to grow, etc.)
|
|
*/
|
|
public void randomTick(WorldServer worldIn, BlockPos pos, State state, Random random)
|
|
{
|
|
}
|
|
|
|
public void updateTick(WorldServer worldIn, BlockPos pos, State state, Random rand)
|
|
{
|
|
this.triggerHookAt(worldIn, pos, state, false, true, -1, (State)null);
|
|
}
|
|
|
|
private void playerTriggerSounds(World worldIn, BlockPos pos, boolean attached, boolean powered, boolean wasAttached, boolean wasPowered)
|
|
{
|
|
if (powered && !wasPowered)
|
|
{
|
|
worldIn.playSound(SoundEvent.CLICK, (double)pos.getX() + 0.5D, (double)pos.getY() + 0.1D, (double)pos.getZ() + 0.5D, 0.4F);
|
|
}
|
|
else if (!powered && wasPowered)
|
|
{
|
|
worldIn.playSound(SoundEvent.CLICK, (double)pos.getX() + 0.5D, (double)pos.getY() + 0.1D, (double)pos.getZ() + 0.5D, 0.4F);
|
|
}
|
|
else if (attached && !wasAttached)
|
|
{
|
|
worldIn.playSound(SoundEvent.CLICK, (double)pos.getX() + 0.5D, (double)pos.getY() + 0.1D, (double)pos.getZ() + 0.5D, 0.4F);
|
|
}
|
|
else if (!attached && wasAttached)
|
|
{
|
|
worldIn.playSound(SoundEvent.BOWHIT, (double)pos.getX() + 0.5D, (double)pos.getY() + 0.1D, (double)pos.getZ() + 0.5D, 0.4F);
|
|
}
|
|
}
|
|
|
|
private void notifyTriggered(World worldIn, BlockPos pos, Facing face)
|
|
{
|
|
worldIn.notifyNeighborsOfStateChange(pos, this);
|
|
worldIn.notifyNeighborsOfStateChange(pos.offset(face.getOpposite()), this);
|
|
}
|
|
|
|
private boolean checkForDrop(World worldIn, BlockPos pos, State state)
|
|
{
|
|
if (!this.canPlaceBlockAt(worldIn, pos))
|
|
{
|
|
this.dropBlockAsItem(worldIn, pos, state, 0);
|
|
worldIn.setBlockToAir(pos);
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
public void setBlockBoundsBasedOnState(IWorldAccess worldIn, BlockPos pos)
|
|
{
|
|
float f = 0.1875F;
|
|
|
|
switch ((Facing)worldIn.getState(pos).getValue(FACING))
|
|
{
|
|
case EAST:
|
|
this.setBlockBounds(0.0F, 0.2F, 0.5F - f, f * 2.0F, 0.8F, 0.5F + f);
|
|
break;
|
|
|
|
case WEST:
|
|
this.setBlockBounds(1.0F - f * 2.0F, 0.2F, 0.5F - f, 1.0F, 0.8F, 0.5F + f);
|
|
break;
|
|
|
|
case SOUTH:
|
|
this.setBlockBounds(0.5F - f, 0.2F, 0.0F, 0.5F + f, 0.8F, f * 2.0F);
|
|
break;
|
|
|
|
case NORTH:
|
|
this.setBlockBounds(0.5F - f, 0.2F, 1.0F - f * 2.0F, 0.5F + f, 0.8F, 1.0F);
|
|
}
|
|
}
|
|
|
|
public void onBlockRemoved(WorldServer worldIn, BlockPos pos, State state)
|
|
{
|
|
boolean flag = ((Boolean)state.getValue(ATTACHED)).booleanValue();
|
|
boolean flag1 = ((Boolean)state.getValue(POWERED)).booleanValue();
|
|
|
|
if (flag || flag1)
|
|
{
|
|
this.triggerHookAt(worldIn, pos, state, true, false, -1, (State)null);
|
|
}
|
|
|
|
if (flag1)
|
|
{
|
|
worldIn.notifyNeighborsOfStateChange(pos, this);
|
|
worldIn.notifyNeighborsOfStateChange(pos.offset(((Facing)state.getValue(FACING)).getOpposite()), this);
|
|
}
|
|
|
|
super.onBlockRemoved(worldIn, pos, state);
|
|
}
|
|
|
|
public int getWeakPower(IWorldAccess worldIn, BlockPos pos, State state, Facing side)
|
|
{
|
|
return ((Boolean)state.getValue(POWERED)).booleanValue() ? 15 : 0;
|
|
}
|
|
|
|
public int getStrongPower(IWorldAccess worldIn, BlockPos pos, State state, Facing side)
|
|
{
|
|
return !((Boolean)state.getValue(POWERED)).booleanValue() ? 0 : (state.getValue(FACING) == side ? 15 : 0);
|
|
}
|
|
|
|
/**
|
|
* Can this block provide power. Only wire currently seems to have this change based on its state.
|
|
*/
|
|
public boolean canProvidePower()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public BlockLayer getBlockLayer()
|
|
{
|
|
return BlockLayer.CUTOUT_MIPPED;
|
|
}
|
|
|
|
/**
|
|
* Convert the given metadata into a BlockState for this Block
|
|
*/
|
|
public State getStateFromMeta(int meta)
|
|
{
|
|
return this.getState().withProperty(FACING, Facing.getHorizontal(meta & 3)).withProperty(POWERED, Boolean.valueOf((meta & 8) > 0)).withProperty(ATTACHED, Boolean.valueOf((meta & 4) > 0));
|
|
}
|
|
|
|
/**
|
|
* Convert the BlockState into the correct metadata value
|
|
*/
|
|
public int getMetaFromState(State state)
|
|
{
|
|
int i = 0;
|
|
i = i | ((Facing)state.getValue(FACING)).getHorizontalIndex();
|
|
|
|
if (((Boolean)state.getValue(POWERED)).booleanValue())
|
|
{
|
|
i |= 8;
|
|
}
|
|
|
|
if (((Boolean)state.getValue(ATTACHED)).booleanValue())
|
|
{
|
|
i |= 4;
|
|
}
|
|
|
|
return i;
|
|
}
|
|
|
|
protected IProperty[] getProperties()
|
|
{
|
|
return new IProperty[] {FACING, POWERED, ATTACHED, SUSPENDED};
|
|
}
|
|
|
|
public boolean isMagnetic() {
|
|
return true;
|
|
}
|
|
|
|
public ModelBlock getModel(String name, State state) {
|
|
ModelBlock model;
|
|
if(state.getValue(ATTACHED)) {
|
|
if(state.getValue(SUSPENDED)) {
|
|
if(state.getValue(POWERED))
|
|
model = new ModelBlock("oak_planks")
|
|
.add(7.75f, 2.5f, 0, 8.25f, 2.5f, 6.7f).rotate(8, 0, 0, Facing.Axis.X, -22.5f, true)
|
|
.d("trip_wire").uv(0, 8, 16, 6).rot(90).noCull()
|
|
.u("trip_wire").uv(0, 6, 16, 8).rot(90).noCull()
|
|
.add(6.2f, 4.2f, 6.7f, 9.8f, 5, 10.3f)
|
|
.d("tripwire_hook").uv(5, 3, 11, 9).noCull()
|
|
.u("tripwire_hook").uv(5, 3, 11, 9).noCull()
|
|
.n("tripwire_hook").uv(5, 3, 11, 4).noCull()
|
|
.s("tripwire_hook").uv(5, 8, 11, 9).noCull()
|
|
.w("tripwire_hook").uv(5, 8, 11, 9).noCull()
|
|
.e("tripwire_hook").uv(5, 3, 11, 4).noCull()
|
|
.add(7.4f, 4.2f, 9.1f, 8.6f, 5, 9.1f)
|
|
.n("tripwire_hook").uv(7, 8, 9, 9).noCull()
|
|
.add(7.4f, 4.2f, 7.9f, 8.6f, 5, 7.9f)
|
|
.s("tripwire_hook").uv(7, 3, 9, 4).noCull()
|
|
.add(7.4f, 4.2f, 7.9f, 7.4f, 5, 9.1f)
|
|
.e("tripwire_hook").uv(7, 8, 9, 9).noCull()
|
|
.add(8.6f, 4.2f, 7.9f, 8.6f, 5, 9.1f)
|
|
.w("tripwire_hook").uv(7, 3, 9, 4).noCull()
|
|
.add(7.4f, 5.2f, 10, 8.8f, 6.8f, 14).rotate(8, 6, 14, Facing.Axis.X, -22.5f, false)
|
|
.d().uv(7, 9, 9, 14).noCull()
|
|
.u().uv(7, 2, 9, 7).noCull()
|
|
.n().uv(7, 9, 9, 11).noCull()
|
|
.s().uv(7, 9, 9, 11).noCull()
|
|
.w().uv(2, 9, 7, 11).noCull()
|
|
.e().uv(9, 9, 14, 11).noCull()
|
|
.add(6, 1, 14, 10, 9, 16)
|
|
.d().uv(6, 14, 10, 16).noCull()
|
|
.u().uv(6, 0, 10, 2).noCull()
|
|
.n().uv(6, 7, 10, 15)
|
|
.s().uv(6, 7, 10, 15).noCull()
|
|
.w().uv(0, 7, 2, 15).noCull()
|
|
.e().uv(14, 7, 16, 15).noCull();
|
|
else
|
|
model = new ModelBlock("oak_planks")
|
|
.add(7.75f, 3.5f, 0, 8.25f, 3.5f, 6.7f).rotate(8, 0, 0, Facing.Axis.X, -22.5f, true)
|
|
.d("trip_wire").uv(0, 8, 16, 6).rot(90).noCull()
|
|
.u("trip_wire").uv(0, 6, 16, 8).rot(90).noCull()
|
|
.add(6.2f, 4.2f, 6.7f, 9.8f, 5, 10.3f)
|
|
.d("tripwire_hook").uv(5, 3, 11, 9).noCull()
|
|
.u("tripwire_hook").uv(5, 3, 11, 9).noCull()
|
|
.n("tripwire_hook").uv(5, 3, 11, 4).noCull()
|
|
.s("tripwire_hook").uv(5, 8, 11, 9).noCull()
|
|
.w("tripwire_hook").uv(5, 8, 11, 9).noCull()
|
|
.e("tripwire_hook").uv(5, 3, 11, 4).noCull()
|
|
.add(7.4f, 4.2f, 9.1f, 8.6f, 5, 9.1f)
|
|
.n("tripwire_hook").uv(7, 8, 9, 9).noCull()
|
|
.add(7.4f, 4.2f, 7.9f, 8.6f, 5, 7.9f)
|
|
.s("tripwire_hook").uv(7, 3, 9, 4).noCull()
|
|
.add(7.4f, 4.2f, 7.9f, 7.4f, 5, 9.1f)
|
|
.e("tripwire_hook").uv(7, 8, 9, 9).noCull()
|
|
.add(8.6f, 4.2f, 7.9f, 8.6f, 5, 9.1f)
|
|
.w("tripwire_hook").uv(7, 3, 9, 4).noCull()
|
|
.add(7.4f, 5.2f, 10, 8.8f, 6.8f, 14).rotate(8, 6, 14, Facing.Axis.X, -22.5f, false)
|
|
.d().uv(7, 9, 9, 14).noCull()
|
|
.u().uv(7, 2, 9, 7).noCull()
|
|
.n().uv(7, 9, 9, 11).noCull()
|
|
.s().uv(7, 9, 9, 11).noCull()
|
|
.w().uv(2, 9, 7, 11).noCull()
|
|
.e().uv(9, 9, 14, 11).noCull()
|
|
.add(6, 1, 14, 10, 9, 16)
|
|
.d().uv(6, 14, 10, 16).noCull()
|
|
.u().uv(6, 0, 10, 2).noCull()
|
|
.n().uv(6, 7, 10, 15)
|
|
.s().uv(6, 7, 10, 15).noCull()
|
|
.w().uv(0, 7, 2, 15).noCull()
|
|
.e().uv(14, 7, 16, 15).noCull();
|
|
}
|
|
else {
|
|
if(state.getValue(POWERED))
|
|
model = new ModelBlock("oak_planks")
|
|
.add(7.75f, 0.5f, 0, 8.25f, 0.5f, 6.7f).rotate(8, 0, 0, Facing.Axis.X, -22.5f, true)
|
|
.d("trip_wire").uv(0, 8, 16, 6).rot(90).noCull()
|
|
.u("trip_wire").uv(0, 6, 16, 8).rot(90).noCull()
|
|
.add(6.2f, 4.2f, 6.7f, 9.8f, 5, 10.3f)
|
|
.d("tripwire_hook").uv(5, 3, 11, 9).noCull()
|
|
.u("tripwire_hook").uv(5, 3, 11, 9).noCull()
|
|
.n("tripwire_hook").uv(5, 3, 11, 4).noCull()
|
|
.s("tripwire_hook").uv(5, 8, 11, 9).noCull()
|
|
.w("tripwire_hook").uv(5, 8, 11, 9).noCull()
|
|
.e("tripwire_hook").uv(5, 3, 11, 4).noCull()
|
|
.add(7.4f, 4.2f, 9.1f, 8.6f, 5, 9.1f)
|
|
.n("tripwire_hook").uv(7, 8, 9, 9).noCull()
|
|
.add(7.4f, 4.2f, 7.9f, 8.6f, 5, 7.9f)
|
|
.s("tripwire_hook").uv(7, 3, 9, 4).noCull()
|
|
.add(7.4f, 4.2f, 7.9f, 7.4f, 5, 9.1f)
|
|
.e("tripwire_hook").uv(7, 8, 9, 9).noCull()
|
|
.add(8.6f, 4.2f, 7.9f, 8.6f, 5, 9.1f)
|
|
.w("tripwire_hook").uv(7, 3, 9, 4).noCull()
|
|
.add(7.4f, 5.2f, 10, 8.8f, 6.8f, 14).rotate(8, 6, 14, Facing.Axis.X, -22.5f, false)
|
|
.d().uv(7, 9, 9, 14).noCull()
|
|
.u().uv(7, 2, 9, 7).noCull()
|
|
.n().uv(7, 9, 9, 11).noCull()
|
|
.s().uv(7, 9, 9, 11).noCull()
|
|
.w().uv(2, 9, 7, 11).noCull()
|
|
.e().uv(9, 9, 14, 11).noCull()
|
|
.add(6, 1, 14, 10, 9, 16)
|
|
.d().uv(6, 14, 10, 16).noCull()
|
|
.u().uv(6, 0, 10, 2).noCull()
|
|
.n().uv(6, 7, 10, 15)
|
|
.s().uv(6, 7, 10, 15).noCull()
|
|
.w().uv(0, 7, 2, 15).noCull()
|
|
.e().uv(14, 7, 16, 15).noCull();
|
|
else
|
|
model = new ModelBlock("oak_planks")
|
|
.add(7.75f, 1.5f, 0, 8.25f, 1.5f, 6.7f).rotate(8, 0, 0, Facing.Axis.X, -22.5f, true)
|
|
.d("trip_wire").uv(0, 8, 16, 6).rot(90).noCull()
|
|
.u("trip_wire").uv(0, 6, 16, 8).rot(90).noCull()
|
|
.add(6.2f, 4.2f, 6.7f, 9.8f, 5, 10.3f)
|
|
.d("tripwire_hook").uv(5, 3, 11, 9).noCull()
|
|
.u("tripwire_hook").uv(5, 3, 11, 9).noCull()
|
|
.n("tripwire_hook").uv(5, 3, 11, 4).noCull()
|
|
.s("tripwire_hook").uv(5, 8, 11, 9).noCull()
|
|
.w("tripwire_hook").uv(5, 8, 11, 9).noCull()
|
|
.e("tripwire_hook").uv(5, 3, 11, 4).noCull()
|
|
.add(7.4f, 4.2f, 9.1f, 8.6f, 5, 9.1f)
|
|
.n("tripwire_hook").uv(7, 8, 9, 9).noCull()
|
|
.add(7.4f, 4.2f, 7.9f, 8.6f, 5, 7.9f)
|
|
.s("tripwire_hook").uv(7, 3, 9, 4).noCull()
|
|
.add(7.4f, 4.2f, 7.9f, 7.4f, 5, 9.1f)
|
|
.e("tripwire_hook").uv(7, 8, 9, 9).noCull()
|
|
.add(8.6f, 4.2f, 7.9f, 8.6f, 5, 9.1f)
|
|
.w("tripwire_hook").uv(7, 3, 9, 4).noCull()
|
|
.add(7.4f, 5.2f, 10, 8.8f, 6.8f, 14)
|
|
.d().uv(7, 9, 9, 14).noCull()
|
|
.u().uv(7, 2, 9, 7).noCull()
|
|
.n().uv(7, 9, 9, 11).noCull()
|
|
.s().uv(7, 9, 9, 11).noCull()
|
|
.w().uv(2, 9, 7, 11).noCull()
|
|
.e().uv(9, 9, 14, 11).noCull()
|
|
.add(6, 1, 14, 10, 9, 16)
|
|
.d().uv(6, 14, 10, 16).noCull()
|
|
.u().uv(6, 0, 10, 2).noCull()
|
|
.n().uv(6, 7, 10, 15)
|
|
.s().uv(6, 7, 10, 15).noCull()
|
|
.w().uv(0, 7, 2, 15).noCull()
|
|
.e().uv(14, 7, 16, 15).noCull();
|
|
}
|
|
}
|
|
else {
|
|
if(state.getValue(POWERED))
|
|
model = new ModelBlock("oak_planks")
|
|
.add(6.2f, 4.2f, 6.7f, 9.8f, 5, 10.3f)
|
|
.d("tripwire_hook").uv(5, 3, 11, 9).noCull()
|
|
.u("tripwire_hook").uv(5, 3, 11, 9).noCull()
|
|
.n("tripwire_hook").uv(5, 3, 11, 4).noCull()
|
|
.s("tripwire_hook").uv(5, 8, 11, 9).noCull()
|
|
.w("tripwire_hook").uv(5, 8, 11, 9).noCull()
|
|
.e("tripwire_hook").uv(5, 3, 11, 4).noCull()
|
|
.add(7.4f, 4.2f, 9.1f, 8.6f, 5, 9.1f)
|
|
.n("tripwire_hook").uv(7, 8, 9, 9).noCull()
|
|
.add(7.4f, 4.2f, 7.9f, 8.6f, 5, 7.9f)
|
|
.s("tripwire_hook").uv(7, 3, 9, 4).noCull()
|
|
.add(7.4f, 4.2f, 7.9f, 7.4f, 5, 9.1f)
|
|
.e("tripwire_hook").uv(7, 8, 9, 9).noCull()
|
|
.add(8.6f, 4.2f, 7.9f, 8.6f, 5, 9.1f)
|
|
.w("tripwire_hook").uv(7, 3, 9, 4).noCull()
|
|
.add(7.4f, 5.2f, 10, 8.8f, 6.8f, 14).rotate(8, 6, 14, Facing.Axis.X, -22.5f, false)
|
|
.d().uv(7, 9, 9, 14).noCull()
|
|
.u().uv(7, 2, 9, 7).noCull()
|
|
.n().uv(7, 9, 9, 11).noCull()
|
|
.s().uv(7, 9, 9, 11).noCull()
|
|
.w().uv(2, 9, 7, 11).noCull()
|
|
.e().uv(9, 9, 14, 11).noCull()
|
|
.add(6, 1, 14, 10, 9, 16)
|
|
.d().uv(6, 14, 10, 16).noCull()
|
|
.u().uv(6, 0, 10, 2).noCull()
|
|
.n().uv(6, 7, 10, 15)
|
|
.s().uv(6, 7, 10, 15).noCull()
|
|
.w().uv(0, 7, 2, 15).noCull()
|
|
.e().uv(14, 7, 16, 15).noCull();
|
|
else
|
|
model = new ModelBlock("oak_planks")
|
|
.add(6.2f, 3.8f, 7.9f, 9.8f, 4.6f, 11.5f).rotate(8, 6, 5.2f, Facing.Axis.X, -45, false)
|
|
.d("tripwire_hook").uv(5, 3, 11, 9).noCull()
|
|
.u("tripwire_hook").uv(5, 3, 11, 9).noCull()
|
|
.n("tripwire_hook").uv(5, 3, 11, 4).noCull()
|
|
.s("tripwire_hook").uv(5, 8, 11, 9).noCull()
|
|
.w("tripwire_hook").uv(5, 8, 11, 9).noCull()
|
|
.e("tripwire_hook").uv(5, 3, 11, 4).noCull()
|
|
.add(7.4f, 3.8f, 10.3f, 8.6f, 4.6f, 10.3f).rotate(8, 6, 5.2f, Facing.Axis.X, -45, false)
|
|
.n("tripwire_hook").uv(7, 8, 9, 9).noCull()
|
|
.add(7.4f, 3.8f, 9.1f, 8.6f, 4.6f, 9.1f).rotate(8, 6, 5.2f, Facing.Axis.X, -45, false)
|
|
.s("tripwire_hook").uv(7, 3, 9, 4).noCull()
|
|
.add(7.4f, 3.8f, 9.1f, 7.4f, 4.6f, 10.3f).rotate(8, 6, 5.2f, Facing.Axis.X, -45, false)
|
|
.e("tripwire_hook").uv(7, 8, 9, 9).noCull()
|
|
.add(8.6f, 3.8f, 9.1f, 8.6f, 4.6f, 10.3f).rotate(8, 6, 5.2f, Facing.Axis.X, -45, false)
|
|
.w("tripwire_hook").uv(7, 3, 9, 4).noCull()
|
|
.add(7.4f, 5.2f, 10, 8.8f, 6.8f, 14).rotate(8, 6, 14, Facing.Axis.X, 45, false)
|
|
.d().uv(7, 9, 9, 14).noCull()
|
|
.u().uv(7, 2, 9, 7).noCull()
|
|
.n().uv(7, 9, 9, 11).noCull()
|
|
.s().uv(7, 9, 9, 11).noCull()
|
|
.w().uv(2, 9, 7, 11).noCull()
|
|
.e().uv(9, 9, 14, 11).noCull()
|
|
.add(6, 1, 14, 10, 9, 16)
|
|
.d().uv(6, 14, 10, 16).noCull()
|
|
.u().uv(6, 0, 10, 2).noCull()
|
|
.n().uv(6, 7, 10, 15)
|
|
.s().uv(6, 7, 10, 15).noCull()
|
|
.w().uv(0, 7, 2, 15).noCull()
|
|
.e().uv(14, 7, 16, 15).noCull();
|
|
}
|
|
return model.rotate(ModelRotation.getNorthRot(state.getValue(FACING)));
|
|
}
|
|
}
|