From ccc6267662ca0fe898753e418d8c93f968262edd Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sat, 5 Sep 2020 21:55:56 +0200 Subject: [PATCH] Added autocrafting cancel commands. --- CHANGELOG.md | 2 + .../refinedstorage/api/IRSAPI.java | 6 ++- .../refinedstorage/apiimpl/API.java | 10 +++-- .../apiimpl/autocrafting/CraftingManager.java | 4 +- .../command/disk/ListDiskCommand.java | 6 ++- .../command/network/GetNetworkCommand.java | 3 ++ .../command/network/ListNetworkCommand.java | 1 + .../CancelAllAutocraftingCommand.java | 39 +++++++++++++++++++ .../CancelSingleAutocraftingCommand.java | 36 +++++++++++++++++ .../command/pattern/PatternDumpCommand.java | 1 - .../assets/refinedstorage/lang/en_us.json | 2 + 11 files changed, 99 insertions(+), 11 deletions(-) create mode 100644 src/main/java/com/refinedmods/refinedstorage/command/network/autocrafting/CancelAllAutocraftingCommand.java create mode 100644 src/main/java/com/refinedmods/refinedstorage/command/network/autocrafting/CancelSingleAutocraftingCommand.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 6340f73ce..1b25d67d3 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ - Added the `/refinedstorage network get ` command (raoulvdberge) - Added the `/refinedstorage network get autocrafting list` command (raoulvdberge) - Added the `/refinedstorage network get autocrafting get ` command (raoulvdberge) +- Added the `/refinedstorage network get autocrafting cancel` command (raoulvdberge) +- Added the `/refinedstorage network get autocrafting cancel ` command (raoulvdberge) - Added JEI ghost ingredient dragging support (raoulvdberge) - Fixed text field not being focused in amount specifying screens (raoulvdberge) diff --git a/src/main/java/com/refinedmods/refinedstorage/api/IRSAPI.java b/src/main/java/com/refinedmods/refinedstorage/api/IRSAPI.java index 8f094f6b9..bed6107e5 100644 --- a/src/main/java/com/refinedmods/refinedstorage/api/IRSAPI.java +++ b/src/main/java/com/refinedmods/refinedstorage/api/IRSAPI.java @@ -175,17 +175,19 @@ public interface IRSAPI { * Creates crafting request info for an item. * * @param stack the stack + * @param count the count * @return the request info */ - ICraftingRequestInfo createCraftingRequestInfo(ItemStack stack); + ICraftingRequestInfo createCraftingRequestInfo(ItemStack stack, int count); /** * Creates crafting request info for a fluid. * * @param stack the stack + * @param count the count * @return the request info */ - ICraftingRequestInfo createCraftingRequestInfo(FluidStack stack); + ICraftingRequestInfo createCraftingRequestInfo(FluidStack stack, int count); /** * Creates crafting request info from NBT. diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/API.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/API.java index 59c809410..4306a2ad9 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/API.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/API.java @@ -39,6 +39,7 @@ import com.refinedmods.refinedstorage.apiimpl.util.Comparer; import com.refinedmods.refinedstorage.apiimpl.util.FluidStackList; import com.refinedmods.refinedstorage.apiimpl.util.ItemStackList; import com.refinedmods.refinedstorage.apiimpl.util.QuantityFormatter; +import com.refinedmods.refinedstorage.util.StackUtils; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; @@ -48,6 +49,7 @@ import net.minecraft.world.server.ServerWorld; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fml.ModList; import net.minecraftforge.forgespi.language.ModFileScanData; +import net.minecraftforge.items.ItemHandlerHelper; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.objectweb.asm.Type; @@ -236,13 +238,13 @@ public class API implements IRSAPI { } @Override - public ICraftingRequestInfo createCraftingRequestInfo(ItemStack stack) { - return new CraftingRequestInfo(stack); + public ICraftingRequestInfo createCraftingRequestInfo(ItemStack stack, int count) { + return new CraftingRequestInfo(ItemHandlerHelper.copyStackWithSize(stack, count)); } @Override - public ICraftingRequestInfo createCraftingRequestInfo(FluidStack stack) { - return new CraftingRequestInfo(stack); + public ICraftingRequestInfo createCraftingRequestInfo(FluidStack stack, int count) { + return new CraftingRequestInfo(StackUtils.copy(stack, count)); } @Override diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/CraftingManager.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/CraftingManager.java index e7aaecd0f..925dec31b 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/CraftingManager.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/CraftingManager.java @@ -101,7 +101,7 @@ public class CraftingManager implements ICraftingManager { return new CalculationResult(CalculationResultType.NO_PATTERN); } - return factory.create(network, API.instance().createCraftingRequestInfo(stack), quantity, pattern); + return factory.create(network, API.instance().createCraftingRequestInfo(stack, quantity), quantity, pattern); } @Override @@ -116,7 +116,7 @@ public class CraftingManager implements ICraftingManager { return new CalculationResult(CalculationResultType.NO_PATTERN); } - return factory.create(network, API.instance().createCraftingRequestInfo(stack), quantity, pattern); + return factory.create(network, API.instance().createCraftingRequestInfo(stack, quantity), quantity, pattern); } @Override diff --git a/src/main/java/com/refinedmods/refinedstorage/command/disk/ListDiskCommand.java b/src/main/java/com/refinedmods/refinedstorage/command/disk/ListDiskCommand.java index 901b8d361..7e47166f8 100644 --- a/src/main/java/com/refinedmods/refinedstorage/command/disk/ListDiskCommand.java +++ b/src/main/java/com/refinedmods/refinedstorage/command/disk/ListDiskCommand.java @@ -3,7 +3,6 @@ package com.refinedmods.refinedstorage.command.disk; import com.mojang.brigadier.Command; import com.mojang.brigadier.builder.ArgumentBuilder; import com.mojang.brigadier.context.CommandContext; -import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.refinedmods.refinedstorage.apiimpl.API; import net.minecraft.command.CommandSource; import net.minecraft.command.Commands; @@ -11,7 +10,10 @@ import net.minecraft.util.text.StringTextComponent; public class ListDiskCommand implements Command { public static ArgumentBuilder register() { - return Commands.literal("list").executes(new ListDiskCommand()).then(ListDiskForPlayerCommand.register()); + return Commands.literal("list") + .requires(cs -> cs.hasPermissionLevel(2)) + .executes(new ListDiskCommand()) + .then(ListDiskForPlayerCommand.register()); } @Override diff --git a/src/main/java/com/refinedmods/refinedstorage/command/network/GetNetworkCommand.java b/src/main/java/com/refinedmods/refinedstorage/command/network/GetNetworkCommand.java index e10ce34a7..d06db4261 100644 --- a/src/main/java/com/refinedmods/refinedstorage/command/network/GetNetworkCommand.java +++ b/src/main/java/com/refinedmods/refinedstorage/command/network/GetNetworkCommand.java @@ -3,6 +3,7 @@ package com.refinedmods.refinedstorage.command.network; import com.mojang.brigadier.builder.ArgumentBuilder; import com.mojang.brigadier.context.CommandContext; import com.refinedmods.refinedstorage.api.network.INetwork; +import com.refinedmods.refinedstorage.command.network.autocrafting.CancelAllAutocraftingCommand; import com.refinedmods.refinedstorage.command.network.autocrafting.GetAutocraftingCommand; import com.refinedmods.refinedstorage.command.network.autocrafting.ListAutocraftingCommand; import net.minecraft.command.CommandSource; @@ -13,12 +14,14 @@ import net.minecraft.command.arguments.DimensionArgument; public class GetNetworkCommand extends NetworkCommand { public static ArgumentBuilder register() { return Commands.literal("get") + .requires(cs -> cs.hasPermissionLevel(2)) .then(Commands.argument("dimension", DimensionArgument.getDimension()) .then(Commands.argument("pos", BlockPosArgument.blockPos()).suggests(new NetworkPositionSuggestionProvider()) .executes(new GetNetworkCommand()) .then(Commands.literal("autocrafting") .then(ListAutocraftingCommand.register()) .then(GetAutocraftingCommand.register()) + .then(CancelAllAutocraftingCommand.register()) ))); } diff --git a/src/main/java/com/refinedmods/refinedstorage/command/network/ListNetworkCommand.java b/src/main/java/com/refinedmods/refinedstorage/command/network/ListNetworkCommand.java index 7cb32363f..6ca6422df 100644 --- a/src/main/java/com/refinedmods/refinedstorage/command/network/ListNetworkCommand.java +++ b/src/main/java/com/refinedmods/refinedstorage/command/network/ListNetworkCommand.java @@ -21,6 +21,7 @@ public class ListNetworkCommand implements Command { public static ArgumentBuilder register() { return Commands.literal("list") + .requires(cs -> cs.hasPermissionLevel(2)) .then(Commands.argument("dimension", DimensionArgument.getDimension()) .executes(new ListNetworkCommand())); } diff --git a/src/main/java/com/refinedmods/refinedstorage/command/network/autocrafting/CancelAllAutocraftingCommand.java b/src/main/java/com/refinedmods/refinedstorage/command/network/autocrafting/CancelAllAutocraftingCommand.java new file mode 100644 index 000000000..1015c22f7 --- /dev/null +++ b/src/main/java/com/refinedmods/refinedstorage/command/network/autocrafting/CancelAllAutocraftingCommand.java @@ -0,0 +1,39 @@ +package com.refinedmods.refinedstorage.command.network.autocrafting; + +import com.mojang.brigadier.builder.ArgumentBuilder; +import com.mojang.brigadier.context.CommandContext; +import com.refinedmods.refinedstorage.api.network.INetwork; +import com.refinedmods.refinedstorage.command.network.NetworkCommand; +import com.refinedmods.refinedstorage.render.Styles; +import net.minecraft.command.CommandSource; +import net.minecraft.command.Commands; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TranslationTextComponent; + +public class CancelAllAutocraftingCommand extends NetworkCommand { + public static ArgumentBuilder register() { + return Commands.literal("cancel") + .executes(new CancelAllAutocraftingCommand()) + .then(CancelSingleAutocraftingCommand.register()); + } + + @Override + protected int run(CommandContext context, INetwork network) { + int count = network.getCraftingManager().getTasks().size(); + + network.getCraftingManager().getTasks().forEach(task -> network.getCraftingManager().cancel(task.getId())); + + sendCancelMessage(context, count); + + return 0; + } + + public static void sendCancelMessage(CommandContext context, int count) { + String translationKey = "commands.refinedstorage.network.autocrafting.cancel.multiple"; + if (count == 1) { + translationKey = "commands.refinedstorage.network.autocrafting.cancel.single"; + } + + context.getSource().sendFeedback(new TranslationTextComponent(translationKey, new StringTextComponent("" + count).setStyle(Styles.YELLOW)), false); + } +} diff --git a/src/main/java/com/refinedmods/refinedstorage/command/network/autocrafting/CancelSingleAutocraftingCommand.java b/src/main/java/com/refinedmods/refinedstorage/command/network/autocrafting/CancelSingleAutocraftingCommand.java new file mode 100644 index 000000000..9bfcec6a0 --- /dev/null +++ b/src/main/java/com/refinedmods/refinedstorage/command/network/autocrafting/CancelSingleAutocraftingCommand.java @@ -0,0 +1,36 @@ +package com.refinedmods.refinedstorage.command.network.autocrafting; + +import com.mojang.brigadier.builder.ArgumentBuilder; +import com.mojang.brigadier.context.CommandContext; +import com.refinedmods.refinedstorage.api.autocrafting.task.ICraftingTask; +import com.refinedmods.refinedstorage.api.network.INetwork; +import com.refinedmods.refinedstorage.command.network.NetworkCommand; +import net.minecraft.command.CommandSource; +import net.minecraft.command.Commands; +import net.minecraft.command.arguments.UUIDArgument; + +import java.util.UUID; + +public class CancelSingleAutocraftingCommand extends NetworkCommand { + public static ArgumentBuilder register() { + return Commands.argument("id", UUIDArgument.func_239194_a_()).suggests(new AutocraftingIdSuggestionProvider()) + .executes(new CancelSingleAutocraftingCommand()); + } + + @Override + protected int run(CommandContext context, INetwork network) { + UUID id = UUIDArgument.func_239195_a_(context, "id"); + + int count = 0; + + ICraftingTask task = network.getCraftingManager().getTask(id); + if (task != null) { + count = 1; + network.getCraftingManager().cancel(task.getId()); + } + + CancelAllAutocraftingCommand.sendCancelMessage(context, count); + + return 0; + } +} diff --git a/src/main/java/com/refinedmods/refinedstorage/command/pattern/PatternDumpCommand.java b/src/main/java/com/refinedmods/refinedstorage/command/pattern/PatternDumpCommand.java index 4c6efab76..cd3f7b686 100644 --- a/src/main/java/com/refinedmods/refinedstorage/command/pattern/PatternDumpCommand.java +++ b/src/main/java/com/refinedmods/refinedstorage/command/pattern/PatternDumpCommand.java @@ -18,7 +18,6 @@ import net.minecraftforge.fluids.FluidStack; public class PatternDumpCommand implements Command { public static ArgumentBuilder register() { return Commands.literal("dump") - .requires(cs -> cs.hasPermissionLevel(0)) .executes(new PatternDumpCommand()); } diff --git a/src/main/resources/assets/refinedstorage/lang/en_us.json b/src/main/resources/assets/refinedstorage/lang/en_us.json index cc75230ee..bbe0baf31 100644 --- a/src/main/resources/assets/refinedstorage/lang/en_us.json +++ b/src/main/resources/assets/refinedstorage/lang/en_us.json @@ -315,6 +315,8 @@ "commands.refinedstorage.network.list.energy_usage": "Energy usage: %s", "commands.refinedstorage.network.get.error.not_found": "Network not found.", "commands.refinedstorage.network.autocrafting.get.error.not_found": "Task not found.", + "commands.refinedstorage.network.autocrafting.cancel.single": "Cancelled %d task.", + "commands.refinedstorage.network.autocrafting.cancel.multiple": "Cancelled %d tasks.", "advancements.refinedstorage.controlling.description": "Craft a Controller", "advancements.refinedstorage.connecting": "Connecting", "advancements.refinedstorage.connecting.description": "You can place all the devices next to each other to connect them up, or, use Cable",