1.20.6 Update (#347)

* initial no tests

* Initial 1.20.6 update + tests/fixes

* Initial 1.20.6 update + tests/fixes

* 1.20.6 fixes

* more 1.20.6 updates

* initial port 1.20.6
This commit is contained in:
crazymoose77756
2024-05-15 05:04:21 -04:00
committed by GitHub
parent f1a204e7ad
commit f204244797
29 changed files with 226 additions and 297 deletions

View File

@@ -20,10 +20,10 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
- name: Set up JDK 17 - name: Set up JDK 21
uses: actions/setup-java@v3.10.0 uses: actions/setup-java@v3.10.0
with: with:
java-version: 17 java-version: 21
distribution: 'zulu' distribution: 'zulu'
- name: Grant execute permission for gradlew - name: Grant execute permission for gradlew
run: chmod +x gradlew run: chmod +x gradlew
@@ -34,9 +34,9 @@ jobs:
- uses: "marvinpinto/action-automatic-releases@latest" - uses: "marvinpinto/action-automatic-releases@latest"
with: with:
repo_token: "${{ secrets.GITHUB_TOKEN }}" repo_token: "${{ secrets.GITHUB_TOKEN }}"
automatic_release_tag: "latest-1.20.4" automatic_release_tag: "latest-1.20.6"
prerelease: false prerelease: false
title: "1.20.4 Build" title: "1.20.6 Build"
files: | files: |
./build/libs/*.jar ./build/libs/*.jar

View File

@@ -11,10 +11,10 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
- name: Set up JDK 17 - name: Set up JDK 21
uses: actions/setup-java@v3.10.0 uses: actions/setup-java@v3.10.0
with: with:
java-version: 17 java-version: 21
distribution: 'zulu' distribution: 'zulu'
- name: Grant execute permission for gradlew - name: Grant execute permission for gradlew
run: chmod +x gradlew run: chmod +x gradlew

View File

@@ -8,7 +8,7 @@
<a href="https://anticope.ml/pages/MeteorAddons.html"><img src="https://img.shields.io/badge/Verified%20Addon-Yes-blueviolet" alt="Verified Addon"></a> <a href="https://anticope.ml/pages/MeteorAddons.html"><img src="https://img.shields.io/badge/Verified%20Addon-Yes-blueviolet" alt="Verified Addon"></a>
<a href="https://github.com/AntiCope/meteor-rejects/releases"><img src="https://img.shields.io/badge/Version-v0.1-orange" alt="Version"></a> <a href="https://github.com/AntiCope/meteor-rejects/releases"><img src="https://img.shields.io/badge/Version-v0.1-orange" alt="Version"></a>
<img src="https://img.shields.io/badge/spaghetti%20code-yes-success?logo=java" alt="Spagetti code: yes"> <img src="https://img.shields.io/badge/spaghetti%20code-yes-success?logo=java" alt="Spagetti code: yes">
<img src="https://img.shields.io/badge/Minecraft%20Version-1.19-blue" alt="Minecraft Version"> <img src="https://img.shields.io/badge/Minecraft%20Version-1.20.6-blue" alt="Minecraft Version">
<a href="https://github.com/AntiCope/meteor-rejects/commits/master"><img src="https://img.shields.io/github/last-commit/AntiCope/meteor-rejects?logo=git" alt="Last commit"></a> <a href="https://github.com/AntiCope/meteor-rejects/commits/master"><img src="https://img.shields.io/github/last-commit/AntiCope/meteor-rejects?logo=git" alt="Last commit"></a>
<img src="https://img.shields.io/github/workflow/status/AntiCope/meteor-rejects/Java%20CI%20with%20Gradle?logo=github" alt="build status"> <img src="https://img.shields.io/github/workflow/status/AntiCope/meteor-rejects/Java%20CI%20with%20Gradle?logo=github" alt="build status">
<img src="https://img.shields.io/github/languages/code-size/AntiCope/meteor-rejects" alt="Code Size"> <img src="https://img.shields.io/github/languages/code-size/AntiCope/meteor-rejects" alt="Code Size">

View File

@@ -1,8 +1,8 @@
plugins { plugins {
id 'fabric-loom' version '1.1-SNAPSHOT' id 'fabric-loom' version '1.6-SNAPSHOT'
} }
sourceCompatibility = targetCompatibility = JavaVersion.VERSION_17 sourceCompatibility = targetCompatibility = JavaVersion.VERSION_21
archivesBaseName = project.archives_base_name archivesBaseName = project.archives_base_name
version = project.mod_version version = project.mod_version
@@ -35,7 +35,7 @@ dependencies {
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
modImplementation("meteordevelopment:meteor-client:${project.meteor_version}-SNAPSHOT") modImplementation("meteordevelopment:meteor-client:${project.meteor_version}-SNAPSHOT")
modImplementation "meteordevelopment:baritone:${project.minecraft_version}-SNAPSHOT" modCompileOnly "meteordevelopment:baritone:${project.baritone_version}-SNAPSHOT"
// seed .locate and ore sim // seed .locate and ore sim
extraLibs('com.seedfinding:mc_math:ffd2edcfcc0d18147549c88cc7d8ec6cf21b5b91') { transitive = false } extraLibs('com.seedfinding:mc_math:ffd2edcfcc0d18147549c88cc7d8ec6cf21b5b91') { transitive = false }
@@ -90,7 +90,7 @@ tasks.withType(JavaCompile).configureEach {
// The Minecraft launcher currently installs Java 8 for users, so your mod probably wants to target Java 8 too // The Minecraft launcher currently installs Java 8 for users, so your mod probably wants to target Java 8 too
// JDK 9 introduced a new way of specifying this that will make sure no newer classes or methods are used. // JDK 9 introduced a new way of specifying this that will make sure no newer classes or methods are used.
// We'll use that if it's available, but otherwise we'll use the older option. // We'll use that if it's available, but otherwise we'll use the older option.
def targetVersion = 17 def targetVersion = 21
if (JavaVersion.current().isJava9Compatible()) { if (JavaVersion.current().isJava9Compatible()) {
it.options.release = targetVersion it.options.release = targetVersion
} }

View File

@@ -2,13 +2,14 @@
org.gradle.jvmargs=-Xmx2G org.gradle.jvmargs=-Xmx2G
# Fabric Properties # Fabric Properties
minecraft_version=1.20.4 minecraft_version=1.20.6
yarn_version=1.20.4+build.3 yarn_version=1.20.6+build.1
loader_version=0.15.2 loader_version=0.15.11
# Mod Properties # Mod Properties
mod_version = 0.3 mod_version = 0.3
maven_group = anticope.rejects maven_group = anticope.rejects
archives_base_name = meteor-rejects-addon archives_base_name = meteor-rejects-addon
meteor_version=0.5.6 meteor_version=0.5.7
baritone_version=1.20.4

View File

@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

View File

@@ -6,6 +6,8 @@ import com.mojang.brigadier.arguments.StringArgumentType;
import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import meteordevelopment.meteorclient.commands.Command; import meteordevelopment.meteorclient.commands.Command;
import net.minecraft.command.CommandSource; import net.minecraft.command.CommandSource;
import net.minecraft.component.DataComponentTypes;
import net.minecraft.component.type.NbtComponent;
import net.minecraft.item.BlockItem; import net.minecraft.item.BlockItem;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.Items; import net.minecraft.item.Items;
@@ -35,35 +37,41 @@ public class GiveCommand extends Command {
ItemStack inHand = mc.player.getMainHandStack(); ItemStack inHand = mc.player.getMainHandStack();
ItemStack item = new ItemStack(Items.STRIDER_SPAWN_EGG); ItemStack item = new ItemStack(Items.STRIDER_SPAWN_EGG);
NbtCompound ct = new NbtCompound(); NbtCompound ct = new NbtCompound();
NbtCompound itemNbt = inHand
.getOrDefault(DataComponentTypes.CUSTOM_DATA, NbtComponent.DEFAULT)
.copyNbt();
if (inHand.getItem() instanceof BlockItem) { if (inHand.getItem() instanceof BlockItem) {
ct.putInt("Time", 1); itemNbt.putInt("Time", 1);
ct.putString("id", "minecraft:falling_block"); itemNbt.putString("id", "minecraft:falling_block");
ct.put("BlockState", new NbtCompound()); itemNbt.put("BlockState", new NbtCompound());
ct.getCompound("BlockState").putString("Name", Registries.ITEM.getId(inHand.getItem()).toString()); itemNbt.getCompound("BlockState").putString("Name", Registries.ITEM.getId(inHand.getItem()).toString());
if (inHand.hasNbt() && inHand.getNbt().contains("BlockEntityTag")) { if (inHand.getComponents().contains(DataComponentTypes.BLOCK_ENTITY_DATA)) {
ct.put("TileEntityData", inHand.getNbt().getCompound("BlockEntityTag")); itemNbt.put("TileEntityData", inHand.get(DataComponentTypes.BLOCK_ENTITY_DATA).copyNbt());
} }
NbtCompound t = new NbtCompound(); NbtCompound t = new NbtCompound();
t.put("EntityTag", ct); t.put("EntityTag", ct);
item.setNbt(t); item.set(DataComponentTypes.CUSTOM_DATA, NbtComponent.of(itemNbt));
} else { } else {
ct.putString("id", "minecraft:item"); ct.putString("id", "minecraft:item");
NbtCompound it = new NbtCompound(); NbtCompound it = new NbtCompound();
it.putString("id", Registries.ITEM.getId(inHand.getItem()).toString()); it.putString("id", Registries.ITEM.getId(inHand.getItem()).toString());
it.putInt("Count", inHand.getCount()); it.putInt("Count", inHand.getCount());
if (inHand.hasNbt()) { if (!inHand.getComponents().isEmpty()) {
it.put("tag", inHand.getNbt()); it.put("tag", inHand.getOrDefault(DataComponentTypes.CUSTOM_DATA, NbtComponent.DEFAULT).copyNbt());
} }
ct.put("Item", it); ct.put("Item", it);
} }
NbtCompound t = new NbtCompound(); NbtCompound t = new NbtCompound();
t.put("EntityTag", ct); t.put("EntityTag", ct);
item.setNbt(t); item.set(DataComponentTypes.CUSTOM_DATA, NbtComponent.of(t));
item.setCustomName(inHand.getName()); item.set(DataComponentTypes.CUSTOM_NAME, inHand.getName());
GiveUtils.giveItem(item); GiveUtils.giveItem(item);
return SINGLE_SUCCESS; return SINGLE_SUCCESS;
})); }));
//TODO: allow for custom cords to place oob
builder.then(literal("holo").then(argument("message", StringArgumentType.greedyString()).executes(ctx -> { builder.then(literal("holo").then(argument("message", StringArgumentType.greedyString()).executes(ctx -> {
String message = ctx.getArgument("message", String.class).replace("&", "\247"); String message = ctx.getArgument("message", String.class).replace("&", "\247");
ItemStack stack = new ItemStack(Items.ARMOR_STAND); ItemStack stack = new ItemStack(Items.ARMOR_STAND);
@@ -77,9 +85,9 @@ public class GiveCommand extends Command {
tag.putBoolean("Interpret", true); tag.putBoolean("Interpret", true);
tag.putBoolean("NoGravity", true); tag.putBoolean("NoGravity", true);
tag.putBoolean("CustomNameVisible", true); tag.putBoolean("CustomNameVisible", true);
tag.putString("CustomName", Text.Serialization.toJsonString(Text.literal(message))); tag.putString("CustomName", Text.literal(message).toString());
tag.put("Pos", NbtList); tag.put("Pos", NbtList);
stack.setSubNbt("EntityTag", tag); stack.set(DataComponentTypes.ENTITY_DATA, NbtComponent.of(tag));
GiveUtils.giveItem(stack); GiveUtils.giveItem(stack);
return SINGLE_SUCCESS; return SINGLE_SUCCESS;
}))); })));
@@ -88,13 +96,13 @@ public class GiveCommand extends Command {
String message = ctx.getArgument("message", String.class).replace("&", "\247"); String message = ctx.getArgument("message", String.class).replace("&", "\247");
ItemStack stack = new ItemStack(Items.BAT_SPAWN_EGG); ItemStack stack = new ItemStack(Items.BAT_SPAWN_EGG);
NbtCompound tag = new NbtCompound(); NbtCompound tag = new NbtCompound();
tag.putString("CustomName", Text.Serialization.toJsonString(Text.literal(message))); tag.putString("CustomName", Text.literal(message).toString());
tag.putBoolean("NoAI", true); tag.putBoolean("NoAI", true);
tag.putBoolean("Silent", true); tag.putBoolean("Silent", true);
tag.putBoolean("PersistenceRequired", true); tag.putBoolean("PersistenceRequired", true);
tag.putBoolean("Invisible", true); tag.putBoolean("Invisible", true);
tag.put("id", NbtString.of("minecraft:wither")); tag.put("id", NbtString.of("minecraft:wither"));
stack.setSubNbt("EntityTag", tag); stack.set(DataComponentTypes.ENTITY_DATA, NbtComponent.of(tag));
GiveUtils.giveItem(stack); GiveUtils.giveItem(stack);
return SINGLE_SUCCESS; return SINGLE_SUCCESS;
}))); })));
@@ -104,7 +112,7 @@ public class GiveCommand extends Command {
ItemStack itemStack = new ItemStack(Items.PLAYER_HEAD); ItemStack itemStack = new ItemStack(Items.PLAYER_HEAD);
NbtCompound tag = new NbtCompound(); NbtCompound tag = new NbtCompound();
tag.putString("SkullOwner", playerName); tag.putString("SkullOwner", playerName);
itemStack.setNbt(tag); itemStack.set(DataComponentTypes.CUSTOM_DATA, NbtComponent.of(tag));
GiveUtils.giveItem(itemStack); GiveUtils.giveItem(itemStack);
return SINGLE_SUCCESS; return SINGLE_SUCCESS;
}))); })));

View File

@@ -24,7 +24,7 @@ public class ReconnectCommand extends Command {
if (info != null) { if (info != null) {
mc.world.disconnect(); mc.world.disconnect();
ConnectScreen.connect(new MultiplayerScreen(new TitleScreen()), mc, ConnectScreen.connect(new MultiplayerScreen(new TitleScreen()), mc,
ServerAddress.parse(info.address), info, false); ServerAddress.parse(info.address), info, false, null);
} }
return SINGLE_SUCCESS; return SINGLE_SUCCESS;
}); });

View File

@@ -14,6 +14,8 @@ import meteordevelopment.meteorclient.settings.Settings;
import meteordevelopment.meteorclient.utils.network.Http; import meteordevelopment.meteorclient.utils.network.Http;
import meteordevelopment.meteorclient.utils.network.MeteorExecutor; import meteordevelopment.meteorclient.utils.network.MeteorExecutor;
import meteordevelopment.meteorclient.utils.player.ChatUtils; import meteordevelopment.meteorclient.utils.player.ChatUtils;
import net.minecraft.component.DataComponentTypes;
import net.minecraft.component.type.NbtComponent;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.Items; import net.minecraft.item.Items;
import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtCompound;
@@ -118,8 +120,8 @@ public class HeadScreen extends WindowScreen {
properties.put("textures", textures); properties.put("textures", textures);
skullOwner.put("Properties", properties); skullOwner.put("Properties", properties);
tag.put("SkullOwner", skullOwner); tag.put("SkullOwner", skullOwner);
head.setNbt(tag); head.set(DataComponentTypes.CUSTOM_DATA, NbtComponent.of(tag));
head.setCustomName(Text.literal(name)); head.set(DataComponentTypes.CUSTOM_NAME, Text.literal(name));
return head; return head;
} }

View File

@@ -23,7 +23,9 @@ import net.minecraft.client.option.KeyBinding;
import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.GameRenderer;
import net.minecraft.client.util.InputUtil; import net.minecraft.client.util.InputUtil;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.component.DataComponentTypes;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.Saddleable; import net.minecraft.entity.Saddleable;
import net.minecraft.entity.mob.EndermanEntity; import net.minecraft.entity.mob.EndermanEntity;
import net.minecraft.entity.passive.AbstractHorseEntity; import net.minecraft.entity.passive.AbstractHorseEntity;
@@ -114,7 +116,7 @@ public class InteractionScreen extends Screen {
functions.put("Open Inventory", (Entity e) -> { functions.put("Open Inventory", (Entity e) -> {
closeScreen(); closeScreen();
ItemStack container = new ItemStack(Items.CHEST); ItemStack container = new ItemStack(Items.CHEST);
container.setCustomName(e.getName()); container.set(DataComponentTypes.CUSTOM_NAME, e.getName());
client.setScreen(new PeekScreen(container, getInventory(e))); client.setScreen(new PeekScreen(container, getInventory(e)));
}); });
} }
@@ -190,18 +192,21 @@ public class InteractionScreen extends Screen {
index[0]++; index[0]++;
} }
} }
e.getHandItems().forEach(itemStack -> { LivingEntity a = (LivingEntity) e;
a.getHandItems().forEach(itemStack -> {
if (itemStack != null) { if (itemStack != null) {
stack[index[0]] = itemStack; stack[index[0]] = itemStack;
index[0]++; index[0]++;
} }
}); });
e.getArmorItems().forEach(itemStack -> {
a.getArmorItems().forEach(itemStack -> {
if (itemStack != null) { if (itemStack != null) {
stack[index[0]] = itemStack; stack[index[0]] = itemStack;
index[0]++; index[0]++;
} }
}); });
for (int i = index[0]; i < 27; i++) stack[i] = Items.AIR.getDefaultStack(); for (int i = index[0]; i < 27; i++) stack[i] = Items.AIR.getDefaultStack();
return stack; return stack;
} }

View File

@@ -48,7 +48,7 @@ public class StatsScreen extends WindowScreen {
WSection effectList = add(theme.section("Status Effects", effectListExpanded)).expandX().widget(); WSection effectList = add(theme.section("Status Effects", effectListExpanded)).expandX().widget();
effectList.action = () -> effectListExpanded = effectList.isExpanded(); effectList.action = () -> effectListExpanded = effectList.isExpanded();
liv.getActiveStatusEffects().forEach((effect, instance) -> { liv.getActiveStatusEffects().forEach((effect, instance) -> {
String status = lang.get(effect.getTranslationKey()); String status = lang.get(effect.value().getTranslationKey());
float tps = TickRate.INSTANCE.getTickRate(); float tps = TickRate.INSTANCE.getTickRate();
if (instance.getAmplifier() != 0) { if (instance.getAmplifier() != 0) {
status += (String.format(" %d (%s)", instance.getAmplifier()+1, StatusEffectUtil.getDurationText(instance, 1, tps))); status += (String.format(" %d (%s)", instance.getAmplifier()+1, StatusEffectUtil.getDurationText(instance, 1, tps)));
@@ -64,7 +64,7 @@ public class StatsScreen extends WindowScreen {
WSection attribList = add(theme.section("Attributes", attribListExpanded)).expandX().widget(); WSection attribList = add(theme.section("Attributes", attribListExpanded)).expandX().widget();
attribList.action = () -> attribListExpanded = attribList.isExpanded(); attribList.action = () -> attribListExpanded = attribList.isExpanded();
liv.getAttributes().getTracked().forEach((attrib) -> attribList.add(theme.label(String.format("%s: %.2f", liv.getAttributes().getTracked().forEach((attrib) -> attribList.add(theme.label(String.format("%s: %.2f",
lang.get(attrib.getAttribute().getTranslationKey()), lang.get(attrib.getAttribute().value().getTranslationKey()),
attrib.getValue() attrib.getValue()
))).expandX()); ))).expandX());
} }

View File

@@ -16,10 +16,10 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)
@Mixin(LivingEntityRenderer.class) @Mixin(LivingEntityRenderer.class)
public class LivingEntityRendererMixin { public class LivingEntityRendererMixin<T extends LivingEntity> {
@Inject(method = "setupTransforms", at = @At(value = "TAIL")) @Inject(method = "setupTransforms", at = @At(value = "TAIL"))
private void dinnerboneEntities(LivingEntity entity, MatrixStack matrices, float _animationProgress, float _bodyYaw, float _tickDelta, CallbackInfo _info) { private void dinnerboneEntities(T entity, MatrixStack matrices, float animationProgress, float bodyYaw, float tickDelta, float scale, CallbackInfo ci) {
Rendering renderingModule = Modules.get().get(Rendering.class); Rendering renderingModule = Modules.get().get(Rendering.class);
if (renderingModule == null) return; if (renderingModule == null) return;
if ((!(entity instanceof PlayerEntity)) && renderingModule.dinnerboneEnabled()) { if ((!(entity instanceof PlayerEntity)) && renderingModule.dinnerboneEnabled()) {

View File

@@ -75,7 +75,7 @@ public class AntiVanish extends Module {
@EventHandler @EventHandler
private void onPacket(PacketEvent.Receive event) { private void onPacket(PacketEvent.Receive event) {
if (mode.get() == Mode.RealJoinMessage && event.packet instanceof CommandSuggestionsS2CPacket packet) { if (mode.get() == Mode.RealJoinMessage && event.packet instanceof CommandSuggestionsS2CPacket packet) {
if (completionIDs.contains(packet.getCompletionId())) { if (completionIDs.contains(packet.id())) {
var lastUsernames = completionPlayerCache.stream().toList(); var lastUsernames = completionPlayerCache.stream().toList();
completionPlayerCache = packet.getSuggestions().getList().stream() completionPlayerCache = packet.getSuggestions().getList().stream()
@@ -100,7 +100,7 @@ public class AntiVanish extends Module {
} }
} }
completionIDs.remove(Integer.valueOf(packet.getCompletionId())); completionIDs.remove(Integer.valueOf(packet.id()));
event.cancel(); event.cancel();
} }
} }

View File

@@ -10,6 +10,7 @@ import meteordevelopment.meteorclient.utils.player.InvUtils;
import meteordevelopment.orbit.EventHandler; import meteordevelopment.orbit.EventHandler;
import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items; import net.minecraft.item.Items;
import net.minecraft.screen.EnchantmentScreenHandler; import net.minecraft.screen.EnchantmentScreenHandler;
import net.minecraft.screen.ScreenHandler; import net.minecraft.screen.ScreenHandler;
@@ -50,7 +51,7 @@ public class AutoEnchant extends meteordevelopment.meteorclient.systems.modules.
.name("item-whitelist") .name("item-whitelist")
.description("Item that require enchantment.") .description("Item that require enchantment.")
.defaultValue() .defaultValue()
.filter(item -> item.equals(Items.BOOK) || item.isDamageable()) .filter(item -> item.equals(Items.BOOK) || new ItemStack(item).isDamageable())
.build() .build()
); );
@@ -109,7 +110,7 @@ public class AutoEnchant extends meteordevelopment.meteorclient.systems.modules.
} }
private boolean fillCanEnchantItem() { private boolean fillCanEnchantItem() {
FindItemResult res = InvUtils.find(stack -> itemWhitelist.get().contains(stack.getItem()) && EnchantmentHelper.get(stack).isEmpty()); FindItemResult res = InvUtils.find(stack -> itemWhitelist.get().contains(stack.getItem()) && EnchantmentHelper.canHaveEnchantments(stack));
if (!res.found()) return false; if (!res.found()) return false;
InvUtils.shiftClick().slot(res.slot()); InvUtils.shiftClick().slot(res.slot());
return true; return true;

View File

@@ -114,7 +114,7 @@ public class AutoExtinguish extends Module {
place(slot); place(slot);
hasPlacedWater = false; hasPlacedWater = false;
} else if (!mc.player.hasStatusEffect(FIRE_RESISTANCE) && mc.player.isOnFire()) { } else if (!mc.player.hasStatusEffect(Registries.STATUS_EFFECT.getEntry(FIRE_RESISTANCE)) && mc.player.isOnFire()) {
blockPos = mc.player.getBlockPos(); blockPos = mc.player.getBlockPos();
final int slot = findSlot(Items.WATER_BUCKET); final int slot = findSlot(Items.WATER_BUCKET);
if (mc.world.getBlockState(blockPos).getBlock() == Blocks.FIRE || mc.world.getBlockState(blockPos).getBlock() == Blocks.SOUL_FIRE) { if (mc.world.getBlockState(blockPos).getBlock() == Blocks.FIRE || mc.world.getBlockState(blockPos).getBlock() == Blocks.SOUL_FIRE) {

View File

@@ -257,13 +257,13 @@ public class AutoFarm extends Module {
if (block instanceof CropBlock cropBlock) { if (block instanceof CropBlock cropBlock) {
return cropBlock.isMature(state); return cropBlock.isMature(state);
} else if (block instanceof CocoaBlock cocoaBlock) { } else if (block instanceof CocoaBlock cocoaBlock) {
return !cocoaBlock.hasRandomTicks(state); return state.get(cocoaBlock.AGE) >= 2;
} else if (block instanceof StemBlock) { } else if (block instanceof StemBlock) {
return state.get(StemBlock.AGE) == StemBlock.MAX_AGE; return state.get(StemBlock.AGE) == StemBlock.MAX_AGE;
} else if (block instanceof SweetBerryBushBlock sweetBerryBushBlock) { } else if (block instanceof SweetBerryBushBlock sweetBerryBushBlock) {
return !sweetBerryBushBlock.hasRandomTicks(state); return state.get(sweetBerryBushBlock.AGE) >= 2;
} else if (block instanceof NetherWartBlock netherWartBlock) { } else if (block instanceof NetherWartBlock netherWartBlock) {
return !netherWartBlock.hasRandomTicks(state); return state.get(netherWartBlock.AGE) >= 3;
} }
return true; return true;
} }
@@ -283,7 +283,8 @@ public class AutoFarm extends Module {
block == Blocks.PUMPKIN || block == Blocks.PUMPKIN ||
block == Blocks.MELON || block == Blocks.MELON ||
block == Blocks.NETHER_WART || block == Blocks.NETHER_WART ||
block == Blocks.SWEET_BERRY_BUSH; block == Blocks.SWEET_BERRY_BUSH ||
block == Blocks.COCOA;
} }
private boolean plantFilter(Item item) { private boolean plantFilter(Item item) {

View File

@@ -7,6 +7,7 @@ import meteordevelopment.meteorclient.systems.modules.Module;
import meteordevelopment.meteorclient.utils.network.MeteorExecutor; import meteordevelopment.meteorclient.utils.network.MeteorExecutor;
import meteordevelopment.meteorclient.utils.player.InvUtils; import meteordevelopment.meteorclient.utils.player.InvUtils;
import meteordevelopment.orbit.EventHandler; import meteordevelopment.orbit.EventHandler;
import net.minecraft.component.DataComponentTypes;
import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.item.Item; import net.minecraft.item.Item;
@@ -32,7 +33,7 @@ public class AutoGrind extends Module {
.name("item-blacklist") .name("item-blacklist")
.description("Items that should be ignored.") .description("Items that should be ignored.")
.defaultValue() .defaultValue()
.filter(Item::isDamageable) .filter(Item -> Item.getComponents().get(DataComponentTypes.DAMAGE) != null)
.build() .build()
); );
@@ -73,7 +74,7 @@ public class AutoGrind extends Module {
private boolean canGrind(ItemStack stack) { private boolean canGrind(ItemStack stack) {
if (itemBlacklist.get().contains(stack.getItem())) return false; if (itemBlacklist.get().contains(stack.getItem())) return false;
Map<Enchantment, Integer> enchantments = EnchantmentHelper.get(stack); Map<Enchantment, Integer> enchantments = (Map<Enchantment, Integer>) EnchantmentHelper.getEnchantments(stack);
int availEnchs = 0; int availEnchs = 0;
for (Enchantment enchantment : enchantments.keySet()) { for (Enchantment enchantment : enchantments.keySet()) {
@@ -84,6 +85,6 @@ public class AutoGrind extends Module {
return false; return false;
} }
return enchantments.size() > 0 && availEnchs > 0; return !enchantments.isEmpty() && availEnchs > 0;
} }
} }

View File

@@ -19,15 +19,17 @@ import meteordevelopment.meteorclient.systems.modules.combat.KillAura;
import meteordevelopment.meteorclient.utils.Utils; import meteordevelopment.meteorclient.utils.Utils;
import meteordevelopment.meteorclient.utils.player.Rotations; import meteordevelopment.meteorclient.utils.player.Rotations;
import meteordevelopment.orbit.EventHandler; import meteordevelopment.orbit.EventHandler;
import net.minecraft.component.DataComponentTypes;
import net.minecraft.entity.effect.StatusEffect; import net.minecraft.entity.effect.StatusEffect;
import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.entity.effect.StatusEffectInstance;
import net.minecraft.entity.effect.StatusEffects; import net.minecraft.entity.effect.StatusEffects;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.Items; import net.minecraft.item.Items;
import net.minecraft.potion.PotionUtil; import net.minecraft.registry.entry.RegistryEntry;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -322,17 +324,15 @@ public class AutoPot extends Module {
ItemStack stack = mc.player.getInventory().getStack(i); ItemStack stack = mc.player.getInventory().getStack(i);
if (stack.isEmpty()) continue; if (stack.isEmpty()) continue;
if (stack.getItem() != Items.POTION) continue; if (stack.getItem() != Items.POTION) continue;
if (stack.getItem() == Items.POTION) { Iterator<StatusEffectInstance> effects = stack.getItem().getComponents().get(DataComponentTypes.POTION_CONTENTS).getEffects().iterator();
List<StatusEffectInstance> effects = PotionUtil.getPotion(mc.player.getInventory().getStack(i)).getEffects(); if (effects.hasNext()) {
if (effects.size() > 0) { StatusEffectInstance effect = effects.next();
StatusEffectInstance effect = effects.get(0);
if (effect.getTranslationKey().equals("effect.minecraft.instant_health")) { if (effect.getTranslationKey().equals("effect.minecraft.instant_health")) {
slot = i; slot = i;
break; break;
} }
} }
} }
}
return slot; return slot;
} }
private int HealingSplashpotionSlot() { private int HealingSplashpotionSlot() {
@@ -342,17 +342,15 @@ public class AutoPot extends Module {
ItemStack stack = mc.player.getInventory().getStack(i); ItemStack stack = mc.player.getInventory().getStack(i);
if (stack.isEmpty()) continue; if (stack.isEmpty()) continue;
if (stack.getItem() != Items.SPLASH_POTION) continue; if (stack.getItem() != Items.SPLASH_POTION) continue;
if (stack.getItem() == Items.SPLASH_POTION) { Iterator<StatusEffectInstance> effects = stack.getItem().getComponents().get(DataComponentTypes.POTION_CONTENTS).getEffects().iterator();
List<StatusEffectInstance> effects = PotionUtil.getPotion(mc.player.getInventory().getStack(i)).getEffects(); if (effects.hasNext()) {
if (effects.size() > 0) { StatusEffectInstance effect = effects.next();
StatusEffectInstance effect = effects.get(0);
if (effect.getTranslationKey().equals("effect.minecraft.instant_health")) { if (effect.getTranslationKey().equals("effect.minecraft.instant_health")) {
slot = i; slot = i;
break; break;
} }
} }
} }
}
return slot; return slot;
} }
//Strength Pot Checks //Strength Pot Checks
@@ -363,10 +361,9 @@ public class AutoPot extends Module {
ItemStack stack = mc.player.getInventory().getStack(i); ItemStack stack = mc.player.getInventory().getStack(i);
if (stack.isEmpty()) continue; if (stack.isEmpty()) continue;
if (stack.getItem() != Items.SPLASH_POTION) continue; if (stack.getItem() != Items.SPLASH_POTION) continue;
if (stack.getItem() == Items.SPLASH_POTION) { Iterator<StatusEffectInstance> effects = stack.getItem().getComponents().get(DataComponentTypes.POTION_CONTENTS).getEffects().iterator();
List<StatusEffectInstance> effects = PotionUtil.getPotion(mc.player.getInventory().getStack(i)).getEffects(); if (effects.hasNext()) {
if (effects.size() > 0) { StatusEffectInstance effect = effects.next();
StatusEffectInstance effect = effects.get(0);
if (effect.getTranslationKey().equals("effect.minecraft.strength")) { if (effect.getTranslationKey().equals("effect.minecraft.strength")) {
slot = i; slot = i;
break; break;
@@ -374,7 +371,6 @@ public class AutoPot extends Module {
} }
} }
}
return slot; return slot;
} }
private int StrengthpotionSlot () { private int StrengthpotionSlot () {
@@ -384,10 +380,9 @@ public class AutoPot extends Module {
ItemStack stack = mc.player.getInventory().getStack(i); ItemStack stack = mc.player.getInventory().getStack(i);
if (stack.isEmpty()) continue; if (stack.isEmpty()) continue;
if (stack.getItem() != Items.POTION) continue; if (stack.getItem() != Items.POTION) continue;
if (stack.getItem() == Items.POTION) { Iterator<StatusEffectInstance> effects = stack.getItem().getComponents().get(DataComponentTypes.POTION_CONTENTS).getEffects().iterator();
List<StatusEffectInstance> effects = PotionUtil.getPotion(mc.player.getInventory().getStack(i)).getEffects(); if (effects.hasNext()) {
if (effects.size() > 0) { StatusEffectInstance effect = effects.next();
StatusEffectInstance effect = effects.get(0);
if (effect.getTranslationKey().equals("effect.minecraft.strength")) { if (effect.getTranslationKey().equals("effect.minecraft.strength")) {
slot = i; slot = i;
break; break;
@@ -395,7 +390,6 @@ public class AutoPot extends Module {
} }
} }
}
return slot; return slot;
} }
private boolean isNotPotion(ItemStack stack) { private boolean isNotPotion(ItemStack stack) {
@@ -415,7 +409,7 @@ public class AutoPot extends Module {
return false; return false;
} }
private boolean ShouldDrinkStrength(){ private boolean ShouldDrinkStrength(){
Map<StatusEffect, StatusEffectInstance> effects = mc.player.getActiveStatusEffects(); Map<RegistryEntry<StatusEffect>, StatusEffectInstance> effects = mc.player.getActiveStatusEffects();
return !effects.containsKey(StatusEffects.STRENGTH); return !effects.containsKey(StatusEffects.STRENGTH);
} }
} }

View File

@@ -9,6 +9,8 @@ import meteordevelopment.orbit.EventHandler;
import net.minecraft.block.ShulkerBoxBlock; import net.minecraft.block.ShulkerBoxBlock;
import net.minecraft.client.gui.screen.ingame.AnvilScreen; import net.minecraft.client.gui.screen.ingame.AnvilScreen;
import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.client.gui.widget.TextFieldWidget;
import net.minecraft.component.DataComponentTypes;
import net.minecraft.component.type.NbtComponent;
import net.minecraft.item.BlockItem; import net.minecraft.item.BlockItem;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@@ -124,7 +126,7 @@ public class AutoRename extends Module {
if (!(item instanceof BlockItem && ((BlockItem) item).getBlock() instanceof ShulkerBoxBlock)) { if (!(item instanceof BlockItem && ((BlockItem) item).getBlock() instanceof ShulkerBoxBlock)) {
return ""; return "";
} }
NbtCompound compound = stack.getNbt(); NbtCompound compound = stack.getOrDefault(DataComponentTypes.CUSTOM_DATA, NbtComponent.DEFAULT).copyNbt();
if (compound == null) { if (compound == null) {
return ""; return "";
} }
@@ -148,7 +150,7 @@ public class AutoRename extends Module {
if (itemId == null) { if (itemId == null) {
continue; continue;
} }
name = ItemStack.fromNbt(invItem).getName().getString(); name = String.valueOf(invItem.getCompound("Name"));
minslot = invSlot; minslot = invSlot;
} }
return name; return name;
@@ -183,7 +185,7 @@ public class AutoRename extends Module {
continue; continue;
} }
var st = sl.getStack(); var st = sl.getStack();
if (gItems.contains(st.getItem()) && !st.hasCustomName()) { if (gItems.contains(st.getItem()) && !st.getComponents().contains(DataComponentTypes.CUSTOM_NAME)) {
from = i; from = i;
break; break;
} }

View File

@@ -10,6 +10,7 @@ import meteordevelopment.meteorclient.systems.modules.Module;
import meteordevelopment.meteorclient.utils.Utils; import meteordevelopment.meteorclient.utils.Utils;
import meteordevelopment.orbit.EventHandler; import meteordevelopment.orbit.EventHandler;
import net.minecraft.network.NetworkState; import net.minecraft.network.NetworkState;
import net.minecraft.network.packet.c2s.handshake.ConnectionIntent;
import net.minecraft.network.packet.c2s.handshake.HandshakeC2SPacket; import net.minecraft.network.packet.c2s.handshake.HandshakeC2SPacket;
import java.util.List; import java.util.List;
@@ -54,7 +55,7 @@ public class BungeeCordSpoof extends Module {
@EventHandler @EventHandler
private void onPacketSend(PacketEvent.Send event) { private void onPacketSend(PacketEvent.Send event) {
if (event.packet instanceof HandshakeC2SPacket packet && packet.getNewNetworkState() == NetworkState.LOGIN) { if (event.packet instanceof HandshakeC2SPacket packet && packet.intendedState() == ConnectionIntent.LOGIN) {
if (whitelist.get() && !whitelistedServers.get().contains(Utils.getWorldName())) return; if (whitelist.get() && !whitelistedServers.get().contains(Utils.getWorldName())) return;
String address = packet.address() + "\0" + forwardedIP + "\0" + mc.getSession().getUuidOrNull().toString().replace("-", "") String address = packet.address() + "\0" + forwardedIP + "\0" + mc.getSession().getUuidOrNull().toString().replace("-", "")
+ (spoofProfile.get() ? getProperty() : ""); + (spoofProfile.get() ? getProperty() : "");

View File

@@ -49,13 +49,13 @@ public class ColorSigns extends Module {
} }
} }
if (books.get() && event.packet instanceof BookUpdateC2SPacket packet) { if (books.get() && event.packet instanceof BookUpdateC2SPacket packet) {
List<String> newPages = packet.getPages().stream().map(text -> List<String> newPages = packet.pages().stream().map(text ->
text.replaceAll("(?i)&([0-9A-Z])", "§$1")).toList(); text.replaceAll("(?i)&([0-9A-Z])", "§$1")).toList();
// BookUpdateC2SPacket.pages is final, so we need to create a new packet // BookUpdateC2SPacket.pages is final, so we need to create a new packet
if (!packet.getPages().equals(newPages)) { if (!packet.pages().equals(newPages)) {
assert mc.getNetworkHandler() != null; assert mc.getNetworkHandler() != null;
mc.getNetworkHandler().sendPacket(new BookUpdateC2SPacket( mc.getNetworkHandler().sendPacket(new BookUpdateC2SPacket(
packet.getSlot(), newPages, packet.getTitle())); packet.slot(), newPages, packet.title()));
event.cancel(); event.cancel();
} }
} }

View File

@@ -54,7 +54,7 @@ public class CustomPackets extends Module {
@EventHandler @EventHandler
private void onCustomPayloadPacket(PacketEvent.Receive event) { private void onCustomPayloadPacket(PacketEvent.Receive event) {
if (event.packet instanceof CustomPayloadS2CPacket packet) { if (event.packet instanceof CustomPayloadS2CPacket packet) {
switch (packet.payload().id().toString()) { switch (packet.payload().getId().toString()) {
case "badlion:mods" -> event.setCancelled(onBadlionModsPacket(packet)); case "badlion:mods" -> event.setCancelled(onBadlionModsPacket(packet));
default -> onUnknownPacket(packet); default -> onUnknownPacket(packet);
} }
@@ -65,9 +65,8 @@ public class CustomPackets extends Module {
private void onUnknownPacket(CustomPayloadS2CPacket packet) { private void onUnknownPacket(CustomPayloadS2CPacket packet) {
if (!unknownPackets.get()) return; if (!unknownPackets.get()) return;
MutableText text = Text.literal(packet.payload().id().toString()); MutableText text = Text.literal(packet.payload().getId().toString());
buffer.clear(); buffer.clear();
packet.payload().write(buffer);
text.setStyle(text.getStyle() text.setStyle(text.getStyle()
.withHoverEvent(new HoverEvent( .withHoverEvent(new HoverEvent(
HoverEvent.Action.SHOW_TEXT, HoverEvent.Action.SHOW_TEXT,
@@ -79,7 +78,6 @@ public class CustomPackets extends Module {
private boolean onBadlionModsPacket(CustomPayloadS2CPacket packet) { private boolean onBadlionModsPacket(CustomPayloadS2CPacket packet) {
if (!mods.get()) return false; if (!mods.get()) return false;
buffer.clear(); buffer.clear();
packet.payload().write(buffer);
String json = readString(buffer); String json = readString(buffer);
Map<String, BadlionMod> mods = GSON_NON_PRETTY.fromJson(json, BADLION_MODS_TYPE); Map<String, BadlionMod> mods = GSON_NON_PRETTY.fromJson(json, BADLION_MODS_TYPE);
ChatUtils.sendMsg("Badlion", format("Mods", formatMods(mods))); ChatUtils.sendMsg("Badlion", format("Mods", formatMods(mods)));

View File

@@ -7,6 +7,7 @@ import meteordevelopment.meteorclient.systems.modules.Modules;
import meteordevelopment.meteorclient.systems.modules.player.AutoEat; import meteordevelopment.meteorclient.systems.modules.player.AutoEat;
import meteordevelopment.orbit.EventHandler; import meteordevelopment.orbit.EventHandler;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.component.DataComponentTypes;
import net.minecraft.item.Items; import net.minecraft.item.Items;
import net.minecraft.util.Hand; import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
@@ -40,7 +41,7 @@ public class ObsidianFarm extends Module {
return; return;
} }
if (!allowBreakAgain) return; if (!allowBreakAgain) return;
if ((mc.player.isUsingItem() || Modules.get().get(AutoEat.class).isActive()) && (mc.player.getOffHandStack().getItem().isFood() || mc.player.getMainHandStack().getItem().isFood())) if ((mc.player.isUsingItem() || Modules.get().get(AutoEat.class).isActive()) && (mc.player.getOffHandStack().contains(DataComponentTypes.FOOD) || mc.player.getMainHandStack().contains(DataComponentTypes.FOOD)))
return; return;
if(mc.player.getMainHandStack().getItem() != Items.NETHERITE_PICKAXE && mc.player.getMainHandStack().getItem() != Items.DIAMOND_PICKAXE) { if(mc.player.getMainHandStack().getItem() != Items.NETHERITE_PICKAXE && mc.player.getMainHandStack().getItem() != Items.DIAMOND_PICKAXE) {
@@ -65,7 +66,6 @@ public class ObsidianFarm extends Module {
} }
} }
private BlockPos findObsidian() { private BlockPos findObsidian() {
List<BlockPos> blocksList = new ArrayList<>(); List<BlockPos> blocksList = new ArrayList<>();
@@ -106,14 +106,12 @@ public class ObsidianFarm extends Module {
return null; return null;
} }
private int findPickAxe() { private int findPickAxe() {
int result = -1;
for (int i = 0; i < 9; i++) { for (int i = 0; i < 9; i++) {
if (mc.player.getInventory().getStack(i).getItem() == Items.NETHERITE_PICKAXE) return i; if (mc.player.getInventory().getStack(i).getItem() == Items.NETHERITE_PICKAXE) return i;
if (mc.player.getInventory().getStack(i).getItem() == Items.DIAMOND_PICKAXE) result = i; if (mc.player.getInventory().getStack(i).getItem() == Items.DIAMOND_PICKAXE) return i;
} }
return result; return -1;
} }

View File

@@ -1,5 +1,7 @@
package anticope.rejects.utils; package anticope.rejects.utils;
import net.minecraft.component.DataComponentTypes;
import net.minecraft.component.type.NbtComponent;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.Items; import net.minecraft.item.Items;
@@ -71,9 +73,9 @@ public class GiveUtils {
if (preview) preset.getMiddle().getDefaultStack(); if (preview) preset.getMiddle().getDefaultStack();
ItemStack item = preset.getMiddle().getDefaultStack(); ItemStack item = preset.getMiddle().getDefaultStack();
try { try {
item.setNbt(StringNbtReader.parse(preset.getRight())); item.set(DataComponentTypes.CUSTOM_DATA, NbtComponent.of(StringNbtReader.parse(preset.getRight())));
} catch (CommandSyntaxException e) { } } catch (CommandSyntaxException e) { }
item.setCustomName(Text.literal(toName(preset.getLeft()))); item.set(DataComponentTypes.CUSTOM_NAME, Text.literal(toName(preset.getLeft())));
return item; return item;
}); });
}); });
@@ -82,10 +84,11 @@ public class GiveUtils {
if (preview) Items.SPIDER_SPAWN_EGG.getDefaultStack(); if (preview) Items.SPIDER_SPAWN_EGG.getDefaultStack();
ItemStack item = Items.SPIDER_SPAWN_EGG.getDefaultStack(); ItemStack item = Items.SPIDER_SPAWN_EGG.getDefaultStack();
String nick = mc.player.getName().getString(); String nick = mc.player.getName().getString();
try { try {
item.setNbt(StringNbtReader.parse("{EntityTag:{Time:1,BlockState:{Name:\"minecraft:spawner\"},id:\"minecraft:falling_block\",TileEntityData:{SpawnCount:20,SpawnData:{id:\"minecraft:villager\",Passengers:[{Time:1,BlockState:{Name:\"minecraft:redstone_block\"},id:\"minecraft:falling_block\",Passengers:[{id:\"minecraft:fox\",Passengers:[{Time:1,BlockState:{Name:\"minecraft:activator_rail\"},id:\"minecraft:falling_block\",Passengers:[{Command:\"execute as @e run op "+nick+"\",id:\"minecraft:command_block_minecart\"}]}],NoAI:1b,Health:1.0f,ActiveEffects:[{Duration:1000,Id:20b,Amplifier:4b}]}]}],NoAI:1b,Health:1.0f,ActiveEffects:[{Duration:1000,Id:20b,Amplifier:4b}]},MaxSpawnDelay:100,SpawnRange:10,Delay:1,MinSpawnDelay:100}}}")); item.set(DataComponentTypes.CUSTOM_DATA, NbtComponent.of(StringNbtReader.parse("{EntityTag:{Time:1,BlockState:{Name:\"minecraft:spawner\"},id:\"minecraft:falling_block\",TileEntityData:{SpawnCount:20,SpawnData:{id:\"minecraft:villager\",Passengers:[{Time:1,BlockState:{Name:\"minecraft:redstone_block\"},id:\"minecraft:falling_block\",Passengers:[{id:\"minecraft:fox\",Passengers:[{Time:1,BlockState:{Name:\"minecraft:activator_rail\"},id:\"minecraft:falling_block\",Passengers:[{Command:\"execute as @e run op "+nick+"\",id:\"minecraft:command_block_minecart\"}]}],NoAI:1b,Health:1.0f,ActiveEffects:[{Duration:1000,Id:20b,Amplifier:4b}]}]}],NoAI:1b,Health:1.0f,ActiveEffects:[{Duration:1000,Id:20b,Amplifier:4b}]},MaxSpawnDelay:100,SpawnRange:10,Delay:1,MinSpawnDelay:100}}}")));
} catch (CommandSyntaxException e) { } } catch (CommandSyntaxException e) { }
item.setCustomName(Text.literal("Force OP")); item.set(DataComponentTypes.CUSTOM_NAME, Text.of("Force OP"));
return item; return item;
}); });
@@ -103,8 +106,8 @@ public class GiveUtils {
} }
NbtCompound nbt = new NbtCompound(); NbtCompound nbt = new NbtCompound();
nbt.put("CustomPotionEffects", effects); nbt.put("CustomPotionEffects", effects);
stack.setNbt(nbt); stack.set(DataComponentTypes.CUSTOM_DATA, NbtComponent.of(nbt));
stack.setCustomName(Text.literal("Lingering Potion of Trolling")); stack.set(DataComponentTypes.CUSTOM_NAME, Text.literal("Lingering Potion of Trolling"));
return stack; return stack;
}); });
@@ -122,8 +125,8 @@ public class GiveUtils {
addEnchant(enchants, "minecraft:vanishing_curse", (short)1); addEnchant(enchants, "minecraft:vanishing_curse", (short)1);
NbtCompound nbt = new NbtCompound(); NbtCompound nbt = new NbtCompound();
nbt.put("Enchantments", enchants); nbt.put("Enchantments", enchants);
stack.setNbt(nbt); stack.set(DataComponentTypes.CUSTOM_DATA, NbtComponent.of(nbt));
stack.setCustomName(Text.literal("Bonk")); stack.set(DataComponentTypes.CUSTOM_NAME, Text.literal("Bonk"));
return stack; return stack;
}); });
@@ -135,8 +138,8 @@ public class GiveUtils {
for(int i = 0; i < 40000; i++) for(int i = 0; i < 40000; i++)
nbtList.add(new NbtList()); nbtList.add(new NbtList());
nbtCompound.put("nothingsuspicioushere", nbtList); nbtCompound.put("nothingsuspicioushere", nbtList);
stack.setNbt(nbtCompound); stack.set(DataComponentTypes.CUSTOM_DATA, NbtComponent.of(nbtCompound));
stack.setCustomName(Text.literal("Copy Me")); stack.set(DataComponentTypes.CUSTOM_NAME, Text.literal("Copy Me"));
return stack; return stack;
}); });
@@ -160,7 +163,7 @@ public class GiveUtils {
tagCompound.putInt("Flight", 0); tagCompound.putInt("Flight", 0);
tagCompound.put("Explosions", explosionList); tagCompound.put("Explosions", explosionList);
baseCompound.put("Fireworks", tagCompound); baseCompound.put("Fireworks", tagCompound);
firework.setNbt(baseCompound); firework.set(DataComponentTypes.CUSTOM_DATA, NbtComponent.of(baseCompound));
return firework; return firework;
}); });
@@ -172,8 +175,8 @@ public class GiveUtils {
NbtCompound entityTag = new NbtCompound(); NbtCompound entityTag = new NbtCompound();
entityTag.putString("id", id.toString()); entityTag.putString("id", id.toString());
tag.put("EntityTag", entityTag); tag.put("EntityTag", entityTag);
egg.setNbt(tag); egg.set(DataComponentTypes.CUSTOM_DATA, NbtComponent.of(tag));
egg.setCustomName(Text.literal(String.format("%s", toName(id.getPath())))); egg.set(DataComponentTypes.CUSTOM_NAME, Text.literal(String.format("%s", toName(id.getPath()))));
return egg; return egg;
}); });
}); });

View File

@@ -19,6 +19,10 @@ import meteordevelopment.meteorclient.utils.player.PlayerUtils;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.component.DataComponentType;
import net.minecraft.component.DataComponentTypes;
import net.minecraft.component.type.MapDecorationsComponent;
import net.minecraft.component.type.MapIdComponent;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.mob.*; import net.minecraft.entity.mob.*;
import net.minecraft.entity.passive.IronGolemEntity; import net.minecraft.entity.passive.IronGolemEntity;
@@ -345,12 +349,14 @@ public class WorldGenUtils {
return new BlockPos(pos.getX(), pos.getY(), pos.getZ()); return new BlockPos(pos.getX(), pos.getY(), pos.getZ());
} }
// TODO: check this lmao
private static boolean isValidMap(Feature feature, ItemStack stack) { private static boolean isValidMap(Feature feature, ItemStack stack) {
if (!stack.hasNbt()) return false; if (stack.getComponents().isEmpty()) return false;
if (!stack.getNbt().contains("display")) return false; if (!stack.getComponents().contains(DataComponentTypes.MAP_DECORATIONS)) return false;
NbtCompound displayTag = stack.getNbt().getCompound("display"); MapDecorationsComponent displayTag = stack.getDefaultComponents().get(DataComponentTypes.MAP_DECORATIONS);
if (!displayTag.contains("Name")) return false;
String nameTag = displayTag.getString("Name"); if (!displayTag.toString().contains("Name")) return false;
String nameTag = String.valueOf(displayTag.decorations().get("Name"));
if (!nameTag.contains("translate")) return false; if (!nameTag.contains("translate")) return false;
if (feature == Feature.buried_treasure) { if (feature == Feature.buried_treasure) {
@@ -364,15 +370,17 @@ public class WorldGenUtils {
} }
private static BlockPos getMapMarker(ItemStack stack) { private static BlockPos getMapMarker(ItemStack stack) {
if (!stack.hasNbt()) return null; if (stack.getComponents().isEmpty()) return null;
if (!stack.getNbt().contains("Decorations")) return null; if (!stack.getDefaultComponents().contains(DataComponentTypes.MAP_DECORATIONS)) return null;
NbtList decorationsTag = stack.getNbt().getList("Decorations", NbtElement.COMPOUND_TYPE);
if (decorationsTag.size() < 1) return null; MapDecorationsComponent decorationsTag = stack.get(DataComponentTypes.MAP_DECORATIONS);
NbtCompound iconTag = decorationsTag.getCompound(0); if (decorationsTag.decorations().isEmpty()) return null;
MapDecorationsComponent.Decoration iconTag = decorationsTag.decorations().get(0);
// check this
return new BlockPos( return new BlockPos(
(int)iconTag.getDouble("x"), (int)iconTag.x(),
(int)iconTag.getDouble("y"), 0,
(int)iconTag.getDouble("z") (int)iconTag.z()
); );
} }
} }

View File

@@ -26,19 +26,18 @@ public class LegacyServerPinger {
private void pingInCurrentThread(String ip, int port) { private void pingInCurrentThread(String ip, int port) {
MultiplayerServerListPinger pinger = new MultiplayerServerListPinger(); MultiplayerServerListPinger pinger = new MultiplayerServerListPinger();
MeteorRejectsAddon.LOG.info("Pinging " + ip + ":" + port + "..."); MeteorRejectsAddon.LOG.info("Pinging {}:{}...", ip, port);
try { try {
pinger.add(server, () -> { pinger.add(server, () -> {}, () -> {});
}); MeteorRejectsAddon.LOG.info("Ping successful: {}:{}", ip, port);
MeteorRejectsAddon.LOG.info("Ping successful: " + ip + ":" + port);
} catch (UnknownHostException e) { } catch (UnknownHostException e) {
MeteorRejectsAddon.LOG.warn("Unknown host: " + ip + ":" + port); MeteorRejectsAddon.LOG.warn("Unknown host: {}:{}", ip, port);
failed = true; failed = true;
} catch (Exception e2) { } catch (Exception e2) {
MeteorRejectsAddon.LOG.warn("Ping failed: " + ip + ":" + port); MeteorRejectsAddon.LOG.warn("Ping failed: {}:{}", ip, port);
failed = true; failed = true;
} }

View File

@@ -1,19 +1,15 @@
package anticope.rejects.utils.server; package anticope.rejects.utils.server;
import com.google.common.base.Splitter; import com.google.common.base.Splitter;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.mojang.authlib.GameProfile;
import io.netty.bootstrap.Bootstrap; import io.netty.bootstrap.Bootstrap;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.*; import io.netty.channel.*;
import io.netty.channel.socket.nio.NioSocketChannel; import net.minecraft.client.network.Address;
import net.minecraft.client.network.AllowedAddressResolver;
import net.minecraft.client.network.LegacyServerPinger;
import net.minecraft.client.network.ServerAddress; import net.minecraft.client.network.ServerAddress;
import net.minecraft.network.ClientConnection; import net.minecraft.network.ClientConnection;
import net.minecraft.network.NetworkState;
import net.minecraft.network.listener.ClientQueryPacketListener; import net.minecraft.network.listener.ClientQueryPacketListener;
import net.minecraft.network.packet.c2s.handshake.HandshakeC2SPacket;
import net.minecraft.network.packet.c2s.query.QueryPingC2SPacket; import net.minecraft.network.packet.c2s.query.QueryPingC2SPacket;
import net.minecraft.network.packet.c2s.query.QueryRequestC2SPacket; import net.minecraft.network.packet.c2s.query.QueryRequestC2SPacket;
import net.minecraft.network.packet.s2c.query.PingResultS2CPacket; import net.minecraft.network.packet.s2c.query.PingResultS2CPacket;
@@ -21,19 +17,15 @@ import net.minecraft.network.packet.s2c.query.QueryResponseS2CPacket;
import net.minecraft.server.ServerMetadata; import net.minecraft.server.ServerMetadata;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.Util; import net.minecraft.util.Util;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.profiler.MultiValueDebugSampleLogImpl;
import net.minecraft.util.profiler.PerformanceLog;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import java.net.InetAddress;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.nio.charset.StandardCharsets;
import java.util.*; import java.util.*;
public class ServerListPinger { public class ServerListPinger {
private static final Splitter ZERO_SPLITTER = Splitter.on('\u0000').limit(6);
private static final Logger LOGGER = LogManager.getLogger(); private static final Logger LOGGER = LogManager.getLogger();
private final List<ClientConnection> clientConnections = Collections.synchronizedList(Lists.newArrayList()); private final List<ClientConnection> clientConnections = Collections.synchronizedList(Lists.newArrayList());
private final ArrayList<IServerFinderDisconnectListener> disconnectListeners = new ArrayList<>(); private final ArrayList<IServerFinderDisconnectListener> disconnectListeners = new ArrayList<>();
@@ -67,15 +59,13 @@ public class ServerListPinger {
public void add(final MServerInfo entry, final Runnable runnable) throws UnknownHostException { public void add(final MServerInfo entry, final Runnable runnable) throws UnknownHostException {
Timer timeoutTimer = new Timer();
ServerAddress serverAddress = ServerAddress.parse(entry.address); ServerAddress serverAddress = ServerAddress.parse(entry.address);
timeoutTimer.schedule(new TimerTask() { Optional<InetSocketAddress> address = AllowedAddressResolver.DEFAULT.resolve(serverAddress).map(Address::getInetSocketAddress);
@Override if (address.isEmpty()) {
public void run() { return;
notifyDisconnectListeners();
} }
}, 20000); final ClientConnection clientConnection = ClientConnection.connect(address.get(), false, (MultiValueDebugSampleLogImpl) null);
final ClientConnection clientConnection = ClientConnection.connect(new InetSocketAddress(InetAddress.getByName(serverAddress.getAddress()), serverAddress.getPort()), false, (PerformanceLog) null);
failedToConnect = false; failedToConnect = false;
this.clientConnections.add(clientConnection); this.clientConnections.add(clientConnection);
entry.label = "multiplayer.status.pinging"; entry.label = "multiplayer.status.pinging";
@@ -89,52 +79,30 @@ public class ServerListPinger {
public void onResponse(QueryResponseS2CPacket packet) { public void onResponse(QueryResponseS2CPacket packet) {
if (this.received) { if (this.received) {
clientConnection.disconnect(Text.translatable("multiplayer.status.unrequested")); clientConnection.disconnect(Text.translatable("multiplayer.status.unrequested"));
} else { return;
}
this.received = true; this.received = true;
ServerMetadata serverMetadata = packet.metadata(); ServerMetadata serverMetadata = packet.metadata();
if (serverMetadata.description() != null) {
entry.label = serverMetadata.description().getString(); entry.label = serverMetadata.description().getString();
serverMetadata.version().ifPresentOrElse((version) -> {
entry.version = version.gameVersion();
entry.protocolVersion = version.protocolVersion();
}, () -> {
entry.version = "multiplayer.status.old";
entry.protocolVersion = 0;
});
serverMetadata.players().ifPresentOrElse((players) -> {
entry.playerCountLabel = getPlayerCountLabel(players.online(), players.max());
entry.playerCount = players.online();
if (!players.sample().isEmpty()) {
List<Text> list = new ArrayList(players.sample().size());
Iterator var3 = players.sample().iterator();
while (var3.hasNext()) {
GameProfile gameProfile = (GameProfile) var3.next();
list.add(Text.literal(gameProfile.getName()));
}
if (players.sample().size() < players.online()) {
list.add(Text.translatable("multiplayer.status.and_more", players.online() - players.sample().size()));
}
entry.playerListSummary = list;
} else { } else {
entry.playerListSummary = List.of(); entry.label = "";
}
}, () -> entry.playerCountLabel = "multiplayer.status.unknown");
serverMetadata.favicon().ifPresent((favicon) -> {
if (!Arrays.equals(favicon.iconBytes(), entry.getIcon())) {
entry.setIcon(favicon.iconBytes());
runnable.run();
} }
entry.version = serverMetadata.version().map(ServerMetadata.Version::gameVersion).orElse("multiplayer.status.old");
serverMetadata.players().ifPresentOrElse(players -> {
entry.playerCountLabel = ServerListPinger.getPlayerCountLabel(players.online(), players.max());
entry.playerCount = players.online();
entry.playercountMax = players.max();
}, () -> {
entry.playerCountLabel = "multiplayer.status.unknown";
}); });
this.startTime = Util.getMeasuringTimeMs(); this.startTime = Util.getMeasuringTimeMs();
clientConnection.send(new QueryPingC2SPacket(this.startTime)); clientConnection.send(new QueryPingC2SPacket(this.startTime));
this.sentQuery = true; this.sentQuery = true;
notifyDisconnectListeners(); notifyDisconnectListeners();
} }
}
public void onPingResult(PingResultS2CPacket packet) { public void onPingResult(PingResultS2CPacket packet) {
long l = this.startTime; long l = this.startTime;
@@ -160,11 +128,9 @@ public class ServerListPinger {
} }
}; };
clientConnection.setPacketListener(clientQueryPacketListener);
try { try {
clientConnection.connect(serverAddress.getAddress(), serverAddress.getPort(), clientQueryPacketListener); clientConnection.connect(serverAddress.getAddress(), serverAddress.getPort(), clientQueryPacketListener);
clientConnection.send(new QueryRequestC2SPacket()); clientConnection.send(QueryRequestC2SPacket.INSTANCE);
} catch (Throwable var8) { } catch (Throwable var8) {
LOGGER.error("Failed to ping server {}", serverAddress, var8); LOGGER.error("Failed to ping server {}", serverAddress, var8);
} }
@@ -173,80 +139,21 @@ public class ServerListPinger {
private void ping(final MServerInfo serverInfo) { private void ping(final MServerInfo serverInfo) {
final ServerAddress serverAddress = ServerAddress.parse(serverInfo.address); final ServerAddress serverAddress = ServerAddress.parse(serverInfo.address);
(new Bootstrap()).group(ClientConnection.CLIENT_IO_GROUP.get()).handler(new ChannelInitializer<>() { new Bootstrap().group(ClientConnection.CLIENT_IO_GROUP.get()).handler(new ChannelInitializer<>() {
protected void initChannel(Channel channel) { @Override
protected void initChannel(Channel ch) throws Exception {
try { try {
channel.config().setOption(ChannelOption.TCP_NODELAY, true); ch.config().setOption(ChannelOption.TCP_NODELAY, true);
} catch (ChannelException ignored) { } catch (ChannelException ignored) {
} }
ch.pipeline().addLast(new LegacyServerPinger(serverAddress, ((protocolVersion, version, label, currentPlayers, maxPlayers) -> {
channel.pipeline().addLast(new SimpleChannelInboundHandler<ByteBuf>() { serverInfo.version = version;
public void channelActive(ChannelHandlerContext channelHandlerContext) throws Exception { serverInfo.label = label;
super.channelActive(channelHandlerContext); serverInfo.playerCountLabel = ServerListPinger.getPlayerCountLabel(currentPlayers, maxPlayers);
ByteBuf byteBuf = Unpooled.buffer(); })));
try {
byteBuf.writeByte(254);
byteBuf.writeByte(1);
byteBuf.writeByte(250);
char[] cs = "MC|PingHost".toCharArray();
byteBuf.writeShort(cs.length);
char[] var4 = cs;
int var5 = cs.length;
int var6;
char d;
for (var6 = 0; var6 < var5; ++var6) {
d = var4[var6];
byteBuf.writeChar(d);
}
byteBuf.writeShort(7 + 2 * serverAddress.getAddress().length());
byteBuf.writeByte(127);
cs = serverAddress.getAddress().toCharArray();
byteBuf.writeShort(cs.length);
var4 = cs;
var5 = cs.length;
for (var6 = 0; var6 < var5; ++var6) {
d = var4[var6];
byteBuf.writeChar(d);
}
byteBuf.writeInt(serverAddress.getPort());
channelHandlerContext.channel().writeAndFlush(byteBuf).addListener(ChannelFutureListener.CLOSE_ON_FAILURE);
} finally {
byteBuf.release();
}
}
protected void channelRead0(ChannelHandlerContext channelHandlerContext, ByteBuf byteBuf) {
short s = byteBuf.readUnsignedByte();
if (s == 255) {
String string = new String(byteBuf.readBytes(byteBuf.readShort() * 2).array(), StandardCharsets.UTF_16BE);
String[] strings = Iterables.toArray(ServerListPinger.ZERO_SPLITTER.split(string), String.class);
if ("§1".equals(strings[0])) {
String string2 = strings[2];
String string3 = strings[3];
int j = MathHelper.parseInt(strings[4], -1);
int k = MathHelper.parseInt(strings[5], -1);
serverInfo.protocolVersion = -1;
serverInfo.version = string2;
serverInfo.label = string3;
serverInfo.playerCountLabel = ServerListPinger.getPlayerCountLabel(j, k);
}
}
channelHandlerContext.close();
}
public void exceptionCaught(ChannelHandlerContext channelHandlerContext, Throwable throwable) {
channelHandlerContext.close();
} }
}); });
} }
}).channel(NioSocketChannel.class).connect(serverAddress.getAddress(), serverAddress.getPort());
}
public void tick() { public void tick() {
synchronized (this.clientConnections) { synchronized (this.clientConnections) {

View File

@@ -1,7 +1,7 @@
{ {
"required": true, "required": true,
"package": "anticope.rejects.mixin.meteor", "package": "anticope.rejects.mixin.meteor",
"compatibilityLevel": "JAVA_16", "compatibilityLevel": "JAVA_21",
"client": [ "client": [
"AccountMixin", "AccountMixin",
"AccountsMixin", "AccountsMixin",

View File

@@ -1,7 +1,7 @@
{ {
"required": true, "required": true,
"package": "anticope.rejects.mixin", "package": "anticope.rejects.mixin",
"compatibilityLevel": "JAVA_16", "compatibilityLevel": "JAVA_21",
"client": [ "client": [
"ClientCommonNetwokHandlerMixin", "ClientCommonNetwokHandlerMixin",
"ClientPlayerInteractionManagerMixin", "ClientPlayerInteractionManagerMixin",