@Override protected boolean removedByPlayer(EntityPlayer player, boolean willHarvest) { if (player.worldObj.isRemote) { return false; } MovingObjectPosition hit = ItemSculptingTool.doRayTrace(player); if (hit == null || hit.subHit == -1 || parts.size() < 1) { return super.removedByPlayer(player, willHarvest); } Coord here = getCoord(); ClayState state = getState(); // If it's solid, break it. // If we're sneaking & creative, break it boolean shouldDestroy = player.isSneaking() || parts.size() == 1; if (player.capabilities.isCreativeMode) { if (shouldDestroy) { return super.removedByPlayer(player, willHarvest); } else { removeLump(hit.subHit); return true; } } shouldDestroy |= state != ClayState.WET; if (shouldDestroy) { InvUtil.spawnItemStack(here, getItem()); here.setAir(); } else { removeLump(hit.subHit); InvUtil.spawnItemStack(here, new ItemStack(Items.clay_ball)); } return false; }
@Override public void update() { if (worldObj.isRemote) { return; } // TODO: Ugh, laaaame. Schedule a block update? if (!partsValidated) { partsValidated = true; Iterator<ClayLump> it = parts.iterator(); while (it.hasNext()) { ClayLump lump = it.next(); if (!isValidLump(lump)) { if (parts.size() == 1) { lump.asDefault(); } else { it.remove(); InvUtil.spawnItemStack(getCoord(), new ItemStack(Items.clay_ball)); } } } } if (getState() == ClayState.WET) { if (!worldObj.isRaining()) { lastTouched++; } if (totalHeat > 0) { totalHeat--; lastTouched++; } } if (getState() != lastState) { lastState = getState(); broadcastMessage(null, SculptState, lastState.ordinal()); } }