diff --git a/leaves-api/src/main/java/org/leavesmc/leaves/entity/bot/action/ShootAction.java b/leaves-api/src/main/java/org/leavesmc/leaves/entity/bot/action/ShootAction.java deleted file mode 100644 index 51b539cb..00000000 --- a/leaves-api/src/main/java/org/leavesmc/leaves/entity/bot/action/ShootAction.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.leavesmc.leaves.entity.bot.action; - -import org.bukkit.Bukkit; - -/** - * Represents an action for a bot to shoot a projectile, such as use bow to shoot an arrow. - */ -public interface ShootAction extends TimerBotAction { - - /** - * Gets the drawing tick for the shoot action. - *

- * The drawing tick determines how long the bot will draw the bow before shooting. - * - * @return the drawing tick - */ - int getDrawingTick(); - - /** - * Sets the drawing tick for the shoot action. - *

- * The drawing tick determines how long the bot will draw the bow before shooting. - * - * @param drawingTick the drawing tick to set - * @return this action instance - */ - ShootAction setDrawingTick(int drawingTick); - - static ShootAction create() { - return Bukkit.getBotManager().newAction(ShootAction.class); - } -} diff --git a/leaves-api/src/main/java/org/leavesmc/leaves/entity/bot/action/UseItemAction.java b/leaves-api/src/main/java/org/leavesmc/leaves/entity/bot/action/UseItemAction.java index 67a82843..7114a04a 100644 --- a/leaves-api/src/main/java/org/leavesmc/leaves/entity/bot/action/UseItemAction.java +++ b/leaves-api/src/main/java/org/leavesmc/leaves/entity/bot/action/UseItemAction.java @@ -6,6 +6,23 @@ import org.bukkit.Bukkit; * Represents an action where a bot only uses an item, without using it on blocks or entities. */ public interface UseItemAction extends TimerBotAction { + + /** + * Gets the equivalent right-click hold duration in ticks. + * Default is -1, which means will not be released. + * + * @return the equivalent right-click hold duration + */ + int getUseTick(); + + /** + * Sets the equivalent right-click hold duration in ticks. + * + * @param useTick the equivalent right-click hold duration + * @return this action instance + */ + UseItemAction setUseTick(int useTick); + static UseItemAction create() { return Bukkit.getBotManager().newAction(UseItemAction.class); } diff --git a/leaves-api/src/main/java/org/leavesmc/leaves/entity/bot/action/UseItemAutoAction.java b/leaves-api/src/main/java/org/leavesmc/leaves/entity/bot/action/UseItemAutoAction.java index 1b3f3494..feb6d163 100644 --- a/leaves-api/src/main/java/org/leavesmc/leaves/entity/bot/action/UseItemAutoAction.java +++ b/leaves-api/src/main/java/org/leavesmc/leaves/entity/bot/action/UseItemAutoAction.java @@ -6,6 +6,23 @@ import org.bukkit.Bukkit; * Represents an action where a bot uses an item, fully simulating the effect of a player right-clicking. */ public interface UseItemAutoAction extends TimerBotAction { + + /** + * Gets the equivalent right-click hold duration in ticks. + * Default is -1, which means will not be released. + * + * @return the equivalent right-click hold duration + */ + int getUseTick(); + + /** + * Sets the equivalent right-click hold duration in ticks. + * + * @param useTick the equivalent right-click hold duration + * @return this action instance + */ + UseItemAutoAction setUseTick(int useTick); + static UseItemAutoAction create() { return Bukkit.getBotManager().newAction(UseItemAutoAction.class); } diff --git a/leaves-api/src/main/java/org/leavesmc/leaves/entity/bot/action/UseItemOffhandAction.java b/leaves-api/src/main/java/org/leavesmc/leaves/entity/bot/action/UseItemOffhandAction.java index b615de99..a96b1833 100644 --- a/leaves-api/src/main/java/org/leavesmc/leaves/entity/bot/action/UseItemOffhandAction.java +++ b/leaves-api/src/main/java/org/leavesmc/leaves/entity/bot/action/UseItemOffhandAction.java @@ -6,6 +6,23 @@ import org.bukkit.Bukkit; * Represents an action where a bot only uses the item in its offhand, without using it on blocks or entities. */ public interface UseItemOffhandAction extends TimerBotAction { + + /** + * Gets the equivalent right-click hold duration in ticks. + * Default is -1, which means will not be released. + * + * @return the equivalent right-click hold duration + */ + int getUseTick(); + + /** + * Sets the equivalent right-click hold duration in ticks. + * + * @param useTick the equivalent right-click hold duration + * @return this action instance + */ + UseItemOffhandAction setUseTick(int useTick); + static UseItemOffhandAction create() { return Bukkit.getBotManager().newAction(UseItemOffhandAction.class); } diff --git a/leaves-api/src/main/java/org/leavesmc/leaves/entity/bot/action/UseItemOnAction.java b/leaves-api/src/main/java/org/leavesmc/leaves/entity/bot/action/UseItemOnAction.java index e2ad847d..166c7a35 100644 --- a/leaves-api/src/main/java/org/leavesmc/leaves/entity/bot/action/UseItemOnAction.java +++ b/leaves-api/src/main/java/org/leavesmc/leaves/entity/bot/action/UseItemOnAction.java @@ -6,6 +6,23 @@ import org.bukkit.Bukkit; * Represents an action where a bot uses an item on a block. */ public interface UseItemOnAction extends TimerBotAction { + + /** + * Gets the equivalent right-click hold duration in ticks. + * Default is -1, which means will not be released. + * + * @return the equivalent right-click hold duration + */ + int getUseTick(); + + /** + * Sets the equivalent right-click hold duration in ticks. + * + * @param useTick the equivalent right-click hold duration + * @return this action instance + */ + UseItemOnAction setUseTick(int useTick); + static UseItemOnAction create() { return Bukkit.getBotManager().newAction(UseItemOnAction.class); } diff --git a/leaves-api/src/main/java/org/leavesmc/leaves/entity/bot/action/UseItemOnOffhandAction.java b/leaves-api/src/main/java/org/leavesmc/leaves/entity/bot/action/UseItemOnOffhandAction.java index 55678c41..663e99d6 100644 --- a/leaves-api/src/main/java/org/leavesmc/leaves/entity/bot/action/UseItemOnOffhandAction.java +++ b/leaves-api/src/main/java/org/leavesmc/leaves/entity/bot/action/UseItemOnOffhandAction.java @@ -6,6 +6,23 @@ import org.bukkit.Bukkit; * Represents an action where a bot uses an item in its offhand on a block. */ public interface UseItemOnOffhandAction extends TimerBotAction { + + /** + * Gets the equivalent right-click hold duration in ticks. + * Default is -1, which means will not be released. + * + * @return the equivalent right-click hold duration + */ + int getUseTick(); + + /** + * Sets the equivalent right-click hold duration in ticks. + * + * @param useTick the equivalent right-click hold duration + * @return this action instance + */ + UseItemOnOffhandAction setUseTick(int useTick); + static UseItemOnOffhandAction create() { return Bukkit.getBotManager().newAction(UseItemOnOffhandAction.class); } diff --git a/leaves-api/src/main/java/org/leavesmc/leaves/entity/bot/action/UseItemToAction.java b/leaves-api/src/main/java/org/leavesmc/leaves/entity/bot/action/UseItemToAction.java index 824a8ff2..afa143a4 100644 --- a/leaves-api/src/main/java/org/leavesmc/leaves/entity/bot/action/UseItemToAction.java +++ b/leaves-api/src/main/java/org/leavesmc/leaves/entity/bot/action/UseItemToAction.java @@ -6,6 +6,23 @@ import org.bukkit.Bukkit; * Represents an action where a bot uses an item to an entity. */ public interface UseItemToAction extends TimerBotAction { + + /** + * Gets the equivalent right-click hold duration in ticks. + * Default is -1, which means will not be released. + * + * @return the equivalent right-click hold duration + */ + int getUseTick(); + + /** + * Sets the equivalent right-click hold duration in ticks. + * + * @param useTick the equivalent right-click hold duration + * @return this action instance + */ + UseItemToAction setUseTick(int useTick); + static UseItemToAction create() { return Bukkit.getBotManager().newAction(UseItemToAction.class); } diff --git a/leaves-api/src/main/java/org/leavesmc/leaves/entity/bot/action/UseItemToOffhandAction.java b/leaves-api/src/main/java/org/leavesmc/leaves/entity/bot/action/UseItemToOffhandAction.java index 98aa6135..8cb10781 100644 --- a/leaves-api/src/main/java/org/leavesmc/leaves/entity/bot/action/UseItemToOffhandAction.java +++ b/leaves-api/src/main/java/org/leavesmc/leaves/entity/bot/action/UseItemToOffhandAction.java @@ -6,6 +6,23 @@ import org.bukkit.Bukkit; * Represents an action where a bot uses an item in its offhand to an entity. */ public interface UseItemToOffhandAction extends TimerBotAction { + + /** + * Gets the equivalent right-click hold duration in ticks. + * Default is -1, which means will not be released. + * + * @return the equivalent right-click hold duration + */ + int getUseTick(); + + /** + * Sets the equivalent right-click hold duration in ticks. + * + * @param useTick the equivalent right-click hold duration + * @return this action instance + */ + UseItemToOffhandAction setUseTick(int useTick); + static UseItemToOffhandAction create() { return Bukkit.getBotManager().newAction(UseItemToOffhandAction.class); } diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/Actions.java b/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/Actions.java index 4337f244..5b831b65 100644 --- a/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/Actions.java +++ b/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/Actions.java @@ -34,7 +34,6 @@ public class Actions { register(new ServerFishAction(), FishAction.class); register(new ServerSwimAction(), SwimAction.class); register(new ServerRotationAction(), RotationAction.class); - register(new ServerShootAction(), ShootAction.class); register(new ServerMoveAction(), MoveAction.class); } diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerShootAction.java b/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerShootAction.java deleted file mode 100644 index c1cb5351..00000000 --- a/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerShootAction.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.leavesmc.leaves.bot.agent.actions; - -import net.minecraft.nbt.CompoundTag; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.item.Items; -import org.apache.commons.lang3.tuple.Pair; -import org.jetbrains.annotations.NotNull; -import org.leavesmc.leaves.bot.ServerBot; -import org.leavesmc.leaves.command.CommandArgument; -import org.leavesmc.leaves.command.CommandArgumentResult; -import org.leavesmc.leaves.command.CommandArgumentType; -import org.leavesmc.leaves.entity.bot.actions.CraftShootAction; - -import java.util.Collections; - -public class ServerShootAction extends ServerTimerBotAction { - - private static final int DEFAULT_DRAWING_TICK = 20; - private int drawingTick = DEFAULT_DRAWING_TICK; - private int tickToRelease = -1; - - public ServerShootAction() { - super("shoot", CommandArgument.of(CommandArgumentType.INTEGER, CommandArgumentType.INTEGER, CommandArgumentType.INTEGER, CommandArgumentType.INTEGER), ServerShootAction::new); - this.setSuggestion(3, Pair.of(Collections.singletonList("20"), "[DrawingTick]")); - } - - @Override - public void init() { - super.init(); - this.tickToRelease = drawingTick; - } - - @Override - public boolean doTick(@NotNull ServerBot bot) { - if (!bot.getItemInHand(InteractionHand.MAIN_HAND).is(Items.BOW)) { - return false; - } - tickToRelease--; - if (tickToRelease >= 0) { - bot.gameMode.useItem(bot, bot.level(), bot.getItemInHand(InteractionHand.MAIN_HAND), InteractionHand.MAIN_HAND).consumesAction(); - bot.updateItemInHand(InteractionHand.MAIN_HAND); - return false; - } else { - bot.releaseUsingItem(); - tickToRelease = drawingTick; - return true; - } - } - - @Override - public void loadCommand(ServerPlayer player, @NotNull CommandArgumentResult result) { - super.loadCommand(player, result); - this.drawingTick = result.readInt(DEFAULT_DRAWING_TICK); - } - - @Override - @NotNull - public CompoundTag save(@NotNull CompoundTag nbt) { - super.save(nbt); - nbt.putInt("drawingTick", this.drawingTick); - nbt.putInt("tickToRelease", this.tickToRelease); - return nbt; - } - - @Override - public void load(@NotNull CompoundTag nbt) { - super.load(nbt); - this.drawingTick = nbt.getInt("drawingTick").orElseThrow(); - this.tickToRelease = nbt.getInt("tickToRelease").orElseThrow(); - } - - public int getDrawingTick() { - return drawingTick; - } - - public void setDrawingTick(int drawingTick) { - this.drawingTick = drawingTick; - } - - @Override - public Object asCraft() { - return new CraftShootAction(this); - } -} \ No newline at end of file diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerUseItemAction.java b/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerUseItemAction.java index c164ba06..030a4163 100644 --- a/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerUseItemAction.java +++ b/leaves-server/src/main/java/org/leavesmc/leaves/bot/agent/actions/ServerUseItemAction.java @@ -1,19 +1,87 @@ package org.leavesmc.leaves.bot.agent.actions; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; +import org.apache.commons.lang3.tuple.Pair; import org.jetbrains.annotations.NotNull; import org.leavesmc.leaves.bot.ServerBot; +import org.leavesmc.leaves.command.CommandArgument; +import org.leavesmc.leaves.command.CommandArgumentResult; +import org.leavesmc.leaves.command.CommandArgumentType; import org.leavesmc.leaves.entity.bot.actions.CraftUseItemAction; +import org.leavesmc.leaves.event.bot.BotActionStopEvent; + +import java.util.Collections; public class ServerUseItemAction extends ServerTimerBotAction { + private int useTick = -1; + private int tickToRelease = -1; public ServerUseItemAction() { - super("use", ServerUseItemAction::new); + super("use", CommandArgument.of(CommandArgumentType.INTEGER, CommandArgumentType.INTEGER, CommandArgumentType.INTEGER, CommandArgumentType.INTEGER), ServerUseItemAction::new); + this.setSuggestion(3, Pair.of(Collections.singletonList("-1"), "[UseTick]")); + } + + @Override + public void init() { + super.init(); + syncTickToRelease(); + } + + @Override + public void loadCommand(ServerPlayer player, @NotNull CommandArgumentResult result) { + super.loadCommand(player, result); + this.useTick = result.readInt(-1); } @Override public boolean doTick(@NotNull ServerBot bot) { - return execute(bot); + tickToRelease--; + if (tickToRelease >= 0) { + boolean result = execute(bot); + if (useTick >=0) { + return false; + } else { + return result; + } + } else { + syncTickToRelease(); + bot.releaseUsingItem(); + return true; + } + } + + private void syncTickToRelease() { + if (this.useTick >= 0) { + this.tickToRelease = this.useTick; + } else { + this.tickToRelease = Integer.MAX_VALUE; + } + } + + @Override + @NotNull + public CompoundTag save(@NotNull CompoundTag nbt) { + super.save(nbt); + nbt.putInt("useTick", this.useTick); + nbt.putInt("tickToRelease", this.tickToRelease); + return nbt; + } + + @Override + public void load(@NotNull CompoundTag nbt) { + super.load(nbt); + this.useTick = nbt.getInt("useTick").orElseThrow(); + this.tickToRelease = nbt.getInt("tickToRelease").orElseThrow(); + } + + public int getUseTick() { + return useTick; + } + + public void setUseTick(int useTick) { + this.useTick = useTick; } public static boolean execute(@NotNull ServerBot bot) { @@ -29,6 +97,12 @@ public class ServerUseItemAction extends ServerTimerBotAction { + private int useTick = -1; + private int tickToRelease = -1; public ServerUseItemAutoAction() { - super("use_auto", ServerUseItemAutoAction::new); + super("use_auto", CommandArgument.of(CommandArgumentType.INTEGER, CommandArgumentType.INTEGER, CommandArgumentType.INTEGER, CommandArgumentType.INTEGER), ServerUseItemAutoAction::new); + this.setSuggestion(3, Pair.of(Collections.singletonList("-1"), "[UseTick]")); + } + + @Override + public void init() { + super.init(); + syncTickToRelease(); + } + + @Override + public void loadCommand(ServerPlayer player, @NotNull CommandArgumentResult result) { + super.loadCommand(player, result); + this.useTick = result.readInt(-1); } @Override public boolean doTick(@NotNull ServerBot bot) { + tickToRelease--; + if (tickToRelease >= 0) { + boolean result = execute(bot); + if (useTick >=0) { + return false; + } else { + return result; + } + } else { + syncTickToRelease(); + bot.releaseUsingItem(); + return true; + } + } + + private void syncTickToRelease() { + if (this.useTick >= 0) { + this.tickToRelease = this.useTick; + } else { + this.tickToRelease = Integer.MAX_VALUE; + } + } + + public int getUseTick() { + return useTick; + } + + public void setUseTick(int useTick) { + this.useTick = useTick; + } + + public boolean execute(@NotNull ServerBot bot) { if (bot.isUsingItem()) { return false; } @@ -41,6 +96,12 @@ public class ServerUseItemAutoAction extends ServerTimerBotAction { + private int useTick = -1; + private int tickToRelease = -1; public ServerUseItemOffhandAction() { - super("use_offhand", ServerUseItemOffhandAction::new); + super("use_offhand", CommandArgument.of(CommandArgumentType.INTEGER, CommandArgumentType.INTEGER, CommandArgumentType.INTEGER, CommandArgumentType.INTEGER), ServerUseItemOffhandAction::new); + this.setSuggestion(3, Pair.of(Collections.singletonList("-1"), "[UseTick]")); + } + + @Override + public void init() { + super.init(); + syncTickToRelease(); + } + + @Override + public void loadCommand(ServerPlayer player, @NotNull CommandArgumentResult result) { + super.loadCommand(player, result); + this.useTick = result.readInt(-1); } @Override public boolean doTick(@NotNull ServerBot bot) { - return execute(bot); + tickToRelease--; + if (tickToRelease >= 0) { + boolean result = execute(bot); + if (useTick >=0) { + return false; + } else { + return result; + } + } else { + syncTickToRelease(); + bot.releaseUsingItem(); + return true; + } + } + + private void syncTickToRelease() { + if (this.useTick >= 0) { + this.tickToRelease = this.useTick; + } else { + this.tickToRelease = Integer.MAX_VALUE; + } + } + + @Override + @NotNull + public CompoundTag save(@NotNull CompoundTag nbt) { + super.save(nbt); + nbt.putInt("useTick", this.useTick); + nbt.putInt("tickToRelease", this.tickToRelease); + return nbt; + } + + @Override + public void load(@NotNull CompoundTag nbt) { + super.load(nbt); + this.useTick = nbt.getInt("useTick").orElseThrow(); + this.tickToRelease = nbt.getInt("tickToRelease").orElseThrow(); + } + + public int getUseTick() { + return useTick; + } + + public void setUseTick(int useTick) { + this.useTick = useTick; } public static boolean execute(@NotNull ServerBot bot) { @@ -29,6 +97,12 @@ public class ServerUseItemOffhandAction extends ServerTimerBotAction { + private int useTick = -1; + private int tickToRelease = -1; public ServerUseItemOnAction() { - super("use_on", ServerUseItemOnAction::new); + super("use_on", CommandArgument.of(CommandArgumentType.INTEGER, CommandArgumentType.INTEGER, CommandArgumentType.INTEGER, CommandArgumentType.INTEGER), ServerUseItemOnAction::new); + this.setSuggestion(3, Pair.of(Collections.singletonList("-1"), "[UseTick]")); + } + + @Override + public void init() { + super.init(); + syncTickToRelease(); + } + + @Override + public void loadCommand(ServerPlayer player, @NotNull CommandArgumentResult result) { + super.loadCommand(player, result); + this.useTick = result.readInt(-1); } @Override public boolean doTick(@NotNull ServerBot bot) { - HitResult result = bot.getRayTrace(5, ClipContext.Fluid.NONE); - return execute(bot, result); + tickToRelease--; + if (tickToRelease >= 0) { + HitResult hitResult = bot.getRayTrace(5, ClipContext.Fluid.NONE); + boolean result = execute(bot, hitResult); + if (useTick >=0) { + return false; + } else { + return result; + } + } else { + syncTickToRelease(); + bot.releaseUsingItem(); + return true; + } + } + + private void syncTickToRelease() { + if (this.useTick >= 0) { + this.tickToRelease = this.useTick; + } else { + this.tickToRelease = Integer.MAX_VALUE; + } + } + + @Override + @NotNull + public CompoundTag save(@NotNull CompoundTag nbt) { + super.save(nbt); + nbt.putInt("useTick", this.useTick); + nbt.putInt("tickToRelease", this.tickToRelease); + return nbt; + } + + @Override + public void load(@NotNull CompoundTag nbt) { + super.load(nbt); + this.useTick = nbt.getInt("useTick").orElseThrow(); + this.tickToRelease = nbt.getInt("tickToRelease").orElseThrow(); + } + + public int getUseTick() { + return useTick; + } + + public void setUseTick(int useTick) { + this.useTick = useTick; } public static boolean execute(@NotNull ServerBot bot, HitResult result) { @@ -52,6 +120,12 @@ public class ServerUseItemOnAction extends ServerTimerBotAction { + private int useTick = -1; + private int tickToRelease = -1; public ServerUseItemOnOffhandAction() { - super("use_on_offhand", ServerUseItemOnOffhandAction::new); + super("use_on_offhand", CommandArgument.of(CommandArgumentType.INTEGER, CommandArgumentType.INTEGER, CommandArgumentType.INTEGER, CommandArgumentType.INTEGER), ServerUseItemOnOffhandAction::new); + this.setSuggestion(3, Pair.of(Collections.singletonList("-1"), "[UseTick]")); + } + + @Override + public void init() { + super.init(); + syncTickToRelease(); + } + + @Override + public void loadCommand(ServerPlayer player, @NotNull CommandArgumentResult result) { + super.loadCommand(player, result); + this.useTick = result.readInt(-1); } @Override public boolean doTick(@NotNull ServerBot bot) { - HitResult result = bot.getRayTrace(5, ClipContext.Fluid.NONE); - return execute(bot, result); + tickToRelease--; + if (tickToRelease >= 0) { + HitResult hitResult = bot.getRayTrace(5, ClipContext.Fluid.NONE); + boolean result = execute(bot, hitResult); + if (useTick >=0) { + return false; + } else { + return result; + } + } else { + syncTickToRelease(); + bot.releaseUsingItem(); + return true; + } + } + + private void syncTickToRelease() { + if (this.useTick >= 0) { + this.tickToRelease = this.useTick; + } else { + this.tickToRelease = Integer.MAX_VALUE; + } + } + + @Override + @NotNull + public CompoundTag save(@NotNull CompoundTag nbt) { + super.save(nbt); + nbt.putInt("useTick", this.useTick); + nbt.putInt("tickToRelease", this.tickToRelease); + return nbt; + } + + @Override + public void load(@NotNull CompoundTag nbt) { + super.load(nbt); + this.useTick = nbt.getInt("useTick").orElseThrow(); + this.tickToRelease = nbt.getInt("tickToRelease").orElseThrow(); + } + + public int getUseTick() { + return useTick; + } + + public void setUseTick(int useTick) { + this.useTick = useTick; } public static boolean execute(ServerBot bot, HitResult result) { @@ -52,6 +120,12 @@ public class ServerUseItemOnOffhandAction extends ServerTimerBotAction { + private int useTick = -1; + private int tickToRelease = -1; public ServerUseItemToAction() { - super("use_to", ServerUseItemToAction::new); + super("use_to", CommandArgument.of(CommandArgumentType.INTEGER, CommandArgumentType.INTEGER, CommandArgumentType.INTEGER, CommandArgumentType.INTEGER), ServerUseItemToAction::new); + this.setSuggestion(3, Pair.of(Collections.singletonList("-1"), "[UseTick]")); + } + + @Override + public void init() { + super.init(); + syncTickToRelease(); + } + + @Override + public void loadCommand(ServerPlayer player, @NotNull CommandArgumentResult result) { + super.loadCommand(player, result); + this.useTick = result.readInt(-1); } @Override public boolean doTick(@NotNull ServerBot bot) { - Entity entity = bot.getTargetEntity(3, null); - return execute(bot, entity); + tickToRelease--; + if (tickToRelease >= 0) { + Entity entity = bot.getTargetEntity(3, null); + boolean result = execute(bot, entity); + if (useTick >=0) { + return false; + } else { + return result; + } + } else { + syncTickToRelease(); + bot.releaseUsingItem(); + return true; + } + } + + private void syncTickToRelease() { + if (this.useTick >= 0) { + this.tickToRelease = this.useTick; + } else { + this.tickToRelease = Integer.MAX_VALUE; + } + } + + public int getUseTick() { + return useTick; + } + + public void setUseTick(int useTick) { + this.useTick = useTick; } public static boolean execute(ServerBot bot, Entity entity) { @@ -31,6 +82,12 @@ public class ServerUseItemToAction extends ServerTimerBotAction { + private int useTick = -1; + private int tickToRelease = -1; public ServerUseItemToOffhandAction() { - super("use_to_offhand", ServerUseItemToOffhandAction::new); + super("use_to_offhand", CommandArgument.of(CommandArgumentType.INTEGER, CommandArgumentType.INTEGER, CommandArgumentType.INTEGER, CommandArgumentType.INTEGER), ServerUseItemToOffhandAction::new); + this.setSuggestion(3, Pair.of(Collections.singletonList("-1"), "[UseTick]")); + } + + @Override + public void init() { + super.init(); + syncTickToRelease(); + } + + @Override + public void loadCommand(ServerPlayer player, @NotNull CommandArgumentResult result) { + super.loadCommand(player, result); + this.useTick = result.readInt(-1); } @Override public boolean doTick(@NotNull ServerBot bot) { - Entity entity = bot.getTargetEntity(3, null); - return execute(bot, entity); + tickToRelease--; + if (tickToRelease >= 0) { + Entity entity = bot.getTargetEntity(3, null); + boolean result = execute(bot, entity); + if (useTick >=0) { + return false; + } else { + return result; + } + } else { + syncTickToRelease(); + bot.releaseUsingItem(); + return true; + } + } + + private void syncTickToRelease() { + if (this.useTick >= 0) { + this.tickToRelease = this.useTick; + } else { + this.tickToRelease = Integer.MAX_VALUE; + } + } + + public int getUseTick() { + return useTick; + } + + public void setUseTick(int useTick) { + this.useTick = useTick; } public static boolean execute(ServerBot bot, Entity entity) { @@ -31,6 +82,12 @@ public class ServerUseItemToOffhandAction extends ServerTimerBotAction onFail = null; - private Consumer onSuccess = null; - private Consumer onStop = null; - - public CraftShootAction(ServerShootAction serverAction) { - this.serverAction = serverAction; - } - - public boolean doTick(@NotNull ServerBot bot) { - return serverAction.doTick(bot); - } - - @Override - public ServerBotAction getHandle() { - return serverAction; - } - - @Override - public String getName() { - return serverAction.getName(); - } - - @Override - public UUID getUUID() { - return serverAction.getUUID(); - } - - @Override - public void setCancelled(boolean cancel) { - serverAction.setCancelled(cancel); - } - - @Override - public boolean isCancelled() { - return serverAction.isCancelled(); - } - - @Override - public void setOnFail(Consumer onFail) { - this.onFail = onFail; - serverAction.setOnFail(it -> onFail.accept(new CraftShootAction(it))); - } - - @Override - public Consumer getOnFail() { - return onFail; - } - - @Override - public void setOnSuccess(Consumer onSuccess) { - this.onSuccess = onSuccess; - serverAction.setOnSuccess(it -> onSuccess.accept(new CraftShootAction(it))); - } - - @Override - public Consumer getOnSuccess() { - return onSuccess; - } - - @Override - public void setOnStop(Consumer onStop) { - this.onStop = onStop; - serverAction.setOnStop(it -> onStop.accept(new CraftShootAction(it))); - } - - @Override - public Consumer getOnStop() { - return onStop; - } - - @Override - public void setStartDelayTick(int delayTick) { - serverAction.setStartDelayTick(delayTick); - } - - @Override - public int getStartDelayTick() { - return serverAction.getStartDelayTick(); - } - - @Override - public void setDoIntervalTick(int intervalTick) { - serverAction.setDoIntervalTick(intervalTick); - } - - @Override - public int getDoIntervalTick() { - return serverAction.getDoIntervalTick(); - } - - @Override - public void setDoNumber(int doNumber) { - serverAction.setDoNumber(doNumber); - } - - @Override - public int getDoNumber() { - return serverAction.getDoNumber(); - } - - @Override - public int getTickToNext() { - return serverAction.getTickToNext(); - } - - @Override - public int getDoNumberRemaining() { - return serverAction.getDoNumberRemaining(); - } - - @Override - public int getDrawingTick() { - return serverAction.getDrawingTick(); - } - - @Override - public ShootAction setDrawingTick(int drawingTick) { - serverAction.setDrawingTick(drawingTick); - return this; - } -} diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/entity/bot/actions/CraftUseItemAction.java b/leaves-server/src/main/java/org/leavesmc/leaves/entity/bot/actions/CraftUseItemAction.java index 537ac8d3..17ae335e 100644 --- a/leaves-server/src/main/java/org/leavesmc/leaves/entity/bot/actions/CraftUseItemAction.java +++ b/leaves-server/src/main/java/org/leavesmc/leaves/entity/bot/actions/CraftUseItemAction.java @@ -22,6 +22,17 @@ public class CraftUseItemAction extends CraftBotAction implements UseItemAction return serverAction.doTick(bot); } + @Override + public int getUseTick() { + return serverAction.getUseTick(); + } + + @Override + public CraftUseItemAction setUseTick(int useTick) { + serverAction.setUseTick(useTick); + return this; + } + @Override public ServerBotAction getHandle() { return serverAction; diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/entity/bot/actions/CraftUseItemAutoAction.java b/leaves-server/src/main/java/org/leavesmc/leaves/entity/bot/actions/CraftUseItemAutoAction.java index 6edc4de3..d604cbc8 100644 --- a/leaves-server/src/main/java/org/leavesmc/leaves/entity/bot/actions/CraftUseItemAutoAction.java +++ b/leaves-server/src/main/java/org/leavesmc/leaves/entity/bot/actions/CraftUseItemAutoAction.java @@ -22,6 +22,17 @@ public class CraftUseItemAutoAction extends CraftBotAction implements UseItemAut return serverAction.doTick(bot); } + @Override + public int getUseTick() { + return serverAction.getUseTick(); + } + + @Override + public CraftUseItemAutoAction setUseTick(int useTick) { + serverAction.setUseTick(useTick); + return this; + } + @Override public ServerBotAction getHandle() { return serverAction; diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/entity/bot/actions/CraftUseItemOffhandAction.java b/leaves-server/src/main/java/org/leavesmc/leaves/entity/bot/actions/CraftUseItemOffhandAction.java index a82f04de..7ea1534c 100644 --- a/leaves-server/src/main/java/org/leavesmc/leaves/entity/bot/actions/CraftUseItemOffhandAction.java +++ b/leaves-server/src/main/java/org/leavesmc/leaves/entity/bot/actions/CraftUseItemOffhandAction.java @@ -22,6 +22,17 @@ public class CraftUseItemOffhandAction extends CraftBotAction implements UseItem return serverAction.doTick(bot); } + @Override + public int getUseTick() { + return serverAction.getUseTick(); + } + + @Override + public CraftUseItemOffhandAction setUseTick(int useTick) { + serverAction.setUseTick(useTick); + return this; + } + @Override public ServerBotAction getHandle() { return serverAction; diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/entity/bot/actions/CraftUseItemOnAction.java b/leaves-server/src/main/java/org/leavesmc/leaves/entity/bot/actions/CraftUseItemOnAction.java index 69b3c9d5..cb5301c9 100644 --- a/leaves-server/src/main/java/org/leavesmc/leaves/entity/bot/actions/CraftUseItemOnAction.java +++ b/leaves-server/src/main/java/org/leavesmc/leaves/entity/bot/actions/CraftUseItemOnAction.java @@ -22,6 +22,17 @@ public class CraftUseItemOnAction extends CraftBotAction implements UseItemOnAct return serverAction.doTick(bot); } + @Override + public int getUseTick() { + return serverAction.getUseTick(); + } + + @Override + public CraftUseItemOnAction setUseTick(int useTick) { + serverAction.setUseTick(useTick); + return this; + } + @Override public ServerBotAction getHandle() { return serverAction; diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/entity/bot/actions/CraftUseItemOnOffhandAction.java b/leaves-server/src/main/java/org/leavesmc/leaves/entity/bot/actions/CraftUseItemOnOffhandAction.java index f17e8a39..30ea83b8 100644 --- a/leaves-server/src/main/java/org/leavesmc/leaves/entity/bot/actions/CraftUseItemOnOffhandAction.java +++ b/leaves-server/src/main/java/org/leavesmc/leaves/entity/bot/actions/CraftUseItemOnOffhandAction.java @@ -22,6 +22,17 @@ public class CraftUseItemOnOffhandAction extends CraftBotAction implements UseIt return serverAction.doTick(bot); } + @Override + public int getUseTick() { + return serverAction.getUseTick(); + } + + @Override + public CraftUseItemOnOffhandAction setUseTick(int useTick) { + serverAction.setUseTick(useTick); + return this; + } + @Override public ServerBotAction getHandle() { return serverAction; diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/entity/bot/actions/CraftUseItemToAction.java b/leaves-server/src/main/java/org/leavesmc/leaves/entity/bot/actions/CraftUseItemToAction.java index bca8d267..dd7cd8b6 100644 --- a/leaves-server/src/main/java/org/leavesmc/leaves/entity/bot/actions/CraftUseItemToAction.java +++ b/leaves-server/src/main/java/org/leavesmc/leaves/entity/bot/actions/CraftUseItemToAction.java @@ -22,6 +22,17 @@ public class CraftUseItemToAction extends CraftBotAction implements UseItemToAct return serverAction.doTick(bot); } + @Override + public int getUseTick() { + return serverAction.getUseTick(); + } + + @Override + public CraftUseItemToAction setUseTick(int useTick) { + serverAction.setUseTick(useTick); + return this; + } + @Override public ServerBotAction getHandle() { return serverAction; diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/entity/bot/actions/CraftUseItemToOffhandAction.java b/leaves-server/src/main/java/org/leavesmc/leaves/entity/bot/actions/CraftUseItemToOffhandAction.java index 83453f6b..6715f0a5 100644 --- a/leaves-server/src/main/java/org/leavesmc/leaves/entity/bot/actions/CraftUseItemToOffhandAction.java +++ b/leaves-server/src/main/java/org/leavesmc/leaves/entity/bot/actions/CraftUseItemToOffhandAction.java @@ -22,6 +22,17 @@ public class CraftUseItemToOffhandAction extends CraftBotAction implements UseIt return serverAction.doTick(bot); } + @Override + public int getUseTick() { + return serverAction.getUseTick(); + } + + @Override + public CraftUseItemToOffhandAction setUseTick(int useTick) { + serverAction.setUseTick(useTick); + return this; + } + @Override public ServerBotAction getHandle() { return serverAction;