From c3cb2b11f8241954205716e9f936bc69962c1140 Mon Sep 17 00:00:00 2001 From: Katinuka <154556524+Katinuka@users.noreply.github.com> Date: Fri, 22 Dec 2023 01:27:09 +0200 Subject: [PATCH] Added .stack command (#1719) --- .../features/command/CommandManager.kt | 6 +- .../commands/creative/CommandItemStack.kt | 78 +++++++++++++++++++ .../assets/liquidbounce/lang/en_us.json | 7 ++ 3 files changed, 87 insertions(+), 4 deletions(-) create mode 100644 src/main/kotlin/net/ccbluex/liquidbounce/features/command/commands/creative/CommandItemStack.kt diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/command/CommandManager.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/command/CommandManager.kt index bab50b8ca93..3dfdf2a1493 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/command/CommandManager.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/command/CommandManager.kt @@ -27,10 +27,7 @@ import net.ccbluex.liquidbounce.event.Listenable import net.ccbluex.liquidbounce.event.events.ChatSendEvent import net.ccbluex.liquidbounce.event.handler import net.ccbluex.liquidbounce.features.command.commands.client.* -import net.ccbluex.liquidbounce.features.command.commands.creative.CommandItemEnchant -import net.ccbluex.liquidbounce.features.command.commands.creative.CommandItemGive -import net.ccbluex.liquidbounce.features.command.commands.creative.CommandItemRename -import net.ccbluex.liquidbounce.features.command.commands.creative.CommandItemSkull +import net.ccbluex.liquidbounce.features.command.commands.creative.* import net.ccbluex.liquidbounce.features.command.commands.utility.CommandPosition import net.ccbluex.liquidbounce.features.command.commands.utility.CommandUsername import net.ccbluex.liquidbounce.script.CommandScript @@ -153,6 +150,7 @@ object CommandManager : Iterable { addCommand(CommandItemRename.createCommand()) addCommand(CommandItemGive.createCommand()) addCommand(CommandItemSkull.createCommand()) + addCommand(CommandItemStack.createCommand()) addCommand(CommandItemEnchant.createCommand()) // utility commands diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/command/commands/creative/CommandItemStack.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/command/commands/creative/CommandItemStack.kt new file mode 100644 index 00000000000..cb2d04031be --- /dev/null +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/command/commands/creative/CommandItemStack.kt @@ -0,0 +1,78 @@ +/* + * This file is part of LiquidBounce (https://github.com/CCBlueX/LiquidBounce) + * + * Copyright (c) 2015 - 2023 CCBlueX + * + * LiquidBounce is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * LiquidBounce is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with LiquidBounce. If not, see . + */ +package net.ccbluex.liquidbounce.features.command.commands.creative + +import net.ccbluex.liquidbounce.features.command.Command +import net.ccbluex.liquidbounce.features.command.CommandException +import net.ccbluex.liquidbounce.features.command.builder.CommandBuilder +import net.ccbluex.liquidbounce.features.command.builder.ParameterBuilder +import net.ccbluex.liquidbounce.utils.client.* +import net.minecraft.network.packet.c2s.play.CreativeInventoryActionC2SPacket + +object CommandItemStack { + + private val amountParameter = ParameterBuilder + .begin("amount") + .verifiedBy(ParameterBuilder.INTEGER_VALIDATOR) + .autocompletedWith { begin -> + mutableListOf("16", "32", "64").filter { it.startsWith(begin) } + } + .optional() + .build() + + fun createCommand(): Command { + return CommandBuilder + .begin("stack") + .parameter(amountParameter) + .handler { command, args -> + if (mc.interactionManager?.hasCreativeInventory() == false) { + throw CommandException(command.result("mustBeCreative")) + } + + val mainHandStack = mc.player!!.mainHandStack + if (mainHandStack.isEmpty) { + throw CommandException(command.result("noItem")) + } + + val amount = args[0] as? Int ?: 64 + + if (amount < 1 || amount > 64) { + throw CommandException(command.result("invalidAmount")) + } + + + if (mainHandStack.count == amount) { + chat(regular(command.result("hasAlreadyAmount", variable(amount.toString())))) + return@handler + } + + mainHandStack.count = amount + mc.player!!.inventory!!.setStack(mc.player!!.inventory.selectedSlot, mainHandStack) + mc.networkHandler!!.sendPacket( + CreativeInventoryActionC2SPacket( + 36 + mc.player!!.inventory.selectedSlot, + mainHandStack + ) + ) + chat(regular(command.result("amountChanged", variable(amount.toString())))) + } + .build() + } + +} diff --git a/src/main/resources/assets/liquidbounce/lang/en_us.json b/src/main/resources/assets/liquidbounce/lang/en_us.json index b4df8ee1c44..d6b89fe8c41 100644 --- a/src/main/resources/assets/liquidbounce/lang/en_us.json +++ b/src/main/resources/assets/liquidbounce/lang/en_us.json @@ -139,6 +139,13 @@ "liquidbounce.command.skull.result.mustBeCreative": "Creative mode required!", "liquidbounce.command.skull.result.noEmptySlot": "There are no empty slots in your inventory.", "liquidbounce.command.skull.result.skullGiven": "Gave you the skull of %s.", + "liquidbounce.command.stack.description": "Changes the item amount in your main hand.", + "liquidbounce.command.stack.parameter.amount.description": "Optional amount.", + "liquidbounce.command.stack.result.mustBeCreative": "Creative mode required!", + "liquidbounce.command.stack.result.noItem": "There is no item in your main hand.", + "liquidbounce.command.stack.result.invalidAmount": "Invalid item amount. Item amount must be from 1 to 64.", + "liquidbounce.command.stack.result.amountChanged": "The item amount has been changed.", + "liquidbounce.command.stack.result.hasAlreadyAmount": "The item amount is already %s", "liquidbounce.command.enchant.description": "Enchants the currently selected item.", "liquidbounce.command.enchant.parameter.enchantment.description": "Enchantment name.", "liquidbounce.command.enchant.parameter.level.description": "Enchantment level.",