From a61ad9ff4772d13fca0cfd2c6fd78ac4ace4d6cc Mon Sep 17 00:00:00 2001 From: Kitlith Date: Fri, 17 Jul 2020 14:33:17 -0700 Subject: [PATCH 1/3] Move ChunkWatchEvent firing to WorldEvents Add onDifficultyChange as well, not as certain about that one being in the right place. --- .../impl/event/world/WorldEvents.java | 19 +++++++++++++++++++ .../world/MixinThreadedAnvilChunkStorage.java | 6 +++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/patchwork-events-world/src/main/java/net/patchworkmc/impl/event/world/WorldEvents.java b/patchwork-events-world/src/main/java/net/patchworkmc/impl/event/world/WorldEvents.java index 1ee82ef6..4ea4cc1e 100644 --- a/patchwork-events-world/src/main/java/net/patchworkmc/impl/event/world/WorldEvents.java +++ b/patchwork-events-world/src/main/java/net/patchworkmc/impl/event/world/WorldEvents.java @@ -23,10 +23,16 @@ import java.util.List; import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.DifficultyChangeEvent; +import net.minecraftforge.event.world.ChunkWatchEvent; import net.minecraftforge.event.world.WorldEvent; import net.minecraft.entity.EntityCategory; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.Difficulty; import net.minecraft.world.IWorld; import net.minecraft.world.biome.Biome; import net.minecraft.world.level.LevelInfo; @@ -57,4 +63,17 @@ public static void onWorldUnload(IWorld world) { public static void onWorldSave(IWorld world) { MinecraftForge.EVENT_BUS.post(new WorldEvent.Save(world)); } + + // TODO: Is this actually a "world" event? + public static void onDifficultyChange(Difficulty difficulty, Difficulty oldDifficulty) { + MinecraftForge.EVENT_BUS.post(new DifficultyChangeEvent(difficulty, oldDifficulty)); + } + + public static void fireChunkWatch(boolean watch, ServerPlayerEntity entity, ChunkPos chunkpos, ServerWorld world) { + if (watch) { + MinecraftForge.EVENT_BUS.post(new ChunkWatchEvent.Watch(entity, chunkpos, world)); + } else { + throw new UnsupportedOperationException("Cannot Unwatch a chunk yet"); + } + } } diff --git a/patchwork-events-world/src/main/java/net/patchworkmc/mixin/event/world/MixinThreadedAnvilChunkStorage.java b/patchwork-events-world/src/main/java/net/patchworkmc/mixin/event/world/MixinThreadedAnvilChunkStorage.java index 90eabae8..8917ea2d 100644 --- a/patchwork-events-world/src/main/java/net/patchworkmc/mixin/event/world/MixinThreadedAnvilChunkStorage.java +++ b/patchwork-events-world/src/main/java/net/patchworkmc/mixin/event/world/MixinThreadedAnvilChunkStorage.java @@ -33,6 +33,8 @@ import net.minecraft.server.world.ThreadedAnvilChunkStorage; import net.minecraft.util.math.ChunkPos; +import net.patchworkmc.impl.event.world.WorldEvents; + @Mixin(ThreadedAnvilChunkStorage.class) public class MixinThreadedAnvilChunkStorage { @Shadow @@ -41,9 +43,7 @@ public class MixinThreadedAnvilChunkStorage { @Inject(method = "sendWatchPackets", at = @At("HEAD")) private void fireWatchEvents(ServerPlayerEntity player, ChunkPos pos, Packet[] packets, boolean withinMaxWatchDistance, boolean withinViewDistance, CallbackInfo callback) { if (withinViewDistance && !withinMaxWatchDistance) { - ChunkWatchEvent.Watch event = new ChunkWatchEvent.Watch(player, pos, world); - - MinecraftForge.EVENT_BUS.post(event); + WorldEvents.fireChunkWatch(true, player, pos, world); } } } From 2ed525601a860c73d75ca8829879bef034c6e382 Mon Sep 17 00:00:00 2001 From: Kitlith Date: Fri, 17 Jul 2020 14:42:00 -0700 Subject: [PATCH 2/3] Dispatch from ForgeHooks to WorldEvents --- patchwork-god-classes/build.gradle | 1 + .../net/minecraftforge/common/ForgeHooks.java | 33 +++++++++++++++++++ .../src/main/resources/fabric.mod.json | 3 +- 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/patchwork-god-classes/build.gradle b/patchwork-god-classes/build.gradle index 6768d533..6c9cf972 100644 --- a/patchwork-god-classes/build.gradle +++ b/patchwork-god-classes/build.gradle @@ -4,4 +4,5 @@ version = getSubprojectVersion(project, "0.1.0") dependencies { compile project(path: ':patchwork-fml', configuration: 'dev') compile project(path: ':patchwork-events-lifecycle', configuration: 'dev') + compile project(path: ':patchwork-events-world', configuration: 'dev') } diff --git a/patchwork-god-classes/src/main/java/net/minecraftforge/common/ForgeHooks.java b/patchwork-god-classes/src/main/java/net/minecraftforge/common/ForgeHooks.java index ed4d8220..ff7b73ca 100644 --- a/patchwork-god-classes/src/main/java/net/minecraftforge/common/ForgeHooks.java +++ b/patchwork-god-classes/src/main/java/net/minecraftforge/common/ForgeHooks.java @@ -19,9 +19,42 @@ package net.minecraftforge.common; +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.entity.EntityCategory; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.Difficulty; +import net.minecraft.world.IWorld; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.level.LevelInfo; + +import net.patchworkmc.impl.event.world.WorldEvents; + /* * Note: this class is intended for mod use only, to dispatch to the implementations kept in their own modules. * Do not keep implementation details here, methods should be thin wrappers around methods in other modules. */ public class ForgeHooks { + public static boolean onCreateWorldSpawn(World world, LevelInfo settings) { + return WorldEvents.onCreateWorldSpawn(world, settings); + } + + @Nullable + public static List getPotentialSpawns(IWorld world, EntityCategory type, BlockPos pos, List oldList) { + return WorldEvents.getPotentialSpawns(world, type, pos, oldList); + } + + public static void onDifficultyChange(Difficulty difficulty, Difficulty oldDifficulty) { + WorldEvents.onDifficultyChange(difficulty, oldDifficulty); + } + + public static void fireChunkWatch(boolean watch, ServerPlayerEntity entity, ChunkPos chunkpos, ServerWorld world) { + WorldEvents.fireChunkWatch(watch, entity, chunkpos, world); + } } diff --git a/patchwork-god-classes/src/main/resources/fabric.mod.json b/patchwork-god-classes/src/main/resources/fabric.mod.json index 7c0f2121..4fd1b350 100644 --- a/patchwork-god-classes/src/main/resources/fabric.mod.json +++ b/patchwork-god-classes/src/main/resources/fabric.mod.json @@ -17,7 +17,8 @@ "depends": { "fabricloader": ">=0.8.4", "patchwork-fml": "*", - "patchwork-events-lifecycle": "*" + "patchwork-events-lifecycle": "*", + "patchwork-events-world": "*" }, "custom": { "modmenu:api": true, From aafd620d700c5c0a6dead3f9f75bec941fad84e6 Mon Sep 17 00:00:00 2001 From: Kitlith Date: Fri, 17 Jul 2020 15:03:21 -0700 Subject: [PATCH 3/3] fixup! checkstyle. --- .../mixin/event/world/MixinThreadedAnvilChunkStorage.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/patchwork-events-world/src/main/java/net/patchworkmc/mixin/event/world/MixinThreadedAnvilChunkStorage.java b/patchwork-events-world/src/main/java/net/patchworkmc/mixin/event/world/MixinThreadedAnvilChunkStorage.java index 8917ea2d..4141d95c 100644 --- a/patchwork-events-world/src/main/java/net/patchworkmc/mixin/event/world/MixinThreadedAnvilChunkStorage.java +++ b/patchwork-events-world/src/main/java/net/patchworkmc/mixin/event/world/MixinThreadedAnvilChunkStorage.java @@ -19,8 +19,6 @@ package net.patchworkmc.mixin.event.world; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.world.ChunkWatchEvent; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At;