From 6509c095354853896da8eff5dcc97759ddaed145 Mon Sep 17 00:00:00 2001 From: misterx Date: Sun, 16 Jan 2022 21:49:56 +0100 Subject: [PATCH] visuallise structure regions --- .../anticope/rejects/MeteorRejectsAddon.java | 1 + .../rejects/modules/StructureRegions.java | 74 +++++++++++++++++++ .../anticope/rejects/utils/WorldGenUtils.java | 2 +- 3 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 src/main/java/anticope/rejects/modules/StructureRegions.java diff --git a/src/main/java/anticope/rejects/MeteorRejectsAddon.java b/src/main/java/anticope/rejects/MeteorRejectsAddon.java index 8521064..d32ffb4 100644 --- a/src/main/java/anticope/rejects/MeteorRejectsAddon.java +++ b/src/main/java/anticope/rejects/MeteorRejectsAddon.java @@ -68,6 +68,7 @@ public class MeteorRejectsAddon extends MeteorAddon { modules.add(new Rendering()); modules.add(new SkeletonESP()); modules.add(new SoundLocator()); + modules.add(new StructureRegions()); // Module modifications NoRenderModifier.init(); diff --git a/src/main/java/anticope/rejects/modules/StructureRegions.java b/src/main/java/anticope/rejects/modules/StructureRegions.java new file mode 100644 index 0000000..dd01a86 --- /dev/null +++ b/src/main/java/anticope/rejects/modules/StructureRegions.java @@ -0,0 +1,74 @@ +package anticope.rejects.modules; + +import anticope.rejects.MeteorRejectsAddon; +import anticope.rejects.utils.WorldGenUtils; +import kaptainwutax.featureutils.structure.*; +import kaptainwutax.mcutils.version.MCVersion; +import meteordevelopment.meteorclient.events.render.Render3DEvent; +import meteordevelopment.meteorclient.renderer.ShapeMode; +import meteordevelopment.meteorclient.settings.EnumSetting; +import meteordevelopment.meteorclient.settings.Setting; +import meteordevelopment.meteorclient.settings.SettingGroup; +import meteordevelopment.meteorclient.systems.modules.Module; +import meteordevelopment.meteorclient.utils.render.color.Color; +import meteordevelopment.orbit.EventHandler; + +public class StructureRegions extends Module { + + private final SettingGroup sgGeneral = settings.getDefaultGroup(); + + private int spacing = 20; + private int separation = 11; + private int size = 9; + + private final Setting regionEnum = sgGeneral.add(new EnumSetting.Builder() + .name("Structure") + .description("Select the structure region") + .defaultValue(WorldGenUtils.Feature.end_city) + .onChanged(this::onChanged) + .build() + ); + + public StructureRegions() { + super(MeteorRejectsAddon.CATEGORY, "Structure regions", "show spawnable regions for specific structures"); + } + + private void onChanged(WorldGenUtils.Feature struc) { + Structure structure = WorldGenUtils.getStructure(struc, MCVersion.latest()); + if (structure instanceof RegionStructure regionStructure) { + spacing = regionStructure.getSpacing(); + separation = regionStructure.getSeparation(); + size = (regionStructure.getSpacing() - regionStructure.getSeparation()) * 16; + } + } + + @EventHandler + public void onRender(Render3DEvent event) { + int viewDistance = mc.options.viewDistance + 1; + viewDistance *= 16; + + int negX = getRegion(event.offsetX - viewDistance); + int negZ = getRegion(event.offsetZ - viewDistance); + + int posX = getRegion(event.offsetX + viewDistance); + int posZ = getRegion(event.offsetZ + viewDistance); + + for (int x = negX; x <= posX; x++) { + for (int z = negZ; z <= posZ; z++) { + + int blockX = x * spacing * 16; + int blockZ = z * spacing * 16; + + event.renderer.box(blockX, 64, blockZ, blockX + size, 64, blockZ + size, new Color(0, 0, 0, 0), new Color(255, 0, 0), ShapeMode.Lines, 0); + } + } + } + + private int getRegion(double coord) { + int region = ((int) coord / 16 + separation / 2) / spacing; + if (coord < 0) { + region--; + } + return region; + } +} diff --git a/src/main/java/anticope/rejects/utils/WorldGenUtils.java b/src/main/java/anticope/rejects/utils/WorldGenUtils.java index 8f0800a..22f17c0 100644 --- a/src/main/java/anticope/rejects/utils/WorldGenUtils.java +++ b/src/main/java/anticope/rejects/utils/WorldGenUtils.java @@ -296,7 +296,7 @@ public class WorldGenUtils { } } - private static Structure getStructure(Feature feature, MCVersion version) { + public static Structure getStructure(Feature feature, MCVersion version) { switch (feature) { case buried_treasure -> { return new BuriedTreasure(version); } case mansion -> { return new Mansion(version); }