diff --git a/build.gradle b/build.gradle index 6c79541..3dfda04 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version '1.10-SNAPSHOT' + id 'fabric-loom' version '1.11-SNAPSHOT' id 'maven-publish' } diff --git a/gradle.properties b/gradle.properties index a7f2b7d..2d36106 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,12 +1,12 @@ # Done to increase the memory available to gradle. org.gradle.jvmargs=-Xmx1G # Fabric Properties -minecraft_version=1.21.5 -yarn_mappings=1.21.5+build.1 -loader_version=0.16.10 +minecraft_version=1.21.9 +yarn_mappings=1.21.9+build.1 +loader_version=0.17.2 # Mod Properties -mod_version=0.1.2+mc1.21.5 +mod_version=0.2.0+mc1.21.9 maven_group=tobinio archives_base_name=real-arrow-tip # Dependencies -fabric_version=0.119.5+1.21.5 +fabric_version=0.133.14+1.21.9 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index cea7a79..ca025c8 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index f5feea6..f3b75f3 100755 --- a/gradlew +++ b/gradlew @@ -86,8 +86,7 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s -' "$PWD" ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/src/main/java/tobinio/realarrowtip/RealArrowTip.java b/src/main/java/tobinio/realarrowtip/RealArrowTip.java index 313a4ea..f6b3679 100644 --- a/src/main/java/tobinio/realarrowtip/RealArrowTip.java +++ b/src/main/java/tobinio/realarrowtip/RealArrowTip.java @@ -29,7 +29,9 @@ public class RealArrowTip implements ClientModInitializer { } public static int getColorFromStack(ItemStack stack) { - return ColorHelper.fullAlpha((stack.getOrDefault(DataComponentTypes.POTION_CONTENTS, - PotionContentsComponent.DEFAULT)).getColor()); + PotionContentsComponent component = stack.get(DataComponentTypes.POTION_CONTENTS); + if(component == null) return -1; + + return ColorHelper.fullAlpha(component.getColor()); } } diff --git a/src/main/java/tobinio/realarrowtip/mixin/ProjectileEntityRendererMixin.java b/src/main/java/tobinio/realarrowtip/mixin/ProjectileEntityRendererMixin.java index b6bece3..ee41070 100644 --- a/src/main/java/tobinio/realarrowtip/mixin/ProjectileEntityRendererMixin.java +++ b/src/main/java/tobinio/realarrowtip/mixin/ProjectileEntityRendererMixin.java @@ -4,15 +4,13 @@ import com.llamalad7.mixinextras.sugar.Local; import net.minecraft.client.model.ModelPart; import net.minecraft.client.render.OverlayTexture; import net.minecraft.client.render.RenderLayer; -import net.minecraft.client.render.VertexConsumer; -import net.minecraft.client.render.VertexConsumerProvider; -import net.minecraft.client.render.entity.ArrowEntityRenderer; +import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.entity.ProjectileEntityRenderer; import net.minecraft.client.render.entity.model.ArrowEntityModel; import net.minecraft.client.render.entity.state.ArrowEntityRenderState; import net.minecraft.client.render.entity.state.ProjectileEntityRenderState; +import net.minecraft.client.render.state.CameraRenderState; import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.entity.projectile.PersistentProjectileEntity; import net.minecraft.util.math.ColorHelper; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -25,14 +23,14 @@ import tobinio.realarrowtip.HasColor; import static tobinio.realarrowtip.RealArrowTip.id; @Mixin (ProjectileEntityRenderer.class) -public abstract class ProjectileEntityRendererMixin { +public abstract class ProjectileEntityRendererMixin { @Shadow @Final private ArrowEntityModel model; - @Inject (at = @At (value = "INVOKE", target = "Lnet/minecraft/client/util/math/MatrixStack;pop()V"), method = "render(Lnet/minecraft/client/render/entity/state/ProjectileEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V") - private void real_arrow_tip$render(ProjectileEntityRenderState projectileEntityRenderState, MatrixStack matrixStack, - VertexConsumerProvider vertexConsumerProvider, int i, CallbackInfo ci) { + @Inject (at = @At (value = "INVOKE", target = "Lnet/minecraft/client/util/math/MatrixStack;pop()V"), method = "render(Lnet/minecraft/client/render/entity/state/ProjectileEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/render/state/CameraRenderState;)V") + private void real_arrow_tip$render(S projectileEntityRenderState, MatrixStack matrixStack, + OrderedRenderCommandQueue orderedRenderCommandQueue, CameraRenderState cameraRenderState, CallbackInfo ci) { if (projectileEntityRenderState instanceof ArrowEntityRenderState arrowEntity) { int color = ColorHelper.fullAlpha(((HasColor) arrowEntity).real_arrow_tip$getColor()); @@ -40,10 +38,19 @@ public abstract class ProjectileEntityRendererMixin { projectile = skeleton.createArrowProjectile(projectile, 0, stack).getItemStack(); } - return projectile.getRegistryEntry().getIdAsString(); + return getProjectileType(projectile); } return "none"; @@ -63,8 +65,19 @@ public record ChargeTypeProperty() implements SelectProperty { return "none"; } else { ItemStack projectile = chargedProjectilesComponent.getProjectiles().getFirst(); - return projectile.getRegistryEntry().getIdAsString(); + return getProjectileType(projectile); + } + } + + private static String getProjectileType(ItemStack projectile) { + var color = getColorFromStack(projectile); + + // needed since stray & bogged shoot normal arrow with effect + if(color != -1 && projectile.isOf(Items.ARROW)) { + return Items.TIPPED_ARROW.getRegistryEntry().getIdAsString(); } + + return projectile.getRegistryEntry().getIdAsString(); } @Override diff --git a/src/main/java/tobinio/realarrowtip/model/TintSource.java b/src/main/java/tobinio/realarrowtip/model/TintSource.java index 4815e38..b58e145 100644 --- a/src/main/java/tobinio/realarrowtip/model/TintSource.java +++ b/src/main/java/tobinio/realarrowtip/model/TintSource.java @@ -55,12 +55,13 @@ public record TintSource(int defaultColor) implements net.minecraft.client.rende private @NotNull Integer getTintCrossbow(ItemStack stack) { ChargedProjectilesComponent chargedProjectiles = stack.getOrDefault(DataComponentTypes.CHARGED_PROJECTILES, ChargedProjectilesComponent.DEFAULT); - Optional tippedArrow = chargedProjectiles.getProjectiles() - .stream() - .filter(itemStack -> itemStack.isOf(Items.TIPPED_ARROW)) - .findFirst(); - return tippedArrow.map(RealArrowTip::getColorFromStack).orElse(this.defaultColor); + return chargedProjectiles.getProjectiles() + .stream() + .map(RealArrowTip::getColorFromStack) + .filter(color -> color != -1) + .findFirst() + .orElse(this.defaultColor); }