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:
14
.github/workflows/gradle.yml
vendored
14
.github/workflows/gradle.yml
vendored
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
name: Java CI with Gradle
|
name: Java CI with Gradle
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: "build"
|
group: "build"
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
@@ -12,7 +12,7 @@ on:
|
|||||||
branches: [ master ]
|
branches: [ master ]
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- '*.md'
|
- '*.md'
|
||||||
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
4
.github/workflows/pull_request.yml
vendored
4
.github/workflows/pull_request.yml
vendored
@@ -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
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
10
build.gradle
10
build.gradle
@@ -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 }
|
||||||
@@ -45,7 +45,7 @@ dependencies {
|
|||||||
extraLibs('com.seedfinding:mc_biome:41a42cb9019a552598f12089059538853e18ec78') { transitive = false }
|
extraLibs('com.seedfinding:mc_biome:41a42cb9019a552598f12089059538853e18ec78') { transitive = false }
|
||||||
extraLibs('com.seedfinding:mc_terrain:b4246cbd5880c4f8745ccb90e1b102bde3448126') { transitive = false }
|
extraLibs('com.seedfinding:mc_terrain:b4246cbd5880c4f8745ccb90e1b102bde3448126') { transitive = false }
|
||||||
extraLibs('com.seedfinding:mc_feature:919b7e513cc1e87e029a9cd703fc4e2dc8686229') { transitive = false }
|
extraLibs('com.seedfinding:mc_feature:919b7e513cc1e87e029a9cd703fc4e2dc8686229') { transitive = false }
|
||||||
|
|
||||||
// seedcracker api
|
// seedcracker api
|
||||||
implementation (include('com.github.19MisterX98.SeedcrackerX:seedcrackerx-api:2.10.1')) {transitive = false}
|
implementation (include('com.github.19MisterX98.SeedcrackerX:seedcrackerx-api:2.10.1')) {transitive = false}
|
||||||
// implementation (include('com.github.19MisterX98.SeedcrackerX:seedcrackerx-api:master-SNAPSHOT')) {transitive = false}
|
// implementation (include('com.github.19MisterX98.SeedcrackerX:seedcrackerx-api:master-SNAPSHOT')) {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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
4
gradle/wrapper/gradle-wrapper.properties
vendored
4
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
})));
|
})));
|
||||||
|
|||||||
@@ -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;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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;
|
||||||
@@ -80,7 +82,7 @@ public class HeadScreen extends WindowScreen {
|
|||||||
heads.add(createHeadStack(a.get("uuid"), a.get("value"), a.get("name")));
|
heads.add(createHeadStack(a.get("uuid"), a.get("value"), a.get("name")));
|
||||||
} catch (Exception e) { }
|
} catch (Exception e) { }
|
||||||
});
|
});
|
||||||
|
|
||||||
WTable t = theme.table();
|
WTable t = theme.table();
|
||||||
for (ItemStack head : heads) {
|
for (ItemStack head : heads) {
|
||||||
t.add(theme.item(head));
|
t.add(theme.item(head));
|
||||||
@@ -118,11 +120,11 @@ 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initWidgets() {}
|
public void initWidgets() {}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
@@ -363,4 +368,4 @@ public class InteractionScreen extends Screen {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,11 +44,11 @@ public class StatsScreen extends WindowScreen {
|
|||||||
if (entity instanceof LivingEntity liv) {
|
if (entity instanceof LivingEntity liv) {
|
||||||
add(theme.label(String.format("Health: %.2f/%.2f", liv.getHealth(), liv.getMaxHealth())));
|
add(theme.label(String.format("Health: %.2f/%.2f", liv.getHealth(), liv.getMaxHealth())));
|
||||||
add(theme.label(String.format("Armor: %d/20", liv.getArmor())));
|
add(theme.label(String.format("Armor: %d/20", liv.getArmor())));
|
||||||
|
|
||||||
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)));
|
||||||
@@ -60,11 +60,11 @@ public class StatsScreen extends WindowScreen {
|
|||||||
if (liv.getActiveStatusEffects().isEmpty()) {
|
if (liv.getActiveStatusEffects().isEmpty()) {
|
||||||
effectList.add(theme.label("No effects")).expandX();
|
effectList.add(theme.label("No effects")).expandX();
|
||||||
}
|
}
|
||||||
|
|
||||||
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());
|
||||||
}
|
}
|
||||||
@@ -73,7 +73,7 @@ public class StatsScreen extends WindowScreen {
|
|||||||
dimension.add(theme.label(String.format("Position: %.2f, %.2f, %.2f", entity.getX(), entity.getY(), entity.getZ()))).expandX();
|
dimension.add(theme.label(String.format("Position: %.2f, %.2f, %.2f", entity.getX(), entity.getY(), entity.getZ()))).expandX();
|
||||||
dimension.add(theme.label(String.format("Yaw: %.2f, Pitch: %.2f", entity.getYaw(), entity.getPitch()))).expandX();
|
dimension.add(theme.label(String.format("Yaw: %.2f, Pitch: %.2f", entity.getYaw(), entity.getPitch()))).expandX();
|
||||||
Box box = entity.getBoundingBox();
|
Box box = entity.getBoundingBox();
|
||||||
dimension.add(theme.label(String.format("Bounding Box: %.2f, %.2f, %.2f",
|
dimension.add(theme.label(String.format("Bounding Box: %.2f, %.2f, %.2f",
|
||||||
box.maxX-box.minX, box.maxY-box.minY, box.maxZ-box.minZ
|
box.maxX-box.minX, box.maxY-box.minY, box.maxZ-box.minZ
|
||||||
))).expandX();
|
))).expandX();
|
||||||
}
|
}
|
||||||
@@ -82,7 +82,7 @@ public class StatsScreen extends WindowScreen {
|
|||||||
private void onTick(TickEvent.Post event) {
|
private void onTick(TickEvent.Post event) {
|
||||||
updateData();
|
updateData();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initWidgets() {}
|
public void initWidgets() {}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()) {
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -143,4 +143,4 @@ public class AntiVanish extends Module {
|
|||||||
LeaveMessage,
|
LeaveMessage,
|
||||||
RealJoinMessage//https://github.com/xtrm-en/meteor-antistaff/blob/main/src/main/java/me/xtrm/meteorclient/antistaff/modules/AntiStaff.java
|
RealJoinMessage//https://github.com/xtrm-en/meteor-antistaff/blob/main/src/main/java/me/xtrm/meteorclient/antistaff/modules/AntiStaff.java
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -82,9 +82,9 @@ public class AutoExtinguish extends Module {
|
|||||||
private boolean hasPlacedWater = false;
|
private boolean hasPlacedWater = false;
|
||||||
private BlockPos blockPos = null;
|
private BlockPos blockPos = null;
|
||||||
private boolean doesWaterBucketWork = true;
|
private boolean doesWaterBucketWork = true;
|
||||||
|
|
||||||
private static final StatusEffect FIRE_RESISTANCE = Registries.STATUS_EFFECT.get(new Identifier("fire_resistance"));
|
private static final StatusEffect FIRE_RESISTANCE = Registries.STATUS_EFFECT.get(new Identifier("fire_resistance"));
|
||||||
|
|
||||||
public AutoExtinguish() {
|
public AutoExtinguish() {
|
||||||
super(MeteorRejectsAddon.CATEGORY, "auto-extinguish", "Automatically extinguishes fire around you");
|
super(MeteorRejectsAddon.CATEGORY, "auto-extinguish", "Automatically extinguishes fire around you");
|
||||||
}
|
}
|
||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
@@ -86,7 +88,7 @@ public class AutoPot extends Module {
|
|||||||
private boolean drinking, splashing;
|
private boolean drinking, splashing;
|
||||||
private final List<Class<? extends Module>> wasAura = new ArrayList<>();
|
private final List<Class<? extends Module>> wasAura = new ArrayList<>();
|
||||||
private boolean wasBaritone;
|
private boolean wasBaritone;
|
||||||
|
|
||||||
public AutoPot() {
|
public AutoPot() {
|
||||||
super(MeteorRejectsAddon.CATEGORY, "auto-pot", "Automatically Drinks Potions");
|
super(MeteorRejectsAddon.CATEGORY, "auto-pot", "Automatically Drinks Potions");
|
||||||
}
|
}
|
||||||
@@ -322,14 +324,12 @@ 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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -342,14 +342,12 @@ 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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -363,17 +361,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.strength")) {
|
||||||
if (effect.getTranslationKey().equals("effect.minecraft.strength")) {
|
slot = i;
|
||||||
slot = i;
|
break;
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
return slot;
|
return slot;
|
||||||
}
|
}
|
||||||
@@ -384,17 +380,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.strength")) {
|
||||||
if (effect.getTranslationKey().equals("effect.minecraft.strength")) {
|
slot = i;
|
||||||
slot = i;
|
break;
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
return slot;
|
return slot;
|
||||||
}
|
}
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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() : "");
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)));
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
@@ -59,7 +61,7 @@ public class GiveUtils {
|
|||||||
|
|
||||||
public static void giveItem(ItemStack item) throws CommandSyntaxException {
|
public static void giveItem(ItemStack item) throws CommandSyntaxException {
|
||||||
if (!mc.player.getAbilities().creativeMode) throw NOT_IN_CREATIVE.create();
|
if (!mc.player.getAbilities().creativeMode) throw NOT_IN_CREATIVE.create();
|
||||||
|
|
||||||
if (!mc.player.getInventory().insertStack(item)) {
|
if (!mc.player.getInventory().insertStack(item)) {
|
||||||
throw NO_SPACE.create();
|
throw NO_SPACE.create();
|
||||||
}
|
}
|
||||||
@@ -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,10 +163,10 @@ 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;
|
||||||
});
|
});
|
||||||
|
|
||||||
HIDDEN_ENTITIES.forEach((id) -> {
|
HIDDEN_ENTITIES.forEach((id) -> {
|
||||||
PRESETS.put(id.getPath()+"_spawn_egg", (preview) -> {
|
PRESETS.put(id.getPath()+"_spawn_egg", (preview) -> {
|
||||||
if (preview) return Items.PIG_SPAWN_EGG.getDefaultStack();
|
if (preview) return Items.PIG_SPAWN_EGG.getDefaultStack();
|
||||||
@@ -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;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
}
|
||||||
}
|
final ClientConnection clientConnection = ClientConnection.connect(address.get(), false, (MultiValueDebugSampleLogImpl) null);
|
||||||
}, 20000);
|
|
||||||
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;
|
}
|
||||||
ServerMetadata serverMetadata = packet.metadata();
|
this.received = true;
|
||||||
entry.label = serverMetadata.description().getString();
|
ServerMetadata serverMetadata = packet.metadata();
|
||||||
serverMetadata.version().ifPresentOrElse((version) -> {
|
if (serverMetadata.description() != null) {
|
||||||
entry.version = version.gameVersion();
|
entry.label = serverMetadata.description().getString();
|
||||||
entry.protocolVersion = version.protocolVersion();
|
} else {
|
||||||
}, () -> {
|
entry.label = "";
|
||||||
entry.version = "multiplayer.status.old";
|
}
|
||||||
entry.protocolVersion = 0;
|
|
||||||
});
|
entry.version = serverMetadata.version().map(ServerMetadata.Version::gameVersion).orElse("multiplayer.status.old");
|
||||||
serverMetadata.players().ifPresentOrElse((players) -> {
|
serverMetadata.players().ifPresentOrElse(players -> {
|
||||||
entry.playerCountLabel = getPlayerCountLabel(players.online(), players.max());
|
entry.playerCountLabel = ServerListPinger.getPlayerCountLabel(players.online(), players.max());
|
||||||
entry.playerCount = players.online();
|
entry.playerCount = players.online();
|
||||||
if (!players.sample().isEmpty()) {
|
entry.playercountMax = players.max();
|
||||||
List<Text> list = new ArrayList(players.sample().size());
|
}, () -> {
|
||||||
Iterator var3 = players.sample().iterator();
|
entry.playerCountLabel = "multiplayer.status.unknown";
|
||||||
|
});
|
||||||
while (var3.hasNext()) {
|
|
||||||
GameProfile gameProfile = (GameProfile) var3.next();
|
this.startTime = Util.getMeasuringTimeMs();
|
||||||
list.add(Text.literal(gameProfile.getName()));
|
clientConnection.send(new QueryPingC2SPacket(this.startTime));
|
||||||
}
|
this.sentQuery = true;
|
||||||
|
notifyDisconnectListeners();
|
||||||
if (players.sample().size() < players.online()) {
|
|
||||||
list.add(Text.translatable("multiplayer.status.and_more", players.online() - players.sample().size()));
|
|
||||||
}
|
|
||||||
|
|
||||||
entry.playerListSummary = list;
|
|
||||||
} else {
|
|
||||||
entry.playerListSummary = List.of();
|
|
||||||
}
|
|
||||||
|
|
||||||
}, () -> entry.playerCountLabel = "multiplayer.status.unknown");
|
|
||||||
serverMetadata.favicon().ifPresent((favicon) -> {
|
|
||||||
if (!Arrays.equals(favicon.iconBytes(), entry.getIcon())) {
|
|
||||||
entry.setIcon(favicon.iconBytes());
|
|
||||||
runnable.run();
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
this.startTime = Util.getMeasuringTimeMs();
|
|
||||||
clientConnection.send(new QueryPingC2SPacket(this.startTime));
|
|
||||||
this.sentQuery = true;
|
|
||||||
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,79 +139,20 @@ 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() {
|
||||||
@@ -277,4 +184,4 @@ public class ServerListPinger {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
Reference in New Issue
Block a user