redpower/src/main/java/com/eloraam/redpower/control/ItemBackplane.java

109 lines
4.3 KiB
Java

package com.eloraam.redpower.control;
import com.eloraam.redpower.RedPowerControl;
import com.eloraam.redpower.core.CoreLib;
import com.eloraam.redpower.core.ItemExtended;
import com.eloraam.redpower.core.RedPowerLib;
import com.eloraam.redpower.core.WorldCoord;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
public class ItemBackplane extends ItemExtended {
public ItemBackplane(Block block) {
super(block);
}
public boolean onItemUse(ItemStack ist, EntityPlayer player, World world, int x, int y, int z, int side, float xp, float yp, float zp) {
return !player.isSneaking() && this.itemUseShared(ist, player, world, x, y, z, side);
}
public boolean onItemUseFirst(ItemStack ist, EntityPlayer player, World world, int y, int x, int z, int side, float xp, float yp, float zp) {
return !world.isRemote && player.isSneaking() && this.itemUseShared(ist, player, world, x, y, z, side);
}
protected boolean itemUseShared(ItemStack ist, EntityPlayer player, World world, int x, int y, int z, int side) {
Block bid = world.getBlock(x, y, z);
int md = world.getBlockMetadata(x, y, z);
int dmg = ist.getItemDamage();
if (bid == Block.getBlockFromItem(ist.getItem()) && md == 0 && dmg != 0) {
TileBackplane bp = CoreLib.getTileEntity(world, x, y, z, TileBackplane.class);
if (bp == null) {
return false;
} else {
int rx = bp.Rotation;
if (!world.setBlock(x, y, z, bid, dmg, 3)) {
return false;
} else {
bp = CoreLib.getTileEntity(world, x, y, z, TileBackplane.class);
if (bp != null) {
bp.Rotation = rx;
}
world.markBlockForUpdate(x, y, z);
CoreLib.placeNoise(world, x, y, z, Block.getBlockFromItem(ist.getItem()));
if (!player.capabilities.isCreativeMode) {
--ist.stackSize;
}
RedPowerLib.updateIndirectNeighbors(world, x, y, z, Block.getBlockFromItem(ist.getItem()));
return true;
}
}
} else if (dmg != 0) {
return false;
} else {
WorldCoord wc = new WorldCoord(x, y, z);
wc.step(side);
if (!world.canPlaceEntityOnSide(Block.getBlockFromItem(ist.getItem()), wc.x, wc.y, wc.z, false, 1, player, ist)) {
return false;
} else if (!RedPowerLib.isSideNormal(world, wc.x, wc.y, wc.z, 0)) {
return false;
} else {
int rx = -1;
label84:
for(int i = 0; i < 4; ++i) {
WorldCoord wc2 = wc.copy();
int dir = CoreLib.rotToSide(i) ^ 1;
wc2.step(dir);
TileCPU cpu = CoreLib.getTileEntity(world, wc2, TileCPU.class);
if (cpu != null && cpu.Rotation == i) {
rx = i;
break;
}
TileBackplane backplane = CoreLib.getTileEntity(world, wc2, TileBackplane.class);
if (backplane != null && backplane.Rotation == i) {
for(int pb = 0; pb < 6; ++pb) {
wc2.step(dir);
if (world.getBlock(wc2.x, wc2.y, wc2.z) == RedPowerControl.blockPeripheral && world.getBlockMetadata(wc2.x, wc2.y, wc2.z) == 1) {
rx = i;
break label84;
}
}
}
}
if (rx < 0) {
return false;
} else if (!world.setBlock(wc.x, wc.y, wc.z, Block.getBlockFromItem(ist.getItem()), dmg, 3)) {
return true;
} else {
TileBackplane bp = CoreLib.getTileEntity(world, wc, TileBackplane.class);
bp.Rotation = rx;
CoreLib.placeNoise(world, wc.x, wc.y, wc.z, Block.getBlockFromItem(ist.getItem()));
if (!player.capabilities.isCreativeMode) {
--ist.stackSize;
}
world.markBlockForUpdate(wc.x, wc.y, wc.z);
RedPowerLib.updateIndirectNeighbors(world, wc.x, wc.y, wc.z, Block.getBlockFromItem(ist.getItem()));
return true;
}
}
}
}
}