Initial commit (Forge 1291).
This commit is contained in:
38
patches/net/minecraft/item/Item.java.patch
Normal file
38
patches/net/minecraft/item/Item.java.patch
Normal 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
|
||||
}
|
||||
|
||||
/**
|
19
patches/net/minecraft/item/ItemBoat.java.patch
Normal file
19
patches/net/minecraft/item/ItemBoat.java.patch
Normal 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;
|
33
patches/net/minecraft/item/ItemBow.java.patch
Normal file
33
patches/net/minecraft/item/ItemBow.java.patch
Normal 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
|
||||
}
|
||||
}
|
||||
}
|
133
patches/net/minecraft/item/ItemBucket.java.patch
Normal file
133
patches/net/minecraft/item/ItemBucket.java.patch
Normal 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;
|
||||
}
|
||||
}
|
||||
|
30
patches/net/minecraft/item/ItemDye.java.patch
Normal file
30
patches/net/minecraft/item/ItemDye.java.patch
Normal 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;
|
||||
}
|
10
patches/net/minecraft/item/ItemEmptyMap.java.patch
Normal file
10
patches/net/minecraft/item/ItemEmptyMap.java.patch
Normal 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)
|
21
patches/net/minecraft/item/ItemFireball.java.patch
Normal file
21
patches/net/minecraft/item/ItemFireball.java.patch
Normal 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);
|
||||
}
|
35
patches/net/minecraft/item/ItemFishingRod.java.patch
Normal file
35
patches/net/minecraft/item/ItemFishingRod.java.patch
Normal 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();
|
51
patches/net/minecraft/item/ItemFlintAndSteel.java.patch
Normal file
51
patches/net/minecraft/item/ItemFlintAndSteel.java.patch
Normal 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_);
|
44
patches/net/minecraft/item/ItemHangingEntity.java.patch
Normal file
44
patches/net/minecraft/item/ItemHangingEntity.java.patch
Normal 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);
|
||||
}
|
||||
|
38
patches/net/minecraft/item/ItemLead.java.patch
Normal file
38
patches/net/minecraft/item/ItemLead.java.patch
Normal 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;
|
||||
}
|
36
patches/net/minecraft/item/ItemLilyPad.java.patch
Normal file
36
patches/net/minecraft/item/ItemLilyPad.java.patch
Normal 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_)
|
||||
{
|
36
patches/net/minecraft/item/ItemMap.java.patch
Normal file
36
patches/net/minecraft/item/ItemMap.java.patch
Normal 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
|
||||
}
|
||||
}
|
||||
|
18
patches/net/minecraft/item/ItemMinecart.java.patch
Normal file
18
patches/net/minecraft/item/ItemMinecart.java.patch
Normal 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())
|
20
patches/net/minecraft/item/ItemMonsterPlacer.java.patch
Normal file
20
patches/net/minecraft/item/ItemMonsterPlacer.java.patch
Normal 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();
|
||||
}
|
||||
}
|
28
patches/net/minecraft/item/ItemShears.java.patch
Normal file
28
patches/net/minecraft/item/ItemShears.java.patch
Normal 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));
|
||||
|
227
patches/net/minecraft/item/ItemStack.java.patch
Normal file
227
patches/net/minecraft/item/ItemStack.java.patch
Normal 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_;
|
||||
}
|
||||
|
104
patches/net/minecraft/item/crafting/CraftingManager.java.patch
Normal file
104
patches/net/minecraft/item/crafting/CraftingManager.java.patch
Normal 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;
|
||||
}
|
||||
}
|
@ -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();
|
9
patches/net/minecraft/item/crafting/IRecipe.java.patch
Normal file
9
patches/net/minecraft/item/crafting/IRecipe.java.patch
Normal 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
|
||||
}
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
92
patches/net/minecraft/item/crafting/ShapedRecipes.java.patch
Normal file
92
patches/net/minecraft/item/crafting/ShapedRecipes.java.patch
Normal 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;
|
@ -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;
|
Reference in New Issue
Block a user