diff --git a/gradle-compose.yml b/gradle-compose.yml index a567398e..d376ac86 100644 --- a/gradle-compose.yml +++ b/gradle-compose.yml @@ -1,5 +1,5 @@ version: '0.0.2' -source: "https://github.com/tr7zw/ProcessedModTemplate/tree/master" +source: "https://github.com/tr7zw/ProcessedModTemplate/tree/stonecutter" replacements: name: "FirstPerson" id: "firstperson" @@ -43,6 +43,7 @@ enabledFlags: - includeLibs - addTRansitionLib - addTRenderLib + - mixinextras rootProject: template: "." subProjects: diff --git a/settings.json b/settings.json index aff456ef..13c525eb 100644 --- a/settings.json +++ b/settings.json @@ -18,9 +18,9 @@ "1.20.6-forge", "1.20.6-neoforge", "1.20.6-fabric", - "1.21-forge", - "1.21-neoforge", - "1.21-fabric", + "1.21.1-forge", + "1.21.1-neoforge", + "1.21.1-fabric", "1.21.3-forge", "1.21.3-neoforge", "1.21.3-fabric", @@ -30,8 +30,11 @@ "1.21.5-forge", "1.21.5-neoforge", "1.21.5-fabric", - "1.21.6-forge", - "1.21.6-neoforge", - "1.21.6-fabric" + "1.21.8-forge", + "1.21.8-neoforge", + "1.21.8-fabric", + "1.21.10-forge", + "1.21.10-neoforge", + "1.21.10-fabric" ] } diff --git a/src/main/java/dev/tr7zw/firstperson/FirstPersonBootstrap.java b/src/main/java/dev/tr7zw/firstperson/FirstPersonBootstrap.java index 0261273d..6d79e982 100644 --- a/src/main/java/dev/tr7zw/firstperson/FirstPersonBootstrap.java +++ b/src/main/java/dev/tr7zw/firstperson/FirstPersonBootstrap.java @@ -1,41 +1,49 @@ -//#if FORGE -//$$package dev.tr7zw.firstperson; -//$$ -//$$import net.minecraftforge.api.distmarker.Dist; -//$$import net.minecraftforge.fml.DistExecutor; -//$$import net.minecraftforge.fml.common.Mod; -//$$import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -//$$import dev.tr7zw.transition.loader.ModLoaderUtil; -//$$ -//$$@Mod("firstperson") -//$$public class FirstPersonBootstrap { -//$$ -//$$ public FirstPersonBootstrap(FMLJavaModLoadingContext context) { -//$$ ModLoaderUtil.setModLoadingContext(context); -//$$ DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { -//$$ new FirstPersonModelMod().sharedSetup(); -//$$ }); -//$$ } -//$$ public FirstPersonBootstrap() { -//$$ this(FMLJavaModLoadingContext.get()); -//$$ } -//$$ -//$$} -//#elseif NEOFORGE -//$$package dev.tr7zw.firstperson; -//$$ -//$$import net.neoforged.api.distmarker.Dist; -//$$import net.neoforged.fml.loading.FMLEnvironment; -//$$import net.neoforged.fml.common.Mod; -//$$ -//$$@Mod("firstperson") -//$$public class FirstPersonBootstrap { -//$$ -//$$ public FirstPersonBootstrap() { -//$$ if(FMLEnvironment.dist == Dist.CLIENT) { -//$$ dev.tr7zw.transition.loader.ModLoaderEventUtil.registerClientSetupListener(() -> new FirstPersonModelMod().sharedSetup()); -//$$ } -//$$ } -//$$ -//$$} -//#endif \ No newline at end of file +//? if forge { +/* +package dev.tr7zw.firstperson; + +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.fml.DistExecutor; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import dev.tr7zw.transition.loader.ModLoaderUtil; + +@Mod("firstperson") +public class FirstPersonBootstrap { + + public FirstPersonBootstrap(FMLJavaModLoadingContext context) { + ModLoaderUtil.setModLoadingContext(context); + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { + new FirstPersonModelMod().sharedSetup(); + }); + } + + public FirstPersonBootstrap() { + this(FMLJavaModLoadingContext.get()); + } + +} +*///? } else if neoforge { +/* + package dev.tr7zw.firstperson; + +import net.neoforged.api.distmarker.Dist; +import net.neoforged.fml.loading.FMLEnvironment; +import net.neoforged.fml.common.Mod; + + @Mod("firstperson") + public class FirstPersonBootstrap { + + public FirstPersonBootstrap() { + //? if < 1.21.9 { + /^ + if (FMLEnvironment.dist == Dist.CLIENT) { + ^///? } else { + + if (FMLEnvironment.getDist() == Dist.CLIENT) { + //? } + dev.tr7zw.transition.loader.ModLoaderEventUtil.registerClientSetupListener(() -> new FirstPersonModelMod().sharedSetup()); + } + } +} +*///? } diff --git a/src/main/java/dev/tr7zw/firstperson/FirstPersonModelCore.java b/src/main/java/dev/tr7zw/firstperson/FirstPersonModelCore.java index c08cfa01..7b207c29 100644 --- a/src/main/java/dev/tr7zw/firstperson/FirstPersonModelCore.java +++ b/src/main/java/dev/tr7zw/firstperson/FirstPersonModelCore.java @@ -1,20 +1,16 @@ package dev.tr7zw.firstperson; -import dev.tr7zw.firstperson.access.PlayerRendererAccess; -import dev.tr7zw.firstperson.api.FirstPersonAPI; -import dev.tr7zw.firstperson.config.ConfigScreenProvider; -import dev.tr7zw.firstperson.modsupport.ModSupportLoader; -import dev.tr7zw.firstperson.modsupport.PlayerAnimatorSupport; -import dev.tr7zw.firstperson.versionless.FirstPersonBase; -import dev.tr7zw.transition.loader.ModLoaderEventUtil; -import dev.tr7zw.transition.loader.ModLoaderUtil; -import lombok.Getter; -import net.minecraft.client.CameraType; -import net.minecraft.client.KeyMapping; -import net.minecraft.client.Minecraft; -//#if MC >= 12106 -import net.minecraft.client.renderer.entity.state.PlayerRenderState; -//#endif +import dev.tr7zw.firstperson.access.*; +import dev.tr7zw.firstperson.api.*; +import dev.tr7zw.firstperson.config.*; +import dev.tr7zw.firstperson.modsupport.*; +import dev.tr7zw.firstperson.versionless.*; +import dev.tr7zw.transition.loader.*; +import lombok.*; +import net.minecraft.client.*; +//? if >= 1.21.2 +import net.minecraft.client.renderer.entity.state.*; +import net.minecraft.resources.*; public abstract class FirstPersonModelCore extends FirstPersonBase { @@ -22,7 +18,12 @@ public abstract class FirstPersonModelCore extends FirstPersonBase { private LogicHandler logicHandler; public static FirstPersonModelCore instance; private boolean isHeld = false; - private KeyMapping keyBinding = new KeyMapping("key.firstperson.toggle", 295, "firstperson.keybind"); + private KeyMapping keyBinding = new KeyMapping("key.firstperson.toggle", 295, + //? if >= 1.21.9 { + new KeyMapping.Category(ResourceLocation.fromNamespaceAndPath("firstperson", "keybind"))); + //? } else { + /*"firstperson.keybind"); + *///? } private boolean lateInit = true; @Deprecated public static boolean enabled = true; @@ -45,16 +46,21 @@ public void sharedSetup() { ModLoaderUtil.disableDisplayTest(); ModLoaderUtil.registerConfigScreen(ConfigScreenProvider::createConfigScreen); - //#if NEOFORGE - //$$ ModLoaderUtil.registerForgeEvent(new dev.tr7zw.firstperson.forge.RenderHandEventListener()::onRender); - //#endif - //#if FORGE - //#if MC >= 12106 - //$$ net.minecraftforge.client.event.RenderHandEvent.BUS.addListener(new dev.tr7zw.firstperson.forge.RenderHandEventListener()::onRender); - //#else - //$$ ModLoaderUtil.registerForgeEvent(new dev.tr7zw.firstperson.forge.RenderHandEventListener()::onRender); - //#endif - //#endif + //? if neoforge { + /* + ModLoaderUtil.registerForgeEvent(new dev.tr7zw.firstperson.forge.RenderHandEventListener()::onRender); + *///? } + //? if forge { + /* + //? if >= 1.21.6 { + + net.minecraftforge.client.event.RenderHandEvent.BUS + .addListener(new dev.tr7zw.firstperson.forge.RenderHandEventListener()::onRender); + //? } else { + + // ModLoaderUtil.registerForgeEvent(new dev.tr7zw.firstperson.forge.RenderHandEventListener()::onRender); + //? } + *///? } ModSupportLoader.loadSupport(); } @@ -111,15 +117,17 @@ public void setEnabled(boolean enabled) { public void updatePlayerLayers() { PlayerRendererAccess access = null; - //#if MC >= 12106 - access = (PlayerRendererAccess) Minecraft.getInstance().getEntityRenderDispatcher() - .getRenderer(new PlayerRenderState()); - //#else - //$$if (Minecraft.getInstance().player != null) { - //$$ access = (PlayerRendererAccess) Minecraft.getInstance().getEntityRenderDispatcher() - //$$ .getRenderer(Minecraft.getInstance().player); - //$$} - //#endif + //? if >= 1.21.6 { + + access = (PlayerRendererAccess) Minecraft.getInstance().getEntityRenderDispatcher().getRenderer( + /*? if >= 1.21.9 {*/new AvatarRenderState()/*?} else {*//*new PlayerRenderState()*//*? }*/); + //? } else { + /* + if (Minecraft.getInstance().player != null) { + access = (PlayerRendererAccess) Minecraft.getInstance().getEntityRenderDispatcher() + .getRenderer(Minecraft.getInstance().player); + } + *///? } if (access != null) { access.updatePartsList(lastCameraType != CameraType.FIRST_PERSON); } diff --git a/src/main/java/dev/tr7zw/firstperson/FirstPersonModelMod.java b/src/main/java/dev/tr7zw/firstperson/FirstPersonModelMod.java index a6fdfc2e..bfe24f00 100644 --- a/src/main/java/dev/tr7zw/firstperson/FirstPersonModelMod.java +++ b/src/main/java/dev/tr7zw/firstperson/FirstPersonModelMod.java @@ -1,18 +1,21 @@ package dev.tr7zw.firstperson; -//#if FABRIC -import net.fabricmc.api.ClientModInitializer; -//#endif +//? if fabric { + +import net.fabricmc.api.*; +//? } public class FirstPersonModelMod extends FirstPersonModelCore - //#if FABRIC + //? if fabric { + implements ClientModInitializer -//#endif +//? } { - //#if FABRIC + //? if fabric { + @Override - //#endif + //? } public void onInitializeClient() { sharedSetup(); } diff --git a/src/main/java/dev/tr7zw/firstperson/InventoryUtil.java b/src/main/java/dev/tr7zw/firstperson/InventoryUtil.java index 78ce1cfe..437f8d94 100644 --- a/src/main/java/dev/tr7zw/firstperson/InventoryUtil.java +++ b/src/main/java/dev/tr7zw/firstperson/InventoryUtil.java @@ -1,51 +1,60 @@ package dev.tr7zw.firstperson; -import java.util.List; +import net.minecraft.world.entity.player.*; +import net.minecraft.world.item.*; -import net.minecraft.world.entity.player.Inventory; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; +import java.util.*; public class InventoryUtil { public static Inventory getInventory(Player player) { - //#if MC >= 11700 + //? if >= 1.17.0 { + return player.getInventory(); - //#else - //$$ return player.inventory; - //#endif + //? } else { + /* + return player.inventory; + *///? } } public static ItemStack getSelected(Inventory inventory) { - //#if MC >= 12105 + //? if >= 1.21.5 { + return inventory.getSelectedItem(); - //#else - //$$ return inventory.getSelected(); - //#endif + //? } else { + /* + return inventory.getSelected(); + *///? } } public static ItemStack getOffhand(Inventory inventory) { - //#if MC >= 12105 + //? if >= 1.21.5 { + return inventory.getItem(Inventory.SLOT_OFFHAND); - //#else - //$$ return inventory.offhand.get(0); - //#endif + //? } else { + /* + return inventory.offhand.get(0); + *///? } } public static int getSelectedId(Inventory inventory) { - //#if MC >= 12105 + //? if >= 1.21.5 { + return inventory.getSelectedSlot(); - //#else - //$$ return inventory.selected; - //#endif + //? } else { + /* + return inventory.selected; + *///? } } public static List getNonEquipmentItems(Inventory inventory) { - //#if MC >= 12105 + //? if >= 1.21.5 { + return inventory.getNonEquipmentItems(); - //#else - //$$ return inventory.items; - //#endif + //? } else { + /* + return inventory.items; + *///? } } } diff --git a/src/main/java/dev/tr7zw/firstperson/LogicHandler.java b/src/main/java/dev/tr7zw/firstperson/LogicHandler.java index 24c137c8..015ba8c2 100644 --- a/src/main/java/dev/tr7zw/firstperson/LogicHandler.java +++ b/src/main/java/dev/tr7zw/firstperson/LogicHandler.java @@ -1,31 +1,22 @@ package dev.tr7zw.firstperson; -import java.util.HashSet; -import java.util.Set; - -import dev.tr7zw.firstperson.api.ActivationHandler; -import dev.tr7zw.firstperson.api.FirstPersonAPI; -import dev.tr7zw.firstperson.versionless.Constants; -import dev.tr7zw.firstperson.versionless.FirstPersonBase; -import dev.tr7zw.firstperson.versionless.config.VanillaHands; -import dev.tr7zw.transition.mc.EntityUtil; -import dev.tr7zw.transition.mc.GeneralUtil; -import dev.tr7zw.transition.mc.ItemUtil; -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import net.minecraft.client.CameraType; -import net.minecraft.client.Minecraft; -import net.minecraft.client.player.AbstractClientPlayer; -import net.minecraft.util.Mth; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.Pose; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.entity.vehicle.Boat; -import net.minecraft.world.entity.vehicle.Minecart; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.phys.Vec3; +import dev.tr7zw.firstperson.api.*; +import dev.tr7zw.firstperson.versionless.*; +import dev.tr7zw.firstperson.versionless.config.*; +import dev.tr7zw.transition.mc.*; +import lombok.*; +import net.minecraft.client.*; +import net.minecraft.client.player.*; +//? if >= 1.21.2 +import net.minecraft.client.renderer.entity.state.*; +import net.minecraft.util.*; +import net.minecraft.world.entity.*; +import net.minecraft.world.entity.player.*; +import net.minecraft.world.entity.vehicle.*; +import net.minecraft.world.item.*; +import net.minecraft.world.phys.*; + +import java.util.*; @RequiredArgsConstructor public class LogicHandler { @@ -53,11 +44,12 @@ void registerDefaultHandlers() { || autoDisableItems.contains(client.player.getOffhandItem().getItem())) { return true; } - //#if MC >= 11700 + //? if >= 1.17.0 { + if (client.player.isScoping()) { return true; } - //#endif + //? } return false; }); } @@ -99,8 +91,7 @@ public void updatePositionOffset(Entity entity, float delta) { double z = 0; AbstractClientPlayer player; double realYaw; - if ((entity != client.player) || (client.options.getCameraType() != CameraType.FIRST_PERSON) - || !fpm.isRenderingPlayer()) { + if ((entity != client.player) || (client.options.getCameraType() != CameraType.FIRST_PERSON)) { return; } player = (AbstractClientPlayer) entity; @@ -144,6 +135,9 @@ public void updatePositionOffset(Entity entity, float delta) { } offset = new Vec3(x, y, z); + for (PlayerOffsetHandler handler : FirstPersonAPI.getPlayerOffsetHandlers()) { + offset = handler.applyOffset(client.player, delta, Vec3.ZERO, offset); + } } private static float calculateBodyRot(float entityBodyRot, float riderHeadRot) { @@ -283,8 +277,18 @@ && isSwimming(player)) { * @return */ public boolean lookingDown() { - return dynamicHandsEnabled() && EntityUtil.getXRot(Minecraft.getInstance().player) > 30; + return lookingDown(client.player); + } + + public boolean lookingDown(LivingEntity livingEntity) { + return dynamicHandsEnabled() && EntityUtil.getXRot(livingEntity) > 30; + } + + //? if >= 1.21.6 { + public boolean lookingDown(LivingEntityRenderState state) { + return dynamicHandsEnabled() && state.xRot > 30; } + //? } public void addAutoVanillaHandsItem(Item item) { autoVanillaHandItems.add(item); diff --git a/src/main/java/dev/tr7zw/firstperson/access/AgeableListModelAccess.java b/src/main/java/dev/tr7zw/firstperson/access/AgeableListModelAccess.java index 18adbda4..5c2899f0 100644 --- a/src/main/java/dev/tr7zw/firstperson/access/AgeableListModelAccess.java +++ b/src/main/java/dev/tr7zw/firstperson/access/AgeableListModelAccess.java @@ -1,6 +1,6 @@ package dev.tr7zw.firstperson.access; -import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.*; public interface AgeableListModelAccess { diff --git a/src/main/java/dev/tr7zw/firstperson/access/LivingEntityRenderStateAccess.java b/src/main/java/dev/tr7zw/firstperson/access/LivingEntityRenderStateAccess.java new file mode 100644 index 00000000..d2f09254 --- /dev/null +++ b/src/main/java/dev/tr7zw/firstperson/access/LivingEntityRenderStateAccess.java @@ -0,0 +1,30 @@ +package dev.tr7zw.firstperson.access; + +public interface LivingEntityRenderStateAccess { + + void setIsCameraEntity(boolean value); + + boolean isCameraEntity(); + + default void setHideArms(boolean value) { + setHideLeftArm(value); + setHideRightArm(value); + } + + void setHideRightArm(boolean value); + + void setHideLeftArm(boolean value); + + boolean hideLeftArm(); + + boolean hideRightArm(); + + void setHideBody(boolean value); + + boolean hideBody(); + + void setArmOffset(float offset); + + float getArmOffset(); + +} diff --git a/src/main/java/dev/tr7zw/firstperson/access/PlayerModelAccess.java b/src/main/java/dev/tr7zw/firstperson/access/PlayerModelAccess.java index 46f337ab..b567b605 100644 --- a/src/main/java/dev/tr7zw/firstperson/access/PlayerModelAccess.java +++ b/src/main/java/dev/tr7zw/firstperson/access/PlayerModelAccess.java @@ -1,13 +1,15 @@ package dev.tr7zw.firstperson.access; -//#if MC < 12103 -//$$import net.minecraft.client.model.geom.ModelPart; -//#endif +//? if < 1.21.3 { +/* +import net.minecraft.client.model.geom.ModelPart; +*///? } public interface PlayerModelAccess { - //#if MC < 12103 - //$$ ModelPart getCloak(); - //#endif + //? if < 1.21.3 { + /* + ModelPart getCloak(); + *///? } } diff --git a/src/main/java/dev/tr7zw/firstperson/access/PlayerRendererAccess.java b/src/main/java/dev/tr7zw/firstperson/access/PlayerRendererAccess.java index 937812eb..186524dd 100644 --- a/src/main/java/dev/tr7zw/firstperson/access/PlayerRendererAccess.java +++ b/src/main/java/dev/tr7zw/firstperson/access/PlayerRendererAccess.java @@ -1,8 +1,8 @@ package dev.tr7zw.firstperson.access; -import java.util.List; +import net.minecraft.client.renderer.entity.layers.*; -import net.minecraft.client.renderer.entity.layers.RenderLayer; +import java.util.*; public interface PlayerRendererAccess { diff --git a/src/main/java/dev/tr7zw/firstperson/api/FirstPersonAPI.java b/src/main/java/dev/tr7zw/firstperson/api/FirstPersonAPI.java index 7404af8a..7c36a65e 100644 --- a/src/main/java/dev/tr7zw/firstperson/api/FirstPersonAPI.java +++ b/src/main/java/dev/tr7zw/firstperson/api/FirstPersonAPI.java @@ -1,9 +1,8 @@ package dev.tr7zw.firstperson.api; -import java.util.ArrayList; -import java.util.List; +import dev.tr7zw.firstperson.*; -import dev.tr7zw.firstperson.FirstPersonModelCore; +import java.util.*; public final class FirstPersonAPI { diff --git a/src/main/java/dev/tr7zw/firstperson/api/PlayerOffsetHandler.java b/src/main/java/dev/tr7zw/firstperson/api/PlayerOffsetHandler.java index 7d175bfe..b9424720 100644 --- a/src/main/java/dev/tr7zw/firstperson/api/PlayerOffsetHandler.java +++ b/src/main/java/dev/tr7zw/firstperson/api/PlayerOffsetHandler.java @@ -1,7 +1,7 @@ package dev.tr7zw.firstperson.api; -import net.minecraft.client.player.AbstractClientPlayer; -import net.minecraft.world.phys.Vec3; +import net.minecraft.client.player.*; +import net.minecraft.world.phys.*; public interface PlayerOffsetHandler { diff --git a/src/main/java/dev/tr7zw/firstperson/config/ConfigScreenProvider.java b/src/main/java/dev/tr7zw/firstperson/config/ConfigScreenProvider.java index cdb01ff7..7b5e6f81 100644 --- a/src/main/java/dev/tr7zw/firstperson/config/ConfigScreenProvider.java +++ b/src/main/java/dev/tr7zw/firstperson/config/ConfigScreenProvider.java @@ -1,35 +1,25 @@ package dev.tr7zw.firstperson.config; -import java.util.ArrayList; -import java.util.List; -import java.util.Map.Entry; +import dev.tr7zw.firstperson.*; +import dev.tr7zw.firstperson.access.*; +import dev.tr7zw.firstperson.versionless.config.*; +import dev.tr7zw.transition.mc.*; +import dev.tr7zw.trender.gui.client.*; +import dev.tr7zw.trender.gui.widget.*; +import dev.tr7zw.trender.gui.widget.data.*; +import dev.tr7zw.trender.gui.widget.icon.*; +import lombok.experimental.*; +import net.minecraft.client.*; +import net.minecraft.client.gui.screens.*; +import net.minecraft.client.renderer.entity.layers.*; +//? if >= 1.21.2 +import net.minecraft.client.renderer.entity.state.*; +import net.minecraft.network.chat.*; +import net.minecraft.resources.*; +import net.minecraft.world.item.*; -import dev.tr7zw.firstperson.FirstPersonModelCore; -import dev.tr7zw.firstperson.access.PlayerRendererAccess; -import dev.tr7zw.firstperson.versionless.config.VanillaHands; -import dev.tr7zw.transition.mc.ComponentProvider; -import dev.tr7zw.transition.mc.ItemUtil; -import dev.tr7zw.trender.gui.client.AbstractConfigScreen; -import dev.tr7zw.trender.gui.client.BackgroundPainter; -import dev.tr7zw.trender.gui.widget.WButton; -import dev.tr7zw.trender.gui.widget.WGridPanel; -import dev.tr7zw.trender.gui.widget.WListPanel; -import dev.tr7zw.trender.gui.widget.WTabPanel; -import dev.tr7zw.trender.gui.widget.WTextField; -import dev.tr7zw.trender.gui.widget.WToggleButton; -import dev.tr7zw.trender.gui.widget.data.Insets; -import dev.tr7zw.trender.gui.widget.icon.ItemIcon; -import lombok.experimental.UtilityClass; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.screens.Screen; -import net.minecraft.client.renderer.entity.layers.RenderLayer; -//#if MC >= 12106 -import net.minecraft.client.renderer.entity.state.PlayerRenderState; -//#endif -import net.minecraft.network.chat.CommonComponents; -import net.minecraft.resources.ResourceKey; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.Items; +import java.util.*; +import java.util.Map.*; @UtilityClass public class ConfigScreenProvider { @@ -150,15 +140,17 @@ public CustomConfigScreen(Screen previous) { // Layers PlayerRendererAccess access = null; - //#if MC >= 12106 - access = (PlayerRendererAccess) Minecraft.getInstance().getEntityRenderDispatcher() - .getRenderer(new PlayerRenderState()); - //#else - //$$if (Minecraft.getInstance().player != null) { - //$$ access = (PlayerRendererAccess) Minecraft.getInstance().getEntityRenderDispatcher() - //$$ .getRenderer(Minecraft.getInstance().player); - //$$} - //#endif + //? if >= 1.21.6 { + + access = (PlayerRendererAccess) Minecraft.getInstance().getEntityRenderDispatcher().getRenderer( + /*? if >= 1.21.9 {*/new AvatarRenderState()/*?} else {*//*new PlayerRenderState()*//*? }*/); + //? } else { + /* + if (Minecraft.getInstance().player != null) { + access = (PlayerRendererAccess) Minecraft.getInstance().getEntityRenderDispatcher() + .getRenderer(Minecraft.getInstance().player); + } + *///? } if (access != null) { WListPanel layerList = new WListPanel( access.getRenderLayers(), () -> new WToggleButton(ComponentProvider.EMPTY), (s, l) -> { diff --git a/src/main/java/dev/tr7zw/firstperson/fabric/FPModMenuProvider.java b/src/main/java/dev/tr7zw/firstperson/fabric/FPModMenuProvider.java index f41a7ea9..8c72ff47 100644 --- a/src/main/java/dev/tr7zw/firstperson/fabric/FPModMenuProvider.java +++ b/src/main/java/dev/tr7zw/firstperson/fabric/FPModMenuProvider.java @@ -1,10 +1,9 @@ -//#if FABRIC -package dev.tr7zw.firstperson.fabric; +//? if fabric { -import com.terraformersmc.modmenu.api.ConfigScreenFactory; -import com.terraformersmc.modmenu.api.ModMenuApi; +package dev.tr7zw.firstperson.fabric; -import dev.tr7zw.firstperson.config.ConfigScreenProvider; +import com.terraformersmc.modmenu.api.*; +import dev.tr7zw.firstperson.config.*; public class FPModMenuProvider implements ModMenuApi { @@ -14,4 +13,4 @@ public ConfigScreenFactory getModConfigScreenFactory() { } } -//#endif \ No newline at end of file +//? } diff --git a/src/main/java/dev/tr7zw/firstperson/forge/RenderHandEventListener.java b/src/main/java/dev/tr7zw/firstperson/forge/RenderHandEventListener.java index 5ce5f27b..6f757b0d 100644 --- a/src/main/java/dev/tr7zw/firstperson/forge/RenderHandEventListener.java +++ b/src/main/java/dev/tr7zw/firstperson/forge/RenderHandEventListener.java @@ -1,36 +1,43 @@ -//#if FORGE || NEOFORGE -//$$ package dev.tr7zw.firstperson.forge; -//$$ -//$$ import dev.tr7zw.firstperson.FirstPersonModelCore; -//#if FORGE -//$$ import net.minecraftforge.client.event.RenderHandEvent; -//#if MC >= 12106 -//$$ import net.minecraftforge.eventbus.api.listener.SubscribeEvent; -//#else -//$$ import net.minecraftforge.eventbus.api.SubscribeEvent; -//#endif -//#else -//$$ import net.neoforged.bus.api.SubscribeEvent; -//$$ import net.neoforged.neoforge.client.event.RenderHandEvent; -//#endif -//$$ -//$$ public class RenderHandEventListener { -//$$ -//$$ @SubscribeEvent -//#if MC >= 12106 && FORGE -//$$ public boolean onRender(RenderHandEvent e) { -//$$ if(FirstPersonModelCore.instance.isEnabled() && !FirstPersonModelCore.instance.getLogicHandler().showVanillaHands()) { -//$$ return true; -//$$ } -//$$ return false; -//$$ } -//#else -//$$ public void onRender(RenderHandEvent e) { -//$$ if(FirstPersonModelCore.instance.isEnabled() && !FirstPersonModelCore.instance.getLogicHandler().showVanillaHands()) { -//$$ e.setCanceled(true); -//$$ } -//$$ } -//#endif -//$$ -//$$ } -//#endif \ No newline at end of file +//? if forge || neoforge { +/* +package dev.tr7zw.firstperson.forge; + +import dev.tr7zw.firstperson.FirstPersonModelCore; + +//? if >= 1.21.6 && forge { +/^ +import net.minecraftforge.eventbus.api.listener.SubscribeEvent; +^///? } else if forge { +// import net.minecraftforge.client.event.RenderHandEvent; +// import net.minecraftforge.eventbus.api.SubscribeEvent; +//? } + +//? if neoforge { +/^ + import net.neoforged.bus.api.SubscribeEvent; + import net.neoforged.neoforge.client.event.RenderHandEvent; + ^///? } + +public class RenderHandEventListener { + + @SubscribeEvent + //? if >= 1.21.6 && forge { +/^ + public boolean onRender(net.minecraftforge.client.event.RenderHandEvent e) { + if (FirstPersonModelCore.instance.isEnabled() + && !FirstPersonModelCore.instance.getLogicHandler().showVanillaHands()) { + return true; + } + return false; + } + ^///? } else { + + public void onRender(RenderHandEvent e) { + if(FirstPersonModelCore.instance.isEnabled() && !FirstPersonModelCore.instance.getLogicHandler().showVanillaHands()) { + e.setCanceled(true); + } + } + //? } + +} +*///? } diff --git a/src/main/java/dev/tr7zw/firstperson/mixins/AgeableListModelMixin.java b/src/main/java/dev/tr7zw/firstperson/mixins/AgeableListModelMixin.java index 9ff9d8aa..716d3443 100644 --- a/src/main/java/dev/tr7zw/firstperson/mixins/AgeableListModelMixin.java +++ b/src/main/java/dev/tr7zw/firstperson/mixins/AgeableListModelMixin.java @@ -1,29 +1,27 @@ package dev.tr7zw.firstperson.mixins; -import org.spongepowered.asm.mixin.Mixin; +import net.minecraft.client.model.geom.*; +import org.spongepowered.asm.mixin.*; -//#if MC < 12103 -//$$import org.spongepowered.asm.mixin.Shadow; -//$$import dev.tr7zw.firstperson.access.AgeableListModelAccess; -//$$import net.minecraft.client.model.AgeableListModel; -//#endif -import net.minecraft.client.model.geom.ModelPart; +//? if >= 1.21.3 { -//#if MC >= 12103 @Mixin(ModelPart.class) public abstract class AgeableListModelMixin { } -//#else -//$$@Mixin(AgeableListModel.class) -//$$public abstract class AgeableListModelMixin implements AgeableListModelAccess { -//$$ -//$$ @Override -//$$ public Iterable firstPersonHeadPartsGetter() { -//$$ return headParts(); -//$$ } -//$$ -//$$ @Shadow -//$$ public abstract Iterable headParts(); -//$$ -//$$} -//#endif \ No newline at end of file +//? } else { +/*import dev.tr7zw.firstperson.access.*; +import net.minecraft.client.model.*; + +@Mixin(AgeableListModel.class) +public abstract class AgeableListModelMixin implements AgeableListModelAccess { + + @Override + public Iterable firstPersonHeadPartsGetter() { + return headParts(); + } + + @Shadow + public abstract Iterable headParts(); + +} +*///? } diff --git a/src/main/java/dev/tr7zw/firstperson/mixins/ArmorFeatureRendererMixin.java b/src/main/java/dev/tr7zw/firstperson/mixins/ArmorFeatureRendererMixin.java index 6c0c5072..d0b1a6fd 100644 --- a/src/main/java/dev/tr7zw/firstperson/mixins/ArmorFeatureRendererMixin.java +++ b/src/main/java/dev/tr7zw/firstperson/mixins/ArmorFeatureRendererMixin.java @@ -1,27 +1,11 @@ package dev.tr7zw.firstperson.mixins; -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; - -import com.mojang.blaze3d.vertex.PoseStack; - -import dev.tr7zw.firstperson.FirstPersonModelCore; -import dev.tr7zw.firstperson.versionless.mixinbase.ModelPartBase; -import net.minecraft.client.Minecraft; -import net.minecraft.client.model.HumanoidModel; -import net.minecraft.client.player.LocalPlayer; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.entity.RenderLayerParent; -import net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer; -import net.minecraft.client.renderer.entity.layers.RenderLayer; -import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.entity.LivingEntity; -//#if MC >= 12103 -import net.minecraft.world.item.equipment.Equippable; -//#endif +import net.minecraft.client.*; +import net.minecraft.client.model.*; +import net.minecraft.client.renderer.entity.*; +import net.minecraft.client.renderer.entity.layers.*; +import net.minecraft.world.entity.*; +import org.spongepowered.asm.mixin.*; // lower prio to run before fabric api @SuppressWarnings("rawtypes") @@ -37,7 +21,7 @@ protected ArmorFeatureRendererMixin(RenderLayerParent context) { super(context); } - //#if MC >= 12103 + /*//#if MC >= 12103 @Inject(method = "Lnet/minecraft/client/renderer/entity/layers/HumanoidArmorLayer;shouldRender(Lnet/minecraft/world/item/equipment/Equippable;Lnet/minecraft/world/entity/EquipmentSlot;)Z", at = @At("HEAD"), cancellable = true) private static void shouldRender(Equippable equippable, EquipmentSlot equipmentSlot, CallbackInfoReturnable ci) { @@ -55,7 +39,7 @@ private static void shouldRender(Equippable equippable, EquipmentSlot equipmentS hideLeftArm = true; hideRightArm = true; } else if (FirstPersonModelCore.instance.getLogicHandler().dynamicHandsEnabled()) {// TODO DYNAMIC HAND - + if (!Minecraft.getInstance().player.getOffhandItem().isEmpty()) hideLeftArm = true; if (!Minecraft.getInstance().player.getMainHandItem().isEmpty()) @@ -64,7 +48,7 @@ private static void shouldRender(Equippable equippable, EquipmentSlot equipmentS } } } - + @Inject(method = "setPartVisibility", at = @At("TAIL")) protected void setPartVisibility(A model, EquipmentSlot slot, CallbackInfo ci) { if (hideLeftArm) { @@ -78,10 +62,11 @@ protected void setPartVisibility(A model, EquipmentSlot slot, CallbackInfo ci) { ((ModelPartBase) (Object) model.rightArm).showAgain(); } } - - //#else - //$$@Inject(method = "renderArmorPiece", at = @At("HEAD"), cancellable = true) - //#endif + + //? } else { + + // @Inject(method = "renderArmorPiece", at = @At("HEAD"), cancellable = true) + //? } private void renderArmor(PoseStack matrices, MultiBufferSource vertexConsumers, T livingEntity, EquipmentSlot equipmentSlot, int i, A bipedEntityModel, CallbackInfo info) { if (livingEntity != fpmMcInstance.cameraEntity) { @@ -112,6 +97,6 @@ private void renderArmor(PoseStack matrices, MultiBufferSource vertexConsumers, ((ModelPartBase) (Object) bipedEntityModel.leftArm).showAgain(); ((ModelPartBase) (Object) bipedEntityModel.rightArm).showAgain(); } - } + }*/ } diff --git a/src/main/java/dev/tr7zw/firstperson/mixins/CustomHeadLayerMixin.java b/src/main/java/dev/tr7zw/firstperson/mixins/CustomHeadLayerMixin.java index ccf95321..8fe94efd 100644 --- a/src/main/java/dev/tr7zw/firstperson/mixins/CustomHeadLayerMixin.java +++ b/src/main/java/dev/tr7zw/firstperson/mixins/CustomHeadLayerMixin.java @@ -1,34 +1,43 @@ package dev.tr7zw.firstperson.mixins; -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 com.mojang.blaze3d.vertex.PoseStack; - -import dev.tr7zw.firstperson.FirstPersonModelCore; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.entity.layers.CustomHeadLayer; -//#if MC >= 12103 -import net.minecraft.client.renderer.entity.state.LivingEntityRenderState; -//#else -//$$import net.minecraft.world.entity.LivingEntity; -//#endif +import com.mojang.blaze3d.vertex.*; +import dev.tr7zw.firstperson.access.*; +import dev.tr7zw.firstperson.*; +import net.minecraft.client.renderer.*; +import net.minecraft.client.renderer.entity.layers.*; +//? if >= 1.21.2 +import net.minecraft.client.renderer.entity.state.*; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.*; +import net.minecraft.world.entity.*; //lower prio to run before other mods @Mixin(value = CustomHeadLayer.class, priority = 100) public class CustomHeadLayerMixin { - @Inject(method = "render", at = @At("HEAD"), cancellable = true) - //#if MC >= 12103 - public void render(PoseStack poseStack, MultiBufferSource multiBufferSource, int i, + //? if >= 1.21.9 { + @Inject(method = "submit(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;ILnet/minecraft/client/renderer/entity/state/LivingEntityRenderState;FF)V", at = @At("HEAD"), cancellable = true) + //? } else { + /*@Inject(method = "render", at = @At("HEAD"), cancellable = true) + *///? } + //? if >= 1.21.9 { + + public void render(PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int i, + LivingEntityRenderState livingEntityRenderState, float f, float g, CallbackInfo info) { + //? } else >= 1.21.3 { + /*public void render(PoseStack poseStack, MultiBufferSource multiBufferSource, int i, LivingEntityRenderState livingEntityRenderState, float f, float g, CallbackInfo info) { - //#else - //$$public void render(PoseStack poseStack, MultiBufferSource multiBufferSource, int i, LivingEntity livingEntity, - //$$ float f, float g, float h, float j, float k, float l, CallbackInfo info) { - //#endif - if (FirstPersonModelCore.instance.isRenderingPlayer()) { + *///? } else { + /* + public void render(PoseStack poseStack, MultiBufferSource multiBufferSource, int i, LivingEntity livingEntity, + float f, float g, float h, float j, float k, float l, CallbackInfo info) { + *///? } + //? if >= 1.21.9 { + if (((LivingEntityRenderStateAccess) livingEntityRenderState).isCameraEntity()) { + //? } else { + /*if (FirstPersonModelCore.instance.isRenderingPlayer()) { + *///? } info.cancel(); } } diff --git a/src/main/java/dev/tr7zw/firstperson/mixins/ElytraLayerMixin.java b/src/main/java/dev/tr7zw/firstperson/mixins/ElytraLayerMixin.java index 1fbcb8a4..0f9add24 100644 --- a/src/main/java/dev/tr7zw/firstperson/mixins/ElytraLayerMixin.java +++ b/src/main/java/dev/tr7zw/firstperson/mixins/ElytraLayerMixin.java @@ -1,46 +1,56 @@ package dev.tr7zw.firstperson.mixins; -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 com.mojang.blaze3d.vertex.PoseStack; - -import dev.tr7zw.firstperson.FirstPersonModelCore; -import net.minecraft.client.Minecraft; -import net.minecraft.client.player.AbstractClientPlayer; -import net.minecraft.client.renderer.MultiBufferSource; -//#if MC >= 12103 -import net.minecraft.client.renderer.entity.layers.WingsLayer; -import net.minecraft.client.renderer.entity.state.HumanoidRenderState; -//#else -//$$import net.minecraft.client.renderer.entity.layers.ElytraLayer; -//#endif -import net.minecraft.world.entity.LivingEntity; +import com.mojang.blaze3d.vertex.*; +import dev.tr7zw.firstperson.access.*; +import dev.tr7zw.firstperson.*; +import net.minecraft.client.*; +import net.minecraft.client.renderer.*; +import net.minecraft.client.renderer.entity.layers.*; +//? if >= 1.21.2 +import net.minecraft.client.renderer.entity.state.*; +import net.minecraft.client.player.*; +import net.minecraft.world.entity.*; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.*; /** * @author KxmischesDomi | https://github.com/kxmischesdomi */ -//#if MC >= 12103 +//? if >= 1.21.3 { + @Mixin(WingsLayer.class) -//#else -//$$@Mixin(ElytraLayer.class) -//#endif +//? } else { +/* +@Mixin(ElytraLayer.class) +*///? } public class ElytraLayerMixin { - //#if MC >= 12103 - @Inject(method = "render", at = @At("HEAD"), cancellable = true) - public void render(PoseStack poseStack, MultiBufferSource multiBufferSource, int i, + //? if >= 1.21.9 { + + @Inject(method = "submit(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;ILnet/minecraft/client/renderer/entity/state/HumanoidRenderState;FF)V", at = @At("HEAD"), cancellable = true) + public void render(PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int i, + HumanoidRenderState humanoidRenderState, float f, float g, CallbackInfo ci) { + //? } else if >= 1.21.3 { + /*@Inject(method = "render", at = @At("HEAD"), cancellable = true) + public void render(PoseStack poseStack, MultiBufferSource multiBufferSource, int i, HumanoidRenderState humanoidRenderState, float f, float g, CallbackInfo ci) { - //#else - //$$ @Inject(method = "render(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;ILnet/minecraft/world/entity/LivingEntity;FFFFFF)V", at = @At("HEAD"), cancellable = true) - //$$ public void render(PoseStack poseStack, MultiBufferSource multiBufferSource, int i, T livingEntity, float f, - //$$ float g, float h, float j, float k, float l, CallbackInfo ci) { - //#endif - if (FirstPersonModelCore.instance.isRenderingPlayer() + *///? } else { + /* + @Inject(method = "render(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;ILnet/minecraft/world/entity/LivingEntity;FFFFFF)V", at = @At("HEAD"), cancellable = true) + public void render(PoseStack poseStack, MultiBufferSource multiBufferSource, int i, T livingEntity, float f, + float g, float h, float j, float k, float l, CallbackInfo ci) { + *///? } + //? if >= 1.21.9 { + if (((LivingEntityRenderStateAccess) humanoidRenderState).isCameraEntity() + && humanoidRenderState.isVisuallySwimming) { + //? } else { + /*if (FirstPersonModelCore.instance.isRenderingPlayer() && Minecraft.getInstance().getCameraEntity() instanceof AbstractClientPlayer player && FirstPersonModelCore.instance.getLogicHandler().isSwimming(player)) { + + *///? } + ci.cancel(); } } diff --git a/src/main/java/dev/tr7zw/firstperson/mixins/EntityAccessor.java b/src/main/java/dev/tr7zw/firstperson/mixins/EntityAccessor.java new file mode 100644 index 00000000..85758e5a --- /dev/null +++ b/src/main/java/dev/tr7zw/firstperson/mixins/EntityAccessor.java @@ -0,0 +1,17 @@ +package dev.tr7zw.firstperson.mixins; + +import net.minecraft.world.entity.*; +import net.minecraft.world.phys.*; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.gen.*; + +@Mixin(Entity.class) +public interface EntityAccessor { + + @Accessor("position") + Vec3 entityCulling$getRawPosition(); + + @Accessor("position") + void entityCulling$setRawPosition(Vec3 position); + +} diff --git a/src/main/java/dev/tr7zw/firstperson/mixins/FeatureRendererMixin.java b/src/main/java/dev/tr7zw/firstperson/mixins/FeatureRendererMixin.java index 8a364672..1bb8c19c 100644 --- a/src/main/java/dev/tr7zw/firstperson/mixins/FeatureRendererMixin.java +++ b/src/main/java/dev/tr7zw/firstperson/mixins/FeatureRendererMixin.java @@ -1,80 +1,89 @@ package dev.tr7zw.firstperson.mixins; -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 < 1.21.9 { +/*import com.mojang.blaze3d.vertex.*; +import dev.tr7zw.firstperson.*; +import dev.tr7zw.firstperson.versionless.mixinbase.*; +import lombok.*; +import net.minecraft.client.model.*; +import net.minecraft.client.renderer.*; +import net.minecraft.client.renderer.entity.layers.*; +//? if >= 1.21.2 +import net.minecraft.client.renderer.entity.state.*; +import net.minecraft.resources.*; +import net.minecraft.world.entity.*; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.*; -import com.mojang.blaze3d.vertex.PoseStack; - -import dev.tr7zw.firstperson.FirstPersonModelCore; -import dev.tr7zw.firstperson.versionless.mixinbase.ModelPartBase; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; -import net.minecraft.client.model.EntityModel; -import net.minecraft.client.model.HeadedModel; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.entity.layers.RenderLayer; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.entity.LivingEntity; -//#if MC >= 12103 -import net.minecraft.client.renderer.entity.state.LivingEntityRenderState; -//#endif -//#if MC < 12104 -//$$import net.minecraft.client.model.VillagerHeadModel; -//#endif +//? if < 1.21.4 { +/^ +import net.minecraft.client.model.VillagerHeadModel; +^///? } @Mixin(RenderLayer.class) @NoArgsConstructor(access = AccessLevel.PRIVATE) public abstract class FeatureRendererMixin { @Inject(method = "renderColoredCutoutModel", at = @At("HEAD"), cancellable = true) - //#if MC >= 12103 + //? if >= 1.21.3 { + private static void renderColoredCutoutModel(EntityModel model, ResourceLocation resourceLocation, PoseStack poseStack, MultiBufferSource multiBufferSource, int i, LivingEntityRenderState livingEntityRenderState, int j, CallbackInfo ci) { - //#elseif MC >= 12100 - //$$private static void removeHead(EntityModel model, ResourceLocation texture, - //$$ PoseStack matrices, MultiBufferSource vertexConsumers, int light, T entity, int color, CallbackInfo ci) { - //#else - //$$private static void removeHead(EntityModel model, ResourceLocation texture, - //$$ PoseStack matrices, MultiBufferSource vertexConsumers, int light, T entity, float red, float green, - //$$ float blue, CallbackInfo ci) { - //#endif + //? } else if >= 1.21.0 { + + // private static void removeHead(EntityModel model, ResourceLocation texture, + // PoseStack matrices, MultiBufferSource vertexConsumers, int light, T entity, int color, CallbackInfo ci) { + //? } else { +/^ + private static void removeHead(EntityModel model, ResourceLocation texture, + PoseStack matrices, MultiBufferSource vertexConsumers, int light, T entity, float red, float green, + float blue, CallbackInfo ci) { + ^///? } if (FirstPersonModelCore.instance.isRenderingPlayer()) { if (!(model instanceof HeadedModel)) { ci.cancel(); return; } ((ModelPartBase) (Object) ((HeadedModel) model).getHead()).setHidden(); - //#if MC < 12104 - //$$if (model instanceof VillagerHeadModel villager) { - //$$ villager.hatVisible(false); - //$$} - //#endif + //? if < 1.21.4 { +/^ + if (model instanceof VillagerHeadModel villager) { + villager.hatVisible(false); + } + ^///? } } } @Inject(method = "renderColoredCutoutModel", at = @At("RETURN"), cancellable = true) - //#if MC >= 12103 + //? if >= 1.21.3 { + private static void removeReturn(EntityModel model, ResourceLocation resourceLocation, PoseStack poseStack, MultiBufferSource multiBufferSource, int i, LivingEntityRenderState livingEntityRenderState, int j, CallbackInfo ci) { - //#elseif MC >= 12100 - //$$private static void removeReturn(EntityModel model, ResourceLocation texture, - //$$ PoseStack matrices, MultiBufferSource vertexConsumers, int light, T entity, int color, CallbackInfo ci) { - //#else - //$$private static void removeReturn(EntityModel model, ResourceLocation texture, - //$$ PoseStack matrices, MultiBufferSource vertexConsumers, int light, T entity, float red, float green, - //$$ float blue, CallbackInfo ci) { - //#endif + //? } else if >= 1.21.0 { + + // private static void removeReturn(EntityModel model, ResourceLocation texture, + // PoseStack matrices, MultiBufferSource vertexConsumers, int light, T entity, int color, CallbackInfo ci) { + //? } else { +/^ + private static void removeReturn(EntityModel model, ResourceLocation texture, + PoseStack matrices, MultiBufferSource vertexConsumers, int light, T entity, float red, float green, + float blue, CallbackInfo ci) { + ^///? } if (model instanceof HeadedModel) { ((ModelPartBase) (Object) ((HeadedModel) model).getHead()).showAgain(); - //#if MC < 12104 - //$$ if (model instanceof VillagerHeadModel villager) { - //$$ villager.hatVisible(true); - //$$ } - //#endif + //? if < 1.21.4 { +/^ + if (model instanceof VillagerHeadModel villager) { + villager.hatVisible(true); + } + ^///? } } } - } +*///? } else { +@org.spongepowered.asm.mixin.Mixin(net.minecraft.client.Minecraft.class) +public class FeatureRendererMixin { +} +//? } diff --git a/src/main/java/dev/tr7zw/firstperson/mixins/FishingBobberRendererMixin.java b/src/main/java/dev/tr7zw/firstperson/mixins/FishingBobberRendererMixin.java index 85b22312..0ec854d5 100644 --- a/src/main/java/dev/tr7zw/firstperson/mixins/FishingBobberRendererMixin.java +++ b/src/main/java/dev/tr7zw/firstperson/mixins/FishingBobberRendererMixin.java @@ -1,27 +1,20 @@ package dev.tr7zw.firstperson.mixins; -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.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import com.mojang.blaze3d.vertex.PoseStack; - -import dev.tr7zw.firstperson.FirstPersonModelCore; -import net.minecraft.client.CameraType; -import net.minecraft.client.Minecraft; -import net.minecraft.client.Options; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.entity.FishingHookRenderer; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.phys.Vec3; -//#if MC >= 12103 -import net.minecraft.client.renderer.entity.state.FishingHookRenderState; -//#else -//$$ import net.minecraft.world.entity.projectile.FishingHook; -//#endif +import com.mojang.blaze3d.vertex.*; +import dev.tr7zw.firstperson.*; +import net.minecraft.client.*; +import net.minecraft.client.renderer.*; +import net.minecraft.client.renderer.entity.*; +//? if >= 1.21.2 { +import net.minecraft.client.renderer.entity.state.*; +import net.minecraft.client.renderer.state.*; +//? } +import net.minecraft.world.entity.player.*; +import net.minecraft.world.phys.*; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.*; +import net.minecraft.world.entity.projectile.*; @Mixin(FishingHookRenderer.class) public class FishingBobberRendererMixin { @@ -34,23 +27,34 @@ private boolean doCorrect() { && !FirstPersonModelCore.instance.getLogicHandler().hideArmsAndItems(); } - //#if MC <= 12004 - //$$ @Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Options;getCameraType()Lnet/minecraft/client/CameraType;")) - //#else + //? if <= 1.20.4 { + /* + @Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Options;getCameraType()Lnet/minecraft/client/CameraType;")) + *///? } else { + @Redirect(method = "getPlayerHandPos", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Options;getCameraType()Lnet/minecraft/client/CameraType;")) - //#endif + //? } private CameraType redirect(Options gameOptions) { return doCorrect() ? CameraType.THIRD_PERSON_BACK : gameOptions.getCameraType(); } - @Inject(method = "render", at = @At("HEAD")) - //#if MC >= 12103 + //? if >= 1.21.9 { + @Inject(method = "submit(Lnet/minecraft/client/renderer/entity/state/FishingHookRenderState;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;Lnet/minecraft/client/renderer/state/CameraRenderState;)V", at = @At("HEAD")) + //? } else { + /*@Inject(method = "render", at = @At("HEAD")) + *///? } + //? if >= 1.21.9 { + public void render(FishingHookRenderState fishingHookRenderState, PoseStack poseStack, + SubmitNodeCollector submitNodeCollector, CameraRenderState cameraRenderState, CallbackInfo ci) { + //? } else if >= 1.21.3 { + /*public void render(FishingHookRenderState fishingHookRenderState, PoseStack poseStack, MultiBufferSource multiBufferSource, int i, CallbackInfo info) { - //#else - //$$ private void calcOffset(FishingHook fishingBobberEntity, float f, float g, PoseStack matrixStack, - //$$ MultiBufferSource vertexConsumerProvider, int i, CallbackInfo info) { - //#endif + *///? } else { + /* + private void calcOffset(FishingHook fishingBobberEntity, float f, float g, PoseStack matrixStack, + MultiBufferSource vertexConsumerProvider, int i, CallbackInfo info) { + *///? } if (FirstPersonModelCore.instance.isRenderingPlayer()) { offsetvec3d = FirstPersonModelCore.instance.getLogicHandler().getOffset();// getPositionOffset((Player) // fishingBobberEntity.getOwner(), @@ -60,31 +64,33 @@ public void render(FishingHookRenderState fishingHookRenderState, PoseStack pose } } - //#if MC <= 12004 - //$$ @Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Player;getX()D")) - //$$ private double offsetX(Player playerEntity) { - //$$ return playerEntity.getX() + offsetvec3d.x(); - //$$ } - //$$ - //$$ @Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Player;getZ()D")) - //$$ private double offsetZ(Player playerEntity) { - //$$ return playerEntity.getZ() + offsetvec3d.z(); - //$$ } - //$$ - //$$ @Redirect(method = "render", at = @At(value = "FIELD", target = "Lnet/minecraft/world/entity/player/Player;xo:D")) - //$$ private double prevOffsetX(Player playerEntity) { - //$$ return playerEntity.xo + offsetvec3d.x(); - //$$ } - //$$ - //$$ @Redirect(method = "render", at = @At(value = "FIELD", target = "Lnet/minecraft/world/entity/player/Player;zo:D")) - //$$ private double prevOffsetZ(Player playerEntity) { - //$$ return playerEntity.zo + offsetvec3d.z(); - //$$ } - //#else + //? if <= 1.20.4 { + /* + @Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Player;getX()D")) + private double offsetX(Player playerEntity) { + return playerEntity.getX() + offsetvec3d.x(); + } + + @Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Player;getZ()D")) + private double offsetZ(Player playerEntity) { + return playerEntity.getZ() + offsetvec3d.z(); + } + + @Redirect(method = "render", at = @At(value = "FIELD", target = "Lnet/minecraft/world/entity/player/Player;xo:D")) + private double prevOffsetX(Player playerEntity) { + return playerEntity.xo + offsetvec3d.x(); + } + + @Redirect(method = "render", at = @At(value = "FIELD", target = "Lnet/minecraft/world/entity/player/Player;zo:D")) + private double prevOffsetZ(Player playerEntity) { + return playerEntity.zo + offsetvec3d.z(); + } + *///? } else { + @Inject(method = "getPlayerHandPos", at = @At("RETURN"), cancellable = true) private void getPlayerHandPosOffset(Player player, float f, float g, CallbackInfoReturnable ci) { ci.setReturnValue(ci.getReturnValue().add(offsetvec3d)); } - //#endif + //? } } diff --git a/src/main/java/dev/tr7zw/firstperson/mixins/HeldItemFeatureRendererMixin.java b/src/main/java/dev/tr7zw/firstperson/mixins/HeldItemFeatureRendererMixin.java index 8cfee8f4..7815ec2c 100644 --- a/src/main/java/dev/tr7zw/firstperson/mixins/HeldItemFeatureRendererMixin.java +++ b/src/main/java/dev/tr7zw/firstperson/mixins/HeldItemFeatureRendererMixin.java @@ -1,41 +1,33 @@ package dev.tr7zw.firstperson.mixins; -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 com.mojang.blaze3d.vertex.*; +import dev.tr7zw.firstperson.*; +import dev.tr7zw.firstperson.access.*; +import net.minecraft.client.*; +import net.minecraft.client.resources.model.*; +import net.minecraft.client.renderer.*; +import net.minecraft.client.renderer.entity.layers.*; +//? if >= 1.21.2 +import net.minecraft.client.renderer.entity.state.*; +import net.minecraft.client.renderer.item.*; +import net.minecraft.world.entity.*; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.*; -import com.mojang.blaze3d.vertex.PoseStack; +//? if < 1.21.4 +/*import net.minecraft.world.item.*;*/ -import dev.tr7zw.firstperson.FirstPersonModelCore; -import net.minecraft.client.Minecraft; +//? if >= 1.19.4 { -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.entity.layers.ItemInHandLayer; -import net.minecraft.world.entity.HumanoidArm; -//#if MC < 12104 -//$$import net.minecraft.world.item.ItemStack; -//#endif -//#if MC == 12103 -//$$import net.minecraft.client.renderer.entity.state.LivingEntityRenderState; -//#endif -//#if MC >= 12103 && MC < 12104 -//$$import net.minecraft.client.resources.model.BakedModel; -//#else -//$$import net.minecraft.client.player.LocalPlayer; -//$$import net.minecraft.world.entity.LivingEntity; -//#endif -//#if MC >= 11904 -//#if MC < 12104 -//$$import net.minecraft.world.item.ItemDisplayContext; -//#endif -//#else -//$$ import net.minecraft.client.renderer.block.model.ItemTransforms.TransformType; -//#endif -//#if MC >= 12104 -import net.minecraft.client.renderer.entity.state.ArmedEntityRenderState; -import net.minecraft.client.renderer.item.ItemStackRenderState; -//#endif +//? if < 1.21.4 { +/* +import net.minecraft.world.item.ItemDisplayContext; +*///? } + //? } else { + /* + import net.minecraft.client.renderer.block.model.ItemTransforms.TransformType; + *///? } /** * Stops items in the hand from rendering while in first person. @@ -44,28 +36,49 @@ @Mixin(ItemInHandLayer.class) public class HeldItemFeatureRendererMixin { - @Inject(at = @At("HEAD"), method = "renderArmWithItem", cancellable = true) - //#if MC >= 12104 - private void renderArmWithItem(ArmedEntityRenderState livingEntityRenderState, + //? if >= 1.21.9 { + @Inject(at = @At("HEAD"), method = "submitArmWithItem", cancellable = true) + //? } else { + /*@Inject(at = @At("HEAD"), method = "renderArmWithItem", cancellable = true) + *///? } + //? if >= 1.21.9 { + + private void renderArmWithItem(ArmedEntityRenderState armedEntityRenderState, + ItemStackRenderState itemStackRenderState, HumanoidArm humanoidArm, PoseStack poseStack, + SubmitNodeCollector submitNodeCollector, int i, CallbackInfo ci) { + //? } else if >= 1.21.4 { + /*private void renderArmWithItem(ArmedEntityRenderState livingEntityRenderState, ItemStackRenderState itemStackRenderState, HumanoidArm humanoidArm, PoseStack poseStack, MultiBufferSource multiBufferSource, int i, CallbackInfo ci) { - //#elseif MC >= 12103 - //$$private void renderArmWithItem(LivingEntityRenderState livingEntityRenderState, BakedModel bakedModel, - //$$ ItemStack itemStack, ItemDisplayContext itemDisplayContext, HumanoidArm humanoidArm, PoseStack poseStack, - //$$ MultiBufferSource multiBufferSource, int i, CallbackInfo ci) { - //#elseif MC >= 11904 - //$$private void renderArmWithItem(LivingEntity livingEntity, ItemStack itemStack, ItemDisplayContext itemDisplayContext, - //$$ HumanoidArm humanoidArm, PoseStack poseStack, MultiBufferSource multiBufferSource, int i, CallbackInfo ci) { - //#else - //$$ private void renderArmWithItem(LivingEntity livingEntity, ItemStack itemStack, TransformType transformType, - //$$ HumanoidArm humanoidArm, PoseStack poseStack, MultiBufferSource multiBufferSource, int i, CallbackInfo ci) { - //#endif - if (FirstPersonModelCore.instance.isRenderingPlayer()) { + *///? } else if >= 1.21.3 { + + // private void renderArmWithItem(LivingEntityRenderState livingEntityRenderState, BakedModel bakedModel, + // ItemStack itemStack, ItemDisplayContext itemDisplayContext, HumanoidArm humanoidArm, PoseStack poseStack, + // MultiBufferSource multiBufferSource, int i, CallbackInfo ci) { + //? } else if >= 1.19.4 { + /* + private void renderArmWithItem(LivingEntity livingEntity, ItemStack itemStack, + ItemDisplayContext itemDisplayContext, HumanoidArm humanoidArm, PoseStack poseStack, + MultiBufferSource multiBufferSource, int i, CallbackInfo ci) { + *///? } else { + /* + private void renderArmWithItem(LivingEntity livingEntity, ItemStack itemStack, TransformType transformType, + HumanoidArm humanoidArm, PoseStack poseStack, MultiBufferSource multiBufferSource, int i, CallbackInfo ci) { + *///? } + //? if >= 1.21.9 { + LivingEntityRenderStateAccess access = (LivingEntityRenderStateAccess) armedEntityRenderState; + if (access.hideLeftArm() && access.hideRightArm() + && !FirstPersonModelCore.instance.getLogicHandler().lookingDown(armedEntityRenderState)) { + ci.cancel(); + } + //? } else { + /*if (FirstPersonModelCore.instance.isRenderingPlayer()) { if (FirstPersonModelCore.instance.getLogicHandler().hideArmsAndItems(Minecraft.getInstance().player) && !FirstPersonModelCore.instance.getLogicHandler().lookingDown()) { ci.cancel(); } } + *///? } } } diff --git a/src/main/java/dev/tr7zw/firstperson/mixins/HeldItemRendererMixin.java b/src/main/java/dev/tr7zw/firstperson/mixins/HeldItemRendererMixin.java index 59b09307..10f0e171 100644 --- a/src/main/java/dev/tr7zw/firstperson/mixins/HeldItemRendererMixin.java +++ b/src/main/java/dev/tr7zw/firstperson/mixins/HeldItemRendererMixin.java @@ -1,26 +1,19 @@ package dev.tr7zw.firstperson.mixins; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import com.mojang.blaze3d.vertex.PoseStack; - -import dev.tr7zw.firstperson.FirstPersonModelCore; -import dev.tr7zw.firstperson.versionless.config.VanillaHands; -import dev.tr7zw.transition.mc.EntityUtil; -import net.minecraft.client.Minecraft; -import net.minecraft.client.player.AbstractClientPlayer; -import net.minecraft.client.player.LocalPlayer; -import net.minecraft.client.renderer.ItemInHandRenderer; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.entity.EntityRenderDispatcher; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.entity.HumanoidArm; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; +import com.mojang.blaze3d.vertex.*; +import dev.tr7zw.firstperson.*; +import dev.tr7zw.firstperson.versionless.config.*; +import dev.tr7zw.transition.mc.*; +import net.minecraft.client.*; +import net.minecraft.client.player.*; +import net.minecraft.client.renderer.*; +import net.minecraft.client.renderer.entity.*; +import net.minecraft.world.*; +import net.minecraft.world.entity.*; +import net.minecraft.world.item.*; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.*; /** * Hides the normal first person hands @@ -40,10 +33,25 @@ public abstract class HeldItemRendererMixin { @Shadow private ItemStack offHandItem; + @Shadow + //? if >= 1.21.9 { + protected abstract void renderPlayerArm(PoseStack arg, SubmitNodeCollector arg2, int i, float g, float h, + HumanoidArm arg3); + //? } else { + /*public abstract void renderPlayerArm(PoseStack matrices, MultiBufferSource vertexConsumers, int light, + float equipProgress, float swingProgress, HumanoidArm arm); + *///? } + @Inject(at = @At("HEAD"), method = "renderArmWithItem", cancellable = true) - public void renderFirstPersonItem(AbstractClientPlayer player, float tickDelta, float pitch, InteractionHand hand, + //? if >= 1.21.9 { + public void renderFirstPersonItem(AbstractClientPlayer player, float deltaTick, float pitch, InteractionHand hand, + float swingProgress, ItemStack item, float equipProgress, PoseStack matrices, + SubmitNodeCollector vertexConsumers, int light, CallbackInfo info) { + //? } else { + /*public void renderFirstPersonItem(AbstractClientPlayer player, float tickDelta, float pitch, InteractionHand hand, float swingProgress, ItemStack item, float equipProgress, PoseStack matrices, MultiBufferSource vertexConsumers, int light, CallbackInfo info) { + *///? } if (!FirstPersonModelCore.instance.isEnabled()) { return; @@ -67,11 +75,13 @@ public void renderFirstPersonItem(AbstractClientPlayer player, float tickDelta, // double hands if (FirstPersonModelCore.instance.getConfig().vanillaHandsMode != VanillaHands.ALL_DOUBLE || player.getMainHandItem().getItem() == Items.FILLED_MAP - //#if MC >= 11700 + //? if >= 1.17.0 { + || player.isScoping()) { - //#else - //$$|| false) { - //#endif + //? } else { + /* + || false) { + *///? } return; } boolean bl = hand == InteractionHand.MAIN_HAND; @@ -83,10 +93,6 @@ public void renderFirstPersonItem(AbstractClientPlayer player, float tickDelta, matrices.popPose(); } - @Shadow - public abstract void renderPlayerArm(PoseStack matrices, MultiBufferSource vertexConsumers, int light, - float equipProgress, float swingProgress, HumanoidArm arm); - /* * public boolean skip() {//TODO NO NEED? return * !FirstPersonModelCore.instance.isEnabled() || diff --git a/src/main/java/dev/tr7zw/firstperson/mixins/HumanoidModelMixin.java b/src/main/java/dev/tr7zw/firstperson/mixins/HumanoidModelMixin.java new file mode 100644 index 00000000..dd9724b6 --- /dev/null +++ b/src/main/java/dev/tr7zw/firstperson/mixins/HumanoidModelMixin.java @@ -0,0 +1,47 @@ +package dev.tr7zw.firstperson.mixins; + +//? if >= 1.21.9 { + +import dev.tr7zw.firstperson.access.*; +import net.minecraft.client.model.*; +import net.minecraft.client.model.geom.*; +import net.minecraft.client.renderer.entity.state.*; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.*; + +@Mixin(HumanoidModel.class) +public class HumanoidModelMixin { + + @Shadow + @Final + public ModelPart leftArm; + + @Shadow + @Final + public ModelPart rightArm; + + @Shadow + @Final + public ModelPart head; + + @Shadow + @Final + public ModelPart body; + + @Inject(method = "setupAnim(Lnet/minecraft/client/renderer/entity/state/HumanoidRenderState;)V", at = @At("TAIL")) + private void setupAnim(HumanoidRenderState renderState, CallbackInfo ci) { + LivingEntityRenderStateAccess access = (LivingEntityRenderStateAccess) renderState; + head.visible = !access.isCameraEntity(); + leftArm.visible = !access.hideLeftArm(); + leftArm.xRot += access.getArmOffset(); + rightArm.visible = !access.hideRightArm(); + rightArm.xRot += access.getArmOffset(); + body.visible = !access.hideBody(); + } +} +//? } else { +/*@org.spongepowered.asm.mixin.Mixin(net.minecraft.client.Minecraft.class) +public class HumanoidModelMixin { +} +*///? } diff --git a/src/main/java/dev/tr7zw/firstperson/mixins/LivingEntityRenderStateMixin.java b/src/main/java/dev/tr7zw/firstperson/mixins/LivingEntityRenderStateMixin.java new file mode 100644 index 00000000..cc271a58 --- /dev/null +++ b/src/main/java/dev/tr7zw/firstperson/mixins/LivingEntityRenderStateMixin.java @@ -0,0 +1,77 @@ +package dev.tr7zw.firstperson.mixins; + +//? if >= 1.21.9 { +import dev.tr7zw.firstperson.access.*; +import net.minecraft.client.renderer.entity.state.*; +import org.spongepowered.asm.mixin.*; + +@Mixin(LivingEntityRenderState.class) +public class LivingEntityRenderStateMixin implements LivingEntityRenderStateAccess { + + @Unique + private boolean cameraEntity; + @Unique + private boolean hideLeftArm; + @Unique + private boolean hideRightArm; + @Unique + private boolean hideBody; + @Unique + private float armOffset; + + @Override + public void setIsCameraEntity(boolean value) { + this.cameraEntity = value; + } + + @Override + public boolean isCameraEntity() { + return this.cameraEntity; + } + + @Override + public void setHideLeftArm(boolean value) { + this.hideLeftArm = value; + } + + @Override + public boolean hideLeftArm() { + return this.hideLeftArm; + } + + @Override + public void setHideRightArm(boolean value) { + this.hideRightArm = value; + } + + @Override + public boolean hideRightArm() { + return this.hideRightArm; + } + + @Override + public void setHideBody(boolean value) { + this.hideBody = value; + } + + @Override + public boolean hideBody() { + return this.hideBody; + } + + @Override + public void setArmOffset(float offset) { + this.armOffset = offset; + } + + @Override + public float getArmOffset() { + return this.armOffset; + } +} +//? } else { +/*@org.spongepowered.asm.mixin.Mixin(net.minecraft.client.Minecraft.class) +public class LivingEntityRenderStateMixin { +} + +*///? } diff --git a/src/main/java/dev/tr7zw/firstperson/mixins/LivingEntityRendererMixin.java b/src/main/java/dev/tr7zw/firstperson/mixins/LivingEntityRendererMixin.java index d0618d55..68fe77ab 100644 --- a/src/main/java/dev/tr7zw/firstperson/mixins/LivingEntityRendererMixin.java +++ b/src/main/java/dev/tr7zw/firstperson/mixins/LivingEntityRendererMixin.java @@ -1,58 +1,39 @@ package dev.tr7zw.firstperson.mixins; -import net.minecraft.client.Minecraft; -import net.minecraft.util.Mth; -import net.minecraft.world.item.Items; - -import java.util.ArrayList; -import java.util.List; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.At.Shift; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import com.mojang.blaze3d.vertex.PoseStack; - -import dev.tr7zw.firstperson.FirstPersonModelCore; +import com.mojang.blaze3d.vertex.*; +import dev.tr7zw.firstperson.*; import dev.tr7zw.firstperson.InventoryUtil; -import dev.tr7zw.firstperson.access.AgeableListModelAccess; -//#if MC < 12103 -//$$ import dev.tr7zw.firstperson.access.PlayerModelAccess; -//#endif -import dev.tr7zw.firstperson.versionless.mixinbase.ModelPartBase; -import dev.tr7zw.transition.mc.EntityUtil; -import net.minecraft.client.model.EntityModel; -import net.minecraft.client.model.HeadedModel; -import net.minecraft.client.model.HumanoidModel; -import net.minecraft.client.model.Model; -import net.minecraft.client.model.PlayerModel; +import dev.tr7zw.firstperson.access.*; +import dev.tr7zw.firstperson.versionless.mixinbase.*; +import dev.tr7zw.transition.mc.*; +import net.minecraft.client.*; +import net.minecraft.client.model.*; +import net.minecraft.client.player.*; +import net.minecraft.client.renderer.*; +import net.minecraft.client.renderer.entity.*; +//? if >= 1.21.2 +import net.minecraft.client.renderer.entity.state.*; +import net.minecraft.util.*; +import net.minecraft.world.entity.*; +import net.minecraft.world.entity.monster.*; +import net.minecraft.world.entity.player.*; +import net.minecraft.world.item.*; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.*; -import net.minecraft.client.player.AbstractClientPlayer; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.entity.LivingEntityRenderer; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.monster.Shulker; -import net.minecraft.world.entity.player.Player; -//#if MC >= 12103 -import net.minecraft.client.renderer.entity.state.LivingEntityRenderState; -import net.minecraft.client.renderer.entity.state.PlayerRenderState; -//#endif -//#if MC < 12104 -//$$import net.minecraft.client.model.VillagerHeadModel; -//#endif +import java.util.*; @Mixin(LivingEntityRenderer.class) public abstract class LivingEntityRendererMixin { private static List revert = new ArrayList(); - // pull all registers to try to get rid of the head or other bodyparts - //#if MC >= 12103 - @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/model/EntityModel;setupAnim(Lnet/minecraft/client/renderer/entity/state/EntityRenderState;)V", shift = Shift.AFTER), cancellable = true) + //? if < 1.21.9 { + /*// pull all registers to try to get rid of the head or other bodyparts + //? if >= 1.21.3 { + + @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/model/EntityModel;setupAnim(Lnet/minecraft/client/renderer/entity/state/EntityRenderState;)V", shift = At.Shift.AFTER), cancellable = true) public void render(LivingEntityRenderState livingEntityRenderState, PoseStack matrixStack, MultiBufferSource multiBufferSource, int i, CallbackInfo info) { if (!FirstPersonModelCore.instance.isRenderingPlayer()) @@ -62,11 +43,12 @@ public void render(LivingEntityRenderState livingEntityRenderState, PoseStack ma return; } LivingEntity livingEntity = (LivingEntity) entity; - //#else - //$$@Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/model/EntityModel;setupAnim(Lnet/minecraft/world/entity/Entity;FFFFF)V", shift = Shift.AFTER), cancellable = true) - //$$public void renderPostAnim(LivingEntity livingEntity, float f, float g, PoseStack matrixStack, - //$$ MultiBufferSource vertexConsumerProvider, int i, CallbackInfo info) { - //#endif + //? } else { + /^ + @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/model/EntityModel;setupAnim(Lnet/minecraft/world/entity/Entity;FFFFF)V", shift = At.Shift.AFTER), cancellable = true) + public void renderPostAnim(LivingEntity livingEntity, float f, float g, PoseStack matrixStack, + MultiBufferSource vertexConsumerProvider, int i, CallbackInfo info) { + ^///? } if (!revert.isEmpty()) { for (Runnable r : revert) { r.run(); @@ -107,7 +89,7 @@ public void render(LivingEntityRenderState livingEntityRenderState, PoseStack ma humanModel.leftArm.xRot += offset; // humanModel.rightArm.offsetRotation(new Vector3f(offset, 0, 0)); // humanModel.leftArm.offsetRotation(new Vector3f(offset, 0, 0)); - + if (!FirstPersonModelCore.instance.getLogicHandler().lookingDown()) {// TODO DYNAMIC HAND if (!InventoryUtil.getOffhand(InventoryUtil.getInventory(player)).isEmpty() || livingEntity.getMainHandItem().getItem().equals(Items.FILLED_MAP)) { @@ -125,14 +107,15 @@ public void render(LivingEntityRenderState livingEntityRenderState, PoseStack ma } } } - //#if MC < 12104 - //$$if (model instanceof VillagerHeadModel villaterHead) { - //$$ villaterHead.hatVisible(false); - //$$ revert.add(() -> { - //$$ villaterHead.hatVisible(true); - //$$ }); - //$$} - //#endif + //? if < 1.21.4 { + /^ + if (model instanceof VillagerHeadModel villaterHead) { + villaterHead.hatVisible(false); + revert.add(() -> { + villaterHead.hatVisible(true); + }); + } + ^///? } if (model instanceof PlayerModel playerModel) { headShouldBeHidden = true; ((ModelPartBase) (Object) playerModel.hat).setHidden(); @@ -152,7 +135,7 @@ public void render(LivingEntityRenderState livingEntityRenderState, PoseStack ma playerModel.leftSleeve.xRot += offset; // playerModel.rightSleeve.offsetRotation(new Vector3f(offset, 0, 0)); // playerModel.leftSleeve.offsetRotation(new Vector3f(offset, 0, 0)); - + if (!FirstPersonModelCore.instance.getLogicHandler().lookingDown()) {// TODO DYNAMIC HAND if (!InventoryUtil.getOffhand(InventoryUtil.getInventory(player)).isEmpty() || livingEntity.getMainHandItem().getItem().equals(Items.FILLED_MAP)) { @@ -170,18 +153,21 @@ public void render(LivingEntityRenderState livingEntityRenderState, PoseStack ma if (livingEntity instanceof AbstractClientPlayer player && (Object) model instanceof PlayerModel playerModel && FirstPersonModelCore.instance.getLogicHandler().isSwimming(player)) { ((ModelPartBase) (Object) playerModel.body).setHidden(); - //#if MC >= 12103 + //? if >= 1.21.3 { + if (livingEntityRenderState instanceof PlayerRenderState prs) { prs.showCape = false; } - //#else - //$$((ModelPartBase) (Object) ((PlayerModelAccess) model).getCloak()).setHidden(); - //#endif + //? } else { + /^ + ((ModelPartBase) (Object) ((PlayerModelAccess) model).getCloak()).setHidden(); + ^///? } revert.add(() -> { ((ModelPartBase) (Object) playerModel.body).showAgain(); - //#if MC < 12103 - //$$ ((ModelPartBase) (Object) ((PlayerModelAccess) model).getCloak()).showAgain(); - //#endif + //? if < 1.21.3 { + /^ + ((ModelPartBase) (Object) ((PlayerModelAccess) model).getCloak()).showAgain(); + ^///? } }); } if (!headShouldBeHidden) { @@ -191,15 +177,26 @@ public void render(LivingEntityRenderState livingEntityRenderState, PoseStack ma info.cancel(); } } + *///? } else { + @Inject(method = "extractRenderState(Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/client/renderer/entity/state/LivingEntityRenderState;F)V", at = @At("HEAD")) + private void checkIfCameraEntity(LivingEntity livingEntity, LivingEntityRenderState livingEntityRenderState, + float f, CallbackInfo ci) { + ((LivingEntityRenderStateAccess) livingEntityRenderState) + .setIsCameraEntity(FirstPersonModelCore.instance.isRenderingPlayer()); + } + //? } - @Inject(method = "render", at = @At("RETURN")) - //#if MC >= 12103 + //? if < 1.21.9 { + /*@Inject(method = "render", at = @At("RETURN")) + //? if >= 1.21.3 { + public void renderEnd(LivingEntityRenderState livingEntityRenderState, PoseStack poseStack, MultiBufferSource multiBufferSource, int i, CallbackInfo info) { - //#else - //$$ public void renderReturn(LivingEntity livingEntity, float f, float g, PoseStack matrixStack, - //$$ MultiBufferSource vertexConsumerProvider, int i, CallbackInfo info) { - //#endifs + //? } else { + /^ + public void renderReturn(LivingEntity livingEntity, float f, float g, PoseStack matrixStack, + MultiBufferSource vertexConsumerProvider, int i, CallbackInfo info) { + ^///? } if (!revert.isEmpty()) { for (Runnable r : revert) { r.run(); @@ -208,6 +205,7 @@ public void renderEnd(LivingEntityRenderState livingEntityRenderState, PoseStack } FirstPersonModelCore.instance.setRenderingPlayer(false); } + *///? } @Shadow public abstract EntityModel getModel(); diff --git a/src/main/java/dev/tr7zw/firstperson/mixins/ModelPartMixin.java b/src/main/java/dev/tr7zw/firstperson/mixins/ModelPartMixin.java index be99cd0d..0789176b 100644 --- a/src/main/java/dev/tr7zw/firstperson/mixins/ModelPartMixin.java +++ b/src/main/java/dev/tr7zw/firstperson/mixins/ModelPartMixin.java @@ -1,13 +1,10 @@ package dev.tr7zw.firstperson.mixins; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import dev.tr7zw.firstperson.versionless.mixinbase.ModelPartBase; -import net.minecraft.client.model.geom.ModelPart; +import dev.tr7zw.firstperson.versionless.mixinbase.*; +import net.minecraft.client.model.geom.*; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.*; @Mixin(ModelPart.class) public class ModelPartMixin implements ModelPartBase { @@ -47,13 +44,15 @@ public void setPivot(float x, float y, float z, CallbackInfo info) { } } - @Inject(method = "copyFrom", at = @At("RETURN")) + //? if < 1.21.9 { + /*@Inject(method = "copyFrom", at = @At("RETURN")) public void copyTransform(ModelPart modelPart, CallbackInfo info) { if (moved) { zCopy = z; z = 5000; } } + *///? } @Override public boolean isHidden() { diff --git a/src/main/java/dev/tr7zw/firstperson/mixins/PlayerMixin.java b/src/main/java/dev/tr7zw/firstperson/mixins/PlayerMixin.java index 6e4b497e..27a8a301 100644 --- a/src/main/java/dev/tr7zw/firstperson/mixins/PlayerMixin.java +++ b/src/main/java/dev/tr7zw/firstperson/mixins/PlayerMixin.java @@ -1,24 +1,20 @@ package dev.tr7zw.firstperson.mixins; -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.CallbackInfoReturnable; - -import dev.tr7zw.firstperson.FirstPersonModelCore; -import dev.tr7zw.firstperson.InventoryUtil; -import net.minecraft.client.Minecraft; -import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; - -//#if MC >= 12105 -import net.minecraft.world.entity.LivingEntity; +import dev.tr7zw.firstperson.*; +import net.minecraft.client.*; +import net.minecraft.world.entity.*; +import net.minecraft.world.entity.player.*; +import net.minecraft.world.item.*; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.*; +//? if >= 1.21.5 { @Mixin(LivingEntity.class) -//#else -//$$ @Mixin(Player.class) -//#endif +//? } else { +/* +@Mixin(Player.class) +*///? } public class PlayerMixin { @Inject(method = "getItemBySlot", at = @At("HEAD"), cancellable = true) diff --git a/src/main/java/dev/tr7zw/firstperson/mixins/PlayerModelMixin.java b/src/main/java/dev/tr7zw/firstperson/mixins/PlayerModelMixin.java index 438cd235..5ea70050 100644 --- a/src/main/java/dev/tr7zw/firstperson/mixins/PlayerModelMixin.java +++ b/src/main/java/dev/tr7zw/firstperson/mixins/PlayerModelMixin.java @@ -1,28 +1,29 @@ package dev.tr7zw.firstperson.mixins; -import org.spongepowered.asm.mixin.Mixin; - -import dev.tr7zw.firstperson.access.PlayerModelAccess; -import net.minecraft.client.model.PlayerModel; -import net.minecraft.world.entity.LivingEntity; -//#if MC < 12103 -//$$ import org.spongepowered.asm.mixin.Final; -//$$ import org.spongepowered.asm.mixin.Shadow; -//$$ import net.minecraft.client.model.geom.ModelPart; -//#endif +import dev.tr7zw.firstperson.access.*; +import net.minecraft.client.model.*; +import net.minecraft.world.entity.*; +import org.spongepowered.asm.mixin.*; +//? if < 1.21.3 { +/* +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Shadow; +import net.minecraft.client.model.geom.ModelPart; +*///? } @Mixin(value = PlayerModel.class) public class PlayerModelMixin implements PlayerModelAccess { - //#if MC < 12103 - //$$@Shadow - //$$@Final - //$$private ModelPart cloak; - //$$ - //$$@Override - //$$public ModelPart getCloak() { - //$$ return cloak; - //$$} - //#endif + //? if < 1.21.3 { + /* + @Shadow + @Final + private ModelPart cloak; + + @Override + public ModelPart getCloak() { + return cloak; + } + *///? } } diff --git a/src/main/java/dev/tr7zw/firstperson/mixins/PlayerRendererMixin.java b/src/main/java/dev/tr7zw/firstperson/mixins/PlayerRendererMixin.java index 7135b719..0773359c 100644 --- a/src/main/java/dev/tr7zw/firstperson/mixins/PlayerRendererMixin.java +++ b/src/main/java/dev/tr7zw/firstperson/mixins/PlayerRendererMixin.java @@ -1,33 +1,24 @@ package dev.tr7zw.firstperson.mixins; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; +import dev.tr7zw.firstperson.*; +import dev.tr7zw.firstperson.access.*; +import dev.tr7zw.transition.mc.*; +import net.minecraft.client.*; +import net.minecraft.client.model.*; +import net.minecraft.client.renderer.entity.*; +import net.minecraft.client.renderer.entity.*; +import net.minecraft.client.renderer.entity.layers.*; +import net.minecraft.client.renderer.entity.player.*; +//? if >= 1.21.2 +import net.minecraft.client.renderer.entity.state.*; +import net.minecraft.util.*; +import net.minecraft.world.entity.*; +import net.minecraft.world.item.*; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.*; -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.CallbackInfoReturnable; - -import dev.tr7zw.firstperson.FirstPersonModelCore; -import dev.tr7zw.firstperson.access.PlayerRendererAccess; -import dev.tr7zw.firstperson.api.FirstPersonAPI; -import dev.tr7zw.firstperson.api.PlayerOffsetHandler; -import net.minecraft.client.Minecraft; -import net.minecraft.client.model.EntityModel; -import net.minecraft.client.model.PlayerModel; -import net.minecraft.client.player.AbstractClientPlayer; -import net.minecraft.client.renderer.entity.EntityRenderDispatcher; -import net.minecraft.client.renderer.entity.LivingEntityRenderer; -import net.minecraft.client.renderer.entity.layers.RenderLayer; -import net.minecraft.client.renderer.entity.player.PlayerRenderer; -import net.minecraft.world.phys.Vec3; -//#if MC >= 11802 -import net.minecraft.client.renderer.entity.EntityRendererProvider.Context; -//#endif -//#if MC >= 12103 -import net.minecraft.client.renderer.entity.state.PlayerRenderState; -//#endif +import java.util.*; /** * Offset the player behind the camera @@ -35,41 +26,56 @@ * @author tr7zw * */ -@Mixin(value = PlayerRenderer.class, priority = 500) +//? if >= 1.21.9 { +@Mixin(value = AvatarRenderer.class, priority = 500) +//? } else { +/*@Mixin(value = PlayerRenderer.class, priority = 500) +*///? } public abstract class PlayerRendererMixin extends LivingEntityRenderer implements PlayerRendererAccess { - //#if MC >= 11802 - public PlayerRendererMixin(Context context, PlayerModel model, float shadowRadius) { + //? if >= 1.18.2 { + + public PlayerRendererMixin(EntityRendererProvider.Context context, PlayerModel model, float shadowRadius) { super(context, model, shadowRadius); } - //#else - //$$public PlayerRendererMixin(EntityRenderDispatcher entityRenderDispatcher, EntityModel entityModel, float f) { - //$$ super(entityRenderDispatcher, entityModel, f); - //$$} - //#endif + //? } else { + /* + public PlayerRendererMixin(EntityRenderDispatcher entityRenderDispatcher, EntityModel entityModel, float f) { + super(entityRenderDispatcher, entityModel, f); + } + *///? } private static Minecraft fpmMcInstance = Minecraft.getInstance(); private List removedLayers = new ArrayList<>(); - @Inject(method = "getRenderOffset", at = @At("RETURN"), cancellable = true) - //#if MC >= 12103 - public void getRenderOffset(PlayerRenderState playerRenderState, CallbackInfoReturnable ci) { - AbstractClientPlayer entity = Minecraft.getInstance().player; - float delta = Minecraft.getInstance().getDeltaTracker().getGameTimeDeltaPartialTick(false); - //#else - //$$public void getRenderOffset(AbstractClientPlayer entity, float delta, CallbackInfoReturnable ci) { - //#endif - if (entity == fpmMcInstance.cameraEntity && FirstPersonModelCore.instance.isRenderingPlayer()) { - FirstPersonModelCore.instance.getLogicHandler().updatePositionOffset(entity, delta); - - Vec3 offset = ci.getReturnValue().add(FirstPersonModelCore.instance.getLogicHandler().getOffset()); - for (PlayerOffsetHandler handler : FirstPersonAPI.getPlayerOffsetHandlers()) { - offset = handler.applyOffset(entity, delta, ci.getReturnValue(), offset); + //? if >= 1.21.9 { + @Inject(method = "extractRenderState(Lnet/minecraft/world/entity/Avatar;Lnet/minecraft/client/renderer/entity/state/AvatarRenderState;F)V", at = @At("TAIL")) + public void extractRenderState(Avatar avatar, AvatarRenderState avatarRenderState, float delta, CallbackInfo ci) { + LivingEntityRenderStateAccess access = (LivingEntityRenderStateAccess) avatarRenderState; + if (!access.isCameraEntity()) + return; + if (FirstPersonModelCore.instance.getLogicHandler().hideArmsAndItems(avatar)) { + access.setHideArms(true); + } else if (FirstPersonModelCore.instance.getLogicHandler().dynamicHandsEnabled()) { + access.setArmOffset(Mth.clamp(-EntityUtil.getXRot(avatar) / 20 + 2, -0.0f, 0.7f)); + if (!FirstPersonModelCore.instance.getLogicHandler().lookingDown(avatar)) {// TODO DYNAMIC HAND + if (!avatar.getOffhandItem().isEmpty() || avatar.getMainHandItem().getItem().equals(Items.FILLED_MAP)) { + access.setHideLeftArm(true); + } + if (!avatar.getMainHandItem().isEmpty()) { + access.setHideRightArm(true); + } } - - ci.setReturnValue(offset); } + if (avatar.isSwimming()) { + access.setHideBody(true); + avatarRenderState.showCape = false; + } + if (FirstPersonModelCore.instance.getLogicHandler().hideArmsAndItems(avatar, avatar.getMainHandItem(), + avatar.getOffhandItem())) + access.setHideArms(true); } + //? } @Override public List getRenderLayers() { diff --git a/src/main/java/dev/tr7zw/firstperson/mixins/RenderDispatcherMixin.java b/src/main/java/dev/tr7zw/firstperson/mixins/RenderDispatcherMixin.java index aed88e51..080d0de9 100644 --- a/src/main/java/dev/tr7zw/firstperson/mixins/RenderDispatcherMixin.java +++ b/src/main/java/dev/tr7zw/firstperson/mixins/RenderDispatcherMixin.java @@ -1,39 +1,27 @@ package dev.tr7zw.firstperson.mixins; -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 com.mojang.blaze3d.vertex.*; +import dev.tr7zw.firstperson.*; +import lombok.*; +import net.minecraft.client.*; +import net.minecraft.client.renderer.*; +import net.minecraft.client.renderer.entity.*; +//? if >= 1.21.2 +import net.minecraft.client.renderer.entity.state.*; +import net.minecraft.world.level.*; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.*; +import net.minecraft.world.entity.*; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexConsumer; - -import dev.tr7zw.firstperson.FirstPersonModelCore; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.entity.EntityRenderDispatcher; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.level.LevelReader; - -//#if MC >= 12105 -import net.minecraft.client.renderer.entity.state.HitboxRenderState; -//#endif -//#if MC >= 12103 -import net.minecraft.client.renderer.entity.state.EntityRenderState; -//#else -//$$import org.spongepowered.asm.mixin.injection.At; -//$$import org.spongepowered.asm.mixin.injection.At.Shift; -//$$import org.spongepowered.asm.mixin.injection.Redirect; -//$$import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -//$$import com.mojang.blaze3d.vertex.VertexConsumer; -//$$import net.minecraft.client.renderer.MultiBufferSource; -//$$import net.minecraft.util.Mth; -//$$import net.minecraft.world.entity.Entity; -//$$import net.minecraft.world.level.LevelReader; -//$$import net.minecraft.world.phys.Vec3; -//#endif +//? if < 1.21.3 { +/*import org.spongepowered.asm.mixin.injection.*; +import com.mojang.blaze3d.vertex.*; +import net.minecraft.client.renderer.*; +import net.minecraft.util.*; +import net.minecraft.world.level.*; +import net.minecraft.world.phys.*; +*///? } /** * Move the first person shadow to be at the correct location @@ -45,16 +33,20 @@ public abstract class RenderDispatcherMixin { private static Minecraft fpmMcInstance = Minecraft.getInstance(); - //#if MC >= 12103 + //? if >= 1.21.9 { + + //? } else if >= 1.21.3 { + /* private static double tmpX; private static double tmpZ; - + @Inject(method = "renderShadow", at = @At("HEAD")) private static void renderShadow(PoseStack poseStack, MultiBufferSource multiBufferSource, EntityRenderState entityRenderState, float f, - //#if MC < 12105 - //$$float g, - //#endif + //? if < 1.21.5 { + + float g, + //? } LevelReader levelReader, float h, CallbackInfo ci) { if (FirstPersonModelCore.instance.isRenderingPlayerPost()) { poseStack.pushPose(); @@ -65,13 +57,14 @@ private static void renderShadow(PoseStack poseStack, MultiBufferSource multiBuf entityRenderState.z += FirstPersonModelCore.instance.getLogicHandler().getOffset().z; } } - + @Inject(method = "renderShadow", at = @At("RETURN")) private static void renderShadowEnd(PoseStack poseStack, MultiBufferSource multiBufferSource, EntityRenderState entityRenderState, float f, - //#if MC < 12105 - //$$float g, - //#endif + //? if < 1.21.5 { + + float g, + //? } LevelReader levelReader, float h, CallbackInfo ci) { if (FirstPersonModelCore.instance.isRenderingPlayerPost()) { entityRenderState.x = tmpX; @@ -79,64 +72,70 @@ private static void renderShadowEnd(PoseStack poseStack, MultiBufferSource multi poseStack.popPose(); } } - + @Inject(method = "renderHitbox", at = @At(value = "HEAD"), cancellable = true) private static void renderHitbox(PoseStack poseStack, VertexConsumer buffer, - //#if MC >= 12105 + //? if >= 1.21.5 { + /^ HitboxRenderState hitboxRenderState, - //#else - //$$ Entity entity, float red, float green, float blue, float alpha, - //#endif + ^///? } else { + + Entity entity, float red, float green, float blue, float alpha, + //? } CallbackInfo ci) { if (FirstPersonModelCore.instance.isRenderingPlayerPost()) { ci.cancel(); } } - - //#else - //$$ @Redirect(method = "renderShadow", at = @At(value = "invoke", target = "Lnet/minecraft/util/Mth;lerp(DDD)D", ordinal = 0)) - //$$ private static double shadowOffsetX(double delta, double old, double cur, PoseStack poseStack, - //$$ MultiBufferSource multiBufferSource, Entity entity, float f, float g, LevelReader levelReader, float h) { - //$$ if (FirstPersonModelCore.instance.isRenderingPlayerPost()) { - //$$ return Mth.lerp(delta, old, cur) + FirstPersonModelCore.instance.getLogicHandler().getOffset().x; - //$$ } - //$$ return Mth.lerp(delta, old, cur); - //$$ } - //$$ - //$$ @Redirect(method = "renderShadow", at = @At(value = "invoke", target = "Lnet/minecraft/util/Mth;lerp(DDD)D", ordinal = 2)) - //$$ private static double shadowOffsetZ(double delta, double old, double cur, PoseStack poseStack, - //$$ MultiBufferSource multiBufferSource, Entity entity, float f, float g, LevelReader levelReader, float h) { - //$$ if (FirstPersonModelCore.instance.isRenderingPlayerPost()) { - //$$ return Mth.lerp(delta, old, cur) + FirstPersonModelCore.instance.getLogicHandler().getOffset().z; - //$$ } - //$$ return Mth.lerp(delta, old, cur); - //$$ } - //$$ - //$$ @Inject(method = "renderShadow", at = @At(value = "invoke", target = "Lcom/mojang/blaze3d/vertex/PoseStack;last()Lcom/mojang/blaze3d/vertex/PoseStack$Pose;", shift = Shift.BEFORE)) - //$$ private static void shadowMove(PoseStack matrices, MultiBufferSource vertexConsumers, Entity entity, float opacity, - //$$ float tickDelta, LevelReader world, float radius, CallbackInfo ci) { - //$$ if (!FirstPersonModelCore.instance.isRenderingPlayerPost()) { - //$$ return; - //$$ } - //$$ Vec3 offset = FirstPersonModelCore.instance.getLogicHandler().getOffset(); - //$$ matrices.translate(offset.x, offset.y, offset.z); - //$$ } - //$$ - //$$@Inject(method = "renderHitbox", at = @At(value = "HEAD"), cancellable = true) - //#if MC < 11700 - //$$ private void renderHitbox(PoseStack poseStack, VertexConsumer vertexConsumer, Entity entity, float f, CallbackInfo ci) { - //#elseif MC < 12100 - //$$ private static void renderHitbox(PoseStack poseStack, VertexConsumer vertexConsumer, Entity entity, float f, - //$$ CallbackInfo ci) { - //#else - //$$private static void renderHitbox(PoseStack poseStack, VertexConsumer vertexConsumer, Entity entity, float f, - //$$ float g, float h, float i, - //$$ CallbackInfo ci) { - //#endif - //$$ if (FirstPersonModelCore.instance.isRenderingPlayerPost()) { - //$$ ci.cancel(); - //$$ } - //$$} - //#endif + + *///? } else { + /* + @Redirect(method = "renderShadow", at = @At(value = "invoke", target = "Lnet/minecraft/util/Mth;lerp(DDD)D", ordinal = 0)) + private static double shadowOffsetX(double delta, double old, double cur, PoseStack poseStack, + MultiBufferSource multiBufferSource, Entity entity, float f, float g, LevelReader levelReader, float h) { + if (FirstPersonModelCore.instance.isRenderingPlayerPost()) { + return Mth.lerp(delta, old, cur) + FirstPersonModelCore.instance.getLogicHandler().getOffset().x; + } + return Mth.lerp(delta, old, cur); + } + + @Redirect(method = "renderShadow", at = @At(value = "invoke", target = "Lnet/minecraft/util/Mth;lerp(DDD)D", ordinal = 2)) + private static double shadowOffsetZ(double delta, double old, double cur, PoseStack poseStack, + MultiBufferSource multiBufferSource, Entity entity, float f, float g, LevelReader levelReader, float h) { + if (FirstPersonModelCore.instance.isRenderingPlayerPost()) { + return Mth.lerp(delta, old, cur) + FirstPersonModelCore.instance.getLogicHandler().getOffset().z; + } + return Mth.lerp(delta, old, cur); + } + + @Inject(method = "renderShadow", at = @At(value = "invoke", target = "Lcom/mojang/blaze3d/vertex/PoseStack;last()Lcom/mojang/blaze3d/vertex/PoseStack$Pose;", shift = At.Shift.BEFORE)) + private static void shadowMove(PoseStack matrices, MultiBufferSource vertexConsumers, Entity entity, float opacity, + float tickDelta, LevelReader world, float radius, CallbackInfo ci) { + if (!FirstPersonModelCore.instance.isRenderingPlayerPost()) { + return; + } + Vec3 offset = FirstPersonModelCore.instance.getLogicHandler().getOffset(); + matrices.translate(offset.x, offset.y, offset.z); + } + + @Inject(method = "renderHitbox", at = @At(value = "HEAD"), cancellable = true) + //? if < 1.17.0 { + /^ + private void renderHitbox(PoseStack poseStack, VertexConsumer vertexConsumer, Entity entity, float f, CallbackInfo ci) { + ^///? } else if < 1.21.0 { + /^ + private static void renderHitbox(PoseStack poseStack, VertexConsumer vertexConsumer, Entity entity, float f, + CallbackInfo ci) { + ^///? } else { + + private static void renderHitbox(PoseStack poseStack, VertexConsumer vertexConsumer, Entity entity, float f, + float g, float h, float i, + CallbackInfo ci) { + //? } + if (FirstPersonModelCore.instance.isRenderingPlayerPost()) { + ci.cancel(); + } + } + *///? } } diff --git a/src/main/java/dev/tr7zw/firstperson/mixins/StuckInBodyLayerMixin.java b/src/main/java/dev/tr7zw/firstperson/mixins/StuckInBodyLayerMixin.java index 80b27c78..67712b68 100644 --- a/src/main/java/dev/tr7zw/firstperson/mixins/StuckInBodyLayerMixin.java +++ b/src/main/java/dev/tr7zw/firstperson/mixins/StuckInBodyLayerMixin.java @@ -1,19 +1,16 @@ package dev.tr7zw.firstperson.mixins; -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 com.mojang.blaze3d.vertex.PoseStack; - -import dev.tr7zw.firstperson.FirstPersonModelCore; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.entity.layers.StuckInBodyLayer; -import net.minecraft.world.entity.LivingEntity; -//#if MC >= 12103 -import net.minecraft.client.renderer.entity.state.PlayerRenderState; -//#endif +import com.mojang.blaze3d.vertex.*; +import dev.tr7zw.firstperson.*; +import dev.tr7zw.firstperson.access.*; +import net.minecraft.client.renderer.*; +import net.minecraft.client.renderer.entity.layers.*; +//? if >= 1.21.2 +import net.minecraft.client.renderer.entity.state.*; +import net.minecraft.world.entity.*; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.*; /** * @author KxmischesDomi | https://github.com/kxmischesdomi @@ -21,16 +18,27 @@ @Mixin(StuckInBodyLayer.class) public class StuckInBodyLayerMixin { - //#if MC >= 12103 - @Inject(method = "render", at = @At("HEAD"), cancellable = true) - public void disableStuckFeatureLayer(PoseStack poseStack, MultiBufferSource multiBufferSource, int i, + //? if >= 1.21.9 { + @Inject(method = "submit(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;ILnet/minecraft/client/renderer/entity/state/AvatarRenderState;FF)V", at = @At("HEAD"), cancellable = true) + public void disableStuckFeatureLayer(PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int i, + AvatarRenderState avatarRenderState, float f, float g, CallbackInfo ci) { + //? } else if >= 1.21.3 { + /* + @Inject(method = "render", at = @At("HEAD"), cancellable = true) + public void disableStuckFeatureLayer(PoseStack poseStack, MultiBufferSource multiBufferSource, int i, PlayerRenderState playerRenderState, float f, float g, CallbackInfo ci) { - //#else - //$$@Inject(method = "render(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;ILnet/minecraft/world/entity/LivingEntity;FFFFFF)V", at = @At("HEAD"), cancellable = true) - //$$public void disableStuckFeatureLayer(PoseStack poseStack, MultiBufferSource multiBufferSource, int i, - //$$ T livingEntity, float f, float g, float h, float j, float k, float l, CallbackInfo ci) { - //#endif - if (FirstPersonModelCore.instance.isRenderingPlayer() + + *///? } else { + /* + @Inject(method = "render(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;ILnet/minecraft/world/entity/LivingEntity;FFFFFF)V", at = @At("HEAD"), cancellable = true) + public void disableStuckFeatureLayer(PoseStack poseStack, MultiBufferSource multiBufferSource, int i, + T livingEntity, float f, float g, float h, float j, float k, float l, CallbackInfo ci) { + *///? } + //? if >= 1.21.9 { + if (((LivingEntityRenderStateAccess) avatarRenderState).isCameraEntity() + //? } else { + /*if (FirstPersonModelCore.instance.isRenderingPlayer() + *///? } && !FirstPersonModelCore.instance.getConfig().renderStuckFeatures) { ci.cancel(); } diff --git a/src/main/java/dev/tr7zw/firstperson/mixins/WorldRendererMixin.java b/src/main/java/dev/tr7zw/firstperson/mixins/WorldRendererMixin.java index 2897d68b..121044ab 100644 --- a/src/main/java/dev/tr7zw/firstperson/mixins/WorldRendererMixin.java +++ b/src/main/java/dev/tr7zw/firstperson/mixins/WorldRendererMixin.java @@ -1,69 +1,77 @@ package dev.tr7zw.firstperson.mixins; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.At.Shift; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import com.mojang.blaze3d.vertex.*; +import dev.tr7zw.firstperson.*; +import net.minecraft.client.*; +import net.minecraft.client.renderer.*; +import net.minecraft.client.renderer.culling.*; +//? if >= 1.21.2 { +import net.minecraft.client.renderer.entity.state.*; +import net.minecraft.client.renderer.state.*; +//? } +import net.minecraft.world.entity.*; +import net.minecraft.world.phys.*; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.*; -import com.mojang.blaze3d.vertex.PoseStack; - -import dev.tr7zw.firstperson.FirstPersonModelCore; -import net.minecraft.client.Camera; -import net.minecraft.client.renderer.GameRenderer; -import net.minecraft.client.renderer.LevelRenderer; -import net.minecraft.client.renderer.LightTexture; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.MultiBufferSource.BufferSource; -import net.minecraft.client.renderer.RenderBuffers; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.phys.Vec3; -//#if MC >= 12103 -import com.mojang.blaze3d.resource.GraphicsResourceAllocator; -//#endif -//#if MC >= 12100 -import net.minecraft.client.DeltaTracker; - -import java.util.List; - -//#endif -//#if MC >= 11903 -import org.joml.Matrix4f; -//#else -//$$ import com.mojang.math.Matrix4f; -//#endif +import java.util.*; +//? if >= 1.21.9 { +//? } else if >= 1.19.3 { +/*import org.joml.*; +*///? } else { +/*import com.mojang.math.*; +*///? } /** * Detects when the player is rendered and triggers the correct changes * */ @Mixin(LevelRenderer.class) -public class WorldRendererMixin { +public abstract class WorldRendererMixin { + + //? if >= 1.21.9 { + @Shadow + protected abstract EntityRenderState extractEntity(Entity arg, float f); + //? } else { + /*@Shadow + protected abstract void renderEntity(Entity entity, double cameraX, double cameraY, double cameraZ, float tickDelta, + PoseStack matrices, MultiBufferSource vertexConsumers); + *///? } @Shadow private RenderBuffers renderBuffers; - //#if MC <= 12004 - //$$ @Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;checkPoseStack(Lcom/mojang/blaze3d/vertex/PoseStack;)V", ordinal = 0)) - //$$ public void render(PoseStack matrices, float tickDelta, long limitTime, boolean renderBlockOutline, Camera camera, - //$$ GameRenderer gameRenderer, LightTexture lightmapTextureManager, Matrix4f matrix4f, CallbackInfo info) { - //#elseif MC < 12100 - //$$ @Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;checkPoseStack(Lcom/mojang/blaze3d/vertex/PoseStack;)V", ordinal = 0)) - //$$ public void render(float tickDelta, long limitTime, boolean renderBlockOutline, Camera camera, - //$$ GameRenderer gameRenderer, LightTexture lightmapTextureManager, Matrix4f matrix4f, Matrix4f matrix4f2, CallbackInfo info) { - //$$ PoseStack matrices = new PoseStack(); - //#elseif MC < 12103 - //$$ @Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;checkPoseStack(Lcom/mojang/blaze3d/vertex/PoseStack;)V", ordinal = 0)) - //$$ public void render(DeltaTracker deltaTracker, boolean bl, Camera camera, GameRenderer gameRenderer, - //$$ LightTexture lightTexture, Matrix4f matrix4f, Matrix4f matrix4f2, CallbackInfo info) { - //$$ PoseStack matrices = new PoseStack(); - //#else - @Inject(method = "renderEntities", at = @At(value = "HEAD")) - private void renderEntities(PoseStack poseStack, BufferSource bufferSource, Camera camera, - DeltaTracker deltaTracker, List list, CallbackInfo ci) { + //? if <= 1.20.4 { + /* + @Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;checkPoseStack(Lcom/mojang/blaze3d/vertex/PoseStack;)V", ordinal = 0)) + public void render(PoseStack matrices, float tickDelta, long limitTime, boolean renderBlockOutline, Camera camera, + GameRenderer gameRenderer, LightTexture lightmapTextureManager, Matrix4f matrix4f, CallbackInfo info) { + *///? } else if < 1.21.0 { + /* + @Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;checkPoseStack(Lcom/mojang/blaze3d/vertex/PoseStack;)V", ordinal = 0)) + public void render(float tickDelta, long limitTime, boolean renderBlockOutline, Camera camera, + GameRenderer gameRenderer, LightTexture lightmapTextureManager, Matrix4f matrix4f, Matrix4f matrix4f2, + CallbackInfo info) { + PoseStack matrices = new PoseStack(); + *///? } else if < 1.21.3 { + + // @Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;checkPoseStack(Lcom/mojang/blaze3d/vertex/PoseStack;)V", ordinal = 0)) + // public void render(DeltaTracker deltaTracker, boolean bl, Camera camera, GameRenderer gameRenderer, + // LightTexture lightTexture, Matrix4f matrix4f, Matrix4f matrix4f2, CallbackInfo info) { + // PoseStack matrices = new PoseStack(); + //? } else if < 1.21.9 { + /*@Inject(method = "renderEntities", at = @At(value = "HEAD")) + private void renderEntities(PoseStack poseStack, MultiBufferSource.BufferSource bufferSource, Camera camera, + DeltaTracker deltaTracker, List list, CallbackInfo ci) { + PoseStack matrices = new PoseStack(); + *///? } else { + + @Inject(method = "extractVisibleEntities", at = @At(value = "HEAD")) + private void renderEntities(Camera camera, Frustum frustum, DeltaTracker deltaTracker, + LevelRenderState levelRenderState, CallbackInfo ci) { PoseStack matrices = new PoseStack(); - //#endif + //? } if (camera.isDetached() || !FirstPersonModelCore.instance.getLogicHandler().shouldApplyThirdPerson(false)) { return; } @@ -71,20 +79,53 @@ private void renderEntities(PoseStack poseStack, BufferSource bufferSource, Came MultiBufferSource.BufferSource immediate = renderBuffers.bufferSource(); FirstPersonModelCore.instance.setRenderingPlayer(true); FirstPersonModelCore.instance.setRenderingPlayerPost(true); - //#if MC < 12100 - //$$ renderEntity(camera.getEntity(), vec3d.x(), vec3d.y(), vec3d.z(), tickDelta, matrices, immediate); - //#else + // Store position and apply offset + var ent = camera.getEntity(); + var pos = ((EntityAccessor) ent).entityCulling$getRawPosition(); + var xO = ent.xo; + var yO = ent.yo; + var zO = ent.zo; + var xOld = ent.xOld; + var yOld = ent.yOld; + var zOld = ent.zOld; + //? if >= 1.21.0{ + + float tickDelta = deltaTracker.getGameTimeDeltaPartialTick(true); + //? } + FirstPersonModelCore.instance.getLogicHandler().updatePositionOffset(ent, tickDelta); + var offset = FirstPersonModelCore.instance.getLogicHandler().getOffset(); + ((EntityAccessor) ent).entityCulling$setRawPosition(pos.add(offset)); + ent.xo += offset.x; + ent.yo += offset.y; + ent.zo += offset.z; + ent.xOld += offset.x; + ent.yOld += offset.y; + ent.zOld += offset.z; + // Trigger render + //? if < 1.21.0 { + /* + renderEntity(camera.getEntity(), vec3d.x(), vec3d.y(), vec3d.z(), tickDelta, matrices, immediate); + *///? } else if < 1.21.9 { + /* + FirstPersonModelCore.instance.getLogicHandler().updatePositionOffset(ent, + deltaTracker.getGameTimeDeltaPartialTick(true)); renderEntity(camera.getEntity(), vec3d.x(), vec3d.y(), vec3d.z(), deltaTracker.getGameTimeDeltaPartialTick(false), matrices, immediate); - //#endif + *///? } else { + + levelRenderState.entityRenderStates.add(extractEntity(ent, deltaTracker.getGameTimeDeltaPartialTick(true))); + //? } + // Restore position + ((EntityAccessor) ent).entityCulling$setRawPosition(pos); + ent.xo = xO; + ent.yo = yO; + ent.zo = zO; + ent.xOld = xOld; + ent.yOld = yOld; + ent.zOld = zOld; FirstPersonModelCore.instance.setRenderingPlayer(false); FirstPersonModelCore.instance.setRenderingPlayerPost(false); - } - @Shadow - private void renderEntity(Entity entity, double cameraX, double cameraY, double cameraZ, float tickDelta, - PoseStack matrices, MultiBufferSource vertexConsumers) { - // shadow } } diff --git a/src/main/java/dev/tr7zw/firstperson/modsupport/FreecamSupport.java b/src/main/java/dev/tr7zw/firstperson/modsupport/FreecamSupport.java index bf0d64e3..640c1202 100644 --- a/src/main/java/dev/tr7zw/firstperson/modsupport/FreecamSupport.java +++ b/src/main/java/dev/tr7zw/firstperson/modsupport/FreecamSupport.java @@ -1,7 +1,7 @@ package dev.tr7zw.firstperson.modsupport; -import dev.tr7zw.firstperson.api.ActivationHandler; -import net.xolt.freecam.Freecam; +import dev.tr7zw.firstperson.api.*; +import net.xolt.freecam.*; public class FreecamSupport implements ActivationHandler { @@ -15,4 +15,4 @@ public boolean preventFirstperson() { return Freecam.isEnabled(); } -} \ No newline at end of file +} diff --git a/src/main/java/dev/tr7zw/firstperson/modsupport/ModSupportLoader.java b/src/main/java/dev/tr7zw/firstperson/modsupport/ModSupportLoader.java index c6755803..cf3c5ac9 100644 --- a/src/main/java/dev/tr7zw/firstperson/modsupport/ModSupportLoader.java +++ b/src/main/java/dev/tr7zw/firstperson/modsupport/ModSupportLoader.java @@ -1,9 +1,9 @@ package dev.tr7zw.firstperson.modsupport; -import dev.tr7zw.firstperson.api.FirstPersonAPI; -import dev.tr7zw.firstperson.versionless.FirstPersonBase; -import dev.tr7zw.transition.loader.ModLoaderUtil; -import lombok.experimental.UtilityClass; +import dev.tr7zw.firstperson.api.*; +import dev.tr7zw.firstperson.versionless.*; +import dev.tr7zw.transition.loader.*; +import lombok.experimental.*; @UtilityClass public class ModSupportLoader { diff --git a/src/main/java/dev/tr7zw/firstperson/modsupport/PlayerAnimatorSupport.java b/src/main/java/dev/tr7zw/firstperson/modsupport/PlayerAnimatorSupport.java index 03435625..ea6251f3 100644 --- a/src/main/java/dev/tr7zw/firstperson/modsupport/PlayerAnimatorSupport.java +++ b/src/main/java/dev/tr7zw/firstperson/modsupport/PlayerAnimatorSupport.java @@ -1,48 +1,44 @@ package dev.tr7zw.firstperson.modsupport; -import dev.kosmx.playerAnim.api.TransformType; -import dev.kosmx.playerAnim.core.impl.AnimationProcessor; -import dev.kosmx.playerAnim.core.util.Vec3f; -import dev.kosmx.playerAnim.impl.IAnimatedPlayer; -import dev.tr7zw.firstperson.api.PlayerOffsetHandler; -import dev.tr7zw.transition.mc.MathUtil; -import net.minecraft.client.player.AbstractClientPlayer; -import net.minecraft.util.Mth; -import net.minecraft.world.phys.Vec3; -//#if MC < 12000 -//$$ import net.minecraft.client.Minecraft; -//#endif -//#if MC >= 11903 -import org.joml.Matrix4f; -import org.joml.Vector4f; -//#else -//$$ import com.mojang.math.Matrix4f; -//$$ import com.mojang.math.Vector4f; -//#endif +import dev.tr7zw.firstperson.api.*; +import net.minecraft.client.player.*; +import net.minecraft.world.phys.*; +//? if >= 1.21.9 { +//? } else if >= 1.19.3 { +/*import org.joml.*; +*///? } else { +/* + import com.mojang.math.Matrix4f; + import com.mojang.math.Vector4f; +*///? } public class PlayerAnimatorSupport implements PlayerOffsetHandler { @Override public Vec3 applyOffset(AbstractClientPlayer entity, float delta, Vec3 original, Vec3 current) { - if (entity instanceof IAnimatedPlayer player && player.playerAnimator_getAnimation().isActive()) { + // FIXME for some reason I don't have PartKey + /*if (entity instanceof IAnimatedPlayer player && player.playerAnimator_getAnimation().isActive()) { AnimationProcessor anim = player.playerAnimator_getAnimation(); anim.setTickDelta(delta); // Probably the tick is done, set tick delta. // get required data - //#if MC >= 12103 +//? if >= 1.21.3 { + Vec3f rot = anim.get3DTransform(dev.kosmx.playerAnim.api.PartKey.BODY, TransformType.ROTATION, Vec3f.ZERO); Vec3f pos = anim.get3DTransform(dev.kosmx.playerAnim.api.PartKey.BODY, TransformType.POSITION, Vec3f.ZERO); // .scale(1 / 16f); It has been // pre-scaled Vec3f headPos = anim .get3DTransform(dev.kosmx.playerAnim.api.PartKey.HEAD, TransformType.POSITION, Vec3f.ZERO) .scale(1 / 16f); - //#else - //$$Vec3f rot = anim.get3DTransform("body", TransformType.ROTATION, Vec3f.ZERO); - //$$Vec3f pos = anim.get3DTransform("body", TransformType.POSITION, Vec3f.ZERO); // .scale(1 / 16f); It has been - //$$ // pre-scaled - //$$Vec3f headPos = anim.get3DTransform("head", TransformType.POSITION, Vec3f.ZERO).scale(1 / 16f); - //#endif - //#if MC >= 11903 +//? } else { + + // Vec3f rot = anim.get3DTransform("body", TransformType.ROTATION, Vec3f.ZERO); + // Vec3f pos = anim.get3DTransform("body", TransformType.POSITION, Vec3f.ZERO); // .scale(1 / 16f); It has been + // // pre-scaled + // Vec3f headPos = anim.get3DTransform("head", TransformType.POSITION, Vec3f.ZERO).scale(1 / 16f); +//? } +//? if >= 1.19.3 { + // Matrix4f#translate is an offset applied from LEFT (or absolute) Matrix4f relativeTranslation = new Matrix4f(); relativeTranslation.identity(); @@ -76,80 +72,82 @@ public Vec3 applyOffset(AbstractClientPlayer entity, float delta, Vec3 original, Vector4f offset = new Vector4f(0, 0, 0, 1); offset.mul(matrix); - //#elseif MC > 11700 - //$$ Matrix4f relativeTranslation = new Matrix4f(); - //$$ relativeTranslation.setIdentity(); - //$$ relativeTranslation.multiply(-1f); // 0.935 scaling is not even needed :D - //$$ final float bodyOffset = 0.8f; // Distance from the base origin to the head pivot - //$$ relativeTranslation.multiplyWithTranslation(0, -bodyOffset, 0); // Shift matrix down - //$$ - //$$ relativeTranslation.multiplyWithTranslation(pos.getX(), pos.getY(), pos.getZ()); // Apply torso - //$$ // transformation - //$$ - //$$ relativeTranslation.multiply(MathUtil.ZP.rotation(rot.getZ())); - //$$ relativeTranslation.multiply(MathUtil.YP.rotation(rot.getY())); - //$$ relativeTranslation.multiply(MathUtil.XP.rotation(rot.getX())); - //$$ // relativeTranslation.multiply(Quaternion.fromXYZ(rot.getX(), rot.getY(), - //$$ // rot.getZ())); - //$$ - //$$ relativeTranslation.multiplyWithTranslation(-headPos.getX(), -headPos.getY(), headPos.getZ()); - //$$ - //$$ relativeTranslation.multiplyWithTranslation(0, bodyOffset, 0); // Roll back the first [0,1,0] translation. - //$$ - //$$ // calculate the actual rotations and - //$$ float realYaw = Mth.rotLerp(Minecraft.getInstance().getFrameTime(), entity.yBodyRotO, entity.yBodyRot); - //$$ - //$$ Matrix4f matrix = new Matrix4f(); // To multiply from LEFT, I have to create a new instance?! - //$$ matrix.setIdentity(); - //$$ matrix.multiply(Matrix4f.createScaleMatrix(-1, 1, 1)); // What is going on with this?! - //$$ - //$$ matrix.multiply(new Matrix4f(MathUtil.YP.rotationDegrees(realYaw))); - //$$ - //$$ matrix.multiply(Matrix4f.createScaleMatrix(1, 1, -1)); - //$$ matrix.multiply(relativeTranslation); - //$$ - //$$ Vector4f offset = new Vector4f(0, 0, 0, 1); - //$$ offset.transform(matrix); - //#else - //$$ Matrix4f relativeTranslation = new Matrix4f(); - //$$ relativeTranslation.setIdentity(); - //$$ relativeTranslation.multiply(-1f); // 0.935 scaling is not even needed :D - //$$ final float bodyOffset = 0.8f; // Distance from the base origin to the head pivot - //$$ relativeTranslation.multiply(Matrix4f.createTranslateMatrix(0, -bodyOffset, 0)); // Shift matrix down - //$$ - //$$ relativeTranslation.multiply(Matrix4f.createTranslateMatrix(pos.getX(), pos.getY(), pos.getZ())); // Apply torso - //$$ // transformation - //$$ - //$$ relativeTranslation.multiply(MathUtil.ZP.rotation(rot.getZ())); - //$$ relativeTranslation.multiply(MathUtil.YP.rotation(rot.getY())); - //$$ relativeTranslation.multiply(MathUtil.XP.rotation(rot.getX())); - //$$ // relativeTranslation.multiply(Quaternion.fromXYZ(rot.getX(), rot.getY(), - //$$ // rot.getZ())); - //$$ - //$$ relativeTranslation.multiply(Matrix4f.createTranslateMatrix(-headPos.getX(), -headPos.getY(), headPos.getZ())); - //$$ - //$$ relativeTranslation.multiply(Matrix4f.createTranslateMatrix(0, bodyOffset, 0)); // Roll back the first [0,1,0] translation. - //$$ - //$$ // calculate the actual rotations and - //$$ float realYaw = Mth.rotLerp(Minecraft.getInstance().getFrameTime(), entity.yBodyRotO, entity.yBodyRot); - //$$ - //$$ Matrix4f matrix = new Matrix4f(); // To multiply from LEFT, I have to create a new instance?! - //$$ matrix.setIdentity(); - //$$ matrix.multiply(Matrix4f.createScaleMatrix(-1, 1, 1)); // What is going on with this?! - //$$ - //$$ matrix.multiply(new Matrix4f(MathUtil.YP.rotationDegrees(realYaw))); - //$$ - //$$ matrix.multiply(Matrix4f.createScaleMatrix(1, 1, -1)); - //$$ matrix.multiply(relativeTranslation); - //$$ - //$$ Vector4f offset = new Vector4f(0, 0, 0, 1); - //$$ offset.transform(matrix); - //#endif +//? } else if > 1.17.0 { + + // Matrix4f relativeTranslation = new Matrix4f(); + // relativeTranslation.setIdentity(); + // relativeTranslation.multiply(-1f); // 0.935 scaling is not even needed :D + // final float bodyOffset = 0.8f; // Distance from the base origin to the head pivot + // relativeTranslation.multiplyWithTranslation(0, -bodyOffset, 0); // Shift matrix down + // + // relativeTranslation.multiplyWithTranslation(pos.getX(), pos.getY(), pos.getZ()); // Apply torso + // // transformation + // + // relativeTranslation.multiply(MathUtil.ZP.rotation(rot.getZ())); + // relativeTranslation.multiply(MathUtil.YP.rotation(rot.getY())); + // relativeTranslation.multiply(MathUtil.XP.rotation(rot.getX())); + // // relativeTranslation.multiply(Quaternion.fromXYZ(rot.getX(), rot.getY(), + // // rot.getZ())); + // + // relativeTranslation.multiplyWithTranslation(-headPos.getX(), -headPos.getY(), headPos.getZ()); + // + // relativeTranslation.multiplyWithTranslation(0, bodyOffset, 0); // Roll back the first [0,1,0] translation. + // + // // calculate the actual rotations and + // float realYaw = Mth.rotLerp(Minecraft.getInstance().getFrameTime(), entity.yBodyRotO, entity.yBodyRot); + // + // Matrix4f matrix = new Matrix4f(); // To multiply from LEFT, I have to create a new instance?! + // matrix.setIdentity(); + // matrix.multiply(Matrix4f.createScaleMatrix(-1, 1, 1)); // What is going on with this?! + // + // matrix.multiply(new Matrix4f(MathUtil.YP.rotationDegrees(realYaw))); + // + // matrix.multiply(Matrix4f.createScaleMatrix(1, 1, -1)); + // matrix.multiply(relativeTranslation); + // + // Vector4f offset = new Vector4f(0, 0, 0, 1); + // offset.transform(matrix); +//? } else { + + // Matrix4f relativeTranslation = new Matrix4f(); + // relativeTranslation.setIdentity(); + // relativeTranslation.multiply(-1f); // 0.935 scaling is not even needed :D + // final float bodyOffset = 0.8f; // Distance from the base origin to the head pivot + // relativeTranslation.multiply(Matrix4f.createTranslateMatrix(0, -bodyOffset, 0)); // Shift matrix down + // + // relativeTranslation.multiply(Matrix4f.createTranslateMatrix(pos.getX(), pos.getY(), pos.getZ())); // Apply torso + // // transformation + // + // relativeTranslation.multiply(MathUtil.ZP.rotation(rot.getZ())); + // relativeTranslation.multiply(MathUtil.YP.rotation(rot.getY())); + // relativeTranslation.multiply(MathUtil.XP.rotation(rot.getX())); + // // relativeTranslation.multiply(Quaternion.fromXYZ(rot.getX(), rot.getY(), + // // rot.getZ())); + // + // relativeTranslation.multiply(Matrix4f.createTranslateMatrix(-headPos.getX(), -headPos.getY(), headPos.getZ())); + // + // relativeTranslation.multiply(Matrix4f.createTranslateMatrix(0, bodyOffset, 0)); // Roll back the first [0,1,0] translation. + // + // // calculate the actual rotations and + // float realYaw = Mth.rotLerp(Minecraft.getInstance().getFrameTime(), entity.yBodyRotO, entity.yBodyRot); + // + // Matrix4f matrix = new Matrix4f(); // To multiply from LEFT, I have to create a new instance?! + // matrix.setIdentity(); + // matrix.multiply(Matrix4f.createScaleMatrix(-1, 1, 1)); // What is going on with this?! + // + // matrix.multiply(new Matrix4f(MathUtil.YP.rotationDegrees(realYaw))); + // + // matrix.multiply(Matrix4f.createScaleMatrix(1, 1, -1)); + // matrix.multiply(relativeTranslation); + // + // Vector4f offset = new Vector4f(0, 0, 0, 1); + // offset.transform(matrix); +//? } // You may use the Y offset too. new Vector, since it already cancels out all // deltas - return current.add(offset.x(), /* offset.y() */ 0, offset.z()); - } + return current.add(offset.x(), /* offset.y() *//* 0, offset.z()); + }*/ return current; } diff --git a/src/main/resources/firstperson.mixins.json b/src/main/resources/firstperson.mixins.json index 31ed4d5c..cc0e92b7 100644 --- a/src/main/resources/firstperson.mixins.json +++ b/src/main/resources/firstperson.mixins.json @@ -4,22 +4,25 @@ "compatibilityLevel": "JAVA_8", "mixins": [], "client": [ - "HeldItemRendererMixin", - "WorldRendererMixin", + "AgeableListModelMixin", + "ArmorFeatureRendererMixin", + "CustomHeadLayerMixin", + "ElytraLayerMixin", + "EntityAccessor", + "FeatureRendererMixin", "FishingBobberRendererMixin", - "RenderDispatcherMixin", "HeldItemFeatureRendererMixin", - "ModelPartMixin", + "HeldItemRendererMixin", + "HumanoidModelMixin", "LivingEntityRendererMixin", - "FeatureRendererMixin", - "ArmorFeatureRendererMixin", - "StuckInBodyLayerMixin", - "ElytraLayerMixin", - "PlayerRendererMixin", - "CustomHeadLayerMixin", - "PlayerModelMixin", + "LivingEntityRenderStateMixin", + "ModelPartMixin", "PlayerMixin", - "AgeableListModelMixin" + "PlayerModelMixin", + "PlayerRendererMixin", + "RenderDispatcherMixin", + "StuckInBodyLayerMixin", + "WorldRendererMixin" ], "injectors": { "defaultRequire": 1 diff --git a/src/test/java/dev/tr7zw/tests/MixinTests.java b/src/test/java/dev/tr7zw/tests/MixinTests.java index cf04c454..85896976 100644 --- a/src/test/java/dev/tr7zw/tests/MixinTests.java +++ b/src/test/java/dev/tr7zw/tests/MixinTests.java @@ -1,27 +1,19 @@ -//#if MC >= 11800 +//? if >= 1.18.0 { + package dev.tr7zw.tests; -import static org.junit.jupiter.api.Assertions.assertTrue; - -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import org.objenesis.Objenesis; -import org.objenesis.ObjenesisStd; - -import dev.tr7zw.firstperson.versionless.mixinbase.ModelPartBase; -import net.minecraft.SharedConstants; -import net.minecraft.client.model.HumanoidModel; -import net.minecraft.client.model.geom.ModelPart; -import net.minecraft.client.renderer.ItemInHandRenderer; -import net.minecraft.client.renderer.LevelRenderer; -import net.minecraft.client.renderer.entity.EntityRenderDispatcher; -import net.minecraft.client.renderer.entity.FishingHookRenderer; -import net.minecraft.client.renderer.entity.layers.ArrowLayer; -import net.minecraft.client.renderer.entity.layers.CapeLayer; -import net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer; -import net.minecraft.client.renderer.entity.layers.ItemInHandLayer; -import net.minecraft.client.renderer.entity.player.PlayerRenderer; -import net.minecraft.server.Bootstrap; +import dev.tr7zw.firstperson.versionless.mixinbase.*; +import net.minecraft.*; +import net.minecraft.client.model.*; +import net.minecraft.client.model.geom.*; +import net.minecraft.client.renderer.*; +import net.minecraft.client.renderer.entity.*; +import net.minecraft.client.renderer.entity.layers.*; +import net.minecraft.server.*; +import org.junit.jupiter.api.*; +import org.objenesis.*; + +import static org.junit.jupiter.api.Assertions.*; public class MixinTests { @@ -47,11 +39,16 @@ void testMixins() { objenesis.newInstance(ItemInHandLayer.class); objenesis.newInstance(ItemInHandRenderer.class); objenesis.newInstance(HumanoidModel.class); - objenesis.newInstance(PlayerRenderer.class); + //? if >= 1.21.9 { + objenesis.newInstance(net.minecraft.client.renderer.entity.player.AvatarRenderer.class); + //? } else { + /* + objenesis.newInstance(net.minecraft.client.renderer.entity.player.PlayerRenderer.class); + *///? } objenesis.newInstance(EntityRenderDispatcher.class); objenesis.newInstance(ArrowLayer.class); objenesis.newInstance(LevelRenderer.class); } } -//#endif \ No newline at end of file +//? } diff --git a/versions/mainProject b/versions/mainProject index 2a40342d..5138a900 100644 --- a/versions/mainProject +++ b/versions/mainProject @@ -1 +1 @@ -1.21.6-fabric \ No newline at end of file +1.21.10-fabric \ No newline at end of file