diff --git a/patches/minecraft/net/minecraft/tileentity/TileEntityBrewingStand.java.patch b/patches/minecraft/net/minecraft/tileentity/TileEntityBrewingStand.java.patch index 6bd1efdd9..979435fcb 100644 --- a/patches/minecraft/net/minecraft/tileentity/TileEntityBrewingStand.java.patch +++ b/patches/minecraft/net/minecraft/tileentity/TileEntityBrewingStand.java.patch @@ -1,15 +1,6 @@ --- ../src-base/minecraft/net/minecraft/tileentity/TileEntityBrewingStand.java +++ ../src-work/minecraft/net/minecraft/tileentity/TileEntityBrewingStand.java -@@ -12,6 +12,8 @@ - import net.minecraft.nbt.NBTTagCompound; - import net.minecraft.nbt.NBTTagList; - import net.minecraft.potion.PotionHelper; -+import net.minecraftforge.common.MinecraftForge; -+import net.minecraftforge.event.brewing.PotionBrewedEvent; - - public class TileEntityBrewingStand extends TileEntity implements ISidedInventory - { -@@ -104,7 +106,7 @@ +@@ -104,7 +104,7 @@ for (int i = 0; i < 3; ++i) { @@ -18,7 +9,14 @@ { int j = this.field_145945_j[i].func_77960_j(); int k = this.func_145936_c(j, itemstack); -@@ -143,7 +145,7 @@ +@@ -137,13 +137,14 @@ + + private void func_145940_l() + { ++ if (net.minecraftforge.event.ForgeEventFactory.onPotionAttemptBreaw(field_145945_j)) return; + if (this.func_145934_k()) + { + ItemStack itemstack = this.field_145945_j[3]; for (int i = 0; i < 3; ++i) { @@ -27,7 +25,7 @@ { int j = this.field_145945_j[i].func_77960_j(); int k = this.func_145936_c(j, itemstack); -@@ -164,9 +166,9 @@ +@@ -164,9 +165,9 @@ } } @@ -39,15 +37,15 @@ } else { -@@ -177,6 +179,7 @@ +@@ -177,6 +178,7 @@ this.field_145945_j[3] = null; } } -+ MinecraftForge.EVENT_BUS.post(new PotionBrewedEvent(field_145945_j)); ++ net.minecraftforge.event.ForgeEventFactory.onPotionBrewed(field_145945_j); } } -@@ -292,7 +295,7 @@ +@@ -292,7 +294,7 @@ public boolean func_94041_b(int p_94041_1_, ItemStack p_94041_2_) { diff --git a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java index 8dad798eb..1765adad4 100644 --- a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java +++ b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java @@ -18,6 +18,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntityBrewingStand; import net.minecraft.world.Explosion; import net.minecraft.world.World; import net.minecraft.world.WorldServer; @@ -28,6 +29,8 @@ import net.minecraft.world.storage.SaveHandler; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.util.BlockSnapshot; import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.event.brewing.PotionBrewEvent; +import net.minecraftforge.event.brewing.PotionBrewedEvent; import net.minecraftforge.event.entity.EntityStruckByLightningEvent; import net.minecraftforge.event.entity.living.LivingHealEvent; import net.minecraftforge.event.entity.living.LivingPackSizeEvent; @@ -253,4 +256,31 @@ public class ForgeEventFactory LivingHealEvent event = new LivingHealEvent(entity, amount); return (MinecraftForge.EVENT_BUS.post(event) ? 0 : event.amount); } + + public static boolean onPotionAttemptBreaw(ItemStack[] stacks) + { + ItemStack[] tmp = new ItemStack[stacks.length]; + for (int x = 0; x < tmp.length; x++) + tmp[x] = stacks[x].copy(); + + PotionBrewEvent.Pre event = new PotionBrewEvent.Pre(tmp); + if (MinecraftForge.EVENT_BUS.post(event)) + { + boolean changed = false; + for (int x = 0; x < stacks.length; x++) + { + changed |= ItemStack.areItemStacksEqual(tmp[x], stacks[x]); + stacks[x] = event.getItem(x); + } + if (changed) + onPotionBrewed(stacks); + return true; + } + return false; + } + + public static void onPotionBrewed(ItemStack[] brewingItemStacks) + { + MinecraftForge.EVENT_BUS.post(new PotionBrewEvent.Post(brewingItemStacks)); + } } diff --git a/src/main/java/net/minecraftforge/event/brewing/PotionBrewEvent.java b/src/main/java/net/minecraftforge/event/brewing/PotionBrewEvent.java new file mode 100644 index 000000000..1c26cd9e1 --- /dev/null +++ b/src/main/java/net/minecraftforge/event/brewing/PotionBrewEvent.java @@ -0,0 +1,83 @@ +package net.minecraftforge.event.brewing; + +import net.minecraft.item.ItemStack; +import cpw.mods.fml.common.eventhandler.Cancelable; +import cpw.mods.fml.common.eventhandler.Event; +import cpw.mods.fml.common.eventhandler.Event.HasResult; + + +public class PotionBrewEvent extends Event +{ + private ItemStack[] stacks; + + protected PotionBrewEvent(ItemStack[] stacks) + { + this.stacks = stacks; + } + + public ItemStack getItem(int index) + { + if (index >= stacks.length) return null; + return stacks[index]; + } + + public void setItem(int index, ItemStack stack) + { + if (index < stacks.length) + { + stacks[index] = stack; + } + } + + public int getLength() + { + return stacks.length; + } + + /** + * PotionBrewEvent.Pre is fired before vanilla brewing takes place. + * All changes made to the event's array will be made to the TileEntity if the event is canceled. + *
+ * The event is fired during the TileEntityBrewingStand#brewPotions() method invocation.
+ *
+ * {@link #brewingStacks} contains the itemstack array from the TileEntityBrewer holding all items in Brewer.
+ *
+ * This event is {@link Cancelable}.
+ * If the event is not canceled, the vanilla brewing will take place instead of modded brewing. + *
+ * This event does not have a result. {@link HasResult}
+ *
+ * This event is fired on the {@link MinecraftForge#EVENT_BUS}.
+ *
+ * If this event is canceled, and items have been modified, PotionBrewEvent.Post will automatically be fired. + **/ + @Cancelable + public static class Pre extends PotionBrewEvent + { + public Pre(ItemStack[] stacks) + { + super(stacks); + } + } + + /** + * PotionBrewEvent.Post is fired when a potion is brewed in the brewing stand. + *
+ * The event is fired during the TileEntityBrewingStand#brewPotions() method invocation.
+ *
+ * {@link #brewingStacks} contains the itemstack array from the TileEntityBrewer holding all items in Brewer.
+ *
+ * This event is not {@link Cancelable}.
+ *
+ * This event does not have a result. {@link HasResult}
+ *
+ * This event is fired on the {@link MinecraftForge#EVENT_BUS}.
+ **/ + public static class Post extends PotionBrewedEvent + { + public Post(ItemStack[] stacks) + { + super(stacks); + } + } +} \ No newline at end of file diff --git a/src/main/java/net/minecraftforge/event/brewing/PotionBrewedEvent.java b/src/main/java/net/minecraftforge/event/brewing/PotionBrewedEvent.java index 4af282589..e958684cc 100644 --- a/src/main/java/net/minecraftforge/event/brewing/PotionBrewedEvent.java +++ b/src/main/java/net/minecraftforge/event/brewing/PotionBrewedEvent.java @@ -1,5 +1,6 @@ package net.minecraftforge.event.brewing; +import cpw.mods.fml.common.eventhandler.Cancelable; import cpw.mods.fml.common.eventhandler.Event; import net.minecraft.item.ItemStack; @@ -16,14 +17,18 @@ import net.minecraft.item.ItemStack; *
* This event is fired on the {@link MinecraftForge#EVENT_BUS}.
**/ -public class PotionBrewedEvent extends Event +@Deprecated //Remove in 1.8.1 +public class PotionBrewedEvent extends PotionBrewEvent { /** * The brewing stacks in the brewing stand. Each index has the possibility to be null, so make sure you check. + * Changing this array to another one has no effect. */ + @Deprecated public ItemStack[] brewingStacks; public PotionBrewedEvent(ItemStack[] brewingStacks) { + super(brewingStacks); this.brewingStacks = brewingStacks; } }