diff --git a/build.gradle b/build.gradle index c9e56a5..be27e9f 100644 --- a/build.gradle +++ b/build.gradle @@ -1,18 +1,22 @@ + + + + + + plugins { - id 'fabric-loom' version '0.4-SNAPSHOT' + id 'fabric-loom' version '0.12-SNAPSHOT' id 'maven-publish' } -sourceCompatibility = JavaVersion.VERSION_1_8 -targetCompatibility = JavaVersion.VERSION_1_8 +sourceCompatibility = JavaVersion.VERSION_17 +targetCompatibility = JavaVersion.VERSION_17 archivesBaseName = project.archives_base_name version = project.mod_version group = project.maven_group repositories { - // uncomment to publish to the local maven - // mavenLocal() mavenCentral() maven { url = "https://maven.modmuss50.me/" @@ -23,83 +27,62 @@ repositories { } dependencies { - //to change the versions see the gradle.properties file + // To change the versions see the gradle.properties file minecraft "com.mojang:minecraft:${project.minecraft_version}" mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" - // Fabric API. This is technically optional, but you probably want it anyway. +// Fabric API. This is technically optional, but you probably want it anyway. modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" - //Client Commands - modApi "io.github.cottonmc:cotton-client-commands:${project.cotton_client_command_version}" - include "io.github.cottonmc:cotton-client-commands:${project.cotton_client_command_version}" - //Line Drawing - modApi "me.shedaniel.cloth.api:cloth-api:${project.cloth_api_version}" - include "me.shedaniel.cloth.api:cloth-api:${project.cloth_api_version}" - include "me.shedaniel.cloth.api:cloth-client-events-v0:${project.cloth_api_version}" - - //Config +//Config modApi "com.electronwill.night-config:json:${project.night_config_version}" include "com.electronwill.night-config:json:${project.night_config_version}" modApi "com.electronwill.night-config:core:${project.night_config_version}" include "com.electronwill.night-config:core:${project.night_config_version}" - - // PSA: Some older mods, compiled on Loom 0.2.1, might have outdated Maven POMs. - // You may need to force-disable transitiveness on them. me.shedaniel.cloth.api.client.events.v0.ClothClientHooks; } processResources { inputs.property "version", project.version - from(sourceSets.main.resources.srcDirs) { - include "fabric.mod.json" + filesMatching("fabric.mod.json") { expand "version": project.version } - - from(sourceSets.main.resources.srcDirs) { - exclude "fabric.mod.json" - } } -// ensure that the encoding is set to UTF-8, no matter what the system default is -// this fixes some edge cases with special characters not displaying correctly -// see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html -tasks.withType(JavaCompile) { - options.encoding = "UTF-8" +tasks.withType(JavaCompile).configureEach { + // Minecraft 1.18 (1.18-pre2) upwards uses Java 17. + it.options.release = 17 } -// Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task -// if it is present. -// If you remove this task, sources will not be generated. -task sourcesJar(type: Jar, dependsOn: classes) { - classifier = "sources" - from sourceSets.main.allSource +java { + // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task + // if it is present. + // If you remove this line, sources will not be generated. + withSourcesJar() } jar { - from "LICENSE" + from("LICENSE") { + rename { "${it}_${project.archivesBaseName}"} + } } // configure the maven publication publishing { publications { mavenJava(MavenPublication) { - // add all the jars that should be included when publishing to maven - artifact(remapJar) { - builtBy remapJar - } - artifact(sourcesJar) { - builtBy remapSourcesJar - } + from components.java } } - // select the repositories you want to publish to + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. repositories { - // uncomment to publish to the local maven - // mavenLocal() + // Add repositories to publish to here. + // Notice: This block does NOT have the same function as the block in the top level. + // The repositories here will be used for publishing your artifact, not for + // retrieving dependencies. } -} +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 53c05b3..95d9689 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,20 +3,18 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check these on https://fabricmc.net/use - minecraft_version=1.16.4 - yarn_mappings=1.16.4+build.7 - loader_version=0.10.8 + minecraft_version=1.19 + yarn_mappings=1.19+build.1 + loader_version=0.14.6 # Mod Properties - mod_version = 1.0.12 + mod_version = 1.1.1 maven_group = net.fabricmc archives_base_name = TrajectoryFabric # Dependencies # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api - fabric_version=0.28.1+1.16 - cloth_api_version=1.2.0 + fabric_version=0.55.1+1.19 night_config_version=3.6.3 - cotton_client_command_version=1.0.1+1.16-rc1 # cloth_events_version=1.2.0 # cloth_config_version=4.5.6 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 490fda8..62d4c05 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 622ab64..d2880ba 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 2fe81a7..fbd7c51 100755 --- a/gradlew +++ b/gradlew @@ -82,6 +82,7 @@ esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then @@ -129,6 +130,7 @@ fi if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath diff --git a/gradlew.bat b/gradlew.bat index 62bd9b9..5093609 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -84,6 +84,7 @@ set CMD_LINE_ARGS=%* set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + @rem Execute Gradle "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% diff --git a/src/main/java/net/Segovo/TrajectoryFabric/RenderUtils.java b/src/main/java/net/Segovo/TrajectoryFabric/RenderUtils.java new file mode 100644 index 0000000..4c613e2 --- /dev/null +++ b/src/main/java/net/Segovo/TrajectoryFabric/RenderUtils.java @@ -0,0 +1,34 @@ +package net.Segovo.TrajectoryFabric; + +//shamelessly ripped from https://github.com/ate47/Xray/blob/fabric-1.19/src/main/java/fr/atesab/xray/utils/RenderUtils.java +import net.minecraft.client.render.VertexConsumer; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.util.math.Matrix3f; +import net.minecraft.util.math.Matrix4f; +import net.minecraft.util.math.Vec3f; + +public class RenderUtils { + + public static void renderSingleLine(MatrixStack stack, VertexConsumer buffer, float x1, float y1, float z1, + float x2, float y2, + float z2, float r, float g, float b, float a) { + Vec3f normal = new Vec3f(x2 - x1, y2 - y1, z2 - z1); + normal.normalize(); + renderSingleLine(stack, buffer, x1, y1, z1, x2, y2, z2, r, g, b, a, normal.getX(), normal.getY(), + normal.getZ()); + } + + public static void renderSingleLine(MatrixStack stack, VertexConsumer buffer, float x1, float y1, float z1, + float x2, float y2, + float z2, float r, float g, float b, float a, float normalX, float normalY, float normalZ) { + Matrix4f matrix4f = stack.peek().getPositionMatrix(); + Matrix3f matrix3f = stack.peek().getNormalMatrix(); + buffer.vertex(matrix4f, x1, y1, z1).color(r, g, b, a) + .normal(matrix3f, normalX, normalY, normalZ).next(); + buffer.vertex(matrix4f, x2, y2, z2).color(r, g, b, a) + .normal(matrix3f, normalX, normalY, normalZ).next(); + } + + private RenderUtils() { + } +} \ No newline at end of file diff --git a/src/main/java/net/Segovo/TrajectoryFabric/TrajectoryCommands.java b/src/main/java/net/Segovo/TrajectoryFabric/TrajectoryCommands.java index 48834c5..6489f96 100644 --- a/src/main/java/net/Segovo/TrajectoryFabric/TrajectoryCommands.java +++ b/src/main/java/net/Segovo/TrajectoryFabric/TrajectoryCommands.java @@ -3,151 +3,152 @@ import com.electronwill.nightconfig.core.file.FileConfig; import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.arguments.IntegerArgumentType; -import io.github.cottonmc.clientcommands.ClientCommandPlugin; -import io.github.cottonmc.clientcommands.CottonClientCommandSource; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.MinecraftClient; -import net.minecraft.network.MessageType; +import net.minecraft.network.message.MessageType; import net.minecraft.text.Text; -import net.minecraft.text.TranslatableText; import com.mojang.brigadier.arguments.BoolArgumentType; import java.awt.*; import java.io.File; import static com.mojang.brigadier.arguments.IntegerArgumentType.getInteger; -import static io.github.cottonmc.clientcommands.ArgumentBuilders.argument; -import static io.github.cottonmc.clientcommands.ArgumentBuilders.literal; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; //########### //Registers the commands and defines their functionality. //########### -public class TrajectoryCommands implements ClientCommandPlugin { +public class TrajectoryCommands { - FileConfig config = getConfigReference(); + static FileConfig config = getConfigReference(); - @Override - public void registerCommands(CommandDispatcher dispatcher) { - dispatcher.register(literal("trajectory") - .then(literal("lineColor") - .then(argument("red", IntegerArgumentType.integer(0, 255)) - .then(argument("green", IntegerArgumentType.integer(0, 255)) - .then(argument("blue", IntegerArgumentType.integer(0, 255)) - .then(argument("alpha", IntegerArgumentType.integer(0, 100)).executes(context -> { - config.set("lineColorR", getInteger(context, "red")); - config.set("lineColorG", getInteger(context, "green")); - config.set("lineColorB", getInteger(context, "blue")); - config.set("lineColorA", getInteger(context, "alpha")); - config.save(); - TrajectoryFabric.remoteLoadConfig(); - sendPrivateMessage(new TranslatableText("lineColor.set", describeColor(getInteger(context, "red"), getInteger(context, "green"), getInteger(context, "blue")))); - return 1; - }) + public static void registerCommands() { - ))))) - .then(literal("arrowTrajectory") - .then(literal("true").executes(context -> { - config.set("arrowTrajectory", true); - config.save(); - TrajectoryFabric.remoteLoadConfig(); - sendPrivateMessage(new TranslatableText("arrowTrajectory.true")); - return 1; - })) - .then(literal("false").executes(context -> { - config.set("arrowTrajectory", false); - config.save(); - TrajectoryFabric.remoteLoadConfig(); - sendPrivateMessage(new TranslatableText("arrowTrajectory.false")); - return 1; - })) - ) - .then(literal("componentVisibility") - .then(literal("line") - .then(literal("true").executes(context -> { - config.set("lineVisibility", true); - config.save(); - TrajectoryFabric.remoteLoadConfig(); - sendPrivateMessage(new TranslatableText("lineVisibility.true")); - return 1; - })) - .then(literal("false").executes(context -> { - config.set("lineVisibility", false); - config.save(); - TrajectoryFabric.remoteLoadConfig(); - sendPrivateMessage(new TranslatableText("lineVisibility.false")); - return 1; - })) - ) - .then(literal("box") - .then(literal("true").executes(context -> { - config.set("boxVisibility", true); - config.save(); - TrajectoryFabric.remoteLoadConfig(); - sendPrivateMessage(new TranslatableText("boxVisibility.true")); - return 1; - })) - .then(literal("false").executes(context -> { - config.set("boxVisibility", false); - config.save(); - TrajectoryFabric.remoteLoadConfig(); - sendPrivateMessage(new TranslatableText("boxVisibility.false")); - return 1; - })) - ) - .then(literal("approxBox") - .then(literal("true").executes(context -> { - config.set("approxBoxVisibility", true); - config.save(); - TrajectoryFabric.remoteLoadConfig(); - sendPrivateMessage(new TranslatableText("approxBoxVisibility.true")); - return 1; - })) - .then(literal("false").executes(context -> { - config.set("approxBoxVisibility", false); - config.save(); - TrajectoryFabric.remoteLoadConfig(); - sendPrivateMessage(new TranslatableText("approxBoxVisibility.false")); - return 1; - })) - ) - ) - .then(literal("lineOrigin") - .then(literal("left").executes(context -> { + ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> { + dispatcher.register( + ClientCommandManager.literal("trajectory") + .then(ClientCommandManager.literal("lineColor") + .then(ClientCommandManager.argument("red", IntegerArgumentType.integer(0, 255)) + .then(ClientCommandManager.argument("green", IntegerArgumentType.integer(0, 255)) + .then(ClientCommandManager.argument("blue", IntegerArgumentType.integer(0, 255)) + .then(ClientCommandManager.argument("alpha", IntegerArgumentType.integer(0, 100)).executes(context -> { + config.set("lineColorR", getInteger(context, "red")); + config.set("lineColorG", getInteger(context, "green")); + config.set("lineColorB", getInteger(context, "blue")); + config.set("lineColorA", getInteger(context, "alpha")); + config.save(); + TrajectoryFabric.remoteLoadConfig(); + sendPrivateMessage(Text.translatable("lineColor.set", describeColor(getInteger(context, "red"), getInteger(context, "green"), getInteger(context, "blue")))); + return 1; + }) + + ))))) + .then(ClientCommandManager.literal("arrowTrajectory") + .then(ClientCommandManager.literal("true").executes(context -> { + config.set("arrowTrajectory", true); + config.save(); + TrajectoryFabric.remoteLoadConfig(); + sendPrivateMessage(Text.translatable("arrowTrajectory.true")); + return 1; + })) + .then(ClientCommandManager.literal("false").executes(context -> { + config.set("arrowTrajectory", false); + config.save(); + TrajectoryFabric.remoteLoadConfig(); + sendPrivateMessage(Text.translatable("arrowTrajectory.false")); + return 1; + })) + ) + .then(ClientCommandManager.literal("componentVisibility") + .then(ClientCommandManager.literal("line") + .then(ClientCommandManager.literal("true").executes(context -> { + config.set("lineVisibility", true); + config.save(); + TrajectoryFabric.remoteLoadConfig(); + sendPrivateMessage(Text.translatable("lineVisibility.true")); + return 1; + })) + .then(ClientCommandManager.literal("false").executes(context -> { + config.set("lineVisibility", false); + config.save(); + TrajectoryFabric.remoteLoadConfig(); + sendPrivateMessage(Text.translatable("lineVisibility.false")); + return 1; + })) + ) + .then(ClientCommandManager.literal("box") + .then(ClientCommandManager.literal("true").executes(context -> { + config.set("boxVisibility", true); + config.save(); + TrajectoryFabric.remoteLoadConfig(); + sendPrivateMessage(Text.translatable("boxVisibility.true")); + return 1; + })) + .then(ClientCommandManager.literal("false").executes(context -> { + config.set("boxVisibility", false); + config.save(); + TrajectoryFabric.remoteLoadConfig(); + sendPrivateMessage(Text.translatable("boxVisibility.false")); + return 1; + })) + ) + .then(ClientCommandManager.literal("approxBox") + .then(ClientCommandManager.literal("true").executes(context -> { + config.set("approxBoxVisibility", true); + config.save(); + TrajectoryFabric.remoteLoadConfig(); + sendPrivateMessage(Text.translatable("approxBoxVisibility.true")); + return 1; + })) + .then(ClientCommandManager.literal("false").executes(context -> { + config.set("approxBoxVisibility", false); + config.save(); + TrajectoryFabric.remoteLoadConfig(); + sendPrivateMessage(Text.translatable("approxBoxVisibility.false")); + return 1; + })) + ) + ) + .then(ClientCommandManager.literal("lineOrigin") + .then(ClientCommandManager.literal("left").executes(context -> { config.set("lineOrigin", 1); config.save(); TrajectoryFabric.remoteLoadConfig(); - sendPrivateMessage(new TranslatableText("lineOrigin.left")); + sendPrivateMessage(Text.translatable("lineOrigin.left")); return 1; - })) - .then(literal("auto").executes(context -> { + })) + .then(ClientCommandManager.literal("auto").executes(context -> { config.set("lineOrigin", 2); config.save(); TrajectoryFabric.remoteLoadConfig(); - sendPrivateMessage(new TranslatableText("lineOrigin.auto")); + sendPrivateMessage(Text.translatable("lineOrigin.auto")); return 1; - })) - .then(literal("right").executes(context -> { - config.set("lineOrigin", 3); - config.save(); - TrajectoryFabric.remoteLoadConfig(); - sendPrivateMessage(new TranslatableText("lineOrigin.right")); - return 1; - })) - ) - ); + })) + .then(ClientCommandManager.literal("right").executes(context -> { + config.set("lineOrigin", 3); + config.save(); + TrajectoryFabric.remoteLoadConfig(); + sendPrivateMessage(Text.translatable("lineOrigin.right")); + return 1; + })) + ) + + ); + }); } // https://github.com/AMereBagatelle/AFKPeace/blob/1.16.x/src/main/java/amerebagatelle/github/io/afkpeace/commands/ConfigCommand.java - public void sendPrivateMessage(Text message) { + public static void sendPrivateMessage(Text message) { MinecraftClient mc = MinecraftClient.getInstance(); - mc.inGameHud.addChatMessage(MessageType.SYSTEM, message, mc.player.getUuid()); + mc.inGameHud.getChatHud().addMessage( message); } - public FileConfig getConfigReference() { + public static FileConfig getConfigReference() { return TrajectoryFabric.getConfigRef(); } - public String describeColor(int r, int g, int b) { + public static String describeColor(int r, int g, int b) { double lastSmallestDistance = Double.MAX_VALUE; String returnColor = "null"; for (int i = 0, color_i = 0; color_i < colorNames.length; i=i+3, color_i++) { @@ -165,7 +166,7 @@ public String describeColor(int r, int g, int b) { return returnColor; } - String[] colorNames = { + static String[] colorNames = { "maroon", "dark red", "brown", @@ -307,7 +308,7 @@ public String describeColor(int r, int g, int b) { "white" }; - int[] colorRGBs = { + static int[] colorRGBs = { 128,0,0, 139,0,0, 165,42,42, diff --git a/src/main/java/net/Segovo/TrajectoryFabric/TrajectoryFabric.java b/src/main/java/net/Segovo/TrajectoryFabric/TrajectoryFabric.java index 35ae355..da99735 100644 --- a/src/main/java/net/Segovo/TrajectoryFabric/TrajectoryFabric.java +++ b/src/main/java/net/Segovo/TrajectoryFabric/TrajectoryFabric.java @@ -4,12 +4,12 @@ import com.electronwill.nightconfig.core.file.FileConfig; import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; -import me.shedaniel.cloth.api.client.events.v0.ClothClientHooks; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.*; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.projectile.thrown.SnowballEntity; import net.minecraft.item.Item; @@ -22,11 +22,14 @@ import net.minecraft.world.RaycastContext; import net.minecraft.world.World; import org.lwjgl.opengl.GL11; - +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import java.io.File; import java.util.HashSet; import java.util.Optional; import java.util.Set; +import net.minecraft.client.render.WorldRenderer; +import net.minecraft.util.math.Box; //Code snippets from https://github.com/shedaniel/LightOverlay/blob/1.16/src/main/java/me/shedaniel/lightoverlay/fabric/LightOverlay.java @@ -61,46 +64,14 @@ public int[] getConfigIntegers() { return new int[] {config.get("lineOrigin")}; } - public static void renderBox(double x1, double y1, double z1, double x2, double y2, double z2) { - GL11.glVertex3d(x1, y1, z1); - GL11.glVertex3d(x1, y2, z1); - - GL11.glVertex3d(x2, y1, z1); - GL11.glVertex3d(x2, y2, z1); - - GL11.glVertex3d(x1, y1, z2); - GL11.glVertex3d(x1, y2, z2); - - GL11.glVertex3d(x2, y1, z2); - GL11.glVertex3d(x2, y2, z2); - // - GL11.glVertex3d(x1, y1, z1); - GL11.glVertex3d(x2, y1, z1); - - GL11.glVertex3d(x1, y2, z1); - GL11.glVertex3d(x2, y2, z1); - - GL11.glVertex3d(x1, y1, z2); - GL11.glVertex3d(x2, y1, z2); - - GL11.glVertex3d(x1, y2, z2); - GL11.glVertex3d(x2, y2, z2); - // - GL11.glVertex3d(x1, y1, z1); - GL11.glVertex3d(x1, y1, z2); + public static void renderBox(MatrixStack stack, VertexConsumer buffer, double x1, double y1, double z1, double x2, double y2, double z2, int[] color) { + Box aabb = new Box(x1, y1, z1, x2, y2, z2); + WorldRenderer.drawBox(stack, buffer, aabb, color[0], color[1], color[2], 1); - GL11.glVertex3d(x2, y1, z1); - GL11.glVertex3d(x2, y1, z2); - - GL11.glVertex3d(x1, y2, z1); - GL11.glVertex3d(x1, y2, z2); - - GL11.glVertex3d(x2, y2, z1); - GL11.glVertex3d(x2, y2, z2);; } - public static void renderCurve(Camera camera, World world, BlockPos pos, float pitch, float yaw, double eye, PlayerEntity player, int[] color, float speed, float gravity, boolean[] booleans, int[] integers, boolean mainHand) { + public static void renderCurve(MatrixStack stack, VertexConsumer buffer, Camera camera, World world, BlockPos pos, float pitch, float yaw, double eye, PlayerEntity player, int[] color, float speed, float gravity, boolean[] booleans, int[] integers, boolean mainHand) { double d0 = camera.getPos().x; double d1 = camera.getPos().y - .005D; double d2 = camera.getPos().z; @@ -109,7 +80,7 @@ public static void renderCurve(Camera camera, World world, BlockPos pos, float p double accurateZ = player.getZ(); // Simulation - RenderSystem.color4f(color[0] / 255f, color[1] / 255f, color[2] / 255f, (float)color[3]/100); + //float ngravity = 0.03f; float drag = 0.99f; @@ -145,10 +116,10 @@ public static void renderCurve(Camera camera, World world, BlockPos pos, float p double boxSize = hitDistance > 30 ? hitDistance/70 : 0.5; double defaultBoxSize = 0.5; // 0.5 = full block if (booleans[1]) { //Box visibility - renderBox(hitResult.getPos().x - defaultBoxSize - d0, hitResult.getPos().y - defaultBoxSize - d1, hitResult.getPos().z - defaultBoxSize - d2, hitResult.getPos().x + defaultBoxSize - d0, hitResult.getPos().y + defaultBoxSize - d1, hitResult.getPos().z + defaultBoxSize - d2); + renderBox(stack, buffer, hitResult.getPos().x - defaultBoxSize - d0, hitResult.getPos().y - defaultBoxSize - d1, hitResult.getPos().z - defaultBoxSize - d2, hitResult.getPos().x + defaultBoxSize - d0, hitResult.getPos().y + defaultBoxSize - d1, hitResult.getPos().z + defaultBoxSize - d2, color); } if (booleans[2]) { //ApproxBox visibility - renderBox(hitResult.getPos().x - boxSize - d0, hitResult.getPos().y - boxSize - d1, hitResult.getPos().z - boxSize - d2, hitResult.getPos().x + boxSize - d0, hitResult.getPos().y + boxSize - d1, hitResult.getPos().z + boxSize - d2); + renderBox(stack, buffer, hitResult.getPos().x - boxSize - d0, hitResult.getPos().y - boxSize - d1, hitResult.getPos().z - boxSize - d2, hitResult.getPos().x + boxSize - d0, hitResult.getPos().y + boxSize - d1, hitResult.getPos().z + boxSize - d2, color); } angleToHit = Math.acos(playerside / hitDistance); //finds the angle the line needs to point at to hit the target (since it's coming from the side, and changes depending on distance), // the "1" represents the opposite side, which we know. (opposite/adjacent). @@ -157,9 +128,10 @@ public static void renderCurve(Camera camera, World world, BlockPos pos, float p break; } - if (booleans[0]) { //Line visibility - GL11.glVertex3d(prevX + offsetX + (accurateX - d0), entityPosition.y + (accurateY - d1), prevZ + offsetZ + (accurateZ - d2)); - } + + double startx = prevX + offsetX + (accurateX - d0); + double starty = entityPosition.y + (accurateY - d1); + double startz = prevZ + offsetZ + (accurateZ - d2); entityPosition = entityPosition.add(entityVelocity); entityVelocity = entityVelocity.multiply(drag); @@ -168,8 +140,13 @@ public static void renderCurve(Camera camera, World world, BlockPos pos, float p double newZ = entityPosition.x * Math.sin(angleToHit-1.5708) + entityPosition.z * Math.cos(angleToHit-1.5708); // if (booleans[0]) { //Line visibility - GL11.glVertex3d(newX + offsetX + (accurateX-d0), entityPosition.y + (accurateY - d1), newZ + offsetZ + (accurateZ - d2)); + double endx = newX + offsetX + (accurateX-d0); + double endy = entityPosition.y + (accurateY - d1); + double endz = newZ + offsetZ + (accurateZ - d2); + RenderUtils.renderSingleLine(stack, buffer, (float) startx, (float) starty, (float) startz, (float) endx, (float) endy, (float) endz, color[0] / 255f, color[1] / 255f, color[2] / 255f, (float)color[3]/100); + } + prevX = newX; prevZ = newZ; } @@ -212,21 +189,36 @@ public void onInitializeClient() { itemsComplex.add(Items.BOW.asItem()); MinecraftClient client = MinecraftClient.getInstance(); - ClothClientHooks.DEBUG_RENDER_PRE.register(() -> { - RenderSystem.enableDepthTest(); - RenderSystem.disableTexture(); + + WorldRenderEvents.AFTER_ENTITIES.register((WorldRenderContext context) -> { + MatrixStack stack = context.matrixStack(); + + RenderSystem.setShader(GameRenderer::getPositionColorShader); + RenderSystem.setShaderColor(1f, 1f, 1f, 1f); + RenderSystem.depthMask(false); RenderSystem.enableBlend(); - RenderSystem.blendFunc(GlStateManager.SrcFactor.SRC_ALPHA, GlStateManager.DstFactor.ONE_MINUS_SRC_ALPHA); + RenderSystem.defaultBlendFunc(); + RenderSystem.disableTexture(); if (smoothLines) GL11.glEnable(GL11.GL_LINE_SMOOTH); - GL11.glLineWidth(2.0f); - GL11.glBegin(GL11.GL_LINES); + + stack.push(); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder buffer = tessellator.getBuffer(); + buffer.begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION_COLOR); + + RenderSystem.applyModelViewMatrix(); + Camera camera = client.gameRenderer.getCamera(); + Vec3d cameraPos = camera.getPos(); + + + //GL11.glLineWidth(2.0f); + //GL11.glBegin(GL11.GL_LINES); PlayerEntity playerEntity = client.player; World world = client.world; BlockPos blockPos = new BlockPos(playerEntity.getX(), playerEntity.getY(), playerEntity.getZ()); - Camera camera = client.gameRenderer.getCamera(); - float pitch = playerEntity.pitch; - float yaw = playerEntity.yaw; + float pitch = playerEntity.getPitch(); + float yaw = playerEntity.getYaw(); double eye = playerEntity.getEyeY(); ItemStack itemStack = playerEntity.getMainHandStack(); ItemStack itemStackAlt = playerEntity.getOffHandStack(); @@ -237,12 +229,14 @@ public void onInitializeClient() { else if (itemsSimple.contains(itemStackAlt.getItem()) || itemsComplex.contains(itemStackAlt.getItem())) { mainHand = false; }; if (itemsSimple.contains(itemStack.getItem()) || itemsSimple.contains(itemStackAlt.getItem())) { + System.out.println("A"); float speed = 1.5f; int[] color = getConfigColor(); boolean[] booleans = getConfigBooleans(); int[] integers = getConfigIntegers(); - TrajectoryFabric.renderCurve(camera, world, blockPos, pitch, yaw, eye, playerEntity, color, speed, 0.03f, booleans, integers, mainHand); - } else if (itemsComplex.contains(itemStack.getItem()) || itemsComplex.contains(itemStackAlt.getItem()) && (boolean)config.get("arrowTrajectory")) { + TrajectoryFabric.renderCurve(stack, buffer, camera, world, blockPos, pitch, yaw, eye, playerEntity, color, speed, 0.03f, booleans, integers, mainHand); + } else if (itemsComplex.contains(itemStack.getItem()) || itemsComplex.contains(itemStackAlt.getItem()) && ((boolean)config.get("arrowTrajectory"))) { + System.out.println("B"); float bowMultiplier = (72000.0f - playerEntity.getItemUseTimeLeft()) / 20.0f; bowMultiplier = (bowMultiplier * bowMultiplier + bowMultiplier * 2.0f) / 3.0f; if (bowMultiplier > 1.0f) { @@ -253,18 +247,22 @@ public void onInitializeClient() { int[] color = getConfigColor(); boolean[] booleans = getConfigBooleans(); int[] integers = getConfigIntegers(); - TrajectoryFabric.renderCurve(camera, world, blockPos, pitch, yaw, eye, playerEntity, color, speed, 0.05f, booleans, integers, mainHand); + TrajectoryFabric.renderCurve(stack, buffer, camera, world, blockPos, pitch, yaw, eye, playerEntity, color, speed, 0.05f, booleans, integers, mainHand); } - GL11.glEnd(); + //GL11.glEnd(); + tessellator.draw(); + stack.pop(); + RenderSystem.applyModelViewMatrix(); + RenderSystem.setShaderColor(1, 1, 1, 1); + RenderSystem.disableBlend(); RenderSystem.enableTexture(); if (smoothLines) GL11.glDisable(GL11.GL_LINE_SMOOTH); }); + TrajectoryCommands.registerCommands(); - HudRenderCallback.EVENT.register((matrixStack, tickDelta) -> { - }); } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 36b3add..e6ee505 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -18,14 +18,14 @@ "environment": "client", "entrypoints": { - "client": [ "net.Segovo.TrajectoryFabric.TrajectoryFabric" ], - "cotton-client-commands": ["net.Segovo.TrajectoryFabric.TrajectoryCommands"] + "client": [ "net.Segovo.TrajectoryFabric.TrajectoryFabric" ] }, "mixins": [], "depends": { - "fabricloader": ">=0.9.1", + "fabricloader": ">=0.14.6", "fabric": "*", - "minecraft": "1.16.x" + "minecraft": "~1.19", + "java": ">=17" }, "suggests": { "flamingo": "*"