diff --git a/patches/minecraft/net/minecraft/world/storage/WorldInfo.java.patch b/patches/minecraft/net/minecraft/world/storage/WorldInfo.java.patch
index 0bb3fe94bd..1a1593901a 100644
--- a/patches/minecraft/net/minecraft/world/storage/WorldInfo.java.patch
+++ b/patches/minecraft/net/minecraft/world/storage/WorldInfo.java.patch
@@ -16,7 +16,15 @@
p_76064_1_.func_74772_a("RandomSeed", this.field_76100_a);
p_76064_1_.func_74778_a("generatorName", this.field_76098_b.func_77127_a());
p_76064_1_.func_74768_a("generatorVersion", this.field_76098_b.func_77131_c());
-@@ -807,6 +809,26 @@
+@@ -709,6 +711,7 @@
+
+ public void func_176144_a(EnumDifficulty p_176144_1_)
+ {
++ net.minecraftforge.common.ForgeHooks.onDifficultyChange(p_176144_1_, this.field_176158_z);
+ this.field_176158_z = p_176144_1_;
+ }
+
+@@ -807,6 +810,26 @@
});
}
diff --git a/src/main/java/net/minecraftforge/common/ForgeHooks.java b/src/main/java/net/minecraftforge/common/ForgeHooks.java
index 92c2ee9d32..4fa604936c 100644
--- a/src/main/java/net/minecraftforge/common/ForgeHooks.java
+++ b/src/main/java/net/minecraftforge/common/ForgeHooks.java
@@ -89,12 +89,14 @@ import net.minecraft.util.text.TextFormatting;
import net.minecraft.util.text.event.ClickEvent;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
+import net.minecraft.world.EnumDifficulty;
import net.minecraft.world.GameType;
import net.minecraft.world.storage.loot.LootEntry;
import net.minecraft.world.storage.loot.LootTable;
import net.minecraft.world.storage.loot.conditions.LootCondition;
import net.minecraftforge.common.util.BlockSnapshot;
import net.minecraftforge.event.AnvilUpdateEvent;
+import net.minecraftforge.event.DifficultyChangeEvent;
import net.minecraftforge.event.ForgeEventFactory;
import net.minecraftforge.event.ServerChatEvent;
import net.minecraftforge.event.entity.EntityTravelToDimensionEvent;
@@ -510,6 +512,11 @@ public class ForgeHooks
}
return false;
}
+
+ public static void onDifficultyChange(EnumDifficulty difficulty, EnumDifficulty oldDifficulty)
+ {
+ MinecraftForge.EVENT_BUS.post(new DifficultyChangeEvent(difficulty, oldDifficulty));
+ }
//Optifine Helper Functions u.u, these are here specifically for Optifine
//Note: When using Optifine, these methods are invoked using reflection, which
diff --git a/src/main/java/net/minecraftforge/event/DifficultyChangeEvent.java b/src/main/java/net/minecraftforge/event/DifficultyChangeEvent.java
new file mode 100644
index 0000000000..45e36cf5e3
--- /dev/null
+++ b/src/main/java/net/minecraftforge/event/DifficultyChangeEvent.java
@@ -0,0 +1,62 @@
+/*
+ * 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;
+
+import javax.annotation.Nonnull;
+
+import net.minecraft.world.EnumDifficulty;
+import net.minecraftforge.common.ForgeHooks;
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.fml.common.eventhandler.Cancelable;
+import net.minecraftforge.fml.common.eventhandler.Event;
+import net.minecraftforge.fml.common.eventhandler.Event.HasResult;
+
+/**
+ * DifficultyChangeEvent is fired when difficulty is changing.
+ *
+ * This event is fired via the {@link ForgeHooks#onDifficultyChange(EnumDifficulty, EnumDifficulty)}.
+ *
+ * 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 DifficultyChangeEvent extends Event
+{
+ private final EnumDifficulty difficulty;
+ private final EnumDifficulty oldDifficulty;
+
+ public DifficultyChangeEvent(EnumDifficulty difficulty, EnumDifficulty oldDifficulty)
+ {
+ this.difficulty = difficulty;
+ this.oldDifficulty = oldDifficulty;
+ }
+
+ public EnumDifficulty getDifficulty()
+ {
+ return difficulty;
+ }
+
+ public EnumDifficulty getOldDifficulty()
+ {
+ return oldDifficulty;
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/net/minecraftforge/test/DifficultyChangeEventTest.java b/src/test/java/net/minecraftforge/test/DifficultyChangeEventTest.java
new file mode 100644
index 0000000000..a19430d906
--- /dev/null
+++ b/src/test/java/net/minecraftforge/test/DifficultyChangeEventTest.java
@@ -0,0 +1,28 @@
+package net.minecraftforge.test;
+
+import net.minecraft.world.EnumDifficulty;
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.event.DifficultyChangeEvent;
+import net.minecraftforge.fml.common.Mod;
+import net.minecraftforge.fml.common.Mod.EventHandler;
+import net.minecraftforge.fml.common.event.FMLInitializationEvent;
+import net.minecraftforge.fml.common.eventhandler.Event.Result;
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
+
+@Mod(modid = "difficultychangeeventtest", name = "DifficultyChangeEventTest", version = "0.0.0")
+public class DifficultyChangeEventTest
+{
+ private static final boolean ENABLE = false;
+
+ @EventHandler
+ public void init(FMLInitializationEvent event)
+ {
+ if (ENABLE) MinecraftForge.EVENT_BUS.register(this);
+ }
+
+ @SubscribeEvent
+ public void onDifficultyChange(DifficultyChangeEvent event)
+ {
+ System.out.println("Difficulty changed from " + event.getOldDifficulty() + " to " + event.getDifficulty());
+ }
+}
\ No newline at end of file