diff --git a/patches/minecraft/net/minecraft/advancements/PlayerAdvancements.java.patch b/patches/minecraft/net/minecraft/advancements/PlayerAdvancements.java.patch
index e5b9a6428f..9d422fdaa7 100644
--- a/patches/minecraft/net/minecraft/advancements/PlayerAdvancements.java.patch
+++ b/patches/minecraft/net/minecraft/advancements/PlayerAdvancements.java.patch
@@ -10,3 +10,12 @@
boolean flag = false;
AdvancementProgress advancementprogress = this.func_192747_a(p_192750_1_);
boolean flag1 = advancementprogress.func_192105_a();
+@@ -214,6 +217,8 @@
+ {
+ this.field_192756_d.func_184103_al().func_148539_a(new TextComponentTranslation("chat.type.advancement." + p_192750_1_.func_192068_c().func_192291_d().func_192307_a(), new Object[] {this.field_192762_j.func_145748_c_(), p_192750_1_.func_193123_j()}));
+ }
++
++ net.minecraftforge.common.ForgeHooks.onAdvancement(this.field_192762_j, p_192750_1_);
+ }
+ }
+
diff --git a/src/main/java/net/minecraftforge/common/ForgeHooks.java b/src/main/java/net/minecraftforge/common/ForgeHooks.java
index 3b09e21a7b..355ba5187f 100644
--- a/src/main/java/net/minecraftforge/common/ForgeHooks.java
+++ b/src/main/java/net/minecraftforge/common/ForgeHooks.java
@@ -127,6 +127,7 @@ import net.minecraftforge.event.entity.player.AttackEntityEvent;
import net.minecraftforge.event.entity.player.CriticalHitEvent;
import net.minecraftforge.event.entity.player.PlayerEvent;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
+import net.minecraftforge.event.entity.player.AdvancementEvent;
import net.minecraftforge.event.world.BlockEvent;
import net.minecraftforge.event.world.NoteBlockEvent;
import net.minecraftforge.fluids.IFluidBlock;
@@ -1372,4 +1373,9 @@ public class ForgeHooks
if (recipes.size() > 0 || display.size() > 0)
connection.sendPacket(new SPacketRecipeBook(state, recipes, display, isGuiOpen, isFilteringCraftable));
}
+
+ public static void onAdvancement(EntityPlayerMP player, Advancement advancement)
+ {
+ MinecraftForge.EVENT_BUS.post(new AdvancementEvent(player, advancement));
+ }
}
diff --git a/src/main/java/net/minecraftforge/event/entity/player/AdvancementEvent.java b/src/main/java/net/minecraftforge/event/entity/player/AdvancementEvent.java
new file mode 100644
index 0000000000..c396343b12
--- /dev/null
+++ b/src/main/java/net/minecraftforge/event/entity/player/AdvancementEvent.java
@@ -0,0 +1,50 @@
+/*
+ * Minecraft Forge
+ * Copyright (c) 2016.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation version 2.1
+ * of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package net.minecraftforge.event.entity.player;
+
+import net.minecraft.advancements.Advancement;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.fml.common.eventhandler.Cancelable;
+
+/**
+ * This event is fired when a player gets an advancement.
+ *
+ * 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 class AdvancementEvent extends PlayerEvent
+{
+ private final Advancement advancement;
+
+ public AdvancementEvent(EntityPlayer player, Advancement advancement)
+ {
+ super(player);
+ this.advancement = advancement;
+ }
+
+ public Advancement getAdvancement()
+ {
+ return advancement;
+ }
+}
diff --git a/src/test/java/net/minecraftforge/debug/AdvancementEventTest.java b/src/test/java/net/minecraftforge/debug/AdvancementEventTest.java
new file mode 100644
index 0000000000..1eac88b7e0
--- /dev/null
+++ b/src/test/java/net/minecraftforge/debug/AdvancementEventTest.java
@@ -0,0 +1,36 @@
+package net.minecraftforge.debug;
+
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.event.entity.player.AdvancementEvent;
+import net.minecraftforge.fml.common.Mod;
+import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
+import org.apache.logging.log4j.Logger;
+
+@Mod(modid = AdvancementEventTest.MOD_ID, name = "AdvancementEvent test mod", version = "1.0.0", acceptableRemoteVersions = "*")
+public class AdvancementEventTest
+{
+ static final String MOD_ID = "advancement_event_test";
+ private static final boolean ENABLED = false;
+ private static Logger logger;
+
+ @Mod.EventHandler
+ public void preInit(FMLPreInitializationEvent event)
+ {
+ logger = event.getModLog();
+
+ if (ENABLED)
+ {
+ MinecraftForge.EVENT_BUS.register(AdvancementEventTest.class);
+ }
+ }
+
+ @SubscribeEvent
+ public static void onAdvancementEvent(AdvancementEvent event)
+ {
+ if (event.getAdvancement().getDisplay() != null && event.getAdvancement().getDisplay().shouldAnnounceToChat())
+ {
+ logger.info("{} got the {} advancement", event.getEntityPlayer().getDisplayNameString(), event.getAdvancement().getDisplayText().getUnformattedText());
+ }
+ }
+}