diff --git a/README.md b/README.md index d4abfa2..d834bbf 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,6 @@ # FORK! This is a forked version of https://modrinth.com/mod/powered-jetpacks -which was originally for 1.20.1. I've ported the mod to 1.21.8, but -there's still a major bug, which is if you're using the powered jetback in quirk armor, -it won't show it on your player model. - +which was originally for 1.20.1. I've ported the mod to 1.21.8. This version also adds hover flying and creative flying. Hover is by default bound to H, and creative fly is bound by default to J. diff --git a/gradle.properties b/gradle.properties index 6f0e9f8..56b4483 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,7 +10,7 @@ loader_version=0.17.2 loom_version=1.11-SNAPSHOT # Mod Properties -mod_version=1.1.2 +mod_version=1.2.0 maven_group=konhaiii.powered_jetpacks archives_base_name=powered_jetpacks diff --git a/src/client/java/konhaiii/powered_jetpacks/PlayerEntityRenderStateTrinkets.java b/src/client/java/konhaiii/powered_jetpacks/PlayerEntityRenderStateTrinkets.java new file mode 100644 index 0000000..1b927e1 --- /dev/null +++ b/src/client/java/konhaiii/powered_jetpacks/PlayerEntityRenderStateTrinkets.java @@ -0,0 +1,8 @@ +package konhaiii.powered_jetpacks; + +import net.minecraft.item.ItemStack; + +public interface PlayerEntityRenderStateTrinkets { + ItemStack powered_jetpacks$getTrinketsBack(); + void powered_jetpacks$setTrinketsBack(ItemStack stack); +} \ No newline at end of file diff --git a/src/client/java/konhaiii/powered_jetpacks/mixin/client/PlayerEntityRenderStateMixin.java b/src/client/java/konhaiii/powered_jetpacks/mixin/client/PlayerEntityRenderStateMixin.java new file mode 100644 index 0000000..8381953 --- /dev/null +++ b/src/client/java/konhaiii/powered_jetpacks/mixin/client/PlayerEntityRenderStateMixin.java @@ -0,0 +1,23 @@ +package konhaiii.powered_jetpacks.mixin.client; + +import konhaiii.powered_jetpacks.PlayerEntityRenderStateTrinkets; +import net.minecraft.client.render.entity.state.PlayerEntityRenderState; +import net.minecraft.item.ItemStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; + +@Mixin(PlayerEntityRenderState.class) +public class PlayerEntityRenderStateMixin implements PlayerEntityRenderStateTrinkets { + @Unique + private ItemStack trinketsBack = ItemStack.EMPTY; + + @Override + public ItemStack powered_jetpacks$getTrinketsBack() { + return trinketsBack; + } + + @Override + public void powered_jetpacks$setTrinketsBack(ItemStack stack) { + this.trinketsBack = stack; + } +} \ No newline at end of file diff --git a/src/client/java/konhaiii/powered_jetpacks/mixin/client/PlayerEntityRendererMixin.java b/src/client/java/konhaiii/powered_jetpacks/mixin/client/PlayerEntityRendererMixin.java new file mode 100644 index 0000000..338e0ac --- /dev/null +++ b/src/client/java/konhaiii/powered_jetpacks/mixin/client/PlayerEntityRendererMixin.java @@ -0,0 +1,36 @@ +package konhaiii.powered_jetpacks.mixin.client; + +import konhaiii.powered_jetpacks.PlayerEntityRenderStateTrinkets; +import konhaiii.powered_jetpacks.PoweredJetpacks; +import net.minecraft.client.network.AbstractClientPlayerEntity; +import net.minecraft.client.render.entity.PlayerEntityRenderer; +import net.minecraft.client.render.entity.state.PlayerEntityRenderState; +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.ItemStack; +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 java.lang.reflect.Method; + +@Mixin(PlayerEntityRenderer.class) +public class PlayerEntityRendererMixin { + @Inject( + method = "updateRenderState(Lnet/minecraft/client/network/AbstractClientPlayerEntity;Lnet/minecraft/client/render/entity/state/PlayerEntityRenderState;F)V", + at = @At("RETURN") + ) + private void updateRenderStateRotations(AbstractClientPlayerEntity entity, PlayerEntityRenderState state, float f, CallbackInfo ci) { + if (PoweredJetpacks.isTrinketsLoaded) { + try { + Class trinkets = Class.forName("konhaiii.powered_jetpacks.compat.TrinketsServer"); + Method getBackStack = trinkets.getMethod("getBackStack", LivingEntity.class); + ItemStack backStack = (ItemStack) getBackStack.invoke(null, entity); + + ((PlayerEntityRenderStateTrinkets)state).powered_jetpacks$setTrinketsBack(backStack); + } catch (Exception e) { + PoweredJetpacks.LOGGER.error("PlayerEntityRendererMixin: Could not load Trinkets compat class.", e); + } + } + } +} \ No newline at end of file diff --git a/src/client/java/konhaiii/powered_jetpacks/renderers/JetpackRenderer.java b/src/client/java/konhaiii/powered_jetpacks/renderers/JetpackRenderer.java index c41914c..ce0e142 100644 --- a/src/client/java/konhaiii/powered_jetpacks/renderers/JetpackRenderer.java +++ b/src/client/java/konhaiii/powered_jetpacks/renderers/JetpackRenderer.java @@ -3,21 +3,17 @@ package konhaiii.powered_jetpacks.renderers; import konhaiii.powered_jetpacks.PoweredJetpacks; import konhaiii.powered_jetpacks.item.ModItems; import konhaiii.powered_jetpacks.item.special.JetpackItem; +import konhaiii.powered_jetpacks.PlayerEntityRenderStateTrinkets; import konhaiii.powered_jetpacks.models.JetpackModel; import net.minecraft.client.render.*; import net.minecraft.client.render.entity.LivingEntityRenderer; import net.minecraft.client.render.entity.feature.FeatureRenderer; -import net.minecraft.client.render.entity.feature.FeatureRendererContext; -import net.minecraft.client.render.entity.model.EntityModelLayers; import net.minecraft.client.render.entity.state.PlayerEntityRenderState; import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.entity.EquipmentSlot; import net.minecraft.item.ItemStack; import net.minecraft.util.Identifier; import net.minecraft.util.math.RotationAxis; -import java.lang.reflect.Method; - public class JetpackRenderer extends FeatureRenderer { private final JetpackModel jetpackModel; @@ -40,15 +36,9 @@ public class JetpackRenderer extends FeatureRenderer trinkets = Class.forName("konhaiii.powered_jetpacks.compat.TrinketsServer"); - Method getBackStack = trinkets.getMethod("getBackStack", state.entity().getClass()); - backStack = (ItemStack) getBackStack.invoke(null, state.entity()); - } catch (Exception e) { - PoweredJetpacks.LOGGER.error("JetpackRenderer: Could not load Trinkets compat class.", e); - } - }*/ + if (PoweredJetpacks.isTrinketsLoaded) { + backStack = ((PlayerEntityRenderStateTrinkets)state).powered_jetpacks$getTrinketsBack(); + } // Pick the jetpack stack ItemStack jetpackStack = chestStack.getItem() instanceof JetpackItem ? chestStack diff --git a/src/client/resources/powered_jetpacks.client.mixins.json b/src/client/resources/powered_jetpacks.client.mixins.json index 54cd31f..693f9d2 100644 --- a/src/client/resources/powered_jetpacks.client.mixins.json +++ b/src/client/resources/powered_jetpacks.client.mixins.json @@ -1,11 +1,13 @@ { - "required": true, - "package": "konhaiii.powered_jetpacks.mixin.client", - "compatibilityLevel": "JAVA_17", - "client": [ - "ClientPlayerEntityMixin" - ], - "injectors": { - "defaultRequire": 1 + "required": true, + "package": "konhaiii.powered_jetpacks.mixin.client", + "compatibilityLevel": "JAVA_17", + "client": [ + "ClientPlayerEntityMixin", + "PlayerEntityRendererMixin", + "PlayerEntityRenderStateMixin" + ], + "injectors": { + "defaultRequire": 1 } } \ No newline at end of file