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