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 d7305e29..e8a61a92 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
@@ -37,19 +37,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();
     
     /**
      * Invoked during Minecraft#setScreen, equivalent to forge's {@code GuiOpenEvent}.
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);
     
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 71f945a8..caa51508 100644
--- a/fabric/src/main/resources/architectury.mixins.json
+++ b/fabric/src/main/resources/architectury.mixins.json
@@ -14,7 +14,8 @@
     "client.MixinMouseHandler",
     "client.MixinMultiPlayerGameMode",
     "client.MixinScreen",
-    "client.MixinTextureAtlas"
+    "client.MixinTextureAtlas",
+    "client.MixinEffectInstance"
   ],
   "mixins": [
     "ExplosionPreInvoker",