public static boolean canItemAcceptSockets(ItemStack stack) { Item item = stack.getItem(); if (item == PhysisItems.socketable) { return false; } if (item instanceof ItemBlock || item instanceof ItemReed || item instanceof ItemBed || item instanceof ItemFood || item instanceof ItemPotion || item instanceof ItemMinecart || item instanceof ItemBoat || item instanceof ItemEnchantedBook || item instanceof ItemWritableBook || item instanceof ItemBucket || item instanceof ItemBucketMilk || item instanceof ItemDoor) { return false; } if (item.getItemStackLimit(stack) > 1) { return false; } if (item.hasContainerItem(stack)){ ItemStack container = item.getContainerItem(stack); if (container != null && container.getItem() instanceof ItemBucket) { return false; } } if (item.getUnlocalizedName(stack).toLowerCase().contains("bucket")) { return false; } return true; }
private boolean rightClick(ChunkPosition pos){ int xCoord = pos.chunkPosX; int yCoord = pos.chunkPosY; int zCoord = pos.chunkPosZ; ForgeDirection faceDir = ProgWidgetPlace.getDirForSides(((ISidedWidget)widget).getSides()); EntityPlayer player = drone.getFakePlayer(); World worldObj = drone.getWorld(); int dx = faceDir.offsetX; int dy = faceDir.offsetY; int dz = faceDir.offsetZ; int x = xCoord /*+ dx*/; int y = yCoord /*+ dy*/; int z = zCoord /*+ dz*/; player.setPosition(x + 0.5, y + 0.5 - player.eyeHeight, z + 0.5); player.rotationPitch = faceDir.offsetY * -90; switch(faceDir){ case NORTH: player.rotationYaw = 180; break; case SOUTH: player.rotationYaw = 0; break; case WEST: player.rotationYaw = 90; break; case EAST: player.rotationYaw = -90; } try { PlayerInteractEvent event = ForgeEventFactory.onPlayerInteract(player, Action.RIGHT_CLICK_AIR, x, y, z, faceDir.ordinal(), worldObj); if(event.isCanceled()) return false; Block block = worldObj.getBlock(x, y, z); ItemStack stack = player.getCurrentEquippedItem(); if(stack != null && stack.getItem().onItemUseFirst(stack, player, worldObj, x, y, z, faceDir.ordinal(), dx, dy, dz)) return false; if(!worldObj.isAirBlock(x, y, z) && block.onBlockActivated(worldObj, x, y, z, player, faceDir.ordinal(), dx, dy, dz)) return false; if(stack != null) { boolean isGoingToShift = false; if(stack.getItem() instanceof ItemReed || stack.getItem() instanceof ItemRedstone) { isGoingToShift = true; } int useX = isGoingToShift ? xCoord : x; int useY = isGoingToShift ? yCoord : y; int useZ = isGoingToShift ? zCoord : z; if(stack.getItem().onItemUse(stack, player, worldObj, useX, useY, useZ, faceDir.ordinal(), dx, dy, dz)) return false; ItemStack copy = stack.copy(); player.setCurrentItemOrArmor(0, stack.getItem().onItemRightClick(stack, worldObj, player)); if(!copy.isItemEqual(stack)) return true; } return false; } catch(Throwable e) { Log.error("DroneAIBlockInteract crashed! Stacktrace: "); e.printStackTrace(); return false; } }