Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for locate command on new versions from 1.18 to 1.20 #318

Merged
merged 6 commits into from
Mar 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
109 changes: 76 additions & 33 deletions src/main/java/anticope/rejects/commands/LocateCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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<CommandSource> 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<CommandSource> 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);
})));
}
}
3 changes: 1 addition & 2 deletions src/main/java/anticope/rejects/modules/OreSim.java
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
17 changes: 16 additions & 1 deletion src/main/java/anticope/rejects/utils/WorldGenUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -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.*;
Expand Down Expand Up @@ -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))) {
Expand Down
Loading