diff --git a/d b/d new file mode 100644 index 0000000..e567fef --- /dev/null +++ b/d @@ -0,0 +1,204 @@ +commit 0b86ffab0df3225bd308f400d362b9b68df0ece2 (HEAD -> brasil) +Author: wuritz +Date: Thu Jul 10 08:43:51 2025 +0200 + + mukszik a traj + +commit 1d372e2576bffe9b3f312b62a8eb0388dbbe69e5 +Author: wuritz +Date: Tue Jul 8 10:01:27 2025 +0200 + + hulkenberg megin jobb + +commit 4a872fe9270ad40c89cd046e177036a1799aa489 (origin/brasil) +Merge: 317d537 2562cca +Author: wuritz +Date: Mon Jul 7 23:25:40 2025 +0200 + + Merge remote-tracking branch 'origin/brasil' into brasil + +commit 317d537222c3ad745e5712daddb0a85fbed3065f +Author: wuritz +Date: Mon Jul 7 23:24:19 2025 +0200 + + igen + +commit 2562ccaa0fc3630216d0144b4b13a9619176adbe +Author: wuritz +Date: Mon Jul 7 23:24:19 2025 +0200 + + igen + +commit 86890891ccacb94852b744c9ad6edcf388232e31 +Author: wuritz +Date: Mon Jul 7 23:08:09 2025 +0200 + + eltunik yooooo + +commit 7bb49127b383d418f6cbe7a77ff3ffb2b5800312 +Author: wuritz +Date: Sun Jul 6 22:08:25 2025 +0200 + + rossz wolt az accesswidener + +commit 995c1ffb840e8a0479accf95768206f63abdce69 +Author: wuritz +Date: Sun Jul 6 22:04:26 2025 +0200 + + angel hulkenberg + +commit 23c39a8ed8f0a6c5208d67391c34fa54d7feea17 +Author: wuritz +Date: Sun Jul 6 22:01:26 2025 +0200 + + angel hulkenberg + +commit df318ca9711c31389c38699bbcf473d69feea97d +Author: wuritz +Date: Sun Jun 29 11:59:01 2025 +0200 + + meg mielott elbasznam + +commit 4ea49baeb95b592d23945b11cb41050b61975587 +Author: wuritz +Date: Sun Jun 22 23:29:50 2025 +0200 + + enemies + +commit 6a30b7b503cf8d9d0f119cb4201ba21cf1da5c84 +Author: wuritz +Date: Sun Jun 22 13:25:02 2025 +0200 + + auto ez? + +commit 0dc1bf617d431bace2c47f2575f4ebd7dda7307e +Author: wuritz +Date: Sun Jun 22 12:18:42 2025 +0200 + + auto ez + +commit 85360639a1a1dcf341b09f1641fea9241f24089d +Author: wuritz +Date: Sun Jun 22 11:17:31 2025 +0200 + + fasz genyo fasz + +commit d48c94bb0ee3b401bc5b5e010871b9e271ee0304 +Author: wuritz +Date: Sun Jun 22 00:41:24 2025 +0200 + + ffffa + +commit 7f1a37ef88f596fa3fd6a40cc4807f0c896d4bd7 +Author: wuritz +Date: Sat Jun 21 12:42:02 2025 +0200 + + fass + +commit f1dc1d886e8fd37dc5f3c1a734a4cd5527572150 +Author: wuritz +Date: Sat Jun 21 12:40:38 2025 +0200 + + mixin + +commit b4451d7b8b2fc6854e7bc6e0e5fc90e94a228a1d +Author: wuritz +Date: Sat Jun 21 12:25:55 2025 +0200 + + genyo jobb + +commit 05aff3e3d7f3b0483466ee5fdad4a2de7c394668 +Author: wuritz +Date: Sat Jun 21 12:23:36 2025 +0200 + + genyo genyo mostmar jobb + +commit fe5dde06cfb19008ecb50d6b5b22fa7cd4b1da46 (tag: Genyo) +Author: wuritz +Date: Sat Jun 21 00:32:47 2025 +0200 + + genyo + +commit 35369cd1008714863ea7590ab07bc264d58aed24 +Author: wuritz +Date: Sat Jun 21 00:15:46 2025 +0200 + + genyo + +commit ab2baad46f6f690e349d16d0582ace26e64b6d66 +Author: Ritz Richárd <38112734+wuritz@users.noreply.github.com> +Date: Sat Jun 21 00:22:12 2025 +0200 + + Delete gradle directory + +commit de406708b999be0647fa935127478a0272918013 +Author: Ritz Richárd <38112734+wuritz@users.noreply.github.com> +Date: Sat Jun 21 00:22:07 2025 +0200 + + Delete src directory + +commit 98edadca233013c294cd39d0713f403e8255c588 +Author: Ritz Richárd <38112734+wuritz@users.noreply.github.com> +Date: Sat Jun 21 00:22:01 2025 +0200 + + Delete .editorconfig + +commit a8c35152f0e7f6332e124f763cf9a8c142c2bcc2 +Author: Ritz Richárd <38112734+wuritz@users.noreply.github.com> +Date: Sat Jun 21 00:21:53 2025 +0200 + + Delete .gitignore + +commit 58dc8f4c2321916ef72ac45ab81a893f2d950649 +Author: Ritz Richárd <38112734+wuritz@users.noreply.github.com> +Date: Sat Jun 21 00:21:48 2025 +0200 + + Delete LICENSE + +commit 785b4b5df405b753d2a148c1a30fa3bae3e2c631 +Author: Ritz Richárd <38112734+wuritz@users.noreply.github.com> +Date: Sat Jun 21 00:21:43 2025 +0200 + + Delete gradle.properties + +commit c817557346c4c12497d65091d86481ce9de28f51 +Author: Ritz Richárd <38112734+wuritz@users.noreply.github.com> +Date: Sat Jun 21 00:21:37 2025 +0200 + + Delete README.md + +commit f0a7e33dfa3a03163d322bae3d17ce772e78bff7 +Author: Ritz Richárd <38112734+wuritz@users.noreply.github.com> +Date: Sat Jun 21 00:21:28 2025 +0200 + + Delete gradlew + +commit 7e7f590e3cf157f693911e0a48e2399d496d3d0d +Author: Ritz Richárd <38112734+wuritz@users.noreply.github.com> +Date: Sat Jun 21 00:21:23 2025 +0200 + + Delete gradlew.bat + +commit 18e4ecb04105053425646330d501653bb9bc6d8e +Author: Ritz Richárd <38112734+wuritz@users.noreply.github.com> +Date: Sat Jun 21 00:21:18 2025 +0200 + + Delete settings.gradle.kts + +commit 01afc005e32fac81c1935fe6c974a7b09c890f32 +Author: Ritz Richárd <38112734+wuritz@users.noreply.github.com> +Date: Sat Jun 21 00:21:09 2025 +0200 + + Delete build.gradle.kts + +commit 77e40d543a743324c8a4e0d0cf56c98dd141a5cf +Author: Ritz Richárd <38112734+wuritz@users.noreply.github.com> +Date: Sat Jun 21 00:20:46 2025 +0200 + + Delete .github/workflows directory + +commit edb5a105974719a364cd2f9fc651ffff88b2792e +Author: Ritz Richárd <38112734+wuritz@users.noreply.github.com> +Date: Fri Jun 20 21:05:32 2025 +0200 + + Initial commit diff --git a/gradle.properties b/gradle.properties index c94ef18..1492971 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ yarn_mappings=1.21.4+build.8 loader_version=0.16.14 # Mod Properties -mod_version=0.6.9 +mod_version=0.7.0 maven_group=com.genyo archives_base_name=genyo-addon diff --git a/src/main/java/com/genyo/addon/GenyoAddon.java b/src/main/java/com/genyo/addon/GenyoAddon.java index 9d03740..638b93a 100644 --- a/src/main/java/com/genyo/addon/GenyoAddon.java +++ b/src/main/java/com/genyo/addon/GenyoAddon.java @@ -3,6 +3,7 @@ import com.genyo.addon.gui.EnemiesTab; import com.genyo.addon.hud.PvPNeccessaryHud; import com.genyo.addon.managers.Managers; +import com.genyo.addon.managers.ModulesManager; import com.genyo.addon.modules.AngelSexHulkenberg; import com.genyo.addon.modules.GenyoAutoEZ; import com.genyo.addon.modules.TescoCrystal; @@ -27,14 +28,12 @@ public class GenyoAddon extends MeteorAddon { public void onInitialize() { LOG.info("Genyo fasz indul genyo"); + Tabs.add(new EnemiesTab()); Systems.add(new Enemies()); - Modules.get().add(new GenyoAutoEZ()); - Modules.get().add(new TescoCrystal()); - Modules.get().add(new AngelSexHulkenberg()); - - Tabs.add(new EnemiesTab()); + // Managers mert ez menőn néz ki + ModulesManager.initModules(); Managers.subscribe(); // HUD diff --git a/src/main/java/com/genyo/addon/managers/Managers.java b/src/main/java/com/genyo/addon/managers/Managers.java index 492bd1a..8f2174b 100644 --- a/src/main/java/com/genyo/addon/managers/Managers.java +++ b/src/main/java/com/genyo/addon/managers/Managers.java @@ -1,13 +1,16 @@ package com.genyo.addon.managers; +import com.genyo.addon.render.Render3DEngine; import meteordevelopment.meteorclient.MeteorClient; public class Managers { public static final CombatManager COMBAT = new CombatManager(); + public static final Render3DEngine ENGINE3D = new Render3DEngine(); public static void subscribe() { MeteorClient.EVENT_BUS.subscribe(COMBAT); + MeteorClient.EVENT_BUS.subscribe(ENGINE3D); } } diff --git a/src/main/java/com/genyo/addon/managers/ModulesManager.java b/src/main/java/com/genyo/addon/managers/ModulesManager.java new file mode 100644 index 0000000..704f8ea --- /dev/null +++ b/src/main/java/com/genyo/addon/managers/ModulesManager.java @@ -0,0 +1,20 @@ +package com.genyo.addon.managers; + +import com.genyo.addon.modules.AngelSexHulkenberg; +import com.genyo.addon.modules.GenyoAutoEZ; +import com.genyo.addon.modules.TescoCrystal; +import com.genyo.addon.modules.TescoTrajectories; +import meteordevelopment.meteorclient.systems.modules.Modules; + +public class ModulesManager { + + private static Modules modules = Modules.get(); + + public static void initModules() { + modules.add(new GenyoAutoEZ()); + modules.add(new TescoCrystal()); + modules.add(new AngelSexHulkenberg()); + modules.add(new TescoTrajectories()); + } + +} diff --git a/src/main/java/com/genyo/addon/modules/AngelSexHulkenberg.java b/src/main/java/com/genyo/addon/modules/AngelSexHulkenberg.java index 5de2474..bc3e1c4 100644 --- a/src/main/java/com/genyo/addon/modules/AngelSexHulkenberg.java +++ b/src/main/java/com/genyo/addon/modules/AngelSexHulkenberg.java @@ -10,17 +10,24 @@ import com.mojang.authlib.GameProfile; import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; +import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.events.render.Render3DEvent; import meteordevelopment.meteorclient.events.world.TickEvent; +import meteordevelopment.meteorclient.renderer.*; import meteordevelopment.meteorclient.settings.*; import meteordevelopment.meteorclient.systems.modules.Module; import meteordevelopment.meteorclient.utils.render.color.Color; import meteordevelopment.meteorclient.utils.render.color.SettingColor; import meteordevelopment.orbit.EventHandler; +import net.minecraft.client.gl.ShaderLoader; +import net.minecraft.client.gl.ShaderProgram; +import net.minecraft.client.gl.ShaderProgramKey; +import net.minecraft.client.gl.ShaderProgramKeys; import net.minecraft.client.network.AbstractClientPlayerEntity; import net.minecraft.client.render.*; import net.minecraft.client.render.entity.PlayerEntityRenderer; import net.minecraft.client.render.entity.state.PlayerEntityRenderState; +import net.minecraft.client.util.SkinTextures; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; @@ -38,6 +45,8 @@ public AngelSexHulkenberg() { } private final SettingGroup sgGeneral = settings.getDefaultGroup(); + private final SettingGroup sgRender = settings.createGroup("Render"); + private final SettingGroup sgSpeed = settings.createGroup("Speed"); private final Setting focusEnemy = sgGeneral.add(new BoolSetting.Builder() .name("Focus Enemies") @@ -46,28 +55,39 @@ public AngelSexHulkenberg() { .build() ); - private final Setting mode = sgGeneral.add(new EnumSetting.Builder() + // Render + + private final Setting mode = sgRender.add(new EnumSetting.Builder() .name("Mode") .description("Ki a faszom az a Hulkenberg??????????") .defaultValue(Mode.Textured) .build() ); - private final Setting secondLayer = sgGeneral.add(new BoolSetting.Builder() + private final Setting rotate180 = sgRender.add(new BoolSetting.Builder() + .name("Rotate Y 180") + .description("fejjel lefelé mert igen") + .defaultValue(false) + .build() + ); + + private final Setting secondLayer = sgRender.add(new BoolSetting.Builder() .name("Second Layer") .description("kiyártam a kettedik osztájt") .defaultValue(true) .build() ); - private final Setting color = sgGeneral.add(new ColorSetting.Builder() + private final Setting color = sgRender.add(new ColorSetting.Builder() .name("Color") .description("színcápa színcápa mondj egy színt") .defaultValue(new Color(53, 46, 46, 255)) .build() ); - private final Setting ySpeed = sgGeneral.add(new IntSetting.Builder() + // Speed + + private final Setting ySpeed = sgSpeed.add(new IntSetting.Builder() .name("Y Speed") .description("y show speed") .defaultValue(2) @@ -76,7 +96,7 @@ public AngelSexHulkenberg() { .build() ); - private final Setting aSpeed = sgGeneral.add(new IntSetting.Builder() + private final Setting aSpeed = sgSpeed.add(new IntSetting.Builder() .name("Alpha Speed") .description("alpha-i show speed") .defaultValue(5) @@ -85,7 +105,7 @@ public AngelSexHulkenberg() { .build() ); - private final Setting rotSpeed = sgGeneral.add(new DoubleSetting.Builder() + private final Setting rotSpeed = sgSpeed.add(new DoubleSetting.Builder() .name("Rotation Speed") .description("rotációs kapa") .defaultValue(1d) @@ -124,8 +144,8 @@ public void onRender(Render3DEvent event) { @EventHandler @SuppressWarnings("unused") private void onTotemPop(@NotNull TotemPopEvent e) { - if (e.entity.equals(mc.player) || mc.world == null) return; - //if (mc.world == null) return; //-------- for testing + //if (e.entity.equals(mc.player) || mc.world == null) return; + if (mc.world == null) return; //-------- for testing if (mc.getServer() == null) return; if (focusEnemy.get()) if (!(Enemies.get().isEnemy(e.entity))) return; @@ -144,14 +164,18 @@ private void onTotemPop(@NotNull TotemPopEvent e) { entity.limbAnimator.setSpeed(e.entity.limbAnimator.getSpeed()); entity.limbAnimator.pos = e.entity.limbAnimator.getPos(); - ServerWorld sWorld = mc.getServer().getWorld(entity.getWorld().getRegistryKey()); - popList.add(new Person(entity, ((AbstractClientPlayerEntity) e.entity).getSkinTextures().texture(), sWorld)); + Identifier skin = ((AbstractClientPlayerEntity) e.entity).getSkinTextures().texture(); + //Identifier skin = Identifier.of("genyo", "epic_skin.png"); + + popList.add(new Person(entity, skin, mc.getServer().getWorld(entity.getWorld().getRegistryKey()))); } private void renderEntity(@NotNull MatrixStack matrices, @NotNull LivingEntity entity, Identifier texture, int alpha) { PlayerEntityRenderer entityRenderer = (PlayerEntityRenderer) mc.getEntityRenderDispatcher().getRenderer((AbstractClientPlayerEntity) entity); PlayerEntityRenderState renderState = entityRenderer.createRenderState(); + MeteorClient.LOG.info("asd"); + renderState.leftPantsLegVisible = secondLayer.get(); renderState.rightPantsLegVisible = secondLayer.get(); renderState.leftSleeveVisible = secondLayer.get(); @@ -171,37 +195,39 @@ private void renderEntity(@NotNull MatrixStack matrices, @NotNull LivingEntity e yRotYaw = yRotYaw == 0 ? 0 : Render2DEngine.interpolateFloat(yRotYaw, yRotYaw - (((aSpeed.get() / 255f) * 360f * rotSpeed.get().floatValue())), Render3DEngine.getTickDelta()); matrices.multiply(RotationAxis.POSITIVE_Y.rotation(MathUtil.rad(180 - entity.bodyYaw + yRotYaw))); - prepareScale(matrices); + prepareScale(matrices, rotate180.get()); float limbSpeed = Math.min(entity.limbAnimator.getSpeed(), 1f); entityRenderer.updateRenderState((AbstractClientPlayerEntity) entity, renderState, limbSpeed); + renderState.limbFrequency = limbSpeed; + renderState.age = entity.age; + renderState.yawDegrees = entity.headYaw - entity.bodyYaw; + renderState.pitch = entity.getPitch(); BufferBuilder buffer; if (mode.get().equals(Mode.Textured)) { RenderSystem.setShaderTexture(0, texture); + RenderSystem.setShader(ShaderProgramKeys.POSITION_TEX); buffer = Tessellator.getInstance().begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE); } else { + RenderSystem.setShader(ShaderProgramKeys.POSITION); buffer = Tessellator.getInstance().begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); } RenderSystem.setShaderColor(color.get().r, color.get().g, color.get().b, alpha / 255f); entityRenderer.render(renderState, matrices, mc.getBufferBuilders().getEntityVertexConsumers(), 1); - //modelBase.render(matrices, buffer, 10, 0); - endBuilding(buffer); + + Render2DEngine.endBuilding(buffer); RenderSystem.setShaderColor(1f, 1f, 1f, 1f); matrices.pop(); } - public static void endBuilding(BufferBuilder bb) { - BuiltBuffer builtBuffer = bb.endNullable(); - if (builtBuffer != null) - BufferRenderer.drawWithGlobalProgram(builtBuffer); - } + private static void prepareScale(@NotNull MatrixStack matrixStack, boolean rotate) { + if (rotate) matrixStack.scale(-1.0F, -1.0F, 1.0F); + else matrixStack.scale(-1.0F, 1.0F, 1.0F); - private static void prepareScale(@NotNull MatrixStack matrixStack) { - matrixStack.scale(-1.0F, -1.0F, 1.0F); matrixStack.scale(1.6f, 1.8f, 1.6f); matrixStack.translate(0.0F, -1.501F, 0.0F); } diff --git a/src/main/java/com/genyo/addon/modules/TescoTrajectories.java b/src/main/java/com/genyo/addon/modules/TescoTrajectories.java new file mode 100644 index 0000000..ef2313b --- /dev/null +++ b/src/main/java/com/genyo/addon/modules/TescoTrajectories.java @@ -0,0 +1,237 @@ +package com.genyo.addon.modules; + +import com.genyo.addon.GenyoAddon; +import com.genyo.addon.render.Render2DEngine; +import com.genyo.addon.render.Render3DEngine; +import com.mojang.blaze3d.systems.RenderSystem; +import meteordevelopment.meteorclient.events.render.Render3DEvent; +import meteordevelopment.meteorclient.renderer.GL; +import meteordevelopment.meteorclient.renderer.Renderer3D; +import meteordevelopment.meteorclient.renderer.ShapeMode; +import meteordevelopment.meteorclient.settings.*; +import meteordevelopment.meteorclient.systems.modules.Module; +import meteordevelopment.meteorclient.utils.Utils; +import meteordevelopment.meteorclient.utils.render.color.Color; +import meteordevelopment.meteorclient.utils.render.color.SettingColor; +import meteordevelopment.orbit.EventHandler; +import net.minecraft.block.Blocks; +import net.minecraft.enchantment.Enchantments; +import net.minecraft.entity.Entity; +import net.minecraft.entity.projectile.ArrowEntity; +import net.minecraft.item.*; +import net.minecraft.registry.Registries; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.hit.HitResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Box; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.RaycastContext; + +import java.util.ArrayList; +import java.util.List; + +public class TescoTrajectories extends Module { + + public TescoTrajectories() { + super(GenyoAddon.GENYO, "tesco-trajectories", "a thunderhackből mert az talán yobb yo yo yo yo yo-yo yoyo genyo"); + } + + private final SettingGroup sgGeneral = settings.getDefaultGroup(); + + private final Setting> items = sgGeneral.add(new ItemListSetting.Builder() + .name("Items") + .description("miknek írja a cuccli mucclikat wao wao wao") + .defaultValue(getDefaultItems()) + .filter(this::itemFilter) + .build() + ); + + private final Setting renderColor = sgGeneral.add(new ColorSetting.Builder() + .name("Render Color") + .description("egyszer volt hol nem volt egy veréb geci") + .defaultValue(new Color(80, 180, 180, 255)) + .build() + ); + + private final Setting syncColors = sgGeneral.add(new BoolSetting.Builder() + .name("Don't sync Landed with Render") + .description("a cucc kettő részének a színe más legyen vagy nooooooooo la policiaaa") + .defaultValue(true) + .build() + ); + + private final Setting landedColor = sgGeneral.add(new ColorSetting.Builder() + .name("Landed Color") + .description("második színcápa színcápa mondj egy színt te gecis cápa") + .defaultValue(renderColor.get()) + .visible(syncColors::get) + .build() + ); + + private boolean itemFilter(Item item) { + return item instanceof EnderPearlItem || item instanceof TridentItem || item instanceof ExperienceBottleItem || item instanceof SnowballItem || item instanceof EggItem || item instanceof SplashPotionItem || item instanceof LingeringPotionItem; + } + + private List getDefaultItems() { + List items = new ArrayList<>(); + + for (Item item : Registries.ITEM) { + if (itemFilter(item)) items.add(item); + } + + return items; + } + + // genyók + + private float getDistance(Item item) { + return item instanceof BowItem ? 1.0f : 0.4f; + } + + private float getThrowVelocity(Item item) { + if (item instanceof SplashPotionItem || item instanceof LingeringPotionItem) return 0.5f; + if (item instanceof ExperienceBottleItem) return 0.59f; + if (item instanceof TridentItem) return 2f; + return 1.5f; + } + + private int getThrowPitch(Item item) { + if (item instanceof SplashPotionItem || item instanceof LingeringPotionItem || item instanceof ExperienceBottleItem) + return 20; + return 0; + } + + @EventHandler + public void onRender(Render3DEvent event) { + if (mc.options.hudHidden) return; // mi afasz + if (mc.player == null || mc.world == null || !mc.options.getPerspective().isFirstPerson()) return; + + // ez kurva jó cucc + + ItemStack itemStack = mc.player.getMainHandStack(); + if (!items.get().contains(itemStack.getItem())) { + itemStack = mc.player.getOffHandStack(); + if (!items.get().contains(itemStack.getItem())) return; + } + + boolean prev_bob = mc.options.getBobView().getValue(); + mc.options.getBobView().setValue(false); + + final float playerYaw = mc.player.getYaw(); + if (itemStack.getItem() instanceof CrossbowItem && Utils.hasEnchantment(itemStack, Enchantments.MULTISHOT)) { + calcTrajectory(itemStack.getItem(), playerYaw - 10, event.renderer); + calcTrajectory(itemStack.getItem(), playerYaw, event.renderer); + calcTrajectory(itemStack.getItem(), playerYaw + 10, event.renderer); + } else { + calcTrajectory(itemStack.getItem(), playerYaw, event.renderer); + } + + mc.options.getBobView().setValue(prev_bob); + } + + private void calcTrajectory(Item item, float yaw, Renderer3D renderer) { + double x = Render2DEngine.interpolate(mc.player.prevX, mc.player.getX(), Render3DEngine.getTickDelta()); + double y = Render2DEngine.interpolate(mc.player.prevY, mc.player.getY(), Render3DEngine.getTickDelta()); + double z = Render2DEngine.interpolate(mc.player.prevZ, mc.player.getZ(), Render3DEngine.getTickDelta()); + + // Offset business + final float pi_genyo = 3.1415927f; + + y = y + mc.player.getEyeHeight(mc.player.getPose()) - 0.1000000014901161; // mivan + if (item == mc.player.getMainHandStack().getItem()) { + x = x - MathHelper.cos(yaw / 180.0f * pi_genyo) * 0.16f; + z = z - MathHelper.sin(yaw / 180.0f * pi_genyo) * 0.16f; + } else { + x = x + MathHelper.cos(yaw / 180.0f * pi_genyo) * 0.16f; + z = z + MathHelper.sin(yaw / 180.0f * pi_genyo) * 0.16f; + } + + float maxDist = getDistance(item); + + double motionX = -MathHelper.sin(yaw / 180.0f * pi_genyo) * MathHelper.cos(mc.player.getPitch() / 180.0f * pi_genyo) * maxDist; + double motionY = -MathHelper.sin((mc.player.getPitch() - getThrowPitch(item)) / 180.0f * 3.141593f) * maxDist; + double motionZ = MathHelper.cos(yaw / 180.0f * pi_genyo) * MathHelper.cos(mc.player.getPitch() / 180.0f * pi_genyo) * maxDist; + + float power = mc.player.getItemUseTime() / 20.0f; + power = (power * power + power * 2.0f) / 3.0f; + + if (power > 1.0f || power == 0) { + power = 1.0f; + } + + final float distance = MathHelper.sqrt((float) (motionX * motionX + motionY * motionY + motionZ * motionZ)); + motionX /= distance; + motionY /= distance; + motionZ /= distance; + + final float pow = (item instanceof BowItem ? (power * 2.0f) : item instanceof CrossbowItem ? (2.2f) : 1.0f) * getThrowVelocity(item); + + motionX *= pow; + motionY *= pow; + motionZ *= pow; + if (!mc.player.isOnGround()) + motionY += mc.player.getVelocity().getY(); + + Vec3d lastPos; + for (int i = 0; i < 300; i++) { + lastPos = new Vec3d(x, y, z); + x += motionX; + y += motionY; + z += motionZ; + if (mc.world.getBlockState(new BlockPos((int) x, (int) y, (int) z)).getBlock() == Blocks.WATER) { + motionX *= 0.8; + motionY *= 0.8; + motionZ *= 0.8; + } else { + motionX *= 0.99; + motionY *= 0.99; + motionZ *= 0.99; + } + + if (item instanceof BowItem) motionY -= 0.05000000074505806; + else if (mc.player.getMainHandStack().getItem() instanceof CrossbowItem) motionY -= 0.05000000074505806; + else motionY -= 0.03f; + + Vec3d pos = new Vec3d(x, y, z); + + for (Entity ent : mc.world.getEntities()) { + if (ent instanceof ArrowEntity || ent.equals(mc.player)) continue; + if (ent.getBoundingBox().intersects(new Box(x - 0.3, y - 0.3, z - 0.3, x + 0.3, y + 0.3, z + 0.3))) { + Render3DEngine.OUTLINE_QUEUE.add(new Render3DEngine.OutlineAction( + ent.getBoundingBox(), + getLandedColor(), + 2f)); + Render3DEngine.FILLED_QUEUE.add(new Render3DEngine.FillAction( + ent.getBoundingBox(), getLandedColor() + )); + break; + } + } + + Color white = new Color(255, 255, 255, 255); + BlockHitResult bhr = mc.world.raycast(new RaycastContext(lastPos, pos, RaycastContext.ShapeType.OUTLINE, RaycastContext.FluidHandling.NONE, mc.player)); + if (bhr != null && bhr.getType() == HitResult.Type.BLOCK) { + Render3DEngine.OUTLINE_SIDE_QUEUE.add(new Render3DEngine.OutlineSideAction( + new Box(bhr.getBlockPos()), getLandedColor(), 2f, bhr.getSide() + )); + Render3DEngine.FILLED_SIDE_QUEUE.add(new Render3DEngine.FillSideAction( + new Box(bhr.getBlockPos()), getLandedColor(), bhr.getSide() + )); + renderer.box(new Box(bhr.getBlockPos()), white, white, ShapeMode.Lines, 0); + break; + } + + if (y <= -65) break; + if (motionX == 0 && motionY == 0 && motionZ == 0) continue; + + renderer.line(lastPos.x, lastPos.y, lastPos.z, pos.x, pos.y, pos.z, renderColor.get()); + } + + } + + private Color getLandedColor() { + return !(syncColors.get()) ? renderColor.get() : landedColor.get(); + } + +} diff --git a/src/main/java/com/genyo/addon/render/Render2DEngine.java b/src/main/java/com/genyo/addon/render/Render2DEngine.java index 238e02b..86d9f85 100644 --- a/src/main/java/com/genyo/addon/render/Render2DEngine.java +++ b/src/main/java/com/genyo/addon/render/Render2DEngine.java @@ -1,5 +1,11 @@ package com.genyo.addon.render; +import meteordevelopment.meteorclient.utils.render.color.Color; +import net.minecraft.client.render.BufferBuilder; +import net.minecraft.client.render.BufferRenderer; +import net.minecraft.client.render.BuiltBuffer; +import net.minecraft.util.math.MathHelper; + public class Render2DEngine { public static double interpolate(double oldValue, double newValue, double interpolationValue) { @@ -10,4 +16,10 @@ public static float interpolateFloat(float oldValue, float newValue, double inte return (float) interpolate(oldValue, newValue, (float) interpolationValue); } + public static void endBuilding(BufferBuilder bb) { + BuiltBuffer builtBuffer = bb.endNullable(); + if (builtBuffer != null) + BufferRenderer.drawWithGlobalProgram(builtBuffer); + } + } diff --git a/src/main/java/com/genyo/addon/render/Render3DEngine.java b/src/main/java/com/genyo/addon/render/Render3DEngine.java index 1e4977d..6901a0f 100644 --- a/src/main/java/com/genyo/addon/render/Render3DEngine.java +++ b/src/main/java/com/genyo/addon/render/Render3DEngine.java @@ -1,11 +1,332 @@ package com.genyo.addon.render; +import com.genyo.addon.modules.TescoTrajectories; +import com.mojang.blaze3d.systems.RenderSystem; +import meteordevelopment.meteorclient.events.render.Render3DEvent; +import meteordevelopment.meteorclient.renderer.Renderer2D; +import meteordevelopment.meteorclient.renderer.Renderer3D; +import meteordevelopment.meteorclient.renderer.ShapeMode; +import meteordevelopment.meteorclient.utils.render.color.Color; +import meteordevelopment.orbit.EventHandler; +import net.minecraft.client.gl.ShaderProgramKeys; +import net.minecraft.client.render.*; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.util.math.*; +import org.jetbrains.annotations.NotNull; +import org.joml.Matrix4f; +import org.joml.Vector3f; + +import java.util.ArrayList; + import static meteordevelopment.meteorclient.MeteorClient.mc; public class Render3DEngine { + public static ArrayList FILLED_QUEUE = new ArrayList<>(); + public static ArrayList OUTLINE_QUEUE = new ArrayList<>(); + public static ArrayList FILLED_SIDE_QUEUE = new ArrayList<>(); + public static ArrayList OUTLINE_SIDE_QUEUE = new ArrayList<>(); + public static ArrayList LINE_QUEUE = new ArrayList<>(); + + @EventHandler + public void onRender(Render3DEvent event) { + MatrixStack stack = event.matrices; + + if (!FILLED_QUEUE.isEmpty() || !FILLED_SIDE_QUEUE.isEmpty()) { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); + RenderSystem.disableDepthTest(); + setupRender(); + RenderSystem.setShader(ShaderProgramKeys.POSITION_COLOR); + + //FILLED_QUEUE.forEach(action -> setFilledBoxVertexes(bufferBuilder, stack.peek().getPositionMatrix(), action.box(), action.color())); + + FILLED_SIDE_QUEUE.forEach(action -> setFilledSidePoints(bufferBuilder, stack.peek().getPositionMatrix(), action.box, action.color(), action.side())); + + Render2DEngine.endBuilding(bufferBuilder); + endRender(); + RenderSystem.enableDepthTest(); + + FILLED_SIDE_QUEUE.clear(); + FILLED_QUEUE.clear(); + } + + if (!OUTLINE_QUEUE.isEmpty() || !OUTLINE_SIDE_QUEUE.isEmpty()) { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferBuilder = tessellator.begin(VertexFormat.DrawMode.LINES, VertexFormats.POSITION_COLOR); + RenderSystem.disableCull(); + RenderSystem.disableDepthTest(); + setupRender(); + RenderSystem.setShader(ShaderProgramKeys.RENDERTYPE_LINES); + + RenderSystem.lineWidth(2f); + + OUTLINE_QUEUE.forEach(action -> { + //setOutlinePoints(action.box(), matrixFrom(action.box().minX, action.box().minY, action.box().minZ), buffer, action.color()); + }); + + OUTLINE_SIDE_QUEUE.forEach(action -> { + //setSideOutlinePoints(action.box, matrixFrom(action.box().minX, action.box().minY, action.box().minZ), bufferBuilder, action.color(), action.side()); + setSideOutlinePoints(action.box, stack, bufferBuilder, action.color(), action.side()); + }); + + Render2DEngine.endBuilding(bufferBuilder); + RenderSystem.enableCull(); + RenderSystem.enableDepthTest(); + endRender(); + + OUTLINE_QUEUE.clear(); + OUTLINE_SIDE_QUEUE.clear(); + } + + if (!LINE_QUEUE.isEmpty()) { + setupRender(); + Tessellator tessellator = Tessellator.getInstance(); + RenderSystem.disableCull(); + RenderSystem.setShader(ShaderProgramKeys.RENDERTYPE_LINES); + + RenderSystem.lineWidth(2f); + RenderSystem.disableDepthTest(); + + BufferBuilder buffer = tessellator.begin(VertexFormat.DrawMode.LINES, VertexFormats.LINES); + LINE_QUEUE.forEach(action -> { + MatrixStack matrices = matrixFrom(action.start.getX(), action.start.getY(), action.start.getZ()); + vertexLine(matrices, buffer, 0f, 0f, 0f, (float) (action.end.getX() - action.start.getX()), (float) (action.end.getY() - action.start.getY()), (float) (action.end.getZ() - action.start.getZ()), action.color); + }); + + Render2DEngine.endBuilding(buffer); + + RenderSystem.enableCull(); + RenderSystem.lineWidth(1f); + RenderSystem.enableDepthTest(); + endRender(); + + LINE_QUEUE.clear(); + } + } + + public static void setupRender() { + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + } + + public static void endRender() { + RenderSystem.disableBlend(); + } + + /*public static void setFilledBoxVertexes(@NotNull BufferBuilder bufferBuilder, Matrix4f m, @NotNull Box box, @NotNull Color c) { + float minX = (float) (box.minX - mc.getEntityRenderDispatcher().camera.getPos().getX()); + float minY = (float) (box.minY - mc.getEntityRenderDispatcher().camera.getPos().getY()); + float minZ = (float) (box.minZ - mc.getEntityRenderDispatcher().camera.getPos().getZ()); + float maxX = (float) (box.maxX - mc.getEntityRenderDispatcher().camera.getPos().getX()); + float maxY = (float) (box.maxY - mc.getEntityRenderDispatcher().camera.getPos().getY()); + float maxZ = (float) (box.maxZ - mc.getEntityRenderDispatcher().camera.getPos().getZ()); + + int meteor_rgb = new java.awt.Color(c.r, c.g, c.b, c.a).getRGB(); + + bufferBuilder.vertex(m, minX, minY, minZ).color(meteor_rgb); + bufferBuilder.vertex(m, maxX, minY, minZ).color(meteor_rgb); + bufferBuilder.vertex(m, maxX, minY, maxZ).color(meteor_rgb); + bufferBuilder.vertex(m, minX, minY, maxZ).color(meteor_rgb); + + bufferBuilder.vertex(m, minX, minY, minZ).color(meteor_rgb); + bufferBuilder.vertex(m, minX, maxY, minZ).color(meteor_rgb); + bufferBuilder.vertex(m, maxX, maxY, minZ).color(meteor_rgb); + bufferBuilder.vertex(m, maxX, minY, minZ).color(meteor_rgb); + + bufferBuilder.vertex(m, maxX, minY, minZ).color(meteor_rgb); + bufferBuilder.vertex(m, maxX, maxY, minZ).color(meteor_rgb); + bufferBuilder.vertex(m, maxX, maxY, maxZ).color(meteor_rgb); + bufferBuilder.vertex(m, maxX, minY, maxZ).color(meteor_rgb); + + bufferBuilder.vertex(m, minX, minY, maxZ).color(meteor_rgb); + bufferBuilder.vertex(m, maxX, minY, maxZ).color(meteor_rgb); + bufferBuilder.vertex(m, maxX, maxY, maxZ).color(meteor_rgb); + bufferBuilder.vertex(m, minX, maxY, maxZ).color(meteor_rgb); + + bufferBuilder.vertex(m, minX, minY, minZ).color(meteor_rgb); + bufferBuilder.vertex(m, minX, minY, maxZ).color(meteor_rgb); + bufferBuilder.vertex(m, minX, maxY, maxZ).color(meteor_rgb); + bufferBuilder.vertex(m, minX, maxY, minZ).color(meteor_rgb); + + bufferBuilder.vertex(m, minX, maxY, minZ).color(meteor_rgb); + bufferBuilder.vertex(m, minX, maxY, maxZ).color(meteor_rgb); + bufferBuilder.vertex(m, maxX, maxY, maxZ).color(meteor_rgb); + bufferBuilder.vertex(m, maxX, maxY, minZ).color(meteor_rgb); + }*/ + + /*public static void setOutlinePoints(Box box, MatrixStack matrices, BufferBuilder buffer, Color color) { + box = box.offset(new Vec3d(box.minX, box.minY, box.minZ).negate()); + + float x1 = (float) box.minX; + float y1 = (float) box.minY; + float z1 = (float) box.minZ; + float x2 = (float) box.maxX; + float y2 = (float) box.maxY; + float z2 = (float) box.maxZ; + + //vertexLine(matrices, buffer, x1, y1, z1, x2, y1, z1, color); + //vertexLine(matrices, buffer, x2, y1, z1, x2, y1, z2, color); + vertexLine(matrices, buffer, x2, y1, z2, x1, y1, z2, color); + vertexLine(matrices, buffer, x1, y1, z2, x1, y1, z1, color); + vertexLine(matrices, buffer, x1, y1, z2, x1, y2, z2, color); + //vertexLine(matrices, buffer, x1, y1, z1, x1, y2, z1, color); + vertexLine(matrices, buffer, x2, y1, z2, x2, y2, z2, color); + vertexLine(matrices, buffer, x2, y1, z1, x2, y2, z1, color); + //vertexLine(matrices, buffer, x1, y2, z1, x2, y2, z1, color); + vertexLine(matrices, buffer, x2, y2, z1, x2, y2, z2, color); + //vertexLine(matrices, buffer, x2, y2, z2, x1, y2, z2, color); + vertexLine(matrices, buffer, x1, y2, z2, x1, y2, z1, color); + }*/ + + public static void vertexLine(@NotNull MatrixStack matrices, @NotNull VertexConsumer buffer, float x1, float y1, float z1, float x2, float y2, float z2, @NotNull Color lineColor) { + Matrix4f model = matrices.peek().getPositionMatrix(); + MatrixStack.Entry entry = matrices.peek(); + Vector3f normalVec = getNormal(x1, y1, z1, x2, y2, z2); + + buffer.vertex(model, x1, y1, z1).color(lineColor.r, lineColor.g, lineColor.b, lineColor.a).normal(entry, normalVec.x(), normalVec.y(), normalVec.z()); + buffer.vertex(model, x2, y2, z2).color(lineColor.r, lineColor.g, lineColor.b, lineColor.a).normal(entry, normalVec.x(), normalVec.y(), normalVec.z()); + } + + public static @NotNull Vector3f getNormal(float x1, float y1, float z1, float x2, float y2, float z2) { + float xNormal = x2 - x1; + float yNormal = y2 - y1; + float zNormal = z2 - z1; + float normalSqrt = MathHelper.sqrt(xNormal * xNormal + yNormal * yNormal + zNormal * zNormal); + + return new Vector3f(xNormal / normalSqrt, yNormal / normalSqrt, zNormal / normalSqrt); + } + + public static void setFilledSidePoints(BufferBuilder buffer, Matrix4f matrix, Box box, Color c, Direction dir) { + Vec3d cameraPos = mc.player.getCameraPosVec(getTickDelta()); + + float minX = (float) (box.minX - cameraPos.getX()); + float minY = (float) (box.minY - cameraPos.getY()); + float minZ = (float) (box.minZ - cameraPos.getZ()); + float maxX = (float) (box.maxX - cameraPos.getX()); + float maxY = (float) (box.maxY - cameraPos.getY()); + float maxZ = (float) (box.maxZ - cameraPos.getZ()); + + int meteor_rgb = new java.awt.Color(c.r, c.g, c.b, 150).getRGB(); + + switch (dir) { + case Direction.DOWN -> { + buffer.vertex(matrix, minX, minY, minZ).color(meteor_rgb); + buffer.vertex(matrix, maxX, minY, minZ).color(meteor_rgb); + buffer.vertex(matrix, maxX, minY, maxZ).color(meteor_rgb); + buffer.vertex(matrix, minX, minY, maxZ).color(meteor_rgb); + } + case Direction.NORTH -> { + buffer.vertex(matrix, minX, minY, minZ).color(meteor_rgb); + buffer.vertex(matrix, minX, maxY, minZ).color(meteor_rgb); + buffer.vertex(matrix, maxX, maxY, minZ).color(meteor_rgb); + buffer.vertex(matrix, maxX, minY, minZ).color(meteor_rgb); + } + case Direction.EAST -> { + buffer.vertex(matrix, maxX, minY, minZ).color(meteor_rgb); + buffer.vertex(matrix, maxX, maxY, minZ).color(meteor_rgb); + buffer.vertex(matrix, maxX, maxY, maxZ).color(meteor_rgb); + buffer.vertex(matrix, maxX, minY, maxZ).color(meteor_rgb); + } + case Direction.SOUTH -> { + buffer.vertex(matrix, minX, minY, maxZ).color(meteor_rgb); + buffer.vertex(matrix, maxX, minY, maxZ).color(meteor_rgb); + buffer.vertex(matrix, maxX, maxY, maxZ).color(meteor_rgb); + buffer.vertex(matrix, minX, maxY, maxZ).color(meteor_rgb); + } + case Direction.WEST -> { + buffer.vertex(matrix, minX, minY, minZ).color(meteor_rgb); + buffer.vertex(matrix, minX, minY, maxZ).color(meteor_rgb); + buffer.vertex(matrix, minX, maxY, maxZ).color(meteor_rgb); + buffer.vertex(matrix, minX, maxY, minZ).color(meteor_rgb); + } + case Direction.UP -> { + buffer.vertex(matrix, minX, maxY, minZ).color(meteor_rgb); + buffer.vertex(matrix, minX, maxY, maxZ).color(meteor_rgb); + buffer.vertex(matrix, maxX, maxY, maxZ).color(meteor_rgb); + buffer.vertex(matrix, maxX, maxY, minZ).color(meteor_rgb); + } + } + } + + public static void setSideOutlinePoints(Box box, MatrixStack matrices, BufferBuilder buffer, Color color, Direction dir) { + Vec3d cameraPos = mc.player.getCameraPosVec(getTickDelta()); + + float x1 = (float) (box.minX - cameraPos.getX()); + float y1 = (float) (box.minY - cameraPos.getY()); + float z1 = (float) (box.minZ - cameraPos.getZ()); + float x2 = (float) (box.maxX - cameraPos.getX()); + float y2 = (float) (box.maxY - cameraPos.getY()); + float z2 = (float) (box.maxZ - cameraPos.getZ()); + + switch (dir) { + case Direction.UP -> { + vertexLine(matrices, buffer, x1, y2, z1, x2, y2, z1, color); + vertexLine(matrices, buffer, x2, y2, z1, x2, y2, z2, color); + vertexLine(matrices, buffer, x2, y2, z2, x1, y2, z2, color); + vertexLine(matrices, buffer, x1, y2, z2, x1, y2, z1, color); + } + case Direction.DOWN -> { + vertexLine(matrices, buffer, x1, y1, z1, x2, y1, z1, color); + vertexLine(matrices, buffer, x2, y1, z1, x2, y1, z2, color); + vertexLine(matrices, buffer, x2, y1, z2, x1, y1, z2, color); + vertexLine(matrices, buffer, x1, y1, z2, x1, y1, z1, color); + } + case Direction.EAST -> { + vertexLine(matrices, buffer, x2, y1, z1, x2, y2, z1, color); + vertexLine(matrices, buffer, x2, y1, z2, x2, y2, z2, color); + vertexLine(matrices, buffer, x2, y2, z2, x2, y2, z1, color); + vertexLine(matrices, buffer, x2, y1, z2, x2, y1, z1, color); + } + case Direction.WEST -> { + vertexLine(matrices, buffer, x1, y1, z1, x1, y2, z1, color); + vertexLine(matrices, buffer, x1, y1, z2, x1, y2, z2, color); + vertexLine(matrices, buffer, x1, y2, z2, x1, y2, z1, color); + vertexLine(matrices, buffer, x1, y1, z2, x1, y1, z1, color); + } + case Direction.NORTH -> { + vertexLine(matrices, buffer, x2, y1, z1, x2, y2, z1, color); + vertexLine(matrices, buffer, x1, y1, z1, x1, y2, z1, color); + vertexLine(matrices, buffer, x2, y1, z1, x1, y1, z1, color); + vertexLine(matrices, buffer, x2, y2, z1, x1, y2, z1, color); + } + case Direction.SOUTH -> { + vertexLine(matrices, buffer, x1, y1, z2, x1, y2, z2, color); + vertexLine(matrices, buffer, x2, y1, z2, x2, y2, z2, color); + vertexLine(matrices, buffer, x1, y1, z2, x2, y1, z2, color); + vertexLine(matrices, buffer, x1, y2, z2, x2, y2, z2, color); + } + } + } + + public static @NotNull MatrixStack matrixFrom(double x, double y, double z) { + MatrixStack matrices = new MatrixStack(); + + Camera camera = mc.getEntityRenderDispatcher().camera; + matrices.multiply(RotationAxis.POSITIVE_X.rotationDegrees(camera.getPitch())); + matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(camera.getYaw() + 180.0F)); + + Vec3d cameraPos = mc.player.getCameraPosVec(getTickDelta()); + matrices.translate(x - cameraPos.x, y - cameraPos.y, z - cameraPos.z); + + return matrices; + } + + public static void drawLine(@NotNull Vec3d start, @NotNull Vec3d end, @NotNull Color color) { + LINE_QUEUE.add(new LineAction(start, end, color)); + } + public static float getTickDelta() { return mc.getRenderTickCounter().getTickDelta(true); } + public record FillAction(Box box, Color color) { } + + public record OutlineAction(Box box, Color color, float lineWidth) { } + + public record FillSideAction(Box box, Color color, Direction side) { } + + public record OutlineSideAction(Box box, Color color, float lineWidth, Direction side) { } + + public record LineAction(Vec3d start, Vec3d end, Color color) { } } diff --git a/src/main/resources/assets/genyo/epic_skin.png b/src/main/resources/assets/genyo/epic_skin.png new file mode 100644 index 0000000..eadb8a6 Binary files /dev/null and b/src/main/resources/assets/genyo/epic_skin.png differ