3
0

Initial commit (Forge 1291).

This commit is contained in:
gamerforEA
2015-03-22 20:38:04 +03:00
commit 16773ead6a
611 changed files with 64826 additions and 0 deletions

View File

@ -0,0 +1,38 @@
--- ../src-base/minecraft/net/minecraft/item/Item.java
+++ ../src-work/minecraft/net/minecraft/item/Item.java
@@ -54,6 +54,7 @@
import net.minecraft.util.WeightedRandomChestContent;
import net.minecraft.world.World;
import net.minecraftforge.common.ChestGenHooks;
+import net.minecraftforge.common.DimensionManager; // Cauldron
import net.minecraftforge.common.util.EnumHelper;
public class Item
@@ -402,6 +403,12 @@
{
object = (new ItemDoublePlant(Blocks.double_plant, Blocks.double_plant, BlockDoublePlant.field_149892_a)).setUnlocalizedName("doublePlant");
}
+ // CraftBukkit start - allow certain blocks to retain data
+ else if (block == Blocks.mob_spawner || block == Blocks.brown_mushroom_block || block == Blocks.red_mushroom_block)
+ {
+ object = new ItemColored(block, true);
+ }
+ // CraftBukkit end
else
{
if (hashset.contains(block))
@@ -923,7 +930,13 @@
*/
public int getEntityLifespan(ItemStack itemStack, World world)
{
- return 6000;
+ // Cauldron start - fixes MFR proxy worlds used with grinder/slaughterhouse
+ if (world == null)
+ {
+ return 6000;
+ }
+ return world.getSpigotConfig().itemDespawnRate; // Spigot
+ // Cauldron end
}
/**

View File

@ -0,0 +1,19 @@
--- ../src-base/minecraft/net/minecraft/item/ItemBoat.java
+++ ../src-work/minecraft/net/minecraft/item/ItemBoat.java
@@ -80,7 +80,16 @@
i = movingobjectposition.blockX;
int j = movingobjectposition.blockY;
int k = movingobjectposition.blockZ;
+ // CraftBukkit start - Boat placement
+ org.bukkit.event.player.PlayerInteractEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerInteractEvent(p_77659_3_, org.bukkit.event.block.Action.RIGHT_CLICK_BLOCK, i, j, k, movingobjectposition.sideHit, p_77659_1_);
+ if (event.isCancelled())
+ {
+ return p_77659_1_;
+ }
+
+ // CraftBukkit end
+
if (p_77659_2_.getBlock(i, j, k) == Blocks.snow_layer)
{
--j;

View File

@ -0,0 +1,33 @@
--- ../src-base/minecraft/net/minecraft/item/ItemBow.java
+++ ../src-work/minecraft/net/minecraft/item/ItemBow.java
@@ -84,6 +84,21 @@
entityarrow.setFire(100);
}
+ // CraftBukkit start
+ org.bukkit.event.entity.EntityShootBowEvent cbEvent = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityShootBowEvent(p_77615_3_, p_77615_1_, entityarrow, f);
+
+ if (cbEvent.isCancelled())
+ {
+ cbEvent.getProjectile().remove();
+ return;
+ }
+
+ if (cbEvent.getProjectile() == entityarrow.getBukkitEntity())
+ {
+ p_77615_2_.spawnEntityInWorld(entityarrow);
+ }
+
+ // CraftBukkit end
p_77615_1_.damageItem(1, p_77615_3_);
p_77615_2_.playSoundAtEntity(p_77615_3_, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F);
@@ -98,7 +113,7 @@
if (!p_77615_2_.isRemote)
{
- p_77615_2_.spawnEntityInWorld(entityarrow);
+ // p_77615_2_.spawnEntityInWorld(entityarrow); // CraftBukkit - moved up
}
}
}

View File

@ -0,0 +1,133 @@
--- ../src-base/minecraft/net/minecraft/item/ItemBucket.java
+++ ../src-work/minecraft/net/minecraft/item/ItemBucket.java
@@ -12,6 +12,13 @@
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.player.FillBucketEvent;
+// CraftBukkit start
+import org.bukkit.craftbukkit.event.CraftEventFactory;
+import org.bukkit.craftbukkit.inventory.CraftItemStack;
+import org.bukkit.event.player.PlayerBucketEmptyEvent;
+import org.bukkit.event.player.PlayerBucketFillEvent;
+// CraftBukkit end
+
public class ItemBucket extends Item
{
private Block isFull;
@@ -83,23 +90,52 @@
if (material == Material.water && l == 0)
{
+ // CraftBukkit start
+ PlayerBucketFillEvent cbEvent = CraftEventFactory.callPlayerBucketFillEvent(p_77659_3_, i, j, k, -1, p_77659_1_, Items.water_bucket);
+
+ if (cbEvent.isCancelled())
+ {
+ return p_77659_1_;
+ }
+
+ // CraftBukkit end
p_77659_2_.setBlockToAir(i, j, k);
- return this.func_150910_a(p_77659_1_, p_77659_3_, Items.water_bucket);
+ return this.func_150910_a(p_77659_1_, p_77659_3_, Items.water_bucket, cbEvent.getItemStack()); // CraftBukkit - added Event stack
}
if (material == Material.lava && l == 0)
{
+ // CraftBukkit start
+ PlayerBucketFillEvent cbEvent = CraftEventFactory.callPlayerBucketFillEvent(p_77659_3_, i, j, k, -1, p_77659_1_, Items.lava_bucket);
+
+ if (cbEvent.isCancelled())
+ {
+ return p_77659_1_;
+ }
+
+ // CraftBukkit end
p_77659_2_.setBlockToAir(i, j, k);
- return this.func_150910_a(p_77659_1_, p_77659_3_, Items.lava_bucket);
+ return this.func_150910_a(p_77659_1_, p_77659_3_, Items.lava_bucket, cbEvent.getItemStack()); // CraftBukkit - added Event stack
}
}
else
{
if (this.isFull == Blocks.air)
{
- return new ItemStack(Items.bucket);
+ // CraftBukkit start
+ PlayerBucketEmptyEvent cbEvent = CraftEventFactory.callPlayerBucketEmptyEvent(p_77659_3_, i, j, k, movingobjectposition.sideHit, p_77659_1_);
+
+ if (cbEvent.isCancelled())
+ {
+ return p_77659_1_;
+ }
+
+ return CraftItemStack.asNMSCopy(cbEvent.getItemStack());
}
+ int clickedX = i, clickedY = j, clickedZ = k;
+ // CraftBukkit end
+
if (movingobjectposition.sideHit == 0)
{
--j;
@@ -135,9 +171,19 @@
return p_77659_1_;
}
+ // CraftBukkit start
+ PlayerBucketEmptyEvent cbEvent = CraftEventFactory.callPlayerBucketEmptyEvent(p_77659_3_, clickedX, clickedY, clickedZ, movingobjectposition.sideHit, p_77659_1_);
+
+ if (cbEvent.isCancelled())
+ {
+ return p_77659_1_;
+ }
+
+ // CraftBukkit end
+
if (this.tryPlaceContainedLiquid(p_77659_2_, i, j, k) && !p_77659_3_.capabilities.isCreativeMode)
{
- return new ItemStack(Items.bucket);
+ return CraftItemStack.asNMSCopy(cbEvent.getItemStack()); // CraftBukkit
}
}
}
@@ -146,24 +192,32 @@
}
}
+ // Cauldron start - vanilla compatibility
private ItemStack func_150910_a(ItemStack p_150910_1_, EntityPlayer p_150910_2_, Item p_150910_3_)
{
- if (p_150910_2_.capabilities.isCreativeMode)
+ return this.func_150910_a(p_150910_1_, p_150910_2_, p_150910_3_, null);
+ }
+ // Cauldron end
+
+ // CraftBukkit - added ob.ItemStack result - TODO: Is this... the right way to handle this?
+ private ItemStack func_150910_a(ItemStack itemstack, EntityPlayer entityplayer, Item item, org.bukkit.inventory.ItemStack result)
+ {
+ if (entityplayer.capabilities.isCreativeMode)
{
- return p_150910_1_;
+ return itemstack;
}
- else if (--p_150910_1_.stackSize <= 0)
+ else if (--itemstack.stackSize <= 0)
{
- return new ItemStack(p_150910_3_);
+ return CraftItemStack.asNMSCopy(result); // CraftBukkit
}
else
{
- if (!p_150910_2_.inventory.addItemStackToInventory(new ItemStack(p_150910_3_)))
+ if (!entityplayer.inventory.addItemStackToInventory(CraftItemStack.asNMSCopy(result))) // CraftBukkit
{
- p_150910_2_.dropPlayerItemWithRandomChoice(new ItemStack(p_150910_3_, 1, 0), false);
+ entityplayer.dropPlayerItemWithRandomChoice(CraftItemStack.asNMSCopy(result), false); // CraftBukkit
}
- return p_150910_1_;
+ return itemstack;
}
}

View File

@ -0,0 +1,30 @@
--- ../src-base/minecraft/net/minecraft/item/ItemDye.java
+++ ../src-work/minecraft/net/minecraft/item/ItemDye.java
@@ -23,6 +23,8 @@
import net.minecraftforge.common.util.FakePlayerFactory;
import net.minecraftforge.event.entity.player.BonemealEvent;
+import org.bukkit.event.entity.SheepDyeWoolEvent; // CraftBukkit
+
public class ItemDye extends Item
{
public static final String[] field_150923_a = new String[] {"black", "red", "green", "brown", "blue", "purple", "cyan", "silver", "gray", "pink", "lime", "yellow", "lightBlue", "magenta", "orange", "white"};
@@ -220,6 +222,18 @@
if (!entitysheep.getSheared() && entitysheep.getFleeceColor() != i)
{
+ // CraftBukkit start
+ byte bColor = (byte) i;
+ SheepDyeWoolEvent event = new SheepDyeWoolEvent((org.bukkit.entity.Sheep) entitysheep.getBukkitEntity(), org.bukkit.DyeColor.getByData(bColor));
+ entitysheep.worldObj.getServer().getPluginManager().callEvent(event);
+
+ if (event.isCancelled())
+ {
+ return false;
+ }
+
+ i = (byte) event.getColor().getWoolData();
+ // CraftBukkit end
entitysheep.setFleeceColor(i);
--p_111207_1_.stackSize;
}

View File

@ -0,0 +1,10 @@
--- ../src-base/minecraft/net/minecraft/item/ItemEmptyMap.java
+++ ../src-work/minecraft/net/minecraft/item/ItemEmptyMap.java
@@ -27,6 +27,7 @@
mapdata.zCenter = (int)(Math.round(p_77659_3_.posZ / (double)i) * (long)i);
mapdata.dimension = p_77659_2_.provider.dimensionId;
mapdata.markDirty();
+ org.bukkit.craftbukkit.event.CraftEventFactory.callEvent(new org.bukkit.event.server.MapInitializeEvent(mapdata.mapView)); // CraftBukkit
--p_77659_1_.stackSize;
if (p_77659_1_.stackSize <= 0)

View File

@ -0,0 +1,21 @@
--- ../src-base/minecraft/net/minecraft/item/ItemFireball.java
+++ ../src-work/minecraft/net/minecraft/item/ItemFireball.java
@@ -61,6 +61,18 @@
{
if (p_77648_3_.getBlock(p_77648_4_, p_77648_5_, p_77648_6_).getMaterial() == Material.air)
{
+ // CraftBukkit start
+ if (org.bukkit.craftbukkit.event.CraftEventFactory.callBlockIgniteEvent(p_77648_3_, p_77648_4_, p_77648_5_, p_77648_6_, org.bukkit.event.block.BlockIgniteEvent.IgniteCause.FIREBALL, p_77648_2_).isCancelled())
+ {
+ if (!p_77648_2_.capabilities.isCreativeMode)
+ {
+ --p_77648_1_.stackSize;
+ }
+
+ return false;
+ }
+
+ // CraftBukkit end
p_77648_3_.playSoundEffect((double)p_77648_4_ + 0.5D, (double)p_77648_5_ + 0.5D, (double)p_77648_6_ + 0.5D, "fire.ignite", 1.0F, itemRand.nextFloat() * 0.4F + 0.8F);
p_77648_3_.setBlock(p_77648_4_, p_77648_5_, p_77648_6_, Blocks.fire);
}

View File

@ -0,0 +1,35 @@
--- ../src-base/minecraft/net/minecraft/item/ItemFishingRod.java
+++ ../src-work/minecraft/net/minecraft/item/ItemFishingRod.java
@@ -9,6 +9,8 @@
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
+import org.bukkit.event.player.PlayerFishEvent; // CraftBukkit
+
public class ItemFishingRod extends Item
{
@SideOnly(Side.CLIENT)
@@ -44,11 +46,22 @@
}
else
{
+ // CraftBukkit start
+ EntityFishHook hook = new EntityFishHook(p_77659_2_, p_77659_3_);
+ PlayerFishEvent playerFishEvent = new PlayerFishEvent((org.bukkit.entity.Player) p_77659_3_.getBukkitEntity(), null, (org.bukkit.entity.Fish) hook.getBukkitEntity(), PlayerFishEvent.State.FISHING);
+ p_77659_2_.getServer().getPluginManager().callEvent(playerFishEvent);
+
+ if (playerFishEvent.isCancelled())
+ {
+ return p_77659_1_;
+ }
+
+ // CraftBukkit end
p_77659_2_.playSoundAtEntity(p_77659_3_, "random.bow", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F));
if (!p_77659_2_.isRemote)
{
- p_77659_2_.spawnEntityInWorld(new EntityFishHook(p_77659_2_, p_77659_3_));
+ p_77659_2_.spawnEntityInWorld(hook); // CraftBukkit - moved creation up
}
p_77659_3_.swingItem();

View File

@ -0,0 +1,51 @@
--- ../src-base/minecraft/net/minecraft/item/ItemFlintAndSteel.java
+++ ../src-work/minecraft/net/minecraft/item/ItemFlintAndSteel.java
@@ -6,6 +6,11 @@
import net.minecraft.init.Blocks;
import net.minecraft.world.World;
+// CraftBukkit start
+import org.bukkit.craftbukkit.block.CraftBlockState;
+import org.bukkit.craftbukkit.event.CraftEventFactory;
+// CraftBukkit end
+
public class ItemFlintAndSteel extends Item
{
private static final String __OBFID = "CL_00000035";
@@ -19,6 +24,8 @@
public boolean onItemUse(ItemStack p_77648_1_, EntityPlayer p_77648_2_, World p_77648_3_, int p_77648_4_, int p_77648_5_, int p_77648_6_, int p_77648_7_, float p_77648_8_, float p_77648_9_, float p_77648_10_)
{
+ int clickedX = p_77648_4_, clickedY = p_77648_5_, clickedZ = p_77648_6_; // CraftBukkit
+
if (p_77648_7_ == 0)
{
--p_77648_5_;
@@ -57,8 +64,27 @@
{
if (p_77648_3_.isAirBlock(p_77648_4_, p_77648_5_, p_77648_6_))
{
+ // CraftBukkit start - Store the clicked block
+ if (CraftEventFactory.callBlockIgniteEvent(p_77648_3_, p_77648_4_, p_77648_5_, p_77648_6_, org.bukkit.event.block.BlockIgniteEvent.IgniteCause.FLINT_AND_STEEL, p_77648_2_).isCancelled())
+ {
+ p_77648_1_.damageItem(1, p_77648_2_);
+ return false;
+ }
+
+ CraftBlockState blockState = CraftBlockState.getBlockState(p_77648_3_, p_77648_4_, p_77648_5_, p_77648_6_);
+ // CraftBukkit end
p_77648_3_.playSoundEffect((double)p_77648_4_ + 0.5D, (double)p_77648_5_ + 0.5D, (double)p_77648_6_ + 0.5D, "fire.ignite", 1.0F, itemRand.nextFloat() * 0.4F + 0.8F);
p_77648_3_.setBlock(p_77648_4_, p_77648_5_, p_77648_6_, Blocks.fire);
+ // CraftBukkit start
+ org.bukkit.event.block.BlockPlaceEvent placeEvent = CraftEventFactory.callBlockPlaceEvent(p_77648_3_, p_77648_2_, blockState, clickedX, clickedY, clickedZ);
+
+ if (placeEvent.isCancelled() || !placeEvent.canBuild())
+ {
+ placeEvent.getBlockPlaced().setTypeIdAndData(0, (byte) 0, false);
+ return false;
+ }
+
+ // CraftBukkit end
}
p_77648_1_.damageItem(1, p_77648_2_);

View File

@ -0,0 +1,44 @@
--- ../src-base/minecraft/net/minecraft/item/ItemHangingEntity.java
+++ ../src-work/minecraft/net/minecraft/item/ItemHangingEntity.java
@@ -8,6 +8,12 @@
import net.minecraft.util.Direction;
import net.minecraft.world.World;
+// CraftBukkit start
+import org.bukkit.entity.Player;
+import org.bukkit.event.hanging.HangingPlaceEvent;
+import org.bukkit.event.painting.PaintingPlaceEvent;
+// CraftBukkit end
+
public class ItemHangingEntity extends Item
{
private final Class hangingEntityClass;
@@ -44,6 +50,28 @@
{
if (!p_77648_3_.isRemote)
{
+ // CraftBukkit start
+ Player who = (p_77648_2_ == null) ? null : (Player) p_77648_2_.getBukkitEntity();
+ org.bukkit.block.Block blockClicked = p_77648_3_.getWorld().getBlockAt(p_77648_4_, p_77648_5_, p_77648_6_);
+ org.bukkit.block.BlockFace blockFace = org.bukkit.craftbukkit.block.CraftBlock.notchToBlockFace(p_77648_7_);
+ HangingPlaceEvent event = new HangingPlaceEvent((org.bukkit.entity.Hanging) entityhanging.getBukkitEntity(), who, blockClicked, blockFace);
+ p_77648_3_.getServer().getPluginManager().callEvent(event);
+ PaintingPlaceEvent paintingEvent = null;
+
+ if (entityhanging instanceof EntityPainting)
+ {
+ // Fire old painting event until it can be removed
+ paintingEvent = new PaintingPlaceEvent((org.bukkit.entity.Painting) entityhanging.getBukkitEntity(), who, blockClicked, blockFace);
+ paintingEvent.setCancelled(event.isCancelled());
+ p_77648_3_.getServer().getPluginManager().callEvent(paintingEvent);
+ }
+
+ if (event.isCancelled() || (paintingEvent != null && paintingEvent.isCancelled()))
+ {
+ return false;
+ }
+
+ // CraftBukkit end
p_77648_3_.spawnEntityInWorld(entityhanging);
}

View File

@ -0,0 +1,38 @@
--- ../src-base/minecraft/net/minecraft/item/ItemLead.java
+++ ../src-work/minecraft/net/minecraft/item/ItemLead.java
@@ -10,6 +10,8 @@
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
+import org.bukkit.event.hanging.HangingPlaceEvent; // CraftBukkit
+
public class ItemLead extends Item
{
private static final String __OBFID = "CL_00000045";
@@ -61,8 +63,26 @@
if (entityleashknot == null)
{
entityleashknot = EntityLeashKnot.func_110129_a(p_150909_1_, p_150909_2_, p_150909_3_, p_150909_4_);
+ // CraftBukkit start
+ HangingPlaceEvent event = new HangingPlaceEvent((org.bukkit.entity.Hanging) entityleashknot.getBukkitEntity(), p_150909_0_ != null ? (org.bukkit.entity.Player) p_150909_0_.getBukkitEntity() : null, p_150909_1_.getWorld().getBlockAt(p_150909_2_, p_150909_3_, p_150909_4_), org.bukkit.block.BlockFace.SELF);
+ p_150909_1_.getServer().getPluginManager().callEvent(event);
+
+ if (event.isCancelled())
+ {
+ entityleashknot.setDead();
+ return false;
+ }
+
+ // CraftBukkit end
}
+ // CraftBukkit start
+ if (org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerLeashEntityEvent(entityliving, entityleashknot, p_150909_0_).isCancelled())
+ {
+ continue;
+ }
+
+ // CraftBukkit end
entityliving.setLeashedToEntity(entityleashknot, true);
flag = true;
}

View File

@ -0,0 +1,36 @@
--- ../src-base/minecraft/net/minecraft/item/ItemLilyPad.java
+++ ../src-work/minecraft/net/minecraft/item/ItemLilyPad.java
@@ -48,7 +48,17 @@
{
// special case for handling block placement with water lilies
net.minecraftforge.common.util.BlockSnapshot blocksnapshot = net.minecraftforge.common.util.BlockSnapshot.getBlockSnapshot(p_77659_2_, i, j + 1, k);
+ // Cauldron start - special case for handling block placement with water lilies
+ org.bukkit.block.BlockState blockstate = org.bukkit.craftbukkit.block.CraftBlockState.getBlockState(p_77659_2_, i, j + 1, k);
p_77659_2_.setBlock(i, j + 1, k, Blocks.waterlily);
+ org.bukkit.event.block.BlockPlaceEvent placeEvent = org.bukkit.craftbukkit.event.CraftEventFactory.callBlockPlaceEvent(p_77659_2_,
+ p_77659_3_, blockstate, i, j, k);
+ if (placeEvent != null && (placeEvent.isCancelled() || !placeEvent.canBuild()))
+ {
+ blockstate.update(true, false);
+ return p_77659_1_;
+ }
+ // Cauldron end
if (net.minecraftforge.event.ForgeEventFactory.onPlayerBlockPlace(p_77659_3_, blocksnapshot, net.minecraftforge.common.util.ForgeDirection.UP).isCanceled())
{
blocksnapshot.restore(true, false);
@@ -66,6 +76,15 @@
}
}
+ // Cauldron start
+ public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8,
+ float par9, float par10)
+ {
+ cpw.mods.fml.relauncher.FMLRelaunchLog.info("onItemUse par1ItemStack = " + par1ItemStack);
+ return super.onItemUse(par1ItemStack, par2EntityPlayer, par3World, par4, par5, par6, par7, par8, par9, par10);
+ }
+ // Cauldron end
+
@SideOnly(Side.CLIENT)
public int getColorFromItemStack(ItemStack p_82790_1_, int p_82790_2_)
{

View File

@ -0,0 +1,36 @@
--- ../src-base/minecraft/net/minecraft/item/ItemMap.java
+++ ../src-work/minecraft/net/minecraft/item/ItemMap.java
@@ -19,6 +19,11 @@
import net.minecraft.world.chunk.Chunk;
import net.minecraft.world.storage.MapData;
+// CraftBukkit start
+import org.bukkit.Bukkit;
+import org.bukkit.event.server.MapInitializeEvent;
+// CraftBukkit end
+
public class ItemMap extends ItemMapBase
{
private static final String __OBFID = "CL_00000047";
@@ -60,6 +65,10 @@
mapdata.dimension = p_77873_2_.provider.dimensionId;
mapdata.markDirty();
p_77873_2_.setItemData(s, mapdata);
+ // CraftBukkit start
+ MapInitializeEvent event = new MapInitializeEvent(mapdata.mapView);
+ Bukkit.getServer().getPluginManager().callEvent(event);
+ // CraftBukkit end
}
return mapdata;
@@ -279,6 +288,10 @@
mapdata1.dimension = mapdata.dimension;
mapdata1.markDirty();
p_77622_2_.setItemData("map_" + p_77622_1_.getItemDamage(), mapdata1);
+ // CraftBukkit start
+ MapInitializeEvent event = new MapInitializeEvent(mapdata1.mapView);
+ Bukkit.getServer().getPluginManager().callEvent(event);
+ // CraftBukkit end
}
}

View File

@ -0,0 +1,18 @@
--- ../src-base/minecraft/net/minecraft/item/ItemMinecart.java
+++ ../src-work/minecraft/net/minecraft/item/ItemMinecart.java
@@ -79,6 +79,15 @@
{
if (!p_77648_3_.isRemote)
{
+ // CraftBukkit start - Minecarts
+ org.bukkit.event.player.PlayerInteractEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerInteractEvent(p_77648_2_, org.bukkit.event.block.Action.RIGHT_CLICK_BLOCK, p_77648_4_, p_77648_5_, p_77648_6_, p_77648_7_, p_77648_1_);
+
+ if (event.isCancelled())
+ {
+ return false;
+ }
+
+ // CraftBukkit end
EntityMinecart entityminecart = EntityMinecart.createMinecart(p_77648_3_, (double)((float)p_77648_4_ + 0.5F), (double)((float)p_77648_5_ + 0.5F), (double)((float)p_77648_6_ + 0.5F), this.minecartType);
if (p_77648_1_.hasDisplayName())

View File

@ -0,0 +1,20 @@
--- ../src-base/minecraft/net/minecraft/item/ItemMonsterPlacer.java
+++ ../src-work/minecraft/net/minecraft/item/ItemMonsterPlacer.java
@@ -55,7 +55,7 @@
public boolean onItemUse(ItemStack p_77648_1_, EntityPlayer p_77648_2_, World p_77648_3_, int p_77648_4_, int p_77648_5_, int p_77648_6_, int p_77648_7_, float p_77648_8_, float p_77648_9_, float p_77648_10_)
{
- if (p_77648_3_.isRemote)
+ if (p_77648_3_.isRemote || p_77648_1_.getItemDamage() == 48 || p_77648_1_.getItemDamage() == 49 || p_77648_1_.getItemDamage() == 63 || p_77648_1_.getItemDamage() == 64) // CraftBukkit
{
return true;
}
@@ -168,7 +168,7 @@
entityliving.rotationYawHead = entityliving.rotationYaw;
entityliving.renderYawOffset = entityliving.rotationYaw;
entityliving.onSpawnWithEgg((IEntityLivingData)null);
- p_77840_0_.spawnEntityInWorld(entity);
+ p_77840_0_.addEntity(entity, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.SPAWNER_EGG); // CraftBukkit
entityliving.playLivingSound();
}
}

View File

@ -0,0 +1,28 @@
--- ../src-base/minecraft/net/minecraft/item/ItemShears.java
+++ ../src-work/minecraft/net/minecraft/item/ItemShears.java
@@ -3,6 +3,8 @@
import java.util.ArrayList;
import java.util.Random;
+import org.bukkit.event.player.PlayerShearEntityEvent;
+
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
@@ -61,6 +63,16 @@
IShearable target = (IShearable)entity;
if (target.isShearable(itemstack, entity.worldObj, (int)entity.posX, (int)entity.posY, (int)entity.posZ))
{
+ // Cauldron start
+ PlayerShearEntityEvent event = new PlayerShearEntityEvent((org.bukkit.entity.Player) player.getBukkitEntity(), entity.getBukkitEntity());
+ player.worldObj.getServer().getPluginManager().callEvent(event);
+
+ if (event.isCancelled())
+ {
+ return false;
+ }
+
+ // Cauldron end
ArrayList<ItemStack> drops = target.onSheared(itemstack, entity.worldObj, (int)entity.posX, (int)entity.posY, (int)entity.posZ,
EnchantmentHelper.getEnchantmentLevel(Enchantment.fortune.effectId, itemstack));

View File

@ -0,0 +1,227 @@
--- ../src-base/minecraft/net/minecraft/item/ItemStack.java
+++ ../src-work/minecraft/net/minecraft/item/ItemStack.java
@@ -35,6 +35,20 @@
import net.minecraft.world.World;
import net.minecraftforge.event.ForgeEventFactory;
+import org.bukkit.craftbukkit.util.CraftMagicNumbers; // CraftBukkit
+import net.minecraft.entity.player.EntityPlayerMP; // Spigot
+// Cauldron start
+import net.minecraft.block.BlockSapling;
+import net.minecraft.block.BlockMushroom;
+
+import org.bukkit.Location;
+import org.bukkit.TreeType;
+import org.bukkit.block.BlockState;
+import org.bukkit.craftbukkit.block.CraftBlockState;
+import org.bukkit.entity.Player;
+import org.bukkit.event.world.StructureGrowEvent;
+// Cauldron end
+
public final class ItemStack
{
public static final DecimalFormat field_111284_a = new DecimalFormat("#.###");
@@ -43,7 +57,12 @@
private Item field_151002_e;
public NBTTagCompound stackTagCompound;
int itemDamage;
- private EntityItemFrame itemFrame;
+ // Cauldron - due to a bug in Gson(https://code.google.com/p/google-gson/issues/detail?id=440), a stackoverflow
+ // can occur when gson attempts to resolve a field of a class that points to itself.
+ // As a temporary workaround, we will prevent serialization for this object until the bug is fixed.
+ // This fixes EE3's serialization of ItemStack.
+ private transient EntityItemFrame itemFrame;
+ public static EntityPlayer currentPlayer; // Cauldron - reference to current player calling onItemUse
private static final String __OBFID = "CL_00000043";
private cpw.mods.fml.common.registry.RegistryDelegate<Item> delegate;
@@ -126,12 +145,120 @@
public boolean tryPlaceItemIntoWorld(EntityPlayer p_77943_1_, World p_77943_2_, int p_77943_3_, int p_77943_4_, int p_77943_5_, int p_77943_6_, float p_77943_7_, float p_77943_8_, float p_77943_9_)
{
if (!p_77943_2_.isRemote) return net.minecraftforge.common.ForgeHooks.onPlaceItemIntoWorld(this, p_77943_1_, p_77943_2_, p_77943_3_, p_77943_4_, p_77943_5_, p_77943_6_, p_77943_7_, p_77943_8_, p_77943_9_);
+ // Cauldron start - handle all placement events here
+ int meta = this.getItemDamage();
+ int size = this.stackSize;
+ NBTTagCompound nbt = null;
+ if (this.getTagCompound() != null)
+ {
+ nbt = (NBTTagCompound) this.getTagCompound().copy();
+ }
+
+ if (!(this.getItem() instanceof ItemBucket)) // if not bucket
+ {
+ p_77943_2_.captureBlockStates = true;
+ if (this.getItem() instanceof ItemDye && this.getItemDamage() == 15)
+ {
+ Block block = p_77943_2_.getBlock(p_77943_3_, p_77943_4_, p_77943_5_);
+ if (block != null && (block instanceof BlockSapling || block instanceof BlockMushroom))
+ {
+ p_77943_2_.captureTreeGeneration = true;
+ }
+ }
+ }
+ currentPlayer = p_77943_1_;
boolean flag = this.getItem().onItemUse(this, p_77943_1_, p_77943_2_, p_77943_3_, p_77943_4_, p_77943_5_, p_77943_6_, p_77943_7_, p_77943_8_, p_77943_9_);
+ p_77943_2_.captureBlockStates = false;
+ currentPlayer = null;
+ if (flag && p_77943_2_.captureTreeGeneration && p_77943_2_.capturedBlockStates.size() > 0)
+ {
+ p_77943_2_.captureTreeGeneration = false;
+ Location location = new Location(p_77943_2_.getWorld(), p_77943_3_, p_77943_4_, p_77943_5_);
+ TreeType treeType = BlockSapling.treeType;
+ BlockSapling.treeType = null;
+ List<BlockState> blocks = (List<BlockState>) p_77943_2_.capturedBlockStates.clone();
+ p_77943_2_.capturedBlockStates.clear();
+ StructureGrowEvent event = null;
+ if (treeType != null)
+ {
+ event = new StructureGrowEvent(location, treeType, false, (Player) p_77943_1_.getBukkitEntity(), blocks);
+ org.bukkit.Bukkit.getPluginManager().callEvent(event);
+ }
+ if (event == null || !event.isCancelled())
+ {
+ for (BlockState blockstate : blocks)
+ {
+ blockstate.update(true);
+ }
+ }
+ return flag;
+ }
+ p_77943_2_.captureTreeGeneration = false;
+
if (flag)
{
- p_77943_1_.addStat(StatList.objectUseStats[Item.getIdFromItem(this.field_151002_e)], 1);
+ org.bukkit.event.block.BlockPlaceEvent placeEvent = null;
+ List<BlockState> blockstates = (List<BlockState>) p_77943_2_.capturedBlockStates.clone();
+ p_77943_2_.capturedBlockStates.clear();
+ if (blockstates.size() > 1)
+ {
+ placeEvent = org.bukkit.craftbukkit.event.CraftEventFactory.callBlockMultiPlaceEvent(p_77943_2_, p_77943_1_, blockstates, p_77943_3_,
+ p_77943_4_, p_77943_5_);
+ }
+ else if (blockstates.size() == 1)
+ {
+ placeEvent = org.bukkit.craftbukkit.event.CraftEventFactory.callBlockPlaceEvent(p_77943_2_, p_77943_1_, blockstates.get(0), p_77943_3_,
+ p_77943_4_, p_77943_5_);
+ }
+ if (placeEvent != null && (placeEvent.isCancelled() || !placeEvent.canBuild()))
+ {
+ flag = false; // cancel placement
+ // revert back all captured blocks
+ for (BlockState blockstate : blockstates)
+ {
+ p_77943_2_.restoringBlockStates = true;
+ blockstate.update(true, false); // restore blockstate
+ p_77943_2_.restoringBlockStates = false;
+ }
+ // make sure to restore stack after cancel
+ this.setItemDamage(meta);
+ this.stackSize = size;
+ if (nbt != null)
+ {
+ this.setTagCompound(nbt);
+ }
+ }
+ else
+ {
+ // drop items
+ for (int i = 0; i < p_77943_2_.capturedItems.size(); i++)
+ {
+ p_77943_2_.spawnEntityInWorld(p_77943_2_.capturedItems.get(i));
+ }
+
+ for (BlockState blockstate : blockstates)
+ {
+ int x = blockstate.getX();
+ int y = blockstate.getY();
+ int z = blockstate.getZ();
+ int metadata = p_77943_2_.getBlockMetadata(x, y, z);
+ int updateFlag = ((CraftBlockState) blockstate).getFlag();
+ Block oldBlock = CraftMagicNumbers.getBlock(blockstate.getTypeId());
+ Block newBlock = p_77943_2_.getBlock(x, y, z);
+ if (newBlock != null && !(newBlock.hasTileEntity(metadata)))
+ { // Containers get placed automatically
+ newBlock.onBlockAdded(p_77943_2_, x, y, z);
+ }
+
+ p_77943_2_.markAndNotifyBlock(x, y, z, null, oldBlock, newBlock, updateFlag);
+ }
+ p_77943_1_.addStat(StatList.objectUseStats[Item.getIdFromItem(this.field_151002_e)], 1);
+ }
}
+ p_77943_2_.capturedBlockStates.clear();
+ p_77943_2_.capturedItems.clear();
+ // Cauldron end
return flag;
}
@@ -227,8 +354,22 @@
return getItem().getMaxDamage(this);
}
+ // Spigot start
+
+ /**
+ * Attempts to damage the ItemStack with par1 amount of damage, If the ItemStack has the Unbreaking enchantment
+ * there is a chance for each point of damage to be negated. Returns true if it takes more damage than
+ * getMaxDamage(). Returns false otherwise or if the ItemStack can't be damaged or if all points of damage are
+ * negated.
+ */
public boolean attemptDamageItem(int p_96631_1_, Random p_96631_2_)
{
+ return isDamaged(p_96631_1_, p_96631_2_, null);
+ }
+
+ public boolean isDamaged(int p_96631_1_, Random p_96631_2_, EntityLivingBase entitylivingbase)
+ {
+ // Spigot end
if (!this.isItemStackDamageable())
{
return false;
@@ -250,6 +391,23 @@
p_96631_1_ -= k;
+ // Spigot start
+ if (entitylivingbase instanceof EntityPlayerMP)
+ {
+ org.bukkit.craftbukkit.inventory.CraftItemStack item = org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(this);
+ org.bukkit.event.player.PlayerItemDamageEvent event = new org.bukkit.event.player.PlayerItemDamageEvent(
+ (org.bukkit.entity.Player) entitylivingbase.getBukkitEntity(), item, p_96631_1_);
+ org.bukkit.Bukkit.getServer().getPluginManager().callEvent(event);
+
+ if (event.isCancelled())
+ {
+ return false;
+ }
+
+ p_96631_1_ = event.getDamage();
+ }
+ // Spigot end
+
if (p_96631_1_ <= 0)
{
return false;
@@ -288,6 +446,12 @@
this.stackSize = 0;
}
+ // CraftBukkit start - Check for item breaking
+ if (this.stackSize == 0 && p_77972_2_ instanceof EntityPlayer)
+ {
+ org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerItemBreakEvent((EntityPlayer) p_77972_2_, this);
+ }
+ // CraftBukkit end
this.itemDamage = 0;
}
}
@@ -419,6 +583,7 @@
public void setTagCompound(NBTTagCompound p_77982_1_)
{
+ // Cauldron - do not alter name of compound. Fixes Ars Magica 2 Spellbooks
this.stackTagCompound = p_77982_1_;
}

View File

@ -0,0 +1,104 @@
--- ../src-base/minecraft/net/minecraft/item/crafting/CraftingManager.java
+++ ../src-work/minecraft/net/minecraft/item/crafting/CraftingManager.java
@@ -13,10 +13,17 @@
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
+import org.bukkit.craftbukkit.event.CraftEventFactory; // CraftBukkit
+
public class CraftingManager
{
private static final CraftingManager instance = new CraftingManager();
- private List recipes = new ArrayList();
+ // CraftBukkit start
+ /** A list of all the recipes added */
+ public List recipes = new ArrayList(); // private -> public
+ public IRecipe lastRecipe;
+ public org.bukkit.inventory.InventoryView lastCraftView;
+ // CraftBukkit end
private static final String __OBFID = "CL_00000090";
public static final CraftingManager getInstance()
@@ -24,7 +31,8 @@
return instance;
}
- private CraftingManager()
+ // CraftBukkit - private -> public
+ public CraftingManager()
{
(new RecipesTools()).addRecipes(this);
(new RecipesWeapons()).addRecipes(this);
@@ -152,6 +160,23 @@
this.addShapelessRecipe(new ItemStack(Items.fire_charge, 3), new Object[] {Items.gunpowder, Items.blaze_powder, new ItemStack(Items.coal, 1, 1)});
this.addRecipe(new ItemStack(Blocks.daylight_detector), new Object[] {"GGG", "QQQ", "WWW", 'G', Blocks.glass, 'Q', Items.quartz, 'W', Blocks.wooden_slab});
this.addRecipe(new ItemStack(Blocks.hopper), new Object[] {"I I", "ICI", " I ", 'I', Items.iron_ingot, 'C', Blocks.chest});
+ /*Collections.sort(this.recipes, new Comparator() // CraftBukkit - moved below
+ {
+ private static final String __OBFID = "CL_00000091";
+ public int compare(IRecipe par1IRecipe, IRecipe par2IRecipe)
+ {
+ return par1IRecipe instanceof ShapelessRecipes && par2IRecipe instanceof ShapedRecipes ? 1 : (par2IRecipe instanceof ShapelessRecipes && par1IRecipe instanceof ShapedRecipes ? -1 : (par2IRecipe.getRecipeSize() < par1IRecipe.getRecipeSize() ? -1 : (par2IRecipe.getRecipeSize() > par1IRecipe.getRecipeSize() ? 1 : 0)));
+ }
+ public int compare(Object par1Obj, Object par2Obj)
+ {
+ return this.compare((IRecipe)par1Obj, (IRecipe)par2Obj);
+ }
+ });*/
+ this.sort(); // CraftBukkit - call new sort method
+ }
+
+ public void sort()
+ {
Collections.sort(this.recipes, new Comparator()
{
private static final String __OBFID = "CL_00000091";
@@ -312,7 +337,22 @@
i1 = 0;
}
- return new ItemStack(itemstack.getItem(), 1, i1);
+ // Cauldron start - vanilla compatibility
+ if (p_82787_1_.resultInventory == null)
+ {
+ return new ItemStack(itemstack.getItem(), 1, i1);
+ }
+ // Cauldron end
+ // CraftBukkit start - Construct a dummy repair recipe
+ ItemStack result = new ItemStack(itemstack.getItem(), 1, i1);
+ List<ItemStack> ingredients = new ArrayList<ItemStack>();
+ ingredients.add(itemstack.copy());
+ ingredients.add(itemstack1.copy());
+ ShapelessRecipes recipe = new ShapelessRecipes(result.copy(), ingredients);
+ p_82787_1_.currentRecipe = recipe;
+ result = CraftEventFactory.callPreCraftEvent(p_82787_1_, result, lastCraftView, true);
+ return result;
+ // CraftBukkit end
}
else
{
@@ -320,12 +360,23 @@
{
IRecipe irecipe = (IRecipe)this.recipes.get(j);
- if (irecipe.matches(p_82787_1_, p_82787_2_))
+ if (irecipe.matches(p_82787_1_, p_82787_2_) && p_82787_1_.resultInventory != null) // Cauldron - add null check for vanilla compatibility
{
+ // CraftBukkit start - INVENTORY_PRE_CRAFT event
+ p_82787_1_.currentRecipe = irecipe;
+ ItemStack result = irecipe.getCraftingResult(p_82787_1_);
+ return CraftEventFactory.callPreCraftEvent(p_82787_1_, result, lastCraftView, false);
+ // CraftBukkit end
+ }
+ // Cauldron start - vanilla
+ else if (irecipe.matches(p_82787_1_, p_82787_2_))
+ {
return irecipe.getCraftingResult(p_82787_1_);
}
+ // Cauldron end
}
+ p_82787_1_.currentRecipe = null; // CraftBukkit - Clear recipe when no recipe is found
return null;
}
}

View File

@ -0,0 +1,62 @@
--- ../src-base/minecraft/net/minecraft/item/crafting/FurnaceRecipes.java
+++ ../src-work/minecraft/net/minecraft/item/crafting/FurnaceRecipes.java
@@ -14,8 +14,9 @@
public class FurnaceRecipes
{
private static final FurnaceRecipes smeltingBase = new FurnaceRecipes();
- private Map smeltingList = new HashMap();
+ public Map smeltingList = new HashMap(); // CraftBukkit - private -> public
private Map experienceList = new HashMap();
+ public Map customRecipes = new HashMap(); // CraftBukkit
private static final String __OBFID = "CL_00000085";
public static FurnaceRecipes smelting()
@@ -23,7 +24,7 @@
return smeltingBase;
}
- private FurnaceRecipes()
+ public FurnaceRecipes() // CraftBukkit - private -> public
{
this.func_151393_a(Blocks.iron_ore, new ItemStack(Items.iron_ingot), 0.7F);
this.func_151393_a(Blocks.gold_ore, new ItemStack(Items.gold_ingot), 1.0F);
@@ -76,16 +77,37 @@
this.experienceList.put(p_151394_2_, Float.valueOf(p_151394_3_));
}
+ // CraftBukkit start
+ public void registerRecipe(ItemStack itemstack, ItemStack itemstack1)
+ {
+ this.customRecipes.put(itemstack, itemstack1);
+ }
+ // CraftBukkit end
+
public ItemStack getSmeltingResult(ItemStack p_151395_1_)
{
- Iterator iterator = this.smeltingList.entrySet().iterator();
+ // CraftBukkit start
+ boolean vanilla = false;
+ Iterator iterator = this.customRecipes.entrySet().iterator();
+ // CraftBukkit end
Entry entry;
do
{
if (!iterator.hasNext())
{
- return null;
+ // CraftBukkit start
+ if (!vanilla)
+ {
+ iterator = this.smeltingList.entrySet().iterator();
+ vanilla = true;
+ }
+ else
+ {
+ return null;
+ }
+
+ // CraftBukkit end
}
entry = (Entry)iterator.next();

View File

@ -0,0 +1,9 @@
--- ../src-base/minecraft/net/minecraft/item/crafting/IRecipe.java
+++ ../src-work/minecraft/net/minecraft/item/crafting/IRecipe.java
@@ -13,4 +13,6 @@
int getRecipeSize();
ItemStack getRecipeOutput();
+
+ org.bukkit.inventory.Recipe toBukkitRecipe(); // CraftBukkit
}

View File

@ -0,0 +1,21 @@
--- ../src-base/minecraft/net/minecraft/item/crafting/RecipeBookCloning.java
+++ ../src-work/minecraft/net/minecraft/item/crafting/RecipeBookCloning.java
@@ -6,10 +6,17 @@
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
-public class RecipeBookCloning implements IRecipe
+public class RecipeBookCloning extends ShapelessRecipes implements IRecipe // CraftBukkit - added extends
{
private static final String __OBFID = "CL_00000081";
+ // CraftBukkit start - Delegate to new parent class
+ public RecipeBookCloning()
+ {
+ super(new ItemStack(Items.written_book, 0, -1), java.util.Arrays.asList(new ItemStack(Items.writable_book, 0, 0)));
+ }
+ // CraftBukkit end
+
public boolean matches(InventoryCrafting p_77569_1_, World p_77569_2_)
{
int i = 0;

View File

@ -0,0 +1,22 @@
--- ../src-base/minecraft/net/minecraft/item/crafting/RecipeFireworks.java
+++ ../src-work/minecraft/net/minecraft/item/crafting/RecipeFireworks.java
@@ -9,11 +9,18 @@
import net.minecraft.nbt.NBTTagList;
import net.minecraft.world.World;
-public class RecipeFireworks implements IRecipe
+public class RecipeFireworks extends ShapelessRecipes implements IRecipe // CraftBukkit - added extends
{
private ItemStack field_92102_a;
private static final String __OBFID = "CL_00000083";
+ // CraftBukkit start - Delegate to new parent class with bogus info
+ public RecipeFireworks()
+ {
+ super(new ItemStack(Items.fireworks, 0, 0), java.util.Arrays.asList(new ItemStack(Items.gunpowder, 0, 5)));
+ }
+ // CraftBukkit end
+
public boolean matches(InventoryCrafting p_77569_1_, World p_77569_2_)
{
this.field_92102_a = null;

View File

@ -0,0 +1,21 @@
--- ../src-base/minecraft/net/minecraft/item/crafting/RecipesArmorDyes.java
+++ ../src-work/minecraft/net/minecraft/item/crafting/RecipesArmorDyes.java
@@ -9,10 +9,17 @@
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
-public class RecipesArmorDyes implements IRecipe
+public class RecipesArmorDyes extends ShapelessRecipes implements IRecipe // CraftBukkit - added extends
{
private static final String __OBFID = "CL_00000079";
+ // CraftBukkit start - Delegate to new parent class with bogus info
+ public RecipesArmorDyes()
+ {
+ super(new ItemStack(Items.leather_helmet, 0, 0), java.util.Arrays.asList(new ItemStack(Items.dye, 0, 5)));
+ }
+ // CraftBukkit end
+
public boolean matches(InventoryCrafting p_77569_1_, World p_77569_2_)
{
ItemStack itemstack = null;

View File

@ -0,0 +1,21 @@
--- ../src-base/minecraft/net/minecraft/item/crafting/RecipesMapCloning.java
+++ ../src-work/minecraft/net/minecraft/item/crafting/RecipesMapCloning.java
@@ -5,10 +5,17 @@
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
-public class RecipesMapCloning implements IRecipe
+public class RecipesMapCloning extends ShapelessRecipes implements IRecipe // CraftBukkit - added extends
{
private static final String __OBFID = "CL_00000087";
+ // CraftBukkit start - Delegate to new parent class
+ public RecipesMapCloning()
+ {
+ super(new ItemStack(Items.filled_map, 0, -1), java.util.Arrays.asList(new ItemStack(Items.map, 0, 0)));
+ }
+ // CraftBukkit end
+
public boolean matches(InventoryCrafting p_77569_1_, World p_77569_2_)
{
int i = 0;

View File

@ -0,0 +1,92 @@
--- ../src-base/minecraft/net/minecraft/item/crafting/ShapedRecipes.java
+++ ../src-work/minecraft/net/minecraft/item/crafting/ShapedRecipes.java
@@ -5,6 +5,11 @@
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
+// CraftBukkit start
+import org.bukkit.craftbukkit.inventory.CraftItemStack;
+import org.bukkit.craftbukkit.inventory.CraftShapedRecipe;
+// CraftBukkit end
+
public class ShapedRecipes implements IRecipe
{
public final int recipeWidth;
@@ -22,6 +27,77 @@
this.recipeOutput = p_i1917_4_;
}
+ // CraftBukkit start
+ public org.bukkit.inventory.ShapedRecipe toBukkitRecipe()
+ {
+ CraftItemStack result = CraftItemStack.asCraftMirror(this.recipeOutput);
+ CraftShapedRecipe recipe = new CraftShapedRecipe(result, this);
+
+ switch (this.recipeHeight)
+ {
+ case 1:
+ switch (this.recipeWidth)
+ {
+ case 1:
+ recipe.shape("a");
+ break;
+ case 2:
+ recipe.shape("ab");
+ break;
+ case 3:
+ recipe.shape("abc");
+ break;
+ }
+
+ break;
+ case 2:
+ switch (this.recipeWidth)
+ {
+ case 1:
+ recipe.shape("a", "b");
+ break;
+ case 2:
+ recipe.shape("ab", "cd");
+ break;
+ case 3:
+ recipe.shape("abc", "def");
+ break;
+ }
+
+ break;
+ case 3:
+ switch (this.recipeWidth)
+ {
+ case 1:
+ recipe.shape("a", "b", "c");
+ break;
+ case 2:
+ recipe.shape("ab", "cd", "ef");
+ break;
+ case 3:
+ recipe.shape("abc", "def", "ghi");
+ break;
+ }
+
+ break;
+ }
+
+ char c = 'a';
+
+ for (ItemStack stack : this.recipeItems)
+ {
+ if (stack != null)
+ {
+ recipe.setIngredient(c, org.bukkit.craftbukkit.util.CraftMagicNumbers.getMaterial(stack.getItem()), stack.getItemDamage());
+ }
+
+ c++;
+ }
+
+ return recipe;
+ }
+ // CraftBukkit end
+
public ItemStack getRecipeOutput()
{
return this.recipeOutput;

View File

@ -0,0 +1,40 @@
--- ../src-base/minecraft/net/minecraft/item/crafting/ShapelessRecipes.java
+++ ../src-work/minecraft/net/minecraft/item/crafting/ShapelessRecipes.java
@@ -7,6 +7,11 @@
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
+// CraftBukkit start
+import org.bukkit.craftbukkit.inventory.CraftItemStack;
+import org.bukkit.craftbukkit.inventory.CraftShapelessRecipe;
+// CraftBukkit end
+
public class ShapelessRecipes implements IRecipe
{
private final ItemStack recipeOutput;
@@ -19,6 +24,25 @@
this.recipeItems = p_i1918_2_;
}
+ // CraftBukkit start
+ @SuppressWarnings("unchecked")
+ public org.bukkit.inventory.ShapelessRecipe toBukkitRecipe()
+ {
+ CraftItemStack result = CraftItemStack.asCraftMirror(this.recipeOutput);
+ CraftShapelessRecipe recipe = new CraftShapelessRecipe(result, this);
+
+ for (ItemStack stack : (List<ItemStack>) this.recipeItems)
+ {
+ if (stack != null)
+ {
+ recipe.addIngredient(org.bukkit.craftbukkit.util.CraftMagicNumbers.getMaterial(stack.getItem()), stack.getItemDamage());
+ }
+ }
+
+ return recipe;
+ }
+ // CraftBukkit end
+
public ItemStack getRecipeOutput()
{
return this.recipeOutput;