Use callback-style events throughout all versions

Removes the need for //#if statements on each and every event handler.
Instead we now always use the equivalent Callback and have one central 1.12.2
class which forwards Forge events to the callbacks.
This commit is contained in:
Jonas Herzig
2021-02-22 23:11:34 +01:00
parent 0be2082fe7
commit 633bc19650
27 changed files with 110 additions and 378 deletions

View File

@@ -2,6 +2,7 @@ package com.replaymod.core;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;
import com.replaymod.core.events.PreRenderCallback;
import com.replaymod.core.mixin.KeyBindingAccessor;
import de.johni0702.minecraft.gui.utils.EventRegistrations;
import com.replaymod.core.events.KeyBindingEventCallback;
@@ -22,15 +23,6 @@ import static com.replaymod.core.ReplayMod.MOD_ID;
//$$ import net.minecraftforge.fml.client.registry.ClientRegistry;
//#endif
//#if MC>=11400
import com.replaymod.core.events.PreRenderCallback;
//#else
//$$ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
//$$ import net.minecraftforge.fml.common.gameevent.TickEvent;
//$$ import org.lwjgl.input.Keyboard;
//$$ import static com.replaymod.core.versions.MCVer.FML_BUS;
//#endif
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -102,15 +94,7 @@ public class KeyBindingRegistry extends EventRegistrations {
return Collections.unmodifiableSet(onlyInReplay);
}
//#if MC>=11400
{ on(PreRenderCallback.EVENT, this::handleRepeatedKeyBindings); }
//#else
//$$ @SubscribeEvent
//$$ public void onTick(TickEvent.RenderTickEvent event) {
//$$ if (event.phase != TickEvent.Phase.START) return;
//$$ handleRepeatedKeyBindings();
//$$ }
//#endif
public void handleRepeatedKeyBindings() {
for (Binding binding : bindings.values()) {

View File

@@ -1,4 +1,3 @@
//#if MC>=11400
package com.replaymod.core.events;
import de.johni0702.minecraft.gui.utils.Event;
@@ -14,4 +13,3 @@ public interface PostRenderCallback {
void postRender();
}
//#endif

View File

@@ -1,33 +1,16 @@
//#if MC>=11400
package com.replaymod.core.events;
import de.johni0702.minecraft.gui.utils.Event;
//#if MC>=11500
import net.minecraft.client.util.math.MatrixStack;
//#endif
public interface PostRenderWorldCallback {
Event<PostRenderWorldCallback> EVENT = Event.create((listeners) ->
//#if MC>=11500
(MatrixStack matrixStack) -> {
//#else
//$$ () -> {
//#endif
for (PostRenderWorldCallback listener : listeners) {
listener.postRenderWorld(
//#if MC>=11500
matrixStack
//#endif
);
listener.postRenderWorld(matrixStack);
}
}
);
void postRenderWorld(
//#if MC>=11500
MatrixStack matrixStack
//#endif
);
void postRenderWorld(MatrixStack matrixStack);
}
//#endif

View File

@@ -1,4 +1,3 @@
//#if MC>=11400
package com.replaymod.core.events;
import de.johni0702.minecraft.gui.utils.Event;
@@ -14,4 +13,3 @@ public interface PreRenderCallback {
void preRender();
}
//#endif

View File

@@ -1,4 +1,3 @@
//#if MC>=11400
package com.replaymod.core.events;
import de.johni0702.minecraft.gui.utils.Event;
@@ -17,4 +16,3 @@ public interface PreRenderHandCallback {
boolean preRenderHand();
}
//#endif

View File

@@ -12,30 +12,15 @@ import de.johni0702.minecraft.gui.layout.VerticalLayout;
import de.johni0702.minecraft.gui.utils.EventRegistrations;
import de.johni0702.minecraft.gui.utils.lwjgl.Dimension;
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension;
//#if FABRIC>=1
import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback;
import net.minecraft.client.gui.screen.Screen;
//#else
//$$ import net.minecraftforge.client.event.GuiScreenEvent;
//$$ import net.minecraftforge.common.MinecraftForge;
//$$ import net.minecraftforge.eventbus.api.SubscribeEvent;
//$$ import static com.replaymod.core.versions.MCVer.getGui;
//#endif
import static com.replaymod.core.versions.MCVer.getMinecraft;
public class GuiBackgroundProcesses extends EventRegistrations {
private GuiPanel panel = new GuiPanel().setLayout(new VerticalLayout().setSpacing(10));
//#if FABRIC>=1
{ on(InitScreenCallback.EVENT, (screen, buttons) -> onGuiInit(screen)); }
private void onGuiInit(Screen guiScreen) {
//#else
//$$ @SubscribeEvent
//$$ public void onGuiInit(GuiScreenEvent.InitGuiEvent.Post event) {
//$$ net.minecraft.client.gui.screen.Screen guiScreen = getGui(event);
//#endif
private void onGuiInit(net.minecraft.client.gui.screen.Screen guiScreen) {
if (guiScreen != getMinecraft().currentScreen) return; // people tend to construct GuiScreens without opening them
VanillaGuiScreen vanillaGui = VanillaGuiScreen.wrap(guiScreen);

View File

@@ -5,15 +5,12 @@ import com.replaymod.core.events.PostRenderWorldCallback;
import com.replaymod.core.events.PreRenderHandCallback;
import net.minecraft.client.render.Camera;
import net.minecraft.client.render.GameRenderer;
import net.minecraft.client.util.math.MatrixStack;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
//#if MC>=11500
import net.minecraft.client.util.math.MatrixStack;
//#endif
@Mixin(GameRenderer.class)
public class MixinGameRenderer {
@Inject(
@@ -30,11 +27,10 @@ public class MixinGameRenderer {
MatrixStack matrixStack,
//#endif
CallbackInfo ci) {
PostRenderWorldCallback.EVENT.invoker().postRenderWorld(
//#if MC>=11500
matrixStack
//#endif
);
//#if MC<11500
//$$ MatrixStack matrixStack = new MatrixStack();
//#endif
PostRenderWorldCallback.EVENT.invoker().postRenderWorld(matrixStack);
}
@Inject(method = "renderHand", at = @At("HEAD"), cancellable = true)

View File

@@ -0,0 +1 @@
// Forge only