/* * 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.entity.item.EntityMinecart; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.IIcon; import mods.railcraft.api.tracks.ITrackPowered; import mods.railcraft.api.tracks.ITrackReversable; public class TrackControl extends TrackBaseRailcraft implements ITrackPowered, ITrackReversable { private boolean powered = false; private boolean reversed = false; private static final double BOOST_AMOUNT = 0.02; private static final double SLOW_AMOUNT = 0.02; @Override public EnumTrack getTrackType() { return EnumTrack.CONTROL; } @Override public IIcon getIcon() { if (isPowered() ^ reversed) { return getIcon(1); } return getIcon(0); } @Override public int getPowerPropagation() { return 16; } @Override public void onMinecartPass(EntityMinecart cart) { int meta = tileEntity.getBlockMetadata(); if (meta == 0 || meta == 4 || meta == 5) { if (cart.motionZ <= 0) { if (isPowered() ^ !reversed) { cart.motionZ -= BOOST_AMOUNT; } else { cart.motionZ += SLOW_AMOUNT; } } else if (cart.motionZ >= 0) { if (!isPowered() ^ !reversed) { cart.motionZ += BOOST_AMOUNT; } else { cart.motionZ -= SLOW_AMOUNT; } } } else if (meta == 1 || meta == 2 || meta == 3) { if (cart.motionX <= 0) { if (isPowered() ^ reversed) { cart.motionX -= BOOST_AMOUNT; } else { cart.motionX += SLOW_AMOUNT; } } else if (cart.motionX >= 0) { if (!isPowered() ^ reversed) { cart.motionX += BOOST_AMOUNT; } else { cart.motionX -= SLOW_AMOUNT; } } } } @Override public boolean isPowered() { return powered; } @Override public void setPowered(boolean powered) { this.powered = powered; } @Override public void writeToNBT(NBTTagCompound nbttagcompound) { super.writeToNBT(nbttagcompound); nbttagcompound.setBoolean("powered", powered); nbttagcompound.setBoolean("reversed", reversed); } @Override public void readFromNBT(NBTTagCompound nbttagcompound) { super.readFromNBT(nbttagcompound); powered = nbttagcompound.getBoolean("powered"); reversed = nbttagcompound.getBoolean("reversed"); } @Override public void writePacketData(DataOutputStream data) throws IOException { super.writePacketData(data); data.writeBoolean(powered); data.writeBoolean(reversed); } @Override public void readPacketData(DataInputStream data) throws IOException { super.readPacketData(data); powered = data.readBoolean(); reversed = data.readBoolean(); markBlockNeedsUpdate(); } @Override public boolean isReversed() { return reversed; } @Override public void setReversed(boolean reversed) { this.reversed = reversed; } }