diff --git a/FPVersionless/src/main/java/dev/tr7zw/firstperson/versionless/FirstPersonBase.java b/FPVersionless/src/main/java/dev/tr7zw/firstperson/versionless/FirstPersonBase.java index 68d52dc7..db88e5cf 100644 --- a/FPVersionless/src/main/java/dev/tr7zw/firstperson/versionless/FirstPersonBase.java +++ b/FPVersionless/src/main/java/dev/tr7zw/firstperson/versionless/FirstPersonBase.java @@ -44,7 +44,7 @@ public void loadConfig() { } ConfigUpgrader.upgradeConfig(config); writeSettings(); - enabled = config.enabledByDefault; + setEnabled(config.enabledByDefault); } public void writeSettings() { diff --git a/src/main/java/dev/tr7zw/firstperson/FirstPersonModelCore.java b/src/main/java/dev/tr7zw/firstperson/FirstPersonModelCore.java index 996135a8..ec730b4d 100644 --- a/src/main/java/dev/tr7zw/firstperson/FirstPersonModelCore.java +++ b/src/main/java/dev/tr7zw/firstperson/FirstPersonModelCore.java @@ -18,6 +18,10 @@ public abstract class FirstPersonModelCore extends FirstPersonBase { private boolean isHeld = false; private KeyMapping keyBinding = new KeyMapping("key.firstperson.toggle", 295, "Firstperson"); private boolean lateInit = true; + @Deprecated + public static boolean enabled = true; + @Deprecated + public static boolean isRenderingPlayer = false; protected FirstPersonModelCore() { instance = this; @@ -70,4 +74,16 @@ public void onTick() { } } + @Override + public void setRenderingPlayer(boolean isRenderingPlayer) { + super.setRenderingPlayer(isRenderingPlayer); + FirstPersonModelCore.isRenderingPlayer = isRenderingPlayer; + } + + @Override + public void setEnabled(boolean enabled) { + super.setEnabled(enabled); + FirstPersonModelCore.enabled = enabled; + } + } diff --git a/src/main/java/dev/tr7zw/firstperson/LogicHandler.java b/src/main/java/dev/tr7zw/firstperson/LogicHandler.java index 70451f0f..a4e61717 100644 --- a/src/main/java/dev/tr7zw/firstperson/LogicHandler.java +++ b/src/main/java/dev/tr7zw/firstperson/LogicHandler.java @@ -22,6 +22,7 @@ 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; @RequiredArgsConstructor @@ -144,6 +145,11 @@ public boolean showVanillaHands() { return fpm.getConfig().vanillaHands || autoVanillaHandItems.contains(client.player.getMainHandItem().getItem()) || autoVanillaHandItems.contains(client.player.getOffhandItem().getItem()); } + + public boolean showVanillaHands(ItemStack mainhand, ItemStack offhand) { + return fpm.getConfig().vanillaHands || autoVanillaHandItems.contains(mainhand.getItem()) + || autoVanillaHandItems.contains(offhand.getItem()); + } public void addAutoVanillaHandsItem(Item item) { autoVanillaHandItems.add(item); diff --git a/src/main/java/dev/tr7zw/firstperson/mixins/PlayerMixin.java b/src/main/java/dev/tr7zw/firstperson/mixins/PlayerMixin.java new file mode 100644 index 00000000..a398885d --- /dev/null +++ b/src/main/java/dev/tr7zw/firstperson/mixins/PlayerMixin.java @@ -0,0 +1,35 @@ +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.CallbackInfoReturnable; + +import dev.tr7zw.firstperson.FirstPersonModelCore; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; + +@Mixin(Player.class) +public class PlayerMixin { + + @Shadow + private Inventory inventory; + + @Inject(method = "getItemBySlot", at = @At("HEAD"), cancellable = true) + public void getItemBySlot(EquipmentSlot slot, CallbackInfoReturnable ci) { + if (FirstPersonModelCore.instance.isRenderingPlayer()) { + if (slot == EquipmentSlot.HEAD) { + ci.setReturnValue(ItemStack.EMPTY); + return; + } + if (FirstPersonModelCore.instance.getLogicHandler().showVanillaHands(this.inventory.getSelected(), this.inventory.offhand.get(0))) { + ci.setReturnValue(ItemStack.EMPTY); + return; + } + } + } + +} diff --git a/src/main/resources/firstperson.mixins.json b/src/main/resources/firstperson.mixins.json index e4e1ef05..8ede1f50 100644 --- a/src/main/resources/firstperson.mixins.json +++ b/src/main/resources/firstperson.mixins.json @@ -19,7 +19,8 @@ "PlayerRendererMixin", "HumanoidModelMixin", "CustomHeadLayerMixin", - "PlayerModelMixin" + "PlayerModelMixin", + "PlayerMixin" ], "injectors": { "defaultRequire": 1