diff --git a/build.gradle b/build.gradle index 951e56f..d5fe24c 100644 --- a/build.gradle +++ b/build.gradle @@ -16,14 +16,19 @@ repositories { maven { url "https://maven.seedfinding.com/" } maven { url "https://maven-snapshots.seedfinding.com/" } maven { url 'https://jitpack.io' } + maven { url 'https://maven.duti.dev/releases' } } - configurations { // configuration that holds jars to include in the jar extraLibs } dependencies { + // This will make it work on most platforms. It automatically chooses the right dependencies at runtime. + extraLibs('dev.duti.acheong:cubiomes:1.22.3') { transitive = false } + extraLibs('dev.duti.acheong:cubiomes:1.22.3:linux64') { transitive = false } + extraLibs('dev.duti.acheong:cubiomes:1.22.3:osx') { transitive = false } + extraLibs('dev.duti.acheong:cubiomes:1.22.3:windows64') { transitive = false } // To change the versions see the gradle.properties file minecraft "com.mojang:minecraft:${project.minecraft_version}" mappings "net.fabricmc:yarn:${project.yarn_version}:v2" diff --git a/src/main/java/anticope/rejects/commands/LocateCommand.java b/src/main/java/anticope/rejects/commands/LocateCommand.java index b1d131e..0fb3e0e 100644 --- a/src/main/java/anticope/rejects/commands/LocateCommand.java +++ b/src/main/java/anticope/rejects/commands/LocateCommand.java @@ -2,8 +2,12 @@ import anticope.rejects.arguments.EnumArgumentType; import anticope.rejects.utils.WorldGenUtils; +import anticope.rejects.utils.seeds.Seeds; + import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.exceptions.DynamicCommandExceptionType; +import com.seedfinding.mccore.version.MCVersion; + import meteordevelopment.meteorclient.commands.Command; import meteordevelopment.meteorclient.utils.Utils; import meteordevelopment.meteorclient.utils.player.ChatUtils; @@ -12,43 +16,82 @@ import net.minecraft.text.Text; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; +import cubitect.Cubiomes; +import cubitect.Cubiomes.Pos; import static com.mojang.brigadier.Command.SINGLE_SUCCESS; import static meteordevelopment.meteorclient.MeteorClient.mc; public class LocateCommand extends Command { - private final static DynamicCommandExceptionType NOT_FOUND = new DynamicCommandExceptionType(o -> { - if (o instanceof WorldGenUtils.Feature) { - return Text.literal(String.format( - "%s not found.", - Utils.nameToTitle(o.toString().replaceAll("_", "-"))) - ); - } - return Text.literal("Not found."); - }); - - public LocateCommand() { - super("locate", "Locates structures.", "loc"); - } - - @Override - public void build(LiteralArgumentBuilder builder) { - builder.then(literal("feature").then(argument("feature", EnumArgumentType.enumArgument(WorldGenUtils.Feature.stronghold)).executes(ctx -> { - WorldGenUtils.Feature feature = EnumArgumentType.getEnum(ctx, "feature", WorldGenUtils.Feature.stronghold); - BlockPos pos = WorldGenUtils.locateFeature(feature, mc.player.getBlockPos()); - if (pos != null) { - MutableText text = Text.literal(String.format( - "%s located at ", - Utils.nameToTitle(feature.toString().replaceAll("_", "-")) - )); - Vec3d coords = new Vec3d(pos.getX(), pos.getY(), pos.getZ()); - text.append(ChatUtils.formatCoords(coords)); - text.append("."); - info(text); - return SINGLE_SUCCESS; - } - throw NOT_FOUND.create(feature); - }))); - } + private final static DynamicCommandExceptionType NOT_FOUND = new DynamicCommandExceptionType(o -> { + if (o instanceof Cubiomes.StructureType) { + return Text.literal(String.format( + "%s not found.", + Utils.nameToTitle(o.toString().replaceAll("_", "-")))); + } + return Text.literal("Not found."); + }); + + public LocateCommand() { + super("locate", "Locates structures.", "loc"); + } + + @Override + public void build(LiteralArgumentBuilder builder) { + builder.then(literal("feature") + .then(argument("feature", EnumArgumentType.enumArgument(Cubiomes.StructureType.Village)).executes(ctx -> { + Cubiomes.StructureType feature = EnumArgumentType.getEnum(ctx, "feature", Cubiomes.StructureType.Village); + BlockPos playerPos = mc.player.getBlockPos(); + long seed = Seeds.get().getSeed().seed; + MCVersion version = Seeds.get().getSeed().version; + Cubiomes.MCVersion cubiomesVersion = null; + if (version.isNewerOrEqualTo(MCVersion.v1_20)) { + cubiomesVersion = Cubiomes.MCVersion.MC_1_20; + } else if (version.isNewerOrEqualTo(MCVersion.v1_19)) { + switch (version) { + case v1_19: + case v1_19_1: + cubiomesVersion = Cubiomes.MCVersion.MC_1_19; + break; + case v1_19_2: + case v1_19_3: + case v1_19_4: + cubiomesVersion = Cubiomes.MCVersion.MC_1_19_2; + break; + default: + throw new IllegalStateException("Unexpected value: " + version); + } + } else if (version.isNewerOrEqualTo(MCVersion.v1_18)) { + cubiomesVersion = Cubiomes.MCVersion.MC_1_18; + } + Pos pos = null; + if (cubiomesVersion != null) { + pos = Cubiomes.GetNearestStructure(feature, playerPos.getX(), playerPos.getZ(), seed, + cubiomesVersion); + } else { + BlockPos bpos = WorldGenUtils.locateFeature(feature, playerPos); + pos = new Pos(); + pos.x = bpos.getX(); + pos.z = bpos.getZ(); + + } + if (pos != null) { + // Calculate distance + int distance = (int) Math.hypot(pos.x - playerPos.getX(), pos.z - playerPos.getZ()); + MutableText text = Text.literal(String.format( + "%s located at ", + Utils.nameToTitle(feature.toString().replaceAll("_", "-")))); + Vec3d coords = new Vec3d(pos.x, 0, pos.z); + text.append(ChatUtils.formatCoords(coords)); + text.append("."); + if (distance > 0) { + text.append(String.format(" (%d blocks away)", distance)); + } + info(text); + return SINGLE_SUCCESS; + } + throw NOT_FOUND.create(feature); + }))); + } } diff --git a/src/main/java/anticope/rejects/modules/OreSim.java b/src/main/java/anticope/rejects/modules/OreSim.java index d8f2e55..6e13789 100755 --- a/src/main/java/anticope/rejects/modules/OreSim.java +++ b/src/main/java/anticope/rejects/modules/OreSim.java @@ -212,8 +212,7 @@ private void reload() { @EventHandler public void onChunkData(ChunkDataEvent event) { - doMathOnChunk(event.chunk); - ChunkDataEvent.returnChunkDataEvent(event); + doMathOnChunk(event.chunk()); } private void doMathOnChunk(Chunk chunk) { diff --git a/src/main/java/anticope/rejects/utils/WorldGenUtils.java b/src/main/java/anticope/rejects/utils/WorldGenUtils.java index d34ba83..eae3db2 100644 --- a/src/main/java/anticope/rejects/utils/WorldGenUtils.java +++ b/src/main/java/anticope/rejects/utils/WorldGenUtils.java @@ -3,6 +3,8 @@ import anticope.rejects.utils.seeds.Seed; import anticope.rejects.utils.seeds.Seeds; import baritone.api.BaritoneAPI; +import cubitect.Cubiomes; + import com.seedfinding.mcbiome.source.BiomeSource; import com.seedfinding.mcfeature.misc.SlimeChunk; import com.seedfinding.mcfeature.structure.*; @@ -126,7 +128,20 @@ public enum Feature { desert_pyramid } - public static BlockPos locateFeature(Feature feature, BlockPos center) { + public static BlockPos locateFeature(Cubiomes.StructureType cfeature, BlockPos center) { + Feature feature = switch (cfeature) { + case Treasure -> Feature.buried_treasure; + case Mansion -> Feature.mansion; + case Stronghold -> Feature.stronghold; + case Fortress -> Feature.nether_fortress; + case Monument -> Feature.ocean_monument; + case Bastion -> Feature.bastion_remnant; + case End_City -> Feature.end_city; + case Village -> Feature.village; + case Mineshaft -> Feature.mineshaft; + case Desert_Pyramid -> Feature.desert_pyramid; + default -> null; + }; Seed seed = Seeds.get().getSeed(); BlockPos pos = null; if (!checkIfInDimension(getDimension(feature))) {