Skip to content

Commit

Permalink
combine some only slightly differing forge/fabric mixins into the com…
Browse files Browse the repository at this point in the history
…mon source, with mixin groups

move forge model loading to forge events
backport forge overlay handling from 1.19
  • Loading branch information
fayer3 committed Sep 29, 2022
1 parent 1c73703 commit 0a63056
Show file tree
Hide file tree
Showing 14 changed files with 107 additions and 196 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -56,16 +56,11 @@
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.At.Shift;
import org.spongepowered.asm.mixin.injection.Group;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.vivecraft.ClientDataHolder;
import org.vivecraft.GlStateHelper;
import org.vivecraft.IrisHelper;
import org.vivecraft.MethodHolder;
import org.vivecraft.SodiumHelper;
import org.vivecraft.Xevents;
import org.vivecraft.Xplat;
import org.vivecraft.*;
import org.vivecraft.extensions.GameRendererExtension;
import org.vivecraft.extensions.MinecraftExtension;
import org.vivecraft.extensions.PlayerExtension;
Expand Down Expand Up @@ -963,6 +958,52 @@ public void roomScale(ClientLevel pLevelClient, CallbackInfo info) {
ClientDataHolder.getInstance().vrPlayer.setRoomOrigin(0.0D, 0.0D, 0.0D, true);
}

@Group(name = "initMenuworld", min = 1, max = 1)
@Inject(at = @At("HEAD"), method = "method_24040", remap = false, expect = 0)
public void menuInitvarFabric(CallbackInfo ci) {
if (ClientDataHolder.getInstance().vrRenderer.isInitialized()) {
//DataHolder.getInstance().menuWorldRenderer.init();
}
ClientDataHolder.getInstance().vr.postinit();
}
@Group(name = "initMenuworld", min = 1, max = 1)
@Inject(at = @At("HEAD"), method = "lambda$new$2", remap = false, expect = 0)
public void menuInitvarForge(CallbackInfo ci) {
if (ClientDataHolder.getInstance().vrRenderer.isInitialized()) {
//DataHolder.getInstance().menuWorldRenderer.init();
}
ClientDataHolder.getInstance().vr.postinit();
}

@Group(name = "reloadMenuworld", min = 1, max = 1)
@Inject(at = @At("HEAD"), method = "method_24228", remap = false, expect = 0)
public void reloadMenuworldFabric(CallbackInfo ci) {
reloadMenuworld();
}
@Group(name = "reloadMenuworld", min = 1, max = 1)
@Inject(at = @At("HEAD"), method = "lambda$reloadResourcePacks$18", remap = false, expect = 0)
public void reloadMenuworldForge(CallbackInfo ci) {
reloadMenuworld();
}

private void reloadMenuworld() {
// if (DataHolder.getInstance().menuWorldRenderer.isReady() && DataHolder.getInstance().resourcePacksChanged) {
// try {
// DataHolder.getInstance().menuWorldRenderer.destroy();
// DataHolder.getInstance().menuWorldRenderer.prepare();
// } catch (Exception exception) {
// exception.printStackTrace();
// }
// }
CommonDataHolder.getInstance().resourcePacksChanged = false;
}

@Inject(at = @At(value = "FIELD", opcode = Opcodes.PUTFIELD, target = "Lnet/minecraft/client/Minecraft;screen:Lnet/minecraft/client/gui/screens/Screen;", shift = At.Shift.BEFORE, ordinal = 0), method = "setScreen(Lnet/minecraft/client/gui/screens/Screen;)V")
public void gui(Screen pGuiScreen, CallbackInfo info) {
GuiHandler.onScreenChanged(this.screen, pGuiScreen, true);
}


private void drawNotifyMirror() {
if (System.currentTimeMillis() < this.mirroNotifyStart + this.mirroNotifyLen) {
RenderSystem.viewport(0, 0, this.window.getScreenWidth(), this.window.getScreenHeight());
Expand Down
27 changes: 27 additions & 0 deletions common/src/main/java/org/vivecraft/mixin/client/OptionVRMixin.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package org.vivecraft.mixin.client;

import org.spongepowered.asm.mixin.injection.Group;
import org.vivecraft.ClientDataHolder;
import net.minecraft.client.*;
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;


@Mixin(Option.class)
public abstract class OptionVRMixin {

@Group(name = "reinitFrameBuffers", min = 1, max = 1)
@Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;allChanged()V", remap = true), method = "method_32552", remap = false, expect = 0)
private static void reinitFabric(Options options, Option option, GraphicsStatus graphicsStatus, CallbackInfo ci) {
ClientDataHolder.getInstance().vrRenderer.reinitFrameBuffers("gfx setting change");
}

@Group(name = "reinitFrameBuffers", min = 1, max = 1)
@Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;allChanged()V",remap = true), method = "m_193661_", remap = false, expect = 0)
private static void reinitForge(Options options, Option option, GraphicsStatus graphicsStatus, CallbackInfo ci) {
ClientDataHolder.getInstance().vrRenderer.reinitFrameBuffers("gfx setting change");
}

}
1 change: 1 addition & 0 deletions common/src/main/resources/vivecraft.vr.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
"client.MinecraftVRMixin",
"client.MouseHandlerVRMixin",
"client.OptionsVRMixin",
"client.OptionVRMixin",
"client.gui.GuiVRMixin",
"client.gui.NoSodiumGuiVRMixin",
"client.gui.components.EditBoxVRMixin",
Expand Down

This file was deleted.

This file was deleted.

2 changes: 0 additions & 2 deletions fabric/src/main/resources/vivecraft.vr.fabric.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@

],
"client": [
"client.FabricOptionVRMixin",
"FabricMinecraftVRMixin",
"FabricGameRendererVRMixin"
],
"server": [
Expand Down
22 changes: 22 additions & 0 deletions forge/src/main/java/org/vivecraft/forge/event/ClientEvents.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package org.vivecraft.forge.event;

import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.client.event.ModelRegistryEvent;
import net.minecraftforge.client.model.ForgeModelBakery;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import org.vivecraft.ClientDataHolder;
import org.vivecraft.gameplay.trackers.CameraTracker;
import org.vivecraft.gameplay.trackers.TelescopeTracker;

@Mod.EventBusSubscriber(value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD)
public class ClientEvents {
@SubscribeEvent
public static void registerModels(ModelRegistryEvent event) {
ForgeModelBakery.addSpecialModel(TelescopeTracker.scopeModel);
ForgeModelBakery.addSpecialModel(ClientDataHolder.thirdPersonCameraModel);
ForgeModelBakery.addSpecialModel(ClientDataHolder.thirdPersonCameraDisplayModel);
ForgeModelBakery.addSpecialModel(CameraTracker.cameraModel);
ForgeModelBakery.addSpecialModel(CameraTracker.cameraDisplayModel);
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
package org.vivecraft.forge.mixin;

import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Matrix3f;
import com.mojang.math.Matrix4f;
import com.mojang.math.Quaternion;
import net.minecraft.client.Camera;
import net.minecraft.client.renderer.GameRenderer;
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;
import org.vivecraft.ClientDataHolder;
Expand All @@ -17,7 +14,7 @@
@Mixin(GameRenderer.class)
public class ForgeGameRendererVRMixin {

@Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Camera;setAnglesInternal(FF)V"), method = "renderLevel")
@Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Camera;setAnglesInternal(FF)V", remap = false), method = "renderLevel")
public void forgeInternal(Camera camera, float yaw, float pitch) {
if(ClientDataHolder.getInstance().currentPass != RenderPass.LEFT && ClientDataHolder.getInstance().currentPass != RenderPass.RIGHT) {
camera.setAnglesInternal(yaw, pitch);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,36 +1,20 @@
package org.vivecraft.forge.mixin;

import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraftforge.client.gui.ForgeIngameGui;
import net.minecraftforge.client.gui.IIngameOverlay;
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;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

@Mixin(ForgeIngameGui.class)
public abstract class ForgeIngameGuiVRMixin {

@Inject(at = @At("HEAD"), method = "lambda$static$0", remap = false, cancellable = true)
private static void noVignette(CallbackInfo ci) {
ci.cancel();
}

@Inject(at = @At("HEAD"), method = "lambda$static$1", remap = false, cancellable = true)
private static void noSpyglass(CallbackInfo ci) {
ci.cancel();
}

@Inject(at = @At("HEAD"), method = "lambda$static$2", remap = false, cancellable = true)
private static void noHelmet(CallbackInfo ci) {
ci.cancel();
}

@Inject(at = @At("HEAD"), method = "lambda$static$3", remap = false, cancellable = true)
private static void noFreeze(CallbackInfo ci) {
ci.cancel();
}

@Inject(at = @At("HEAD"), method = "lambda$static$4", remap = false, cancellable = true)
private static void noPortal(CallbackInfo ci) {
ci.cancel();
@Inject(method = "pre(Lnet/minecraftforge/client/gui/IIngameOverlay;Lcom/mojang/blaze3d/vertex/PoseStack;)Z", at = @At("HEAD"), remap = false, cancellable = true)
private void noStuff(IIngameOverlay overlay, PoseStack poseStack, CallbackInfoReturnable<Boolean> info) {
if (overlay == ForgeIngameGui.VIGNETTE_ELEMENT || overlay == ForgeIngameGui.SPYGLASS_ELEMENT || overlay == ForgeIngameGui.HELMET_ELEMENT || overlay == ForgeIngameGui.FROSTBITE_ELEMENT || overlay == ForgeIngameGui.PORTAL_ELEMENT) {
info.setReturnValue(true);
}
}
}

This file was deleted.

This file was deleted.

This file was deleted.

1 change: 0 additions & 1 deletion forge/src/main/resources/vivecraft.nonvr.forge.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

],
"client": [
"client.resources.model.ForgeModelBakeryMixin"
],
"server": [
],
Expand Down
2 changes: 0 additions & 2 deletions forge/src/main/resources/vivecraft.vr.forge.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@

],
"client": [
"client.ForgeOptionVRMixin",
"ForgeMinecraftVRMixin",
"ForgeIngameGuiVRMixin",
"ForgeGameRendererVRMixin"
],
Expand Down

0 comments on commit 0a63056

Please sign in to comment.