use of uk.co.qmunity.lib.part.ITilePartHolder in project BluePower by Qmunity.
the class ItemSilkyScrewdriver method onItemUseFirst.
@Override
public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ) {
Block block = world.getBlock(x, y, z);
TileEntity te = world.getTileEntity(x, y, z);
ITilePartHolder h = MultipartCompatibility.getPartHolder(world, x, y, z);
if (h != null) {
QMovingObjectPosition mop = h.rayTrace(RayTracer.instance().getStartVector(player), RayTracer.instance().getEndVector(player));
if (mop != null) {
IPart p = mop.getPart();
if (p instanceof ISilkyRemovable && !world.isRemote) {
if (p instanceof IAdvancedSilkyRemovable && !((IAdvancedSilkyRemovable) p).preSilkyRemoval(world, x, y, z))
return false;
NBTTagCompound tag = new NBTTagCompound();
boolean hideTooltip = false;
if (p instanceof IAdvancedSilkyRemovable) {
hideTooltip = ((IAdvancedSilkyRemovable) p).writeSilkyData(world, x, y, z, tag);
} else {
p.writeToNBT(tag);
}
ItemStack droppedStack = p.getItem();
NBTTagCompound stackTag = droppedStack.getTagCompound();
if (stackTag == null) {
stackTag = new NBTTagCompound();
droppedStack.setTagCompound(stackTag);
}
stackTag.setTag("tileData", tag);
stackTag.setBoolean("hideSilkyTooltip", hideTooltip);
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, droppedStack));
h.removePart(p);
if (p instanceof IAdvancedSilkyRemovable)
((IAdvancedSilkyRemovable) p).postSilkyRemoval(world, x, y, z);
stack.damageItem(1, player);
return true;
}
}
return false;
}
if (block instanceof ISilkyRemovable && !world.isRemote) {
if (block instanceof IAdvancedSilkyRemovable && !((IAdvancedSilkyRemovable) block).preSilkyRemoval(world, x, y, z))
return false;
if (te == null)
throw new IllegalStateException("Block doesn't have a TileEntity?! Implementers of ISilkyRemovable should have one. Offender: " + block.getUnlocalizedName());
NBTTagCompound tag = new NBTTagCompound();
te.writeToNBT(tag);
int metadata = world.getBlockMetadata(x, y, z);
Item item = block.getItemDropped(metadata, itemRand, 0);
if (item == null)
throw new NullPointerException("Block returns null for getItemDropped(meta, rand, fortune)! Offender: " + block.getUnlocalizedName());
ItemStack droppedStack = new ItemStack(item, 1, block.damageDropped(metadata));
NBTTagCompound stackTag = droppedStack.getTagCompound();
if (stackTag == null) {
stackTag = new NBTTagCompound();
droppedStack.setTagCompound(stackTag);
}
stackTag.setTag("tileData", tag);
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, droppedStack));
world.setBlockToAir(x, y, z);
if (block instanceof IAdvancedSilkyRemovable)
((IAdvancedSilkyRemovable) block).postSilkyRemoval(world, x, y, z);
stack.damageItem(1, player);
return true;
}
return false;
}
use of uk.co.qmunity.lib.part.ITilePartHolder in project BluePower by Qmunity.
the class MessageWirelessNewFreq method handleServerSide.
@Override
public void handleServerSide(EntityPlayer player) {
Frequency freq = (Frequency) WirelessManager.COMMON_INSTANCE.registerFrequency(player, name, acc, bundled);
ITilePartHolder h = MultipartCompatibility.getPartHolder(player.worldObj, x, y, z);
if (h == null)
return;
IWirelessGate p = null;
for (IPart pa : h.getParts()) if (pa instanceof IWirelessGate && ((IWirelessGate) pa).getFace() == face)
p = (IWirelessGate) pa;
if (p == null)
return;
p.setFrequency(freq);
BPNetworkHandler.INSTANCE.sendTo(new MessageWirelessFrequencySync(player), (EntityPlayerMP) player);
}
Aggregations