diff --git a/patches/minecraft/net/minecraft/tileentity/TileEntityBrewingStand.java.patch b/patches/minecraft/net/minecraft/tileentity/TileEntityBrewingStand.java.patch
index 95c8887557..df91475fe3 100644
--- a/patches/minecraft/net/minecraft/tileentity/TileEntityBrewingStand.java.patch
+++ b/patches/minecraft/net/minecraft/tileentity/TileEntityBrewingStand.java.patch
@@ -9,7 +9,14 @@
{
int j = this.field_145945_j[i].func_77960_j();
int k = this.func_145936_c(j, itemstack);
-@@ -157,7 +157,7 @@
+@@ -151,13 +151,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)
{
@@ -18,7 +25,7 @@
{
int j = this.field_145945_j[i].func_77960_j();
int k = this.func_145936_c(j, itemstack);
-@@ -178,9 +178,9 @@
+@@ -178,9 +179,9 @@
}
}
@@ -30,15 +37,15 @@
}
else
{
-@@ -191,6 +191,7 @@
+@@ -191,6 +192,7 @@
this.field_145945_j[3] = null;
}
}
-+ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.brewing.PotionBrewedEvent(field_145945_j));
++ net.minecraftforge.event.ForgeEventFactory.onPotionBrewed(field_145945_j);
}
}
-@@ -306,7 +307,7 @@
+@@ -306,7 +308,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 7cb7664645..343d2b835c 100644
--- a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java
+++ b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java
@@ -36,6 +36,7 @@ import net.minecraftforge.common.ForgeHooks;
import net.minecraftforge.common.IExtendedEntityProperties;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.util.BlockSnapshot;
+import net.minecraftforge.event.brewing.PotionBrewEvent;
import net.minecraftforge.event.entity.EntityEvent;
import net.minecraftforge.event.entity.EntityStruckByLightningEvent;
import net.minecraftforge.event.entity.PlaySoundAtEntityEvent;
@@ -385,4 +386,30 @@ 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);
+ }
+ 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 0000000000..d7c3d1be5e
--- /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 net.minecraftforge.fml.common.eventhandler.Cancelable;
+import net.minecraftforge.fml.common.eventhandler.Event;
+import net.minecraftforge.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);
+ }
+ }
+}
diff --git a/src/main/java/net/minecraftforge/event/brewing/PotionBrewedEvent.java b/src/main/java/net/minecraftforge/event/brewing/PotionBrewedEvent.java
index 7fe80e6669..c18cfab957 100644
--- a/src/main/java/net/minecraftforge/event/brewing/PotionBrewedEvent.java
+++ b/src/main/java/net/minecraftforge/event/brewing/PotionBrewedEvent.java
@@ -16,14 +16,18 @@ import net.minecraft.item.ItemStack;
*
* This event is fired on the {@link MinecraftForge#EVENT_BUS}.
**/
-public class PotionBrewedEvent extends Event
+@Deprecated
+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;
}
}