From ca8af3f754347238ae2a9ddc5e3a198bca5a8dfe Mon Sep 17 00:00:00 2001 From: Max Date: Mon, 25 Jan 2021 03:48:06 +0100 Subject: [PATCH 1/2] Fix shader effects location being hardcoded to minecraft namespace --- .../fabric/client/MixinEffectInstance.java | 38 +++++++++++++++++++ .../main/resources/architectury.mixins.json | 37 +++++++++++++++--- 2 files changed, 69 insertions(+), 6 deletions(-) create mode 100644 fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinEffectInstance.java diff --git a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinEffectInstance.java b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinEffectInstance.java new file mode 100644 index 00000000..838e8d31 --- /dev/null +++ b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinEffectInstance.java @@ -0,0 +1,38 @@ +package me.shedaniel.architectury.mixin.fabric.client; + +import com.mojang.blaze3d.shaders.Program; +import net.minecraft.client.renderer.EffectInstance; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.packs.resources.ResourceManager; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Unique +@Mixin(EffectInstance.class) +public class MixinEffectInstance { + @Redirect( + method = "", + at = @At(value = "NEW", + target = "(Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;", + ordinal = 0) + ) + private ResourceLocation mojangPls(String _0, ResourceManager rm, String str) { + return mojangPls(new ResourceLocation(str), ".json"); + } + + @Redirect( + method = "getOrCreate", + at = @At(value = "NEW", + target = "(Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;", + ordinal = 0) + ) + private static ResourceLocation mojangPls(String _0, ResourceManager rm, Program.Type type, String str) { + return mojangPls(new ResourceLocation(str), type.getExtension()); + } + + private static ResourceLocation mojangPls(ResourceLocation rl, String ext) { + return new ResourceLocation(rl.getNamespace(), "shaders/program/" + rl.getPath() + ext); + } +} diff --git a/fabric/src/main/resources/architectury.mixins.json b/fabric/src/main/resources/architectury.mixins.json index 33df1a24..9d2fa087 100644 --- a/fabric/src/main/resources/architectury.mixins.json +++ b/fabric/src/main/resources/architectury.mixins.json @@ -4,14 +4,39 @@ "compatibilityLevel": "JAVA_8", "minVersion": "0.7.11", "client": [ - "client.MixinClientLevel", "client.MixinClientPacketListener", "client.MixinDebugScreenOverlay", "client.MixinGameRenderer", "client.MixinIntegratedServer", - "client.MixinKeyboardHandler", "client.MixinMinecraft", "client.MixinMouseHandler", "client.MixinMultiPlayerGameMode", "client.MixinScreen", - "client.MixinTextureAtlas" + "client.MixinClientLevel", + "client.MixinClientPacketListener", + "client.MixinDebugScreenOverlay", + "client.MixinGameRenderer", + "client.MixinIntegratedServer", + "client.MixinKeyboardHandler", + "client.MixinMinecraft", + "client.MixinMouseHandler", + "client.MixinMultiPlayerGameMode", + "client.MixinScreen", + "client.MixinTextureAtlas", + "client.MixinEffectInstance" ], "mixins": [ - "ExplosionPreInvoker", "LivingDeathInvoker", "MixinBlockEntityExtension", "MixinBlockItem", "MixinCommands", "MixinDedicatedServer", "MixinExplosion", - "MixinFurnaceResultSlot", "MixinItemEntity", "MixinLivingEntity", "MixinPlayer", "MixinPlayerAdvancements", "MixinPlayerList", "MixinResultSlot", - "MixinServerGamePacketListenerImpl", "MixinServerLevel", "MixinServerPlayer", "MixinServerPlayerGameMode", "PlayerAttackInvoker" + "ExplosionPreInvoker", + "LivingDeathInvoker", + "MixinBlockEntityExtension", + "MixinBlockItem", + "MixinCommands", + "MixinDedicatedServer", + "MixinExplosion", + "MixinFurnaceResultSlot", + "MixinItemEntity", + "MixinLivingEntity", + "MixinPlayer", + "MixinPlayerAdvancements", + "MixinPlayerList", + "MixinResultSlot", + "MixinServerGamePacketListenerImpl", + "MixinServerLevel", + "MixinServerPlayer", + "MixinServerPlayerGameMode", + "PlayerAttackInvoker" ], "injectors": { "defaultRequire": 1 From 5d4a779d05b8ccb8cf2e8ec4fdb0eda13d3c0c3f Mon Sep 17 00:00:00 2001 From: shedaniel Date: Mon, 25 Jan 2021 11:07:09 +0800 Subject: [PATCH 2/2] Event cleanups --- .../architectury/event/events/ChatEvent.java | 2 +- .../event/events/CommandPerformEvent.java | 2 +- .../events/CommandRegistrationEvent.java | 2 +- .../event/events/EntityEvent.java | 8 +++--- .../event/events/ExplosionEvent.java | 4 +-- .../architectury/event/events/GuiEvent.java | 14 +++++----- .../event/events/InteractionEvent.java | 12 ++++---- .../event/events/LifecycleEvent.java | 16 +++++------ .../event/events/RecipeUpdateEvent.java | 2 +- .../event/events/TextureStitchEvent.java | 4 +-- .../architectury/event/events/TickEvent.java | 12 ++++---- .../event/events/TooltipEvent.java | 10 +++---- .../event/events/client/ClientChatEvent.java | 4 +-- .../events/client/ClientLifecycleEvent.java | 6 ++-- .../events/client/ClientPlayerEvent.java | 6 ++-- .../events/client/ClientRawInputEvent.java | 8 +++--- .../events/client/ClientScreenInputEvent.java | 28 +++++++++---------- .../event/events/client/ClientTickEvent.java | 8 +++--- 18 files changed, 74 insertions(+), 74 deletions(-) diff --git a/common/src/main/java/me/shedaniel/architectury/event/events/ChatEvent.java b/common/src/main/java/me/shedaniel/architectury/event/events/ChatEvent.java index 8a019ead..2bb0882a 100644 --- a/common/src/main/java/me/shedaniel/architectury/event/events/ChatEvent.java +++ b/common/src/main/java/me/shedaniel/architectury/event/events/ChatEvent.java @@ -30,7 +30,7 @@ public interface ChatEvent { /** * Invoked when server receives a message, equivalent to forge's {@code ServerChatEvent}. */ - Event SERVER = EventFactory.createInteractionResultHolder(Server.class); + Event SERVER = EventFactory.createInteractionResultHolder(); interface Server { @NotNull diff --git a/common/src/main/java/me/shedaniel/architectury/event/events/CommandPerformEvent.java b/common/src/main/java/me/shedaniel/architectury/event/events/CommandPerformEvent.java index 0c51aaa9..99b32364 100644 --- a/common/src/main/java/me/shedaniel/architectury/event/events/CommandPerformEvent.java +++ b/common/src/main/java/me/shedaniel/architectury/event/events/CommandPerformEvent.java @@ -31,7 +31,7 @@ public class CommandPerformEvent { /** * Invoked after server parses a command but before server executes it, equivalent to forge's {@code CommandEvent}. */ - public static final Event> EVENT = EventFactory.createActorLoop(CommandPerformEvent.class); + public static final Event> EVENT = EventFactory.createActorLoop(); @NotNull private ParseResults results; diff --git a/common/src/main/java/me/shedaniel/architectury/event/events/CommandRegistrationEvent.java b/common/src/main/java/me/shedaniel/architectury/event/events/CommandRegistrationEvent.java index 58a1e0d1..97103893 100644 --- a/common/src/main/java/me/shedaniel/architectury/event/events/CommandRegistrationEvent.java +++ b/common/src/main/java/me/shedaniel/architectury/event/events/CommandRegistrationEvent.java @@ -29,7 +29,7 @@ public interface CommandRegistrationEvent { /** * Invoked after server registers its commands, equivalent to forge's {@code RegisterCommandsEvent} and fabric's {@code CommandRegistrationCallback}. */ - Event EVENT = EventFactory.createLoop(CommandRegistrationEvent.class); + Event EVENT = EventFactory.createLoop(); void register(CommandDispatcher dispatcher, Commands.CommandSelection selection); } diff --git a/common/src/main/java/me/shedaniel/architectury/event/events/EntityEvent.java b/common/src/main/java/me/shedaniel/architectury/event/events/EntityEvent.java index 3f251155..82b5c629 100644 --- a/common/src/main/java/me/shedaniel/architectury/event/events/EntityEvent.java +++ b/common/src/main/java/me/shedaniel/architectury/event/events/EntityEvent.java @@ -34,16 +34,16 @@ public interface EntityEvent { /** * Invoked before LivingEntity#die, equivalent to forge's {@code LivingDeathEvent}. */ - Event LIVING_DEATH = EventFactory.createInteractionResult(LivingDeath.class); + Event LIVING_DEATH = EventFactory.createInteractionResult(); /** * Invoked before LivingEntity#hurt, equivalent to forge's {@code LivingAttackEvent}. */ - Event LIVING_ATTACK = EventFactory.createInteractionResult(LivingAttack.class); + Event LIVING_ATTACK = EventFactory.createInteractionResult(); /** * Invoked before entity is added to a world, equivalent to forge's {@code EntityJoinWorldEvent}. */ - Event ADD = EventFactory.createInteractionResult(Add.class); - Event PLACE_BLOCK = EventFactory.createInteractionResult(PlaceBlock.class); + Event ADD = EventFactory.createInteractionResult(); + Event PLACE_BLOCK = EventFactory.createInteractionResult(); interface LivingDeath { InteractionResult die(LivingEntity entity, DamageSource source); diff --git a/common/src/main/java/me/shedaniel/architectury/event/events/ExplosionEvent.java b/common/src/main/java/me/shedaniel/architectury/event/events/ExplosionEvent.java index dc0ebe07..38bc9e9c 100644 --- a/common/src/main/java/me/shedaniel/architectury/event/events/ExplosionEvent.java +++ b/common/src/main/java/me/shedaniel/architectury/event/events/ExplosionEvent.java @@ -29,8 +29,8 @@ import net.minecraft.world.level.Level; import java.util.List; public interface ExplosionEvent { - Event
 PRE = EventFactory.createInteractionResult(Pre.class);
-    Event DETONATE = EventFactory.createInteractionResult(Detonate.class);
+    Event
 PRE = EventFactory.createInteractionResult();
+    Event DETONATE = EventFactory.createInteractionResult();
     
     interface Pre {
         InteractionResult explode(Level world, Explosion explosion);
diff --git a/common/src/main/java/me/shedaniel/architectury/event/events/GuiEvent.java b/common/src/main/java/me/shedaniel/architectury/event/events/GuiEvent.java
index 92843b16..d606eeb4 100644
--- a/common/src/main/java/me/shedaniel/architectury/event/events/GuiEvent.java
+++ b/common/src/main/java/me/shedaniel/architectury/event/events/GuiEvent.java
@@ -36,19 +36,19 @@ public interface GuiEvent {
     /**
      * Invoked after in-game hud is rendered, equivalent to forge's {@code RenderGameOverlayEvent.Post@ElementType#ALL} and fabric's {@code HudRenderCallback}.
      */
-    Event RENDER_HUD = EventFactory.createLoop(RenderHud.class);
-    Event DEBUG_TEXT_LEFT = EventFactory.createLoop(DebugText.class);
-    Event DEBUG_TEXT_RIGHT = EventFactory.createLoop(DebugText.class);
+    Event RENDER_HUD = EventFactory.createLoop();
+    Event DEBUG_TEXT_LEFT = EventFactory.createLoop();
+    Event DEBUG_TEXT_RIGHT = EventFactory.createLoop();
     /**
      * Invoked during Screen#init after previous widgets are cleared, equivalent to forge's {@code GuiScreenEvent.InitGuiEvent.Pre}.
      */
-    Event INIT_PRE = EventFactory.createInteractionResult(ScreenInitPre.class);
+    Event INIT_PRE = EventFactory.createInteractionResult();
     /**
      * Invoked after Screen#init, equivalent to forge's {@code GuiScreenEvent.InitGuiEvent.Post}.
      */
-    Event INIT_POST = EventFactory.createLoop(ScreenInitPost.class);
-    Event RENDER_PRE = EventFactory.createInteractionResult(ScreenRenderPre.class);
-    Event RENDER_POST = EventFactory.createInteractionResult(ScreenRenderPost.class);
+    Event INIT_POST = EventFactory.createLoop();
+    Event RENDER_PRE = EventFactory.createInteractionResult();
+    Event RENDER_POST = EventFactory.createInteractionResult();
     
     @Environment(EnvType.CLIENT)
     interface RenderHud {
diff --git a/common/src/main/java/me/shedaniel/architectury/event/events/InteractionEvent.java b/common/src/main/java/me/shedaniel/architectury/event/events/InteractionEvent.java
index e10e0726..286380e2 100644
--- a/common/src/main/java/me/shedaniel/architectury/event/events/InteractionEvent.java
+++ b/common/src/main/java/me/shedaniel/architectury/event/events/InteractionEvent.java
@@ -32,12 +32,12 @@ import net.minecraft.world.item.ItemStack;
 import net.minecraft.world.level.block.state.BlockState;
 
 public interface InteractionEvent {
-    Event LEFT_CLICK_BLOCK = EventFactory.createInteractionResult(LeftClickBlock.class);
-    Event RIGHT_CLICK_BLOCK = EventFactory.createInteractionResult(RightClickBlock.class);
-    Event RIGHT_CLICK_ITEM = EventFactory.createInteractionResultHolder(RightClickItem.class);
-    Event CLIENT_LEFT_CLICK_AIR = EventFactory.createLoop(ClientLeftClickAir.class);
-    Event CLIENT_RIGHT_CLICK_AIR = EventFactory.createLoop(ClientRightClickAir.class);
-    Event INTERACT_ENTITY = EventFactory.createInteractionResult(InteractEntity.class);
+    Event LEFT_CLICK_BLOCK = EventFactory.createInteractionResult();
+    Event RIGHT_CLICK_BLOCK = EventFactory.createInteractionResult();
+    Event RIGHT_CLICK_ITEM = EventFactory.createInteractionResultHolder();
+    Event CLIENT_LEFT_CLICK_AIR = EventFactory.createLoop();
+    Event CLIENT_RIGHT_CLICK_AIR = EventFactory.createLoop();
+    Event INTERACT_ENTITY = EventFactory.createInteractionResult();
     
     interface RightClickBlock {
         InteractionResult click(Player player, InteractionHand hand, BlockPos pos, Direction face);
diff --git a/common/src/main/java/me/shedaniel/architectury/event/events/LifecycleEvent.java b/common/src/main/java/me/shedaniel/architectury/event/events/LifecycleEvent.java
index 994b0b6d..1fb689e1 100644
--- a/common/src/main/java/me/shedaniel/architectury/event/events/LifecycleEvent.java
+++ b/common/src/main/java/me/shedaniel/architectury/event/events/LifecycleEvent.java
@@ -29,35 +29,35 @@ public interface LifecycleEvent {
     /**
      * Invoked when server is starting, equivalent to forge's {@code FMLServerAboutToStartEvent} and fabric's {@code ServerLifecycleEvents#SERVER_STARTING}.
      */
-    Event SERVER_BEFORE_START = EventFactory.createLoop(ServerState.class);
+    Event SERVER_BEFORE_START = EventFactory.createLoop();
     /**
      * Invoked when server is starting, equivalent to forge's {@code FMLServerStartingEvent}.
      */
-    Event SERVER_STARTING = EventFactory.createLoop(ServerState.class);
+    Event SERVER_STARTING = EventFactory.createLoop();
     /**
      * Invoked when server has started, equivalent to forge's {@code FMLServerStartedEvent} and fabric's {@code ServerLifecycleEvents#SERVER_STARTED}.
      */
-    Event SERVER_STARTED = EventFactory.createLoop(ServerState.class);
+    Event SERVER_STARTED = EventFactory.createLoop();
     /**
      * Invoked when server is stopping, equivalent to forge's {@code FMLServerStoppingEvent} and fabric's {@code ServerLifecycleEvents#SERVER_STOPPING}.
      */
-    Event SERVER_STOPPING = EventFactory.createLoop(ServerState.class);
+    Event SERVER_STOPPING = EventFactory.createLoop();
     /**
      * Invoked when server has stopped, equivalent to forge's {@code FMLServerStoppedEvent} and fabric's {@code ServerLifecycleEvents#SERVER_STOPPED}.
      */
-    Event SERVER_STOPPED = EventFactory.createLoop(ServerState.class);
+    Event SERVER_STOPPED = EventFactory.createLoop();
     /**
      * Invoked after a world is loaded only on server, equivalent to forge's {@code WorldEvent.Load} and fabric's {@code ServerWorldEvents#LOAD}.
      */
-    Event SERVER_WORLD_LOAD = EventFactory.createLoop(ServerWorldState.class);
+    Event SERVER_WORLD_LOAD = EventFactory.createLoop();
     /**
      * Invoked after a world is unloaded, equivalent to forge's {@code WorldEvent.Unload} and fabric's {@code ServerWorldEvents#UNLOAD}.
      */
-    Event SERVER_WORLD_UNLOAD = EventFactory.createLoop(ServerWorldState.class);
+    Event SERVER_WORLD_UNLOAD = EventFactory.createLoop();
     /**
      * Invoked during a world is saved, equivalent to forge's {@code WorldEvent.Save}.
      */
-    Event SERVER_WORLD_SAVE = EventFactory.createLoop(ServerWorldState.class);
+    Event SERVER_WORLD_SAVE = EventFactory.createLoop();
     
     interface InstanceState {
         void stateChanged(T instance);
diff --git a/common/src/main/java/me/shedaniel/architectury/event/events/RecipeUpdateEvent.java b/common/src/main/java/me/shedaniel/architectury/event/events/RecipeUpdateEvent.java
index 0a29d490..bccd8681 100644
--- a/common/src/main/java/me/shedaniel/architectury/event/events/RecipeUpdateEvent.java
+++ b/common/src/main/java/me/shedaniel/architectury/event/events/RecipeUpdateEvent.java
@@ -27,7 +27,7 @@ import net.minecraft.world.item.crafting.RecipeManager;
 
 @Environment(EnvType.CLIENT)
 public interface RecipeUpdateEvent {
-    Event EVENT = EventFactory.createLoop(RecipeUpdateEvent.class);
+    Event EVENT = EventFactory.createLoop();
     
     void update(RecipeManager recipeManager);
 }
diff --git a/common/src/main/java/me/shedaniel/architectury/event/events/TextureStitchEvent.java b/common/src/main/java/me/shedaniel/architectury/event/events/TextureStitchEvent.java
index ee898135..8079675c 100644
--- a/common/src/main/java/me/shedaniel/architectury/event/events/TextureStitchEvent.java
+++ b/common/src/main/java/me/shedaniel/architectury/event/events/TextureStitchEvent.java
@@ -30,8 +30,8 @@ import java.util.function.Consumer;
 
 @Environment(EnvType.CLIENT)
 public interface TextureStitchEvent {
-    Event
 PRE = EventFactory.createLoop(Pre.class);
-    Event POST = EventFactory.createLoop(Post.class);
+    Event
 PRE = EventFactory.createLoop();
+    Event POST = EventFactory.createLoop();
     
     @Environment(EnvType.CLIENT)
     interface Pre {
diff --git a/common/src/main/java/me/shedaniel/architectury/event/events/TickEvent.java b/common/src/main/java/me/shedaniel/architectury/event/events/TickEvent.java
index 4cb693e9..fcfd20fc 100644
--- a/common/src/main/java/me/shedaniel/architectury/event/events/TickEvent.java
+++ b/common/src/main/java/me/shedaniel/architectury/event/events/TickEvent.java
@@ -26,12 +26,12 @@ import net.minecraft.server.level.ServerLevel;
 import net.minecraft.world.level.Level;
 
 public interface TickEvent {
-    Event SERVER_PRE = EventFactory.createLoop(Server.class);
-    Event SERVER_POST = EventFactory.createLoop(Server.class);
-    Event SERVER_WORLD_PRE = EventFactory.createLoop(ServerWorld.class);
-    Event SERVER_WORLD_POST = EventFactory.createLoop(ServerWorld.class);
-    Event PLAYER_PRE = EventFactory.createLoop(Player.class);
-    Event PLAYER_POST = EventFactory.createLoop(Player.class);
+    Event SERVER_PRE = EventFactory.createLoop();
+    Event SERVER_POST = EventFactory.createLoop();
+    Event SERVER_WORLD_PRE = EventFactory.createLoop();
+    Event SERVER_WORLD_POST = EventFactory.createLoop();
+    Event PLAYER_PRE = EventFactory.createLoop();
+    Event PLAYER_POST = EventFactory.createLoop();
     
     void tick(T instance);
     
diff --git a/common/src/main/java/me/shedaniel/architectury/event/events/TooltipEvent.java b/common/src/main/java/me/shedaniel/architectury/event/events/TooltipEvent.java
index 96401caf..673994e0 100644
--- a/common/src/main/java/me/shedaniel/architectury/event/events/TooltipEvent.java
+++ b/common/src/main/java/me/shedaniel/architectury/event/events/TooltipEvent.java
@@ -35,17 +35,17 @@ import java.util.List;
 
 @Environment(EnvType.CLIENT)
 public interface TooltipEvent {
-    Event ITEM = EventFactory.createLoop(Item.class);
+    Event ITEM = EventFactory.createLoop();
     /**
      * Render vanilla events are not invoked on the forge side.
      */
-    Event RENDER_VANILLA_PRE = EventFactory.createInteractionResult(RenderVanilla.class);
+    Event RENDER_VANILLA_PRE = EventFactory.createInteractionResult();
     /**
      * Render forge events are only invoked on the forge side.
      */
-    Event RENDER_FORGE_PRE = EventFactory.createInteractionResult(RenderForge.class);
-    Event RENDER_MODIFY_POSITION = EventFactory.createInteractionResult(RenderModifyPosition.class);
-    Event RENDER_MODIFY_COLOR = EventFactory.createInteractionResult(RenderModifyColor.class);
+    Event RENDER_FORGE_PRE = EventFactory.createInteractionResult();
+    Event RENDER_MODIFY_POSITION = EventFactory.createInteractionResult();
+    Event RENDER_MODIFY_COLOR = EventFactory.createInteractionResult();
     
     @Environment(EnvType.CLIENT)
     interface Item {
diff --git a/common/src/main/java/me/shedaniel/architectury/event/events/client/ClientChatEvent.java b/common/src/main/java/me/shedaniel/architectury/event/events/client/ClientChatEvent.java
index 4b10980f..3ae2273a 100644
--- a/common/src/main/java/me/shedaniel/architectury/event/events/client/ClientChatEvent.java
+++ b/common/src/main/java/me/shedaniel/architectury/event/events/client/ClientChatEvent.java
@@ -36,11 +36,11 @@ public interface ClientChatEvent {
     /**
      * Invoked when client tries to send a message, equivalent to forge's {@code ClientChatEvent}.
      */
-    Event CLIENT = EventFactory.createInteractionResultHolder(Client.class);
+    Event CLIENT = EventFactory.createInteractionResultHolder();
     /**
      * Invoked when client receives a message, equivalent to forge's {@code ClientChatReceivedEvent}.
      */
-    Event CLIENT_RECEIVED = EventFactory.createInteractionResultHolder(ClientReceived.class);
+    Event CLIENT_RECEIVED = EventFactory.createInteractionResultHolder();
     
     @Environment(EnvType.CLIENT)
     interface Client {
diff --git a/common/src/main/java/me/shedaniel/architectury/event/events/client/ClientLifecycleEvent.java b/common/src/main/java/me/shedaniel/architectury/event/events/client/ClientLifecycleEvent.java
index c8b2de2b..ca650224 100644
--- a/common/src/main/java/me/shedaniel/architectury/event/events/client/ClientLifecycleEvent.java
+++ b/common/src/main/java/me/shedaniel/architectury/event/events/client/ClientLifecycleEvent.java
@@ -32,15 +32,15 @@ public interface ClientLifecycleEvent {
     /**
      * Invoked when client has been initialised, not available in forge.
      */
-    @Deprecated Event CLIENT_STARTED = EventFactory.createLoop(ClientState.class);
+    @Deprecated Event CLIENT_STARTED = EventFactory.createLoop();
     /**
      * Invoked when client is initialising, not available in forge.
      */
-    @Deprecated Event CLIENT_STOPPING = EventFactory.createLoop(ClientState.class);
+    @Deprecated Event CLIENT_STOPPING = EventFactory.createLoop();
     /**
      * Invoked after a world is loaded only on client, equivalent to forge's {@code WorldEvent.Load}.
      */
-    Event CLIENT_WORLD_LOAD = EventFactory.createLoop(ClientWorldState.class);
+    Event CLIENT_WORLD_LOAD = EventFactory.createLoop();
     Event CLIENT_SETUP = EventFactory.createLoop();
     
     @Deprecated
diff --git a/common/src/main/java/me/shedaniel/architectury/event/events/client/ClientPlayerEvent.java b/common/src/main/java/me/shedaniel/architectury/event/events/client/ClientPlayerEvent.java
index 81efa1cd..cd53ab52 100644
--- a/common/src/main/java/me/shedaniel/architectury/event/events/client/ClientPlayerEvent.java
+++ b/common/src/main/java/me/shedaniel/architectury/event/events/client/ClientPlayerEvent.java
@@ -28,9 +28,9 @@ import org.jetbrains.annotations.Nullable;
 
 @Environment(EnvType.CLIENT)
 public interface ClientPlayerEvent {
-    Event CLIENT_PLAYER_JOIN = EventFactory.createLoop(ClientPlayerJoin.class);
-    Event CLIENT_PLAYER_QUIT = EventFactory.createLoop(ClientPlayerQuit.class);
-    Event CLIENT_PLAYER_RESPAWN = EventFactory.createLoop(ClientPlayerRespawn.class);
+    Event CLIENT_PLAYER_JOIN = EventFactory.createLoop();
+    Event CLIENT_PLAYER_QUIT = EventFactory.createLoop();
+    Event CLIENT_PLAYER_RESPAWN = EventFactory.createLoop();
     
     @Environment(EnvType.CLIENT)
     interface ClientPlayerJoin {
diff --git a/common/src/main/java/me/shedaniel/architectury/event/events/client/ClientRawInputEvent.java b/common/src/main/java/me/shedaniel/architectury/event/events/client/ClientRawInputEvent.java
index 587b494a..5b4c759e 100644
--- a/common/src/main/java/me/shedaniel/architectury/event/events/client/ClientRawInputEvent.java
+++ b/common/src/main/java/me/shedaniel/architectury/event/events/client/ClientRawInputEvent.java
@@ -31,19 +31,19 @@ public interface ClientRawInputEvent {
     /**
      * Invoked after the mouse has scrolled, but doesn't have a screen opened, and in a world, equivalent to forge's {@code InputEvent.MouseScrollEvent}.
      */
-    Event MOUSE_SCROLLED = EventFactory.createInteractionResult(MouseScrolled.class);
+    Event MOUSE_SCROLLED = EventFactory.createInteractionResult();
     /**
      * Invoked after the mouse has clicked, before the screen intercepts, equivalent to forge's {@code InputEvent.RawMouseEvent}.
      */
-    Event MOUSE_CLICKED_PRE = EventFactory.createInteractionResult(MouseClicked.class);
+    Event MOUSE_CLICKED_PRE = EventFactory.createInteractionResult();
     /**
      * Invoked after the mouse has clicked, after the screen intercepts, equivalent to forge's {@code InputEvent.MouseInputEvent}.
      */
-    Event MOUSE_CLICKED_POST = EventFactory.createInteractionResult(MouseClicked.class);
+    Event MOUSE_CLICKED_POST = EventFactory.createInteractionResult();
     /**
      * Invoked after a key was pressed, after the screen intercepts, equivalent to forge's {@code InputEvent.KeyInputEvent}.
      */
-    Event KEY_PRESSED = EventFactory.createInteractionResult(KeyPressed.class);
+    Event KEY_PRESSED = EventFactory.createInteractionResult();
     
     interface KeyPressed {
         InteractionResult keyPressed(Minecraft client, int keyCode, int scanCode, int action, int modifiers);
diff --git a/common/src/main/java/me/shedaniel/architectury/event/events/client/ClientScreenInputEvent.java b/common/src/main/java/me/shedaniel/architectury/event/events/client/ClientScreenInputEvent.java
index 80cd1201..ceeedbf7 100644
--- a/common/src/main/java/me/shedaniel/architectury/event/events/client/ClientScreenInputEvent.java
+++ b/common/src/main/java/me/shedaniel/architectury/event/events/client/ClientScreenInputEvent.java
@@ -29,20 +29,20 @@ import net.minecraft.world.InteractionResult;
 
 @Environment(EnvType.CLIENT)
 public interface ClientScreenInputEvent {
-    Event MOUSE_SCROLLED_PRE = EventFactory.createInteractionResult(MouseScrolled.class);
-    Event MOUSE_SCROLLED_POST = EventFactory.createInteractionResult(MouseScrolled.class);
-    Event MOUSE_CLICKED_PRE = EventFactory.createInteractionResult(MouseClicked.class);
-    Event MOUSE_CLICKED_POST = EventFactory.createInteractionResult(MouseClicked.class);
-    Event MOUSE_RELEASED_PRE = EventFactory.createInteractionResult(MouseReleased.class);
-    Event MOUSE_RELEASED_POST = EventFactory.createInteractionResult(MouseReleased.class);
-    Event MOUSE_DRAGGED_PRE = EventFactory.createInteractionResult(MouseDragged.class);
-    Event MOUSE_DRAGGED_POST = EventFactory.createInteractionResult(MouseDragged.class);
-    Event CHAR_TYPED_PRE = EventFactory.createInteractionResult(KeyTyped.class);
-    Event CHAR_TYPED_POST = EventFactory.createInteractionResult(KeyTyped.class);
-    Event KEY_PRESSED_PRE = EventFactory.createInteractionResult(KeyPressed.class);
-    Event KEY_PRESSED_POST = EventFactory.createInteractionResult(KeyPressed.class);
-    Event KEY_RELEASED_PRE = EventFactory.createInteractionResult(KeyReleased.class);
-    Event KEY_RELEASED_POST = EventFactory.createInteractionResult(KeyReleased.class);
+    Event MOUSE_SCROLLED_PRE = EventFactory.createInteractionResult();
+    Event MOUSE_SCROLLED_POST = EventFactory.createInteractionResult();
+    Event MOUSE_CLICKED_PRE = EventFactory.createInteractionResult();
+    Event MOUSE_CLICKED_POST = EventFactory.createInteractionResult();
+    Event MOUSE_RELEASED_PRE = EventFactory.createInteractionResult();
+    Event MOUSE_RELEASED_POST = EventFactory.createInteractionResult();
+    Event MOUSE_DRAGGED_PRE = EventFactory.createInteractionResult();
+    Event MOUSE_DRAGGED_POST = EventFactory.createInteractionResult();
+    Event CHAR_TYPED_PRE = EventFactory.createInteractionResult();
+    Event CHAR_TYPED_POST = EventFactory.createInteractionResult();
+    Event KEY_PRESSED_PRE = EventFactory.createInteractionResult();
+    Event KEY_PRESSED_POST = EventFactory.createInteractionResult();
+    Event KEY_RELEASED_PRE = EventFactory.createInteractionResult();
+    Event KEY_RELEASED_POST = EventFactory.createInteractionResult();
     
     interface KeyPressed {
         InteractionResult keyPressed(Minecraft client, Screen screen, int keyCode, int scanCode, int modifiers);
diff --git a/common/src/main/java/me/shedaniel/architectury/event/events/client/ClientTickEvent.java b/common/src/main/java/me/shedaniel/architectury/event/events/client/ClientTickEvent.java
index 85f452fc..56b5e6ae 100644
--- a/common/src/main/java/me/shedaniel/architectury/event/events/client/ClientTickEvent.java
+++ b/common/src/main/java/me/shedaniel/architectury/event/events/client/ClientTickEvent.java
@@ -28,10 +28,10 @@ import net.minecraft.client.multiplayer.ClientLevel;
 
 @Environment(EnvType.CLIENT)
 public interface ClientTickEvent {
-    Event CLIENT_PRE = EventFactory.createLoop(Client.class);
-    Event CLIENT_POST = EventFactory.createLoop(Client.class);
-    Event CLIENT_WORLD_PRE = EventFactory.createLoop(ClientWorld.class);
-    Event CLIENT_WORLD_POST = EventFactory.createLoop(ClientWorld.class);
+    Event CLIENT_PRE = EventFactory.createLoop();
+    Event CLIENT_POST = EventFactory.createLoop();
+    Event CLIENT_WORLD_PRE = EventFactory.createLoop();
+    Event CLIENT_WORLD_POST = EventFactory.createLoop();
     
     void tick(T instance);