public static void onBlockActivatedHook(BlockDoor door, World world, BlockPos pos, IBlockState state, EntityPlayer player, MainOrOffHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { if (player.isSneaking()) return; state = world.getBlockState(pos); BlockPos doorBase = state.getValue(BlockDoor.HALF) == BlockDoor.EnumDoorHalf.LOWER ? pos : pos.down(); state = world.getBlockState(doorBase); for (EnumFacing facing : EnumFacing.values()) { if (facing == EnumFacing.DOWN || facing == EnumFacing.UP) continue; BlockPos newPos = doorBase.offset(facing); IBlockState newState = world.getBlockState(newPos); if (newState == null) continue; if (newState.getBlock() != door) continue; if ((boolean)newState.getValue(BlockDoor.OPEN) == (boolean)state.getValue(BlockDoor.OPEN)) continue; if (newState.getValue(BlockDoor.HALF) != state.getValue(BlockDoor.HALF)) continue; //newState.getBlock().onBlockActivated(world, newPos, newState, player, hand, stack, side, hitX, hitY, hitZ); newState = newState.cycleProperty(BlockDoor.OPEN); world.setBlockState(newPos, newState, 2); world.markBlockRangeForRenderUpdate(newPos, newPos); //world.playAuxSFXAtEntity(player, ((Boolean)newState.getValue(BlockDoor.OPEN)).booleanValue() ? 1003 : 1006, newPos, 0); world.playAuxSFXAtEntity(player, ((Boolean)newState.getValue(BlockDoor.OPEN)).booleanValue() ? 1005 : 1011, newPos, 0); } }
@Override public ObjectActionHolder<ItemStack> onItemRightClick(World world, EntityPlayer player, MainOrOffHand hand) { ItemStack stack = player.getHeldItem(hand); boolean hasKeys = false; NBTTagCompound tag = stack.getTagCompound(); if (tag != null) { if (tag.hasKey("teleportX", 3) && tag.hasKey("teleportY", 3) && tag.hasKey("teleportZ", 3)) hasKeys = true; } if (hasKeys) { player.setItemInUse(hand); return new ObjectActionHolder<ItemStack>(ItemUseResult.SUCCESS, stack); } else return new ObjectActionHolder<ItemStack>(ItemUseResult.FAIL, stack); }
@Override public ObjectActionHolder<ItemStack> onItemRightClick(World world, EntityPlayer player, MainOrOffHand hand) { ItemStack stack = player.getHeldItem(hand); if (!world.isRemote) { InventoryBackpack backpackInventory = getInventory(stack); int size = player.inventory.getSizeInventory(); int slotNum = -1; for (int n = 0; n < size; n++) { if (player.inventory.getStackInSlot(n) == stack) { slotNum = n; break; } } backpackInventory.setSlotNum(slotNum); //if (backpackInventory != null) player.displayGui(new BackpackInteractionObject(player, backpackInventory)); if (backpackInventory != null) player.displayGUIChest(backpackInventory); } return new ObjectActionHolder<ItemStack>(ItemUseResult.SUCCESS, stack); }
public static boolean destroyBlock(IBlockState state, World world, BlockPos newPos, EntityPlayer player) { if (player.getHeldMainHandItem() == null || player.getHeldMainHandItem().getStackSize() < 1) return false; IBlockState upState = world.getBlockState(newPos); if (upState == null) return false; Block block = state.getBlock(); if (blocksAreRelated(upState, state)) { world.setBlockState(newPos, Blocks.air.getDefaultState(), 3); player.getHeldMainHandItem().damageItem(1, player); if (player.getHeldMainHandItem().getStackSize() < 1) { player.setHeldItem(MainOrOffHand.MAIN_HAND, ItemStack.NULL_STACK); } if (!world.isRemote) block.harvestBlock(world, player, newPos, upState, null, player.getHeldMainHandItem() == null ? null : player.getHeldMainHandItem().copy()); return true; } return false; }
/** * Destroys a single log block in the world. * @param block * @param world * @param pos * @param player * @return Whether the block was successfully destroyed by the player. */ public static boolean destroyBlock(Block block, World world, BlockPos pos, EntityPlayer player) { if (player.getHeldMainHandItem() == null || player.getHeldMainHandItem().getStackSize() < 1) return false; IBlockState upState = world.getBlockState(pos); if (upState == null) return false; if (upState.getBlock() != null && upState.getBlock() == block) { world.setBlockState(pos, Blocks.air.getDefaultState(), 3); player.getHeldMainHandItem().damageItem(1, player); if (player.getHeldMainHandItem().getStackSize() < 1) { player.setHeldItem(MainOrOffHand.MAIN_HAND, ItemStack.NULL_STACK); } block.harvestBlock(world, player, pos, upState, null, player.getHeldMainHandItem() == null ? null : player.getHeldMainHandItem().copy()); return true; } return false; }
@Override public ItemUseResult onItemUse(EntityPlayer player, World world, BlockPos pos, MainOrOffHand hand, EnumFacing facing, float x, float y, float z) { // TODO - Don't let you teleport in the wrong dimension ItemStack stack = player.getHeldItem(hand); boolean hasKeys = false; boolean hasTempKeys = false; NBTTagCompound tag = stack.getTagCompound(); if (tag != null) { if (tag.hasKey("teleportX", 3) && tag.hasKey("teleportY", 3) && tag.hasKey("teleportZ", 3)) hasKeys = true; if (tag.hasKey("confirmX", 3) && tag.hasKey("confirmY", 3) && tag.hasKey("confirmZ", 3)) hasTempKeys = true; } // Do it the hard way since we don't have enough mappings BlockPos destPos = null; switch (facing.ordinal()) { case 0: destPos = pos.down(); break; case 1: destPos = pos.up(); break; case 2: destPos = pos.north(); break; case 3: destPos = pos.south(); break; case 4: destPos = pos.west(); break; case 5: destPos = pos.east(); break; } if (tag == null) { tag = new NBTTagCompound(); stack.setTagCompound(tag); } if (!hasKeys && !hasTempKeys) { tag.setInteger("confirmX", destPos.getX()); tag.setInteger("confirmY", destPos.getY()); tag.setInteger("confirmZ", destPos.getZ()); if (world.isRemote) player.addChatMessage(new ChatComponentText("Select again to confirm coordinates.")); } else if (!hasKeys && hasTempKeys) { int cx = tag.getInteger("confirmX"); int cy = tag.getInteger("confirmY"); int cz = tag.getInteger("confirmZ"); if (cx == destPos.getX() && cy == destPos.getY() && cz == destPos.getZ()) { tag.removeTag("confirmX"); tag.removeTag("confirmY"); tag.removeTag("confirmZ"); tag.setInteger("teleportX", destPos.getX()); tag.setInteger("teleportY", destPos.getY()); tag.setInteger("teleportZ", destPos.getZ()); if (world.isRemote) player.addChatMessage(new ChatComponentText("Coordinates saved.")); } else { tag.setInteger("confirmX", destPos.getX()); tag.setInteger("confirmY", destPos.getY()); tag.setInteger("confirmZ", destPos.getZ()); if (world.isRemote) player.addChatMessage(new ChatComponentText("Select again to confirm coordinates.")); } } return super.onItemUse(player, world, pos, hand, facing, x, y, z); }
@Override public ItemUseResult onItemUse(EntityPlayer player, World world, BlockPos pos, MainOrOffHand hand, EnumFacing facing, float x, float y, float z) { return super.onItemUse(player, world, pos, hand, facing, x, y, z); }