From 88006d7df5d0f965b1a35affef4a9a56848c6088 Mon Sep 17 00:00:00 2001 From: joe Date: Tue, 7 Jan 2025 23:33:50 +0000 Subject: [PATCH] Test mending --- .../gametest/BannedActionGametest.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/clientGametest/java/net/earthcomputer/clientcommands/gametest/BannedActionGametest.java b/src/clientGametest/java/net/earthcomputer/clientcommands/gametest/BannedActionGametest.java index cd4fc7f9..fc712a51 100644 --- a/src/clientGametest/java/net/earthcomputer/clientcommands/gametest/BannedActionGametest.java +++ b/src/clientGametest/java/net/earthcomputer/clientcommands/gametest/BannedActionGametest.java @@ -19,6 +19,7 @@ import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntitySpawnReason; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.ExperienceOrb; import net.minecraft.world.entity.monster.Spider; import net.minecraft.world.inventory.ClickType; import net.minecraft.world.item.ItemStack; @@ -70,6 +71,7 @@ public void runTest(ClientGameTestContext context) { testFrostWalker(context, singleplayer); testGiveCommand(context); testItemBreak(context, singleplayer); + testMending(context, singleplayer); context.waitTicks(100); } @@ -317,6 +319,40 @@ private static void testItemBreak(ClientGameTestContext context, TestSingleplaye MultiVersionCompat.setLatestProtocol(); } + private static void testMending(ClientGameTestContext context, TestSingleplayerContext singleplayer) { + // set the protocol version to < 1.17 to avoid XP orb collection detection + MultiVersionCompat.setProtocolVersion(MultiVersionCompat.V1_16, "1.16"); + BlockPos pos = getPlayerPos(context); + + ExperienceOrb orb = singleplayer.getServer().computeOnServer(server -> { + ItemStack mendingPickaxe = new ItemStack(Items.DIAMOND_PICKAXE); + mendingPickaxe.setDamageValue(1); + EnchantmentHelper.updateEnchantments(mendingPickaxe, enchantments -> { + Registry enchantmentRegistry = server.registryAccess().lookupOrThrow(Registries.ENCHANTMENT); + enchantments.set(enchantmentRegistry.getOrThrow(Enchantments.MENDING), 1); + }); + setInventoryItem(server, 0, mendingPickaxe); + + ExperienceOrb orb1 = new ExperienceOrb(server.overworld(), pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 2.5, 1); + server.overworld().addFreshEntity(orb1); + return orb1; + }); + context.waitFor(client -> orb.isRemoved()); + context.waitTick(); + + if (Configs.playerCrackState.knowsSeed()) { + throw new AssertionError("Didn't trigger mending detection"); + } + + singleplayer.getServer().runOnServer(server -> { + setInventoryItem(server, 0, ItemStack.EMPTY); + }); + context.waitTick(); + + Configs.playerCrackState = PlayerRandCracker.CrackState.CRACKED; + MultiVersionCompat.setLatestProtocol(); + } + private static void runClientCommand(ClientGameTestContext context, String command) { try { context.runOnClient(client -> {