generated from tilera/1710mod
109 lines
4.3 KiB
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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|