@Override public void setPlaying(Material record) { if (record == null || CraftMagicNumbers.getItem(record) == null) { record = Material.AIR; jukebox.func_145857_a(null); } else { jukebox.func_145857_a(new ItemStack(CraftMagicNumbers.getItem(record), 1)); } jukebox.markDirty(); if (record == Material.AIR) { world.getHandle().setBlockMetadataWithNotify(getX(), getY(), getZ(), 0, 3); } else { world.getHandle().setBlockMetadataWithNotify(getX(), getY(), getZ(), 1, 3); } world.playEffect(getLocation(), Effect.RECORD_PLAY, record.getId()); }
@Override public void setTypeId(int type) { if (getTypeId() == type) { return; } else if (type == 0) { handle = null; } else if (CraftMagicNumbers.getItem(type) == null) { // :( handle = null; } else if (handle == null) { handle = new net.minecraft.item.ItemStack(CraftMagicNumbers.getItem(type), 1, 0); } else { handle.func_150996_a(CraftMagicNumbers.getItem(type)); if (hasItemMeta()) { // This will create the appropriate item meta, which will contain all the data we intend to keep setItemMeta(handle, getItemMeta(handle)); } } setData(null); }
public void addToCraftingManager() { Object[] data; String[] shape = this.getShape(); Map<Character, ItemStack> ingred = this.getIngredientMap(); int datalen = shape.length; datalen += ingred.size() * 2; int i = 0; data = new Object[datalen]; for (; i < shape.length; i++) { data[i] = shape[i]; } for (char c : ingred.keySet()) { ItemStack mdata = ingred.get(c); if (mdata == null) continue; data[i] = c; i++; int id = mdata.getTypeId(); short dmg = mdata.getDurability(); data[i] = new net.minecraft.item.ItemStack(CraftMagicNumbers.getItem(id), 1, dmg); i++; } net.minecraft.item.crafting.CraftingManager.getInstance().addRecipe(CraftItemStack.asNMSCopy(this.getResult()), data); }
private static PlayerEvent getPlayerBucketEvent(boolean isFilling, EntityHuman who, int clickedX, int clickedY, int clickedZ, int clickedFace, ItemStack itemstack, net.minecraft.server.Item item) { Player player = (who == null) ? null : (Player) who.getBukkitEntity(); CraftItemStack itemInHand = CraftItemStack.asNewCraftStack(item); Material bucket = CraftMagicNumbers.getMaterial(itemstack.getItem()); CraftWorld craftWorld = (CraftWorld) player.getWorld(); CraftServer craftServer = (CraftServer) player.getServer(); Block blockClicked = craftWorld.getBlockAt(clickedX, clickedY, clickedZ); BlockFace blockFace = CraftBlock.notchToBlockFace(clickedFace); PlayerEvent event = null; if (isFilling) { event = new PlayerBucketFillEvent(player, blockClicked, blockFace, bucket, itemInHand); ((PlayerBucketFillEvent) event).setCancelled(!canBuild(craftWorld, player, clickedX, clickedZ)); } else { event = new PlayerBucketEmptyEvent(player, blockClicked, blockFace, bucket, itemInHand); ((PlayerBucketEmptyEvent) event).setCancelled(!canBuild(craftWorld, player, clickedX, clickedZ)); } craftServer.getPluginManager().callEvent(event); return event; }
@Override public void setTypeId(int type) { if (getTypeId() == type) { return; } else if (type == 0) { handle = null; } else if (CraftMagicNumbers.getItem(type) == null) { // :( handle = null; } else if (handle == null) { handle = new net.minecraft.server.ItemStack(CraftMagicNumbers.getItem(type), 1, 0); } else { handle.setItem(CraftMagicNumbers.getItem(type)); if (hasItemMeta()) { // This will create the appropriate item meta, which will contain all the data we intend to keep setItemMeta(handle, getItemMeta(handle)); } } setData(null); }
public void addToCraftingManager() { Object[] data; String[] shape = this.getShape(); Map<Character, ItemStack> ingred = this.getIngredientMap(); int datalen = shape.length; datalen += ingred.size() * 2; int i = 0; data = new Object[datalen]; /*for (; i < shape.length; i++) { data[i] = shape[i]; }*/ System.arraycopy(shape, 0, data, 0, shape.length);i=shape.length;//FFoKC for (char c : ingred.keySet()) { ItemStack mdata = ingred.get(c); if (mdata == null) continue; data[i] = c; i++; int id = mdata.getTypeId(); short dmg = mdata.getDurability(); data[i] = new net.minecraft.item.ItemStack(CraftMagicNumbers.getItem(id), 1, dmg); i++; } net.minecraft.item.crafting.CraftingManager.getInstance().addRecipe(CraftItemStack.asNMSCopy(this.getResult()), data); }
@Test public void maxStackSize() { if (INVALIDATED_MATERIALS.contains(material)) return; final ItemStack bukkit = new ItemStack(material); final CraftItemStack craft = CraftItemStack.asCraftCopy(bukkit); if (material == Material.AIR) { final int MAX_AIR_STACK = 0 /* Why can't I hold all of these AIR? */; assertThat(material.getMaxStackSize(), is(MAX_AIR_STACK)); assertThat(bukkit.getMaxStackSize(), is(MAX_AIR_STACK)); assertThat(craft.getMaxStackSize(), is(MAX_AIR_STACK)); } else { assertThat(material.getMaxStackSize(), is(CraftMagicNumbers.getItem(material).getMaxStackSize())); assertThat(bukkit.getMaxStackSize(), is(material.getMaxStackSize())); assertThat(craft.getMaxStackSize(), is(material.getMaxStackSize())); } }
private static PlayerEvent getPlayerBucketEvent(boolean isFilling, EntityHuman who, int clickedX, int clickedY, int clickedZ, EnumDirection clickedFace, ItemStack itemstack, net.minecraft.server.Item item) { Player player = (who == null) ? null : (Player) who.getBukkitEntity(); CraftItemStack itemInHand = CraftItemStack.asNewCraftStack(item); Material bucket = CraftMagicNumbers.getMaterial(itemstack.getItem()); CraftWorld craftWorld = (CraftWorld) player.getWorld(); CraftServer craftServer = (CraftServer) player.getServer(); Block blockClicked = craftWorld.getBlockAt(clickedX, clickedY, clickedZ); BlockFace blockFace = CraftBlock.notchToBlockFace(clickedFace); PlayerEvent event = null; if (isFilling) { event = new PlayerBucketFillEvent(player, blockClicked, blockFace, bucket, itemInHand); ((PlayerBucketFillEvent) event).setCancelled(!canBuild(craftWorld, player, clickedX, clickedZ)); } else { event = new PlayerBucketEmptyEvent(player, blockClicked, blockFace, bucket, itemInHand); ((PlayerBucketEmptyEvent) event).setCancelled(!canBuild(craftWorld, player, clickedX, clickedZ)); } craftServer.getPluginManager().callEvent(event); return event; }
@Override public void sendBlockChange(Location loc, int material, byte data) { if (getHandle().playerNetServerHandler == null) return; S23PacketBlockChange packet = new S23PacketBlockChange(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), ((CraftWorld) loc.getWorld()).getHandle()); packet.field_148883_d = CraftMagicNumbers.getBlock(material); packet.field_148884_e = data; getHandle().playerNetServerHandler.sendPacket(packet); }
public Collection<ItemStack> getDrops() { List<ItemStack> drops = new ArrayList<ItemStack>(); net.minecraft.block.Block block = this.getNMSBlock(); if (block != Blocks.air) { byte data = getData(); // based on nms.Block.dropNaturally int count = block.quantityDroppedWithBonus(0, chunk.getHandle().worldObj.rand); for (int i = 0; i < count; ++i) { Item item = block.getItemDropped(data, chunk.getHandle().worldObj.rand, 0); if (item != null) { // Skulls are special, their data is based on the tile entity if (Blocks.skull == block) { net.minecraft.item.ItemStack nmsStack = new net.minecraft.item.ItemStack(item, 1, block.getDamageValue(chunk.getHandle().worldObj, x, y, z)); TileEntitySkull tileentityskull = (TileEntitySkull) chunk.getHandle().worldObj.getTileEntity(x, y, z); if (tileentityskull.func_145904_a() == 3 && tileentityskull.func_152108_a() != null) { nmsStack.setTagCompound(new NBTTagCompound()); NBTTagCompound nbttagcompound = new NBTTagCompound(); NBTUtil.func_152460_a(nbttagcompound, tileentityskull.func_152108_a()); nmsStack.getTagCompound().setTag("SkullOwner", nbttagcompound); } drops.add(CraftItemStack.asBukkitCopy(nmsStack)); // We don't want to drop cocoa blocks, we want to drop cocoa beans. } else if (Blocks.cocoa == block) { int dropAmount = (BlockCocoa.func_149987_c(data) >= 2 ? 3 : 1); for (int j = 0; j < dropAmount; ++j) { drops.add(new ItemStack(Material.INK_SACK, 1, (short) 3)); } } else { drops.add(new ItemStack(org.bukkit.craftbukkit.util.CraftMagicNumbers.getMaterial(item), 1, (short) block.damageDropped(data))); } } } } return drops; }
@Override public Material getPlaying() { ItemStack record = jukebox.func_145856_a(); if (record == null) { return Material.AIR; } return CraftMagicNumbers.getMaterial(record.getItem()); }
@Override public boolean play(byte instrument, byte note) { Block block = getBlock(); if (block.getType() == Material.NOTE_BLOCK) { world.getHandle().addBlockEvent(getX(), getY(), getZ(), CraftMagicNumbers.getBlock(block), instrument, note); return true; } else { return false; } }
@Override public boolean play(Instrument instrument, Note note) { Block block = getBlock(); if (block.getType() == Material.NOTE_BLOCK) { world.getHandle().addBlockEvent(getX(), getY(), getZ(), CraftMagicNumbers.getBlock(block), instrument.getType(), note.getId()); return true; } else { return false; } }
public void addToCraftingManager() { List<ItemStack> ingred = this.getIngredientList(); Object[] data = new Object[ingred.size()]; int i = 0; for (ItemStack mdata : ingred) { int id = mdata.getTypeId(); short dmg = mdata.getDurability(); data[i] = new net.minecraft.item.ItemStack(CraftMagicNumbers.getItem(id), 1, dmg); i++; } net.minecraft.item.crafting.CraftingManager.getInstance().addShapelessRecipe(CraftItemStack.asNMSCopy(this.getResult()), data); }
public static void playBlockPlaceSound(World bukkitWorld, Vector pos, Material material, float volume) { if (!material.isBlock()) { return; } playCustomSound(bukkitWorld, pos.toLocation(bukkitWorld), CraftMagicNumbers.getBlock(material).getStepSound().placeSound(), SoundCategory.BLOCKS, volume, 1f); }
/** * Test if the given tool is capable of "efficiently" mining the given block. * * Derived from CraftBlock.itemCausesDrops() */ public static boolean canMineBlock(MaterialData blockMaterial, org.bukkit.inventory.ItemStack tool) { if(!blockMaterial.getItemType().isBlock()) { throw new IllegalArgumentException("Material '" + blockMaterial + "' is not a block"); } net.minecraft.server.Block nmsBlock = CraftMagicNumbers.getBlock(blockMaterial.getItemType()); net.minecraft.server.Item nmsTool = tool == null ? null : CraftMagicNumbers.getItem(tool.getType()); return nmsBlock != null && (nmsBlock.getBlockData().getMaterial().isAlwaysDestroyable() || (nmsTool != null && nmsTool.canDestroySpecialBlock(nmsBlock.getBlockData()))); }
public static Set<MaterialData> getBlockStates(Material material) { ImmutableSet.Builder<MaterialData> materials = ImmutableSet.builder(); Block nmsBlock = CraftMagicNumbers.getBlock(material); List<IBlockData> states = nmsBlock.s().a(); if(states != null) { for(IBlockData state : states) { int data = nmsBlock.toLegacyData(state); materials.add(material.getNewData((byte) data)); } } return materials.build(); }