/** | |
* Copyright (c) SpaceToad, 2011 | |
* http://www.mod-buildcraft.com | |
* | |
* BuildCraft is distributed under the terms of the Minecraft Mod Public | |
* License 1.0, or MMPL. Please check the contents of the license located in | |
* http://www.mod-buildcraft.com/MMPL-1.0.txt | |
*/ | |
package buildcraft.api.bptblocks; | |
import java.util.LinkedList; | |
import buildcraft.api.blueprints.BptBlock; | |
import buildcraft.api.blueprints.BptSlotInfo; | |
import buildcraft.api.blueprints.IBptContext; | |
import net.minecraft.src.ItemStack; | |
public class BptBlockRotateMeta extends BptBlock { | |
int[] rot; | |
boolean rotateForward; | |
int infoMask = 0; | |
public BptBlockRotateMeta(int blockId, int[] rotations, boolean rotateForward) { | |
super(blockId); | |
rot = rotations; | |
for (int i = 0; i < rot.length; ++i) { | |
if (rot[i] < 4) { | |
infoMask = (infoMask < 3 ? 3 : infoMask); | |
} else if (rot[i] < 8) { | |
infoMask = (infoMask < 7 ? 7 : infoMask); | |
} else if (rot[i] < 16) { | |
infoMask = (infoMask < 15 ? 15 : infoMask); | |
} | |
} | |
this.rotateForward = rotateForward; | |
} | |
@Override | |
public void addRequirements(BptSlotInfo slot, IBptContext context, LinkedList<ItemStack> requirements) { | |
requirements.add(new ItemStack(slot.blockId, 1, 0)); | |
} | |
@Override | |
public boolean isValid(BptSlotInfo slot, IBptContext context) { | |
return slot.blockId == context.world().getBlockId(slot.x, slot.y, slot.z); | |
} | |
@Override | |
public void rotateLeft(BptSlotInfo slot, IBptContext context) { | |
int pos = slot.meta & infoMask; | |
int others = slot.meta - pos; | |
if (rotateForward) { | |
if (pos == rot[0]) { | |
pos = rot[1]; | |
} else if (pos == rot[1]) { | |
pos = rot[2]; | |
} else if (pos == rot[2]) { | |
pos = rot[3]; | |
} else if (pos == rot[3]) { | |
pos = rot[0]; | |
} | |
} else { | |
if (pos == rot[0]) { | |
pos = rot[3]; | |
} else if (pos == rot[1]) { | |
pos = rot[2]; | |
} else if (pos == rot[2]) { | |
pos = rot[0]; | |
} else if (pos == rot[3]) { | |
pos = rot[1]; | |
} | |
} | |
slot.meta = pos + others; | |
} | |
} |