/* * Copyright (c) CovertJaguar, 2014 http://railcraft.info * * This code is the property of CovertJaguar * and may only be used with explicit written * permission unless otherwise specified on the * license page at http://railcraft.info/wiki/info:license. */ package mods.railcraft.common.blocks.tracks; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.IIcon; import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; import mods.railcraft.api.tracks.ITrackCustomShape; import mods.railcraft.api.tracks.ITrackReversable; import mods.railcraft.common.util.misc.MiscTools; public class TrackBufferStop extends TrackBaseRailcraft implements ITrackReversable, ITrackCustomShape { private static final float CBOX = 0.0625f; private static final float SBOX = 0.0625f * 3; private static final float SBOXY = 0.0625f * 5; private boolean reversed = false; @Override public EnumTrack getTrackType() { return EnumTrack.BUFFER_STOP; } @Override public IIcon getIcon() { if (reversed) { return getIcon(1); } return getIcon(0); } @Override public AxisAlignedBB getSelectedBoundingBoxFromPool() { return AxisAlignedBB.getBoundingBox(tileEntity.xCoord + SBOX, tileEntity.yCoord, tileEntity.zCoord + SBOX, tileEntity.xCoord + 1 - SBOX, tileEntity.yCoord + 1 - SBOXY, tileEntity.zCoord + 1 - SBOX); } @Override public MovingObjectPosition collisionRayTrace(Vec3 vec3d, Vec3 vec3d1) { return MiscTools.collisionRayTrace(vec3d, vec3d1, getX(), getY(), getZ()); } @Override public AxisAlignedBB getCollisionBoundingBoxFromPool() { return AxisAlignedBB.getBoundingBox(tileEntity.xCoord + CBOX, tileEntity.yCoord, tileEntity.zCoord + CBOX, tileEntity.xCoord + 1 - CBOX, tileEntity.yCoord + 1, tileEntity.zCoord + 1 - CBOX); } @Override public boolean canMakeSlopes() { return false; } @Override public boolean isReversed() { return reversed; } @Override public void setReversed(boolean reversed) { this.reversed = reversed; } @Override public void writeToNBT(NBTTagCompound nbttagcompound) { super.writeToNBT(nbttagcompound); nbttagcompound.setBoolean("direction", reversed); } @Override public void readFromNBT(NBTTagCompound nbttagcompound) { super.readFromNBT(nbttagcompound); reversed = nbttagcompound.getBoolean("direction"); } @Override public void writePacketData(DataOutputStream data) throws IOException { super.writePacketData(data); data.writeBoolean(reversed); } @Override public void readPacketData(DataInputStream data) throws IOException { super.readPacketData(data); boolean r = data.readBoolean(); if (reversed != r) { reversed = r; markBlockNeedsUpdate(); } } }