From 2f192460271edfa3fd747fdf1667c4c502dfffdf Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Tue, 8 Sep 2026 12:46:17 +0800 Subject: [PATCH 1/2] ref: re-construct event module --- .../java/cam72cam/mod/event/ClientEvents.java | 217 ++++-------------- .../java/cam72cam/mod/event/CommonEvents.java | 111 +-------- src/main/java/cam72cam/mod/event/Event.java | 10 +- .../event/platform/ClientEventListener.java | 180 +++++++++++++++ .../event/platform/CommonEventListener.java | 99 ++++++++ src/main/java/cam72cam/mod/input/Mouse.java | 5 +- .../java/cam72cam/mod/render/BlockRender.java | 3 +- .../cam72cam/mod/render/EntityRenderer.java | 6 +- .../cam72cam/mod/render/GlobalRender.java | 8 +- .../java/cam72cam/mod/render/ItemRender.java | 11 +- 10 files changed, 353 insertions(+), 297 deletions(-) create mode 100644 src/main/java/cam72cam/mod/event/platform/ClientEventListener.java create mode 100644 src/main/java/cam72cam/mod/event/platform/CommonEventListener.java diff --git a/src/main/java/cam72cam/mod/event/ClientEvents.java b/src/main/java/cam72cam/mod/event/ClientEvents.java index bf8480080..66b903575 100644 --- a/src/main/java/cam72cam/mod/event/ClientEvents.java +++ b/src/main/java/cam72cam/mod/event/ClientEvents.java @@ -1,58 +1,42 @@ package cam72cam.mod.event; -import cam72cam.mod.ModCore; import cam72cam.mod.entity.EntityRegistry; import cam72cam.mod.entity.Player; -import cam72cam.mod.gui.helpers.GUIHelpers; import cam72cam.mod.input.Mouse; -import cam72cam.mod.math.Vec3d; import cam72cam.mod.render.EntityRenderer; import cam72cam.mod.render.GlobalRender; import cam72cam.mod.render.opengl.CustomTexture; import cam72cam.mod.render.opengl.VBO; import cam72cam.mod.world.World; -import net.minecraft.client.Minecraft; -import net.minecraft.client.multiplayer.WorldClient; -import net.minecraftforge.client.event.*; -import net.minecraftforge.client.event.sound.SoundLoadEvent; -import net.minecraftforge.event.RegistryEvent; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.common.gameevent.TickEvent; -import net.minecraftforge.fml.common.registry.EntityEntry; -import net.minecraftforge.fml.relauncher.Side; +import org.jetbrains.annotations.ApiStatus; -import java.util.function.Consumer; import java.util.function.Function; -/** Registry of events that fire off client side only. Do not use directly! */ +/** Registry of events that are client side only. */ public class ClientEvents { - - private static net.minecraft.world.World clientLast = null; - private static void registerClientEvents() { - EntityRegistry.registerClientEvents(); - EntityRenderer.registerClientEvents(); - Mouse.registerClientEvents(); - GlobalRender.registerClientEvents(); - World.registerClientEvnets(); - - VBO.registerClientEvents(); - CustomTexture.registerClientEvents(); - - // Forge does not fire world unloaded client side - TICK.subscribe(() -> { - WorldClient mcw = Minecraft.getMinecraft().world; - if (clientLast != mcw && clientLast != null) { - CommonEvents.World.UNLOAD.execute(worldConsumer -> worldConsumer.accept(clientLast)); - } - clientLast = mcw; - }); - } - - /** Fires off a client resource reload event (UMC only). Do not use directly */ - public static void fireReload() { - RELOAD.execute(Runnable::run); - } + /** Fired at client world ticking */ + public static final Event TICK = new Event<>(); + /** + * Fired at mouse scrolling
+ * The double inputted indicates the scrolling direction, where 1.0 is scrolling upwards
+ * The event can be canceled by returning {@code false} in the handler + */ + public static final Event> SCROLL = new Event<>(); + /** + * Fired at mouse clicking
+ * The Player.Hand inputted indicates the clicking button, where {@link Player.Hand#PRIMARY} is main button + * and {@link Player.Hand#SECONDARY} is others
+ * It's recommended to use with helpers in {@link Mouse}, like {@link Mouse#isLMBDown()}, to check the actual button
+ * The event can be canceled by returning {@code false} in the handler + */ + public static final Event> CLICK = new Event<>(); + /** + * Fired at mouse events in GUIs
+ * The event can be canceled by returning {@code false} in the handler + */ + public static final Event> MOUSE_GUI = new Event<>(); + /** Fired at client resource reloads */ + public static final Event RELOAD = new Event<>(); public enum MouseAction { CLICK, @@ -77,144 +61,21 @@ public MouseGuiEvent(MouseAction action, int x, int y, int button, double scroll } } - public static final Event TICK = new Event<>(); - public static final Event> DRAG = new Event<>(); - public static final Event> SCROLL = new Event<>(); - public static final Event> CLICK = new Event<>(); - public static final Event> MOUSE_GUI = new Event<>(); - public static final Event MODEL_CREATE = new Event<>(); - public static final Event> MODEL_BAKE = new Event<>(); - public static final Event TEXTURE_STITCH = new Event<>(); - public static final Event REGISTER_ENTITY = new Event<>(); - public static final Event> RENDER_DEBUG = new Event<>(); - public static final Event> RENDER_OVERLAY = new Event<>(); - public static final Event> RENDER_MOUSEOVER = new Event<>(); - public static final Event> SOUND_LOAD = new Event<>(); - public static final Event RELOAD = new Event<>(); - - @Mod.EventBusSubscriber(value = Side.CLIENT, modid = ModCore.MODID) - public static class ClientEventBus { - private static Vec3d dragPos = null; - - static { - registerClientEvents(); - } - - @SubscribeEvent - public static void onClientTick(TickEvent.ClientTickEvent event) { - if (event.phase == TickEvent.Phase.START) { - TICK.execute(Runnable::run); - } - } - - @SubscribeEvent - public static void onGuiClick(GuiScreenEvent.MouseInputEvent.Pre event) { - int x = org.lwjgl.input.Mouse.getEventX() * GUIHelpers.getScreenWidth() / Minecraft.getMinecraft().displayWidth; - int y = org.lwjgl.input.Mouse.getEventY() * GUIHelpers.getScreenHeight() / Minecraft.getMinecraft().displayHeight; - int btn = org.lwjgl.input.Mouse.getEventButton(); - MouseAction action; - if (org.lwjgl.input.Mouse.getEventButtonState()) { - // click - action = MouseAction.CLICK; - } else if (btn != -1) { - // release - action = MouseAction.RELEASE; - } else { - // move - action = MouseAction.MOVE; - } - - double scroll = Math.signum(org.lwjgl.input.Mouse.getEventDWheel()); - if (scroll != 0) { - action = MouseAction.SCROLL; - } - - MouseGuiEvent mevt = new MouseGuiEvent(action, x, GUIHelpers.getScreenHeight() - y, btn, scroll); - if (!MOUSE_GUI.executeCancellable(h -> h.apply(mevt))) { - event.setCanceled(true); - } - } - - @SubscribeEvent - public static void onClick(MouseEvent event) { - int attackID = Minecraft.getMinecraft().gameSettings.keyBindAttack.getKeyCode() + 100; - int useID = Minecraft.getMinecraft().gameSettings.keyBindUseItem.getKeyCode() + 100; - - if (event.getButton() == -1 && event.getDwheel() != 0) { - if (!SCROLL.executeCancellable(x -> x.apply(Math.signum((double)event.getDwheel())))) { - event.setCanceled(true); - return; - } - return; - } - - if ((event.getButton() == attackID || event.getButton() == useID)) { - if (event.isButtonstate()) { - Player.Hand button = attackID == event.getButton() ? Player.Hand.SECONDARY : Player.Hand.PRIMARY; - if (!DRAG.executeCancellable(x -> x.apply(button))) { - event.setCanceled(true); - dragPos = new Vec3d(0, 0, 0); - return; - } - if (!CLICK.executeCancellable(x -> x.apply(button))) { - event.setCanceled(true); - } - } else { - dragPos = null; - } - } - } - - @SubscribeEvent - public static void onFrame(TickEvent.RenderTickEvent event) { - if (dragPos != null) { - //Minecraft.getMinecraft().mouseHelper.mouseXYChange(); - dragPos = dragPos.add(Minecraft.getMinecraft().mouseHelper.deltaX, Minecraft.getMinecraft().mouseHelper.deltaY, 0); - } - } - - public static Vec3d getDragPos() { - return dragPos; - } - - @SubscribeEvent - public static void registerModels(ModelRegistryEvent event) { - MODEL_CREATE.execute(Runnable::run); - } - - @SubscribeEvent - public static void onModelBakeEvent(ModelBakeEvent event) { - MODEL_BAKE.execute(x -> x.accept(event)); - } - - @SubscribeEvent - public static void onTextureStitchEvent(TextureStitchEvent.Pre event) { - TEXTURE_STITCH.execute(Runnable::run); - } - - @SubscribeEvent - public static void registerEntities(RegistryEvent.Register event) { - REGISTER_ENTITY.execute(Runnable::run); - } - - @SubscribeEvent - public static void onDebugRender(RenderGameOverlayEvent.Text event) { - RENDER_DEBUG.execute(x -> x.accept(event)); - } - - @SubscribeEvent - public static void onOverlayEvent(RenderGameOverlayEvent.Pre event) { - RENDER_OVERLAY.execute(x -> x.accept(event)); - } + @ApiStatus.Internal + public static void registerClientEvents() { + EntityRegistry.registerClientEvents(); + EntityRenderer.registerClientEvents(); + Mouse.registerClientEvents(); + GlobalRender.registerClientEvents(); + World.registerClientEvnets(); - @SubscribeEvent - public static void onRenderMouseover(DrawBlockHighlightEvent event) { - RENDER_MOUSEOVER.execute(x -> x.accept(event.getPartialTicks())); - } + VBO.registerClientEvents(); + CustomTexture.registerClientEvents(); + } - @SubscribeEvent - public static void onSoundLoad(SoundLoadEvent event) { - SOUND_LOAD.execute(x -> x.accept(event)); - } + /** Manually fires off a fake client resource reload event for UMC mods. */ + @ApiStatus.Internal + public static void fireReload() { + RELOAD.execute(Runnable::run); } } diff --git a/src/main/java/cam72cam/mod/event/CommonEvents.java b/src/main/java/cam72cam/mod/event/CommonEvents.java index 05ec1725a..67864244f 100644 --- a/src/main/java/cam72cam/mod/event/CommonEvents.java +++ b/src/main/java/cam72cam/mod/event/CommonEvents.java @@ -1,30 +1,14 @@ package cam72cam.mod.event; -import cam72cam.mod.ModCore; -import cam72cam.mod.entity.ModdedEntity; -import cam72cam.mod.world.ChunkPos; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.util.math.BlockPos; -import net.minecraftforge.event.RegistryEvent; -import net.minecraftforge.event.entity.EntityEvent; -import net.minecraftforge.event.entity.EntityJoinWorldEvent; -import net.minecraftforge.event.world.BlockEvent; -import net.minecraftforge.event.world.WorldEvent; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.common.gameevent.TickEvent; -import net.minecraftforge.fml.common.registry.EntityEntry; +import cam72cam.mod.event.platform.CommonEventListener; +import org.jetbrains.annotations.ApiStatus; import java.util.function.Consumer; -/** Registry of events that fire off on both client and server. Do not use directly! */ +/** Registry of events that fire both client and server. */ public class CommonEvents { - private static void registerEvents() { - cam72cam.mod.world.World.registerEvents(); - cam72cam.mod.entity.EntityRegistry.registerEvents(); - } + @ApiStatus.Internal public static final class World { public static final Event> LOAD = new Event<>(); public static final Event> UNLOAD = new Event<>(); @@ -33,7 +17,8 @@ public static final class World { public static final class Block { public static final Event REGISTER = new Event<>(); - public static final Event BROKEN = new Event<>(); + @ApiStatus.Internal + public static final Event BROKEN = new Event<>(); } public static final class Item { @@ -46,85 +31,13 @@ public static final class Recipe { public static final class Entity { public static final Event REGISTER = new Event<>(); - public static final Event JOIN = new Event<>(); + @ApiStatus.Internal + public static final Event JOIN = new Event<>(); } - @Mod.EventBusSubscriber(modid = ModCore.MODID) - public static final class EventBus { - static { - registerEvents(); - } - - // World - @SubscribeEvent - public static void onWorldLoad(WorldEvent.Load event) { - World.LOAD.execute(x -> x.accept(event.getWorld())); - } - - @SubscribeEvent - public static void onWorldUnload(WorldEvent.Unload event) { - World.UNLOAD.execute(x -> x.accept(event.getWorld())); - } - - @SubscribeEvent - public static void onWorldTick(TickEvent.WorldTickEvent event) { - if (event.phase == TickEvent.Phase.START) { - World.TICK.execute(x -> x.accept(event.world)); - } - } - - @SubscribeEvent - public static void registerBlocks(RegistryEvent.Register event) { - Block.REGISTER.execute(Runnable::run); - } - - @FunctionalInterface - public interface BlockBrokenEvent { - boolean onBroken(net.minecraft.world.World world, BlockPos pos, EntityPlayer player); - } - @SubscribeEvent - public static void onBlockBreakEvent(BlockEvent.BreakEvent event) { - if (!Block.BROKEN.executeCancellable(x -> x.onBroken(event.getWorld(), event.getPos(), event.getPlayer()))) { - event.setCanceled(true); - } - } - - @SubscribeEvent - public static void registerItems(RegistryEvent.Register event) { - Item.REGISTER.execute(Runnable::run); - } - - @SubscribeEvent - public static void registerRecipes(RegistryEvent.Register event) { - Recipe.REGISTER.execute(Runnable::run); - } - - @SubscribeEvent - public static void registerEntities(RegistryEvent.Register event) { - Entity.REGISTER.execute(Runnable::run); - } - - @FunctionalInterface - public interface EntityJoinEvent { - boolean onJoin(net.minecraft.world.World world, net.minecraft.entity.Entity entity); - } - @SubscribeEvent - public static void onEntityJoin(EntityJoinWorldEvent event) { - if (!Entity.JOIN.executeCancellable(x -> x.onJoin(event.getWorld(), event.getEntity()))) { - event.setCanceled(true); - } - } - - @SubscribeEvent - public static void onEntityTransfer(EntityEvent.EnteringChunk event) { - if (event.getEntity() instanceof ModdedEntity) { - ModdedEntity modded = (ModdedEntity) event.getEntity(); - cam72cam.mod.world.World.get(modded.world).tracker - .move(modded, - //Don't calculate Y in 1.16- as no corresponding event posted - ChunkPos.asLong(event.getOldChunkX(), 0, event.getOldChunkZ()), - ChunkPos.asLong(event.getNewChunkX(), 0, event.getNewChunkZ())); - } - } + @ApiStatus.Internal + public static void registerEvents() { + cam72cam.mod.world.World.registerEvents(); + cam72cam.mod.entity.EntityRegistry.registerEvents(); } } diff --git a/src/main/java/cam72cam/mod/event/Event.java b/src/main/java/cam72cam/mod/event/Event.java index a3ff02e06..31028ec29 100644 --- a/src/main/java/cam72cam/mod/event/Event.java +++ b/src/main/java/cam72cam/mod/event/Event.java @@ -22,14 +22,14 @@ public void post(Runnable callback) { post.add(callback); } - void execute(Consumer handler) { + public void execute(Consumer handler) { pre.forEach(Runnable::run); callbacks.forEach(handler); post.forEach(Runnable::run); } - boolean executeCancellable(Function handler) { + public boolean executeCancellable(Function handler) { pre.forEach(Runnable::run); for (T callback : callbacks) { if (!handler.apply(callback)) { @@ -43,14 +43,14 @@ boolean executeCancellable(Function handler) { /** * For those events fired multiple times and should be handled respectively */ - static class TransientEvent extends Event { + public static class TransientEvent extends Event { @Override - void execute(Consumer handler) { + public void execute(Consumer handler) { super.execute(handler); callbacks.clear(); } - boolean executeCancellable(Function handler) { + public boolean executeCancellable(Function handler) { boolean result = super.executeCancellable(handler); callbacks.clear(); return result; diff --git a/src/main/java/cam72cam/mod/event/platform/ClientEventListener.java b/src/main/java/cam72cam/mod/event/platform/ClientEventListener.java new file mode 100644 index 000000000..f56dab13c --- /dev/null +++ b/src/main/java/cam72cam/mod/event/platform/ClientEventListener.java @@ -0,0 +1,180 @@ +package cam72cam.mod.event.platform; + +import cam72cam.mod.ModCore; +import cam72cam.mod.entity.Player; +import cam72cam.mod.event.ClientEvents; +import cam72cam.mod.event.CommonEvents; +import cam72cam.mod.event.Event; +import cam72cam.mod.gui.helpers.GUIHelpers; +import cam72cam.mod.input.Mouse; +import cam72cam.mod.math.Vec3d; +import cam72cam.mod.render.GlobalRender; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraftforge.client.event.*; +import net.minecraftforge.client.event.sound.SoundLoadEvent; +import net.minecraftforge.event.RegistryEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent; +import net.minecraftforge.fml.common.registry.EntityEntry; +import net.minecraftforge.fml.relauncher.Side; +import org.jetbrains.annotations.ApiStatus; + +import java.util.function.Consumer; +import java.util.function.Function; + +import static cam72cam.mod.event.ClientEvents.*; + +/** + * Forge event subscriber + */ +@ApiStatus.Internal +@Mod.EventBusSubscriber(value = Side.CLIENT, modid = ModCore.MODID) +public class ClientEventListener { + public static final Event MODEL_CREATE = new Event<>(); + public static final Event> MODEL_BAKE = new Event<>(); + public static final Event TEXTURE_STITCH = new Event<>(); + public static final Event REGISTER_ENTITY = new Event<>(); + public static final Event> RENDER_DEBUG = new Event<>(); + public static final Event> SOUND_LOAD = new Event<>(); + /** Use {@link GlobalRender#registerItemMouseover} */ + public static final Event> RENDER_MOUSEOVER = new Event<>(); + /** Use {@link GlobalRender#registerOverlay} */ + public static final Event> RENDER_OVERLAY = new Event<>(); + /** Use {@link Mouse#registerDragHandler} */ + public static final Event> DRAG = new Event<>(); + + public static net.minecraft.world.World clientLast = null; + public static Vec3d dragPos = null; + + static { + ClientEvents.registerClientEvents(); + + // Forge does not fire world unloaded client side + ClientEvents.TICK.subscribe(() -> { + WorldClient currentWorld = Minecraft.getMinecraft().world; + if (clientLast != currentWorld && clientLast != null) { + CommonEvents.World.UNLOAD.execute(worldConsumer -> worldConsumer.accept(clientLast)); + } + clientLast = currentWorld; + }); + } + + public static Vec3d getDragPos() { + return dragPos; + } + + @SubscribeEvent + public static void onClientTick(TickEvent.ClientTickEvent event) { + if (event.phase == TickEvent.Phase.START) { + TICK.execute(Runnable::run); + } + } + + @SubscribeEvent + public static void onGuiClick(GuiScreenEvent.MouseInputEvent.Pre event) { + int x = org.lwjgl.input.Mouse.getEventX() * GUIHelpers.getScreenWidth() / Minecraft.getMinecraft().displayWidth; + int y = org.lwjgl.input.Mouse.getEventY() * GUIHelpers.getScreenHeight() / Minecraft.getMinecraft().displayHeight; + int btn = org.lwjgl.input.Mouse.getEventButton(); + ClientEvents.MouseAction action; + if (org.lwjgl.input.Mouse.getEventButtonState()) { + // click + action = ClientEvents.MouseAction.CLICK; + } else if (btn != -1) { + // release + action = ClientEvents.MouseAction.RELEASE; + } else { + // move + action = ClientEvents.MouseAction.MOVE; + } + + double scroll = Math.signum(org.lwjgl.input.Mouse.getEventDWheel()); + if (scroll != 0) { + action = ClientEvents.MouseAction.SCROLL; + } + + ClientEvents.MouseGuiEvent mevt = new ClientEvents.MouseGuiEvent(action, x, GUIHelpers.getScreenHeight() - y, btn, scroll); + if (!MOUSE_GUI.executeCancellable(h -> h.apply(mevt))) { + event.setCanceled(true); + } + } + + @SubscribeEvent + public static void onClick(MouseEvent event) { + int attackID = Minecraft.getMinecraft().gameSettings.keyBindAttack.getKeyCode() + 100; + int useID = Minecraft.getMinecraft().gameSettings.keyBindUseItem.getKeyCode() + 100; + + if (event.getButton() == -1 && event.getDwheel() != 0) { + if (!SCROLL.executeCancellable(x -> x.apply(Math.signum((double)event.getDwheel())))) { + event.setCanceled(true); + return; + } + return; + } + + if ((event.getButton() == attackID || event.getButton() == useID)) { + if (event.isButtonstate()) { + Player.Hand button = attackID == event.getButton() ? Player.Hand.SECONDARY : Player.Hand.PRIMARY; + if (!DRAG.executeCancellable(x -> x.apply(button))) { + event.setCanceled(true); + dragPos = new Vec3d(0, 0, 0); + return; + } + if (!CLICK.executeCancellable(x -> x.apply(button))) { + event.setCanceled(true); + } + } else { + dragPos = null; + } + } + } + + @SubscribeEvent + public static void onFrame(TickEvent.RenderTickEvent event) { + if (dragPos != null) { + //Minecraft.getMinecraft().mouseHelper.mouseXYChange(); + dragPos = dragPos.add(Minecraft.getMinecraft().mouseHelper.deltaX, Minecraft.getMinecraft().mouseHelper.deltaY, 0); + } + } + + @SubscribeEvent + public static void registerModels(ModelRegistryEvent event) { + MODEL_CREATE.execute(Runnable::run); + } + + @SubscribeEvent + public static void onModelBakeEvent(ModelBakeEvent event) { + MODEL_BAKE.execute(x -> x.accept(event)); + } + + @SubscribeEvent + public static void onTextureStitchEvent(TextureStitchEvent.Pre event) { + TEXTURE_STITCH.execute(Runnable::run); + } + + @SubscribeEvent + public static void registerEntities(RegistryEvent.Register event) { + REGISTER_ENTITY.execute(Runnable::run); + } + + @SubscribeEvent + public static void onDebugRender(RenderGameOverlayEvent.Text event) { + RENDER_DEBUG.execute(x -> x.accept(event)); + } + + @SubscribeEvent + public static void onOverlayEvent(RenderGameOverlayEvent.Pre event) { + RENDER_OVERLAY.execute(x -> x.accept(event)); + } + + @SubscribeEvent + public static void onRenderMouseover(DrawBlockHighlightEvent event) { + RENDER_MOUSEOVER.execute(x -> x.accept(event.getPartialTicks())); + } + + @SubscribeEvent + public static void onSoundLoad(SoundLoadEvent event) { + SOUND_LOAD.execute(x -> x.accept(event)); + } +} diff --git a/src/main/java/cam72cam/mod/event/platform/CommonEventListener.java b/src/main/java/cam72cam/mod/event/platform/CommonEventListener.java new file mode 100644 index 000000000..f4e0e326d --- /dev/null +++ b/src/main/java/cam72cam/mod/event/platform/CommonEventListener.java @@ -0,0 +1,99 @@ +package cam72cam.mod.event.platform; + + +import cam72cam.mod.ModCore; +import cam72cam.mod.entity.ModdedEntity; +import cam72cam.mod.event.CommonEvents; +import cam72cam.mod.world.ChunkPos; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.event.RegistryEvent; +import net.minecraftforge.event.entity.EntityEvent; +import net.minecraftforge.event.entity.EntityJoinWorldEvent; +import net.minecraftforge.event.world.BlockEvent; +import net.minecraftforge.event.world.WorldEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent; +import net.minecraftforge.fml.common.registry.EntityEntry; + +@Mod.EventBusSubscriber(modid = ModCore.MODID) +public class CommonEventListener { + static { + CommonEvents.registerEvents(); + } + + // World + @SubscribeEvent + public static void onWorldLoad(WorldEvent.Load event) { + CommonEvents.World.LOAD.execute(x -> x.accept(event.getWorld())); + } + + @SubscribeEvent + public static void onWorldUnload(WorldEvent.Unload event) { + CommonEvents.World.UNLOAD.execute(x -> x.accept(event.getWorld())); + } + + @SubscribeEvent + public static void onWorldTick(TickEvent.WorldTickEvent event) { + if (event.phase == TickEvent.Phase.START) { + CommonEvents.World.TICK.execute(x -> x.accept(event.world)); + } + } + + @SubscribeEvent + public static void registerBlocks(RegistryEvent.Register event) { + CommonEvents.Block.REGISTER.execute(Runnable::run); + } + + @SubscribeEvent + public static void onBlockBreakEvent(BlockEvent.BreakEvent event) { + if (!CommonEvents.Block.BROKEN.executeCancellable(x -> x.onBroken(event.getWorld(), event.getPos(), event.getPlayer()))) { + event.setCanceled(true); + } + } + + @SubscribeEvent + public static void registerItems(RegistryEvent.Register event) { + CommonEvents.Item.REGISTER.execute(Runnable::run); + } + + @SubscribeEvent + public static void registerRecipes(RegistryEvent.Register event) { + CommonEvents.Recipe.REGISTER.execute(Runnable::run); + } + + @SubscribeEvent + public static void registerEntities(RegistryEvent.Register event) { + CommonEvents.Entity.REGISTER.execute(Runnable::run); + } + @SubscribeEvent + public static void onEntityJoin(EntityJoinWorldEvent event) { + if (!CommonEvents.Entity.JOIN.executeCancellable(x -> x.onJoin(event.getWorld(), event.getEntity()))) { + event.setCanceled(true); + } + } + + @SubscribeEvent + public static void onEntityTransfer(EntityEvent.EnteringChunk event) { + if (event.getEntity() instanceof ModdedEntity) { + ModdedEntity modded = (ModdedEntity) event.getEntity(); + cam72cam.mod.world.World.get(modded.world).tracker + .move(modded, + //Don't calculate Y in 1.16- as no corresponding event posted + ChunkPos.asLong(event.getOldChunkX(), 0, event.getOldChunkZ()), + ChunkPos.asLong(event.getNewChunkX(), 0, event.getNewChunkZ())); + } + } + + @FunctionalInterface + public interface BlockBrokenEvent { + boolean onBroken(net.minecraft.world.World world, BlockPos pos, EntityPlayer player); + } + + @FunctionalInterface + public interface EntityJoinEvent { + boolean onJoin(net.minecraft.world.World world, net.minecraft.entity.Entity entity); + } +} diff --git a/src/main/java/cam72cam/mod/input/Mouse.java b/src/main/java/cam72cam/mod/input/Mouse.java index d2d636434..0323aab5d 100644 --- a/src/main/java/cam72cam/mod/input/Mouse.java +++ b/src/main/java/cam72cam/mod/input/Mouse.java @@ -6,6 +6,7 @@ import cam72cam.mod.entity.Player; import cam72cam.mod.entity.custom.IClickable; import cam72cam.mod.event.ClientEvents; +import cam72cam.mod.event.platform.ClientEventListener; import cam72cam.mod.item.ClickResult; import cam72cam.mod.math.Vec3d; import cam72cam.mod.net.Packet; @@ -46,7 +47,7 @@ public static boolean isMMBDown() { * and returns a boolean indicating whether the event should be passed down or not */ public static void registerDragHandler(Function handler) { - ClientEvents.DRAG.subscribe(handler); + ClientEventListener.DRAG.subscribe(handler); } /** @@ -55,7 +56,7 @@ public static void registerDragHandler(Function handler) { * @return the screen space mouse position from the start point of dragging, or {@code null} if the mouse is not pressed. */ public static Vec3d getDrag() { - return ClientEvents.ClientEventBus.getDragPos(); + return ClientEventListener.getDragPos(); } /** diff --git a/src/main/java/cam72cam/mod/render/BlockRender.java b/src/main/java/cam72cam/mod/render/BlockRender.java index b6128785d..6743dea8a 100644 --- a/src/main/java/cam72cam/mod/render/BlockRender.java +++ b/src/main/java/cam72cam/mod/render/BlockRender.java @@ -5,6 +5,7 @@ import cam72cam.mod.block.BlockTypeEntity; import cam72cam.mod.block.tile.TileEntity; import cam72cam.mod.event.ClientEvents; +import cam72cam.mod.event.platform.ClientEventListener; import cam72cam.mod.render.opengl.RenderContext; import cam72cam.mod.render.opengl.RenderState; import net.minecraft.block.material.Material; @@ -111,7 +112,7 @@ public static void register(BlockType block, Function worldIn != null && pos != null ? BiomeColorHelper.getGrassColorAtPos(worldIn, pos) : ColorizerGrass.getGrassColor(0.5D, 1.0D), block.internal); }); - ClientEvents.MODEL_BAKE.subscribe(event -> { + ClientEventListener.MODEL_BAKE.subscribe(event -> { event.getModelRegistry().putObject(new ModelResourceLocation(block.internal.getRegistryName(), ""), new IBakedModel() { @Override public List getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand) { diff --git a/src/main/java/cam72cam/mod/render/EntityRenderer.java b/src/main/java/cam72cam/mod/render/EntityRenderer.java index 03a2f6f2c..dc0a5a216 100644 --- a/src/main/java/cam72cam/mod/render/EntityRenderer.java +++ b/src/main/java/cam72cam/mod/render/EntityRenderer.java @@ -4,7 +4,7 @@ import cam72cam.mod.entity.Entity; import cam72cam.mod.entity.ModdedEntity; import cam72cam.mod.entity.SeatEntity; -import cam72cam.mod.event.ClientEvents; +import cam72cam.mod.event.platform.ClientEventListener; import cam72cam.mod.math.Vec3d; import cam72cam.mod.render.opengl.RenderContext; import cam72cam.mod.render.opengl.RenderState; @@ -32,10 +32,10 @@ public class EntityRenderer extends Render { public static void registerClientEvents() { // Hook in our entity renderer which will dispatch to the IEntityRenderers - ClientEvents.REGISTER_ENTITY.subscribe(() -> RenderingRegistry.registerEntityRenderingHandler(ModdedEntity.class, EntityRenderer::new)); + ClientEventListener.REGISTER_ENTITY.subscribe(() -> RenderingRegistry.registerEntityRenderingHandler(ModdedEntity.class, EntityRenderer::new)); // Don't render seat entities - ClientEvents.REGISTER_ENTITY.subscribe(() -> RenderingRegistry.registerEntityRenderingHandler(SeatEntity.class, manager -> new Render(manager) { + ClientEventListener.REGISTER_ENTITY.subscribe(() -> RenderingRegistry.registerEntityRenderingHandler(SeatEntity.class, manager -> new Render(manager) { @Nullable @Override protected ResourceLocation getEntityTexture(SeatEntity entity) { diff --git a/src/main/java/cam72cam/mod/render/GlobalRender.java b/src/main/java/cam72cam/mod/render/GlobalRender.java index 865bbe960..6676f6a33 100644 --- a/src/main/java/cam72cam/mod/render/GlobalRender.java +++ b/src/main/java/cam72cam/mod/render/GlobalRender.java @@ -2,7 +2,7 @@ import cam72cam.mod.MinecraftClient; import cam72cam.mod.entity.Player; -import cam72cam.mod.event.ClientEvents; +import cam72cam.mod.event.platform.ClientEventListener; import cam72cam.mod.item.CustomItem; import cam72cam.mod.item.ItemStack; import cam72cam.mod.math.Vec3d; @@ -30,7 +30,7 @@ public class GlobalRender { /** Internal, hooked into event system directly */ public static void registerClientEvents() { // Nice to have GPU info in F3 - ClientEvents.RENDER_DEBUG.subscribe(event -> { + ClientEventListener.RENDER_DEBUG.subscribe(event -> { if (Minecraft.getMinecraft().gameSettings.showDebugInfo && GPUInfo.hasGPUInfo()) { int i; for (i = 0; i < event.getRight().size(); i++) { @@ -51,7 +51,7 @@ public static void registerRender(RenderFunction func) { /** Register a function that is called (with partial ticks) during the UI render phase */ public static void registerOverlay(RenderFunction func) { - ClientEvents.RENDER_OVERLAY.subscribe(event -> { + ClientEventListener.RENDER_OVERLAY.subscribe(event -> { if (event.getType() == RenderGameOverlayEvent.ElementType.ALL) { func.render(new RenderState().stage(RenderContext.Stage.GUI), event.getPartialTicks()); } @@ -60,7 +60,7 @@ public static void registerOverlay(RenderFunction func) { /** Register a function that is called to render during the mouse over phase (only if a block is moused over) */ public static void registerItemMouseover(CustomItem item, MouseoverEvent fn) { - ClientEvents.RENDER_MOUSEOVER.subscribe(partialTicks -> { + ClientEventListener.RENDER_MOUSEOVER.subscribe(partialTicks -> { if (MinecraftClient.getBlockMouseOver() != null) { Player player = MinecraftClient.getPlayer(); if (item.internal == player.getHeldItem(Player.Hand.PRIMARY).internal.getItem()) { diff --git a/src/main/java/cam72cam/mod/render/ItemRender.java b/src/main/java/cam72cam/mod/render/ItemRender.java index a37a3862f..8283029c0 100644 --- a/src/main/java/cam72cam/mod/render/ItemRender.java +++ b/src/main/java/cam72cam/mod/render/ItemRender.java @@ -4,6 +4,7 @@ import cam72cam.mod.MinecraftClient; import cam72cam.mod.ModCore; import cam72cam.mod.event.ClientEvents; +import cam72cam.mod.event.platform.ClientEventListener; import cam72cam.mod.gui.Progress; import cam72cam.mod.item.CustomItem; import cam72cam.mod.item.ItemStack; @@ -56,8 +57,8 @@ public class ItemRender { /** Register a simple image for an item */ public static void register(CustomItem item, Identifier tex) { // Link Item to Item Registry Name to find models - ClientEvents.MODEL_CREATE.subscribe(() -> ModelLoader.setCustomModelResourceLocation(item.internal, 0, - new ModelResourceLocation(item.getRegistryName().internal, ""))); + ClientEventListener.MODEL_CREATE.subscribe(() -> ModelLoader.setCustomModelResourceLocation(item.internal, 0, + new ModelResourceLocation(item.getRegistryName().internal, ""))); // And put our model data BuiltinPack.addNamespace(tex.getDomain()); @@ -66,18 +67,18 @@ public static void register(CustomItem item, Identifier tex) { BuiltinPack.put(ident, String.format(jsonTemplate, tex).getBytes(StandardCharsets.UTF_8)); // Add texture to texture map - ClientEvents.TEXTURE_STITCH.subscribe(() -> Minecraft.getMinecraft().getTextureMapBlocks().registerSprite(tex.internal)); + ClientEventListener.TEXTURE_STITCH.subscribe(() -> Minecraft.getMinecraft().getTextureMapBlocks().registerSprite(tex.internal)); } /** Register a complex model for an item */ public static void register(CustomItem item, IItemModel model) { // Link Item to Item Registry Name - ClientEvents.MODEL_CREATE.subscribe(() -> + ClientEventListener.MODEL_CREATE.subscribe(() -> ModelLoader.setCustomModelResourceLocation(item.internal, 0, new ModelResourceLocation(item.getRegistryName().internal, "")) ); // Link Item Registry Name to Custom Model - ClientEvents.MODEL_BAKE.subscribe((ModelBakeEvent event) -> event.getModelRegistry().putObject(new ModelResourceLocation(item.getRegistryName().internal, ""), new BakedItemModel(model))); + ClientEventListener.MODEL_BAKE.subscribe((ModelBakeEvent event) -> event.getModelRegistry().putObject(new ModelResourceLocation(item.getRegistryName().internal, ""), new BakedItemModel(model))); // Hook up Sprite Support (and generation) if (model instanceof ISpriteItemModel) { From ca4364bfc1601b7589c38b75e0654a29bd6356f7 Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Tue, 8 Sep 2026 13:19:19 +0800 Subject: [PATCH 2/2] ref: formatting common events --- .../java/cam72cam/mod/block/BlockType.java | 7 ++- .../cam72cam/mod/entity/EntityRegistry.java | 10 ++-- .../java/cam72cam/mod/event/CommonEvents.java | 30 ++--------- src/main/java/cam72cam/mod/event/Event.java | 1 - .../event/platform/ClientEventListener.java | 3 +- .../event/platform/CommonEventListener.java | 52 +++++++++++++++---- .../java/cam72cam/mod/item/CustomItem.java | 4 +- src/main/java/cam72cam/mod/item/Fuzzy.java | 6 +-- src/main/java/cam72cam/mod/item/Recipes.java | 4 +- src/main/java/cam72cam/mod/render/Light.java | 4 +- .../java/cam72cam/mod/world/ChunkManager.java | 7 ++- src/main/java/cam72cam/mod/world/World.java | 10 ++-- 12 files changed, 73 insertions(+), 65 deletions(-) diff --git a/src/main/java/cam72cam/mod/block/BlockType.java b/src/main/java/cam72cam/mod/block/BlockType.java index cfd4a4cd7..4779a36cb 100644 --- a/src/main/java/cam72cam/mod/block/BlockType.java +++ b/src/main/java/cam72cam/mod/block/BlockType.java @@ -3,7 +3,7 @@ import cam72cam.mod.entity.Player; import cam72cam.mod.entity.boundingbox.BoundingBox; import cam72cam.mod.entity.boundingbox.IBoundingBox; -import cam72cam.mod.event.CommonEvents; +import cam72cam.mod.event.platform.CommonEventListener; import cam72cam.mod.item.ItemStack; import cam72cam.mod.math.Vec3d; import cam72cam.mod.math.Vec3i; @@ -11,7 +11,6 @@ import cam72cam.mod.util.Facing; import cam72cam.mod.util.SingleCache; import cam72cam.mod.world.World; -import net.minecraft.block.Block; import net.minecraft.block.state.BlockFaceShape; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.Entity; @@ -31,7 +30,7 @@ public abstract class BlockType { Hook into the Block Broken event (not specific per block) */ static { - CommonEvents.Block.BROKEN.subscribe((world, pos, player) -> { + CommonEventListener.Block.BROKEN.subscribe((world, pos, player) -> { net.minecraft.block.Block block = world.getBlockState(pos).getBlock(); if (block instanceof BlockInternal) { return ((BlockInternal) block).tryBreak(world, pos, player); @@ -54,7 +53,7 @@ Hook into the Block Broken event (not specific per block) public BlockType(String modID, String name) { this.id = new Identifier(modID, name); internal = getBlock(); - CommonEvents.Block.REGISTER.subscribe(() -> ForgeRegistries.BLOCKS.register(internal)); + CommonEventListener.Block.REGISTER.subscribe(() -> ForgeRegistries.BLOCKS.register(internal)); } /** Override to provide a custom Minecraft Block implementation (ex: support tile entities) */ diff --git a/src/main/java/cam72cam/mod/entity/EntityRegistry.java b/src/main/java/cam72cam/mod/entity/EntityRegistry.java index f9ff4045f..56146f5e5 100644 --- a/src/main/java/cam72cam/mod/entity/EntityRegistry.java +++ b/src/main/java/cam72cam/mod/entity/EntityRegistry.java @@ -2,7 +2,7 @@ import cam72cam.mod.ModCore; import cam72cam.mod.event.ClientEvents; -import cam72cam.mod.event.CommonEvents; +import cam72cam.mod.event.platform.CommonEventListener; import cam72cam.mod.resource.Identifier; import cam72cam.mod.serialization.TagCompound; import cam72cam.mod.text.PlayerMessage; @@ -32,7 +32,7 @@ public static void register(ModCore.Mod mod, Supplier ctr, int dis CustomEntity tmp = ctr.get(); Class type = tmp.getClass(); - CommonEvents.Entity.REGISTER.subscribe(() -> { + CommonEventListener.Entity.REGISTER.subscribe(() -> { Identifier id = new Identifier(mod.modID(), type.getSimpleName()); // This has back-compat for older entity names @@ -62,11 +62,11 @@ public static CustomEntity create(World world, Class cls) { public static void registerEvents() { - CommonEvents.Entity.REGISTER.subscribe(() -> { + CommonEventListener.Entity.REGISTER.subscribe(() -> { net.minecraftforge.fml.common.registry.EntityRegistry.registerModEntity(SeatEntity.ID, SeatEntity.class, SeatEntity.class.getSimpleName(), constructors.size()+1, ModCore.instance, 512, 20, false); }); - CommonEvents.Entity.JOIN.subscribe((world, entity) -> { + CommonEventListener.Entity.JOIN.subscribe((world, entity) -> { if (entity instanceof ModdedEntity) { if (World.get(world) != null) { Pair msg = ((ModdedEntity) entity).refusedToJoin; @@ -92,7 +92,7 @@ public static void registerClientEvents() { missingResources = null; } }); - CommonEvents.World.UNLOAD.subscribe(w -> { + CommonEventListener.World.UNLOAD.subscribe(w -> { if (w.isRemote) { // Cleanup client side since mc does not call setDead client side... // See ClientEvents registration for related crap diff --git a/src/main/java/cam72cam/mod/event/CommonEvents.java b/src/main/java/cam72cam/mod/event/CommonEvents.java index 67864244f..c0305bdaf 100644 --- a/src/main/java/cam72cam/mod/event/CommonEvents.java +++ b/src/main/java/cam72cam/mod/event/CommonEvents.java @@ -1,38 +1,18 @@ package cam72cam.mod.event; -import cam72cam.mod.event.platform.CommonEventListener; import org.jetbrains.annotations.ApiStatus; -import java.util.function.Consumer; - /** Registry of events that fire both client and server. */ public class CommonEvents { - @ApiStatus.Internal public static final class World { - public static final Event> LOAD = new Event<>(); - public static final Event> UNLOAD = new Event<>(); - public static final Event> TICK = new Event<>(); - } - - public static final class Block { - public static final Event REGISTER = new Event<>(); - @ApiStatus.Internal - public static final Event BROKEN = new Event<>(); - } - - public static final class Item { - public static final Event REGISTER = new Event<>(); - } - - public static final class Recipe { - public static final Event REGISTER = new Event<>(); + public static final Event LOAD = new Event<>(); + public static final Event UNLOAD = new Event<>(); } - public static final class Entity { - public static final Event REGISTER = new Event<>(); - @ApiStatus.Internal - public static final Event JOIN = new Event<>(); + @FunctionalInterface + public interface WorldEvent { + void handle(cam72cam.mod.world.World world); } @ApiStatus.Internal diff --git a/src/main/java/cam72cam/mod/event/Event.java b/src/main/java/cam72cam/mod/event/Event.java index 31028ec29..a72d98883 100644 --- a/src/main/java/cam72cam/mod/event/Event.java +++ b/src/main/java/cam72cam/mod/event/Event.java @@ -25,7 +25,6 @@ public void post(Runnable callback) { public void execute(Consumer handler) { pre.forEach(Runnable::run); callbacks.forEach(handler); - post.forEach(Runnable::run); } diff --git a/src/main/java/cam72cam/mod/event/platform/ClientEventListener.java b/src/main/java/cam72cam/mod/event/platform/ClientEventListener.java index f56dab13c..b90899e78 100644 --- a/src/main/java/cam72cam/mod/event/platform/ClientEventListener.java +++ b/src/main/java/cam72cam/mod/event/platform/ClientEventListener.java @@ -3,7 +3,6 @@ import cam72cam.mod.ModCore; import cam72cam.mod.entity.Player; import cam72cam.mod.event.ClientEvents; -import cam72cam.mod.event.CommonEvents; import cam72cam.mod.event.Event; import cam72cam.mod.gui.helpers.GUIHelpers; import cam72cam.mod.input.Mouse; @@ -55,7 +54,7 @@ public class ClientEventListener { ClientEvents.TICK.subscribe(() -> { WorldClient currentWorld = Minecraft.getMinecraft().world; if (clientLast != currentWorld && clientLast != null) { - CommonEvents.World.UNLOAD.execute(worldConsumer -> worldConsumer.accept(clientLast)); + CommonEventListener.World.UNLOAD.execute(worldConsumer -> worldConsumer.accept(clientLast)); } clientLast = currentWorld; }); diff --git a/src/main/java/cam72cam/mod/event/platform/CommonEventListener.java b/src/main/java/cam72cam/mod/event/platform/CommonEventListener.java index f4e0e326d..5560460dc 100644 --- a/src/main/java/cam72cam/mod/event/platform/CommonEventListener.java +++ b/src/main/java/cam72cam/mod/event/platform/CommonEventListener.java @@ -4,6 +4,7 @@ import cam72cam.mod.ModCore; import cam72cam.mod.entity.ModdedEntity; import cam72cam.mod.event.CommonEvents; +import cam72cam.mod.event.Event; import cam72cam.mod.world.ChunkPos; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.crafting.IRecipe; @@ -17,6 +18,9 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; import net.minecraftforge.fml.common.registry.EntityEntry; +import org.jetbrains.annotations.ApiStatus; + +import java.util.function.Consumer; @Mod.EventBusSubscriber(modid = ModCore.MODID) public class CommonEventListener { @@ -27,50 +31,52 @@ public class CommonEventListener { // World @SubscribeEvent public static void onWorldLoad(WorldEvent.Load event) { - CommonEvents.World.LOAD.execute(x -> x.accept(event.getWorld())); + World.LOAD.execute(x -> x.accept(event.getWorld())); + CommonEvents.World.LOAD.execute(e -> e.handle(cam72cam.mod.world.World.get(event.getWorld()))); } @SubscribeEvent public static void onWorldUnload(WorldEvent.Unload event) { - CommonEvents.World.UNLOAD.execute(x -> x.accept(event.getWorld())); + CommonEvents.World.UNLOAD.execute(e -> e.handle(cam72cam.mod.world.World.get(event.getWorld()))); + World.UNLOAD.execute(x -> x.accept(event.getWorld())); } @SubscribeEvent public static void onWorldTick(TickEvent.WorldTickEvent event) { if (event.phase == TickEvent.Phase.START) { - CommonEvents.World.TICK.execute(x -> x.accept(event.world)); + World.TICK.execute(x -> x.accept(event.world)); } } @SubscribeEvent public static void registerBlocks(RegistryEvent.Register event) { - CommonEvents.Block.REGISTER.execute(Runnable::run); + Block.REGISTER.execute(Runnable::run); } @SubscribeEvent - public static void onBlockBreakEvent(BlockEvent.BreakEvent event) { - if (!CommonEvents.Block.BROKEN.executeCancellable(x -> x.onBroken(event.getWorld(), event.getPos(), event.getPlayer()))) { + public static void onBlockBreak(BlockEvent.BreakEvent event) { + if (!Block.BROKEN.executeCancellable(x -> x.onBroken(event.getWorld(), event.getPos(), event.getPlayer()))) { event.setCanceled(true); } } @SubscribeEvent public static void registerItems(RegistryEvent.Register event) { - CommonEvents.Item.REGISTER.execute(Runnable::run); + Item.REGISTER.execute(Runnable::run); } @SubscribeEvent public static void registerRecipes(RegistryEvent.Register event) { - CommonEvents.Recipe.REGISTER.execute(Runnable::run); + Recipe.REGISTER.execute(Runnable::run); } @SubscribeEvent public static void registerEntities(RegistryEvent.Register event) { - CommonEvents.Entity.REGISTER.execute(Runnable::run); + Entity.REGISTER.execute(Runnable::run); } @SubscribeEvent public static void onEntityJoin(EntityJoinWorldEvent event) { - if (!CommonEvents.Entity.JOIN.executeCancellable(x -> x.onJoin(event.getWorld(), event.getEntity()))) { + if (!Entity.JOIN.executeCancellable(x -> x.onJoin(event.getWorld(), event.getEntity()))) { event.setCanceled(true); } } @@ -96,4 +102,30 @@ public interface BlockBrokenEvent { public interface EntityJoinEvent { boolean onJoin(net.minecraft.world.World world, net.minecraft.entity.Entity entity); } + + public static final class World { + public static final Event> LOAD = new Event<>(); + public static final Event> UNLOAD = new Event<>(); + // Server-side only! TODO separate this + public static final Event> TICK = new Event<>(); + } + + public static final class Block { + public static final Event REGISTER = new Event<>(); + public static final Event BROKEN = new Event<>(); + } + + public static final class Item { + public static final Event REGISTER = new Event<>(); + } + + public static final class Recipe { + public static final Event REGISTER = new Event<>(); + } + + public static final class Entity { + public static final Event REGISTER = new Event<>(); + @ApiStatus.Internal + public static final Event JOIN = new Event<>(); + } } diff --git a/src/main/java/cam72cam/mod/item/CustomItem.java b/src/main/java/cam72cam/mod/item/CustomItem.java index 539d82f25..49d598c3a 100644 --- a/src/main/java/cam72cam/mod/item/CustomItem.java +++ b/src/main/java/cam72cam/mod/item/CustomItem.java @@ -3,7 +3,7 @@ import cam72cam.mod.ModCore; import cam72cam.mod.entity.Entity; import cam72cam.mod.entity.Player; -import cam72cam.mod.event.CommonEvents; +import cam72cam.mod.event.platform.CommonEventListener; import cam72cam.mod.math.Vec3d; import cam72cam.mod.math.Vec3i; import cam72cam.mod.resource.Identifier; @@ -41,7 +41,7 @@ public CustomItem(String modID, String name) { internal.setCreativeTab(getCreativeTabs().get(0).internal); } - CommonEvents.Item.REGISTER.subscribe(() -> ForgeRegistries.ITEMS.register(internal)); + CommonEventListener.Item.REGISTER.subscribe(() -> ForgeRegistries.ITEMS.register(internal)); } /** Creative tabs that this should be shown under */ diff --git a/src/main/java/cam72cam/mod/item/Fuzzy.java b/src/main/java/cam72cam/mod/item/Fuzzy.java index 1fb4680bd..1dfecaeb4 100644 --- a/src/main/java/cam72cam/mod/item/Fuzzy.java +++ b/src/main/java/cam72cam/mod/item/Fuzzy.java @@ -1,7 +1,7 @@ package cam72cam.mod.item; import cam72cam.mod.config.ConfigFile; -import cam72cam.mod.event.CommonEvents; +import cam72cam.mod.event.platform.CommonEventListener; import net.minecraft.block.Block; import net.minecraft.init.Blocks; import net.minecraft.init.Items; @@ -57,12 +57,12 @@ private static void postItemRegistration(Runnable fn) { if(isPostItemRegistration) { fn.run(); } else { - CommonEvents.Item.REGISTER.post(fn); + CommonEventListener.Item.REGISTER.post(fn); } } static { - CommonEvents.Item.REGISTER.post(() -> isPostItemRegistration = true); + CommonEventListener.Item.REGISTER.post(() -> isPostItemRegistration = true); ConfigFile.addMapper(Fuzzy.class, Fuzzy::toString, Fuzzy::get); } diff --git a/src/main/java/cam72cam/mod/item/Recipes.java b/src/main/java/cam72cam/mod/item/Recipes.java index 68998f7fe..d52011282 100644 --- a/src/main/java/cam72cam/mod/item/Recipes.java +++ b/src/main/java/cam72cam/mod/item/Recipes.java @@ -1,7 +1,7 @@ package cam72cam.mod.item; import cam72cam.mod.ModCore; -import cam72cam.mod.event.CommonEvents; +import cam72cam.mod.event.platform.CommonEventListener; import net.minecraft.item.crafting.Ingredient; import net.minecraft.util.NonNullList; import net.minecraft.util.ResourceLocation; @@ -30,7 +30,7 @@ public static class ShapedRecipeBuilder { private List conflicts = new ArrayList<>(); private ShapedRecipeBuilder(ItemStack item, int width, Fuzzy... ingredients) { - CommonEvents.Recipe.REGISTER.subscribe(() -> { + CommonEventListener.Recipe.REGISTER.subscribe(() -> { for (Fuzzy dependency : dependencies) { if (dependency.enumerate().isEmpty()) { // Don't register recipe diff --git a/src/main/java/cam72cam/mod/render/Light.java b/src/main/java/cam72cam/mod/render/Light.java index f950d9b53..9bb92ba09 100644 --- a/src/main/java/cam72cam/mod/render/Light.java +++ b/src/main/java/cam72cam/mod/render/Light.java @@ -1,7 +1,7 @@ package cam72cam.mod.render; import cam72cam.mod.ModCore; -import cam72cam.mod.event.CommonEvents; +import cam72cam.mod.event.platform.CommonEventListener; import cam72cam.mod.math.Vec3d; import cam72cam.mod.world.World; import net.minecraft.entity.Entity; @@ -80,7 +80,7 @@ private static class LightEntity14 extends LightEntity {public LightEntity14(net private static class LightEntity15 extends LightEntity {public LightEntity15(net.minecraft.world.World world) { super(world);}} public static void register() { - CommonEvents.Entity.REGISTER.subscribe(() -> { + CommonEventListener.Entity.REGISTER.subscribe(() -> { net.minecraftforge.fml.common.registry.EntityRegistry.registerModEntity(new ResourceLocation("universalmodcore:light1"), LightEntity1.class, "LightEntity", -1, ModCore.instance, 0, 0, false); net.minecraftforge.fml.common.registry.EntityRegistry.registerModEntity(new ResourceLocation("universalmodcore:light2"), LightEntity2.class, "LightEntity", -1, ModCore.instance, 0, 0, false); net.minecraftforge.fml.common.registry.EntityRegistry.registerModEntity(new ResourceLocation("universalmodcore:light3"), LightEntity3.class, "LightEntity", -1, ModCore.instance, 0, 0, false); diff --git a/src/main/java/cam72cam/mod/world/ChunkManager.java b/src/main/java/cam72cam/mod/world/ChunkManager.java index 750c159fc..90452f0aa 100644 --- a/src/main/java/cam72cam/mod/world/ChunkManager.java +++ b/src/main/java/cam72cam/mod/world/ChunkManager.java @@ -1,10 +1,9 @@ package cam72cam.mod.world; import cam72cam.mod.ModCore; -import cam72cam.mod.event.CommonEvents; +import cam72cam.mod.event.platform.CommonEventListener; import cam72cam.mod.math.Vec3i; import cam72cam.mod.serialization.TagCompound; -import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraft.world.WorldServer; import net.minecraft.world.chunk.Chunk; @@ -37,8 +36,8 @@ public static void setup() { ModCore.debug("Setting up chunk loading..."); if (instance == null) { instance = new ChunkManager(); - CommonEvents.World.TICK.subscribe(ChunkManager::onWorldTick); - CommonEvents.World.UNLOAD.subscribe(ChunkManager::saveChunks); + CommonEventListener.World.TICK.subscribe(ChunkManager::onWorldTick); + CommonEventListener.World.UNLOAD.subscribe(ChunkManager::saveChunks); } } diff --git a/src/main/java/cam72cam/mod/world/World.java b/src/main/java/cam72cam/mod/world/World.java index b08595f08..40252456f 100644 --- a/src/main/java/cam72cam/mod/world/World.java +++ b/src/main/java/cam72cam/mod/world/World.java @@ -11,7 +11,7 @@ import cam72cam.mod.entity.boundingbox.DefaultBoundingBox; import cam72cam.mod.entity.boundingbox.IBoundingBox; import cam72cam.mod.event.ClientEvents; -import cam72cam.mod.event.CommonEvents; +import cam72cam.mod.event.platform.CommonEventListener; import cam72cam.mod.fluid.ITank; import cam72cam.mod.item.IInventory; import cam72cam.mod.item.ItemStack; @@ -103,13 +103,13 @@ private static void loadWorld(net.minecraft.world.World world) { /** Called from Event system, wires into common world events */ public static void registerEvents() { - CommonEvents.World.LOAD.subscribe(World::loadWorld); + CommonEventListener.World.LOAD.subscribe(World::loadWorld); - CommonEvents.World.UNLOAD.subscribe(world -> getWorldMap(world).remove(world.provider.getDimension())); + CommonEventListener.World.UNLOAD.subscribe(world -> getWorldMap(world).remove(world.provider.getDimension())); - CommonEvents.World.TICK.subscribe(world -> onTicks.forEach(fn -> fn.accept(get(world)))); + CommonEventListener.World.TICK.subscribe(world -> onTicks.forEach(fn -> fn.accept(get(world)))); - CommonEvents.World.TICK.subscribe(world -> get(world).checkLoadedEntities()); + CommonEventListener.World.TICK.subscribe(world -> get(world).checkLoadedEntities()); } public static void registerClientEvnets() {