diff --git a/CHANGELOG.md b/CHANGELOG.md index 4551a418c..6340f73ce 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ - Added the `/refinedstorage disk list ` command (raoulvdberge) - Added the `/refinedstorage network list ` command (raoulvdberge) - 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 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/command/network/GetNetworkCommand.java b/src/main/java/com/refinedmods/refinedstorage/command/network/GetNetworkCommand.java index 34429c141..e10ce34a7 100644 --- a/src/main/java/com/refinedmods/refinedstorage/command/network/GetNetworkCommand.java +++ b/src/main/java/com/refinedmods/refinedstorage/command/network/GetNetworkCommand.java @@ -1,40 +1,30 @@ package com.refinedmods.refinedstorage.command.network; -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.api.network.INetwork; -import com.refinedmods.refinedstorage.apiimpl.API; +import com.refinedmods.refinedstorage.command.network.autocrafting.GetAutocraftingCommand; +import com.refinedmods.refinedstorage.command.network.autocrafting.ListAutocraftingCommand; import net.minecraft.command.CommandSource; import net.minecraft.command.Commands; import net.minecraft.command.arguments.BlockPosArgument; import net.minecraft.command.arguments.DimensionArgument; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.TranslationTextComponent; -import net.minecraft.world.server.ServerWorld; -public class GetNetworkCommand implements Command { +public class GetNetworkCommand extends NetworkCommand { public static ArgumentBuilder register() { return Commands.literal("get") .then(Commands.argument("dimension", DimensionArgument.getDimension()) - .then(Commands.argument("pos", BlockPosArgument.blockPos()) - .executes(new GetNetworkCommand()))); + .then(Commands.argument("pos", BlockPosArgument.blockPos()).suggests(new NetworkPositionSuggestionProvider()) + .executes(new GetNetworkCommand()) + .then(Commands.literal("autocrafting") + .then(ListAutocraftingCommand.register()) + .then(GetAutocraftingCommand.register()) + ))); } @Override - public int run(CommandContext context) throws CommandSyntaxException { - ServerWorld world = DimensionArgument.getDimensionArgument(context, "dimension"); - BlockPos pos = BlockPosArgument.getBlockPos(context, "pos"); - - INetwork network = API.instance().getNetworkManager(world).getNetwork(pos); - - if (network == null) { - context.getSource().sendErrorMessage(new TranslationTextComponent("commands.refinedstorage.network.get.error.not_found")); - } else { - ListNetworkCommand.sendInfo(context, new ListNetworkCommand.NetworkInList(network), true); - } - + protected int run(CommandContext context, INetwork network) { + ListNetworkCommand.sendInfo(context, new ListNetworkCommand.NetworkInList(network), true); return 0; } } diff --git a/src/main/java/com/refinedmods/refinedstorage/command/network/NetworkCommand.java b/src/main/java/com/refinedmods/refinedstorage/command/network/NetworkCommand.java new file mode 100644 index 000000000..373ea49ce --- /dev/null +++ b/src/main/java/com/refinedmods/refinedstorage/command/network/NetworkCommand.java @@ -0,0 +1,32 @@ +package com.refinedmods.refinedstorage.command.network; + +import com.mojang.brigadier.Command; +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import com.refinedmods.refinedstorage.api.network.INetwork; +import com.refinedmods.refinedstorage.apiimpl.API; +import net.minecraft.command.CommandSource; +import net.minecraft.command.arguments.BlockPosArgument; +import net.minecraft.command.arguments.DimensionArgument; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.server.ServerWorld; + +public abstract class NetworkCommand implements Command { + @Override + public int run(CommandContext context) throws CommandSyntaxException { + ServerWorld world = DimensionArgument.getDimensionArgument(context, "dimension"); + BlockPos pos = BlockPosArgument.getBlockPos(context, "pos"); + + INetwork network = API.instance().getNetworkManager(world).getNetwork(pos); + + if (network == null) { + context.getSource().sendErrorMessage(new TranslationTextComponent("commands.refinedstorage.network.get.error.not_found")); + return 0; + } else { + return run(context, network); + } + } + + protected abstract int run(CommandContext context, INetwork network) throws CommandSyntaxException; +} diff --git a/src/main/java/com/refinedmods/refinedstorage/command/network/NetworkPositionSuggestionProvider.java b/src/main/java/com/refinedmods/refinedstorage/command/network/NetworkPositionSuggestionProvider.java new file mode 100644 index 000000000..09eb0005c --- /dev/null +++ b/src/main/java/com/refinedmods/refinedstorage/command/network/NetworkPositionSuggestionProvider.java @@ -0,0 +1,24 @@ +package com.refinedmods.refinedstorage.command.network; + +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import com.mojang.brigadier.suggestion.SuggestionProvider; +import com.mojang.brigadier.suggestion.Suggestions; +import com.mojang.brigadier.suggestion.SuggestionsBuilder; +import com.refinedmods.refinedstorage.apiimpl.API; +import net.minecraft.command.CommandSource; +import net.minecraft.command.arguments.DimensionArgument; +import net.minecraft.world.server.ServerWorld; + +import java.util.concurrent.CompletableFuture; + +public class NetworkPositionSuggestionProvider implements SuggestionProvider { + @Override + public CompletableFuture getSuggestions(CommandContext context, SuggestionsBuilder builder) throws CommandSyntaxException { + ServerWorld world = DimensionArgument.getDimensionArgument(context, "dimension"); + + API.instance().getNetworkManager(world).all().forEach(network -> builder.suggest(network.getPosition().getX() + " " + network.getPosition().getY() + " " + network.getPosition().getZ())); + + return builder.buildFuture(); + } +} diff --git a/src/main/java/com/refinedmods/refinedstorage/command/network/autocrafting/AutocraftingIdSuggestionProvider.java b/src/main/java/com/refinedmods/refinedstorage/command/network/autocrafting/AutocraftingIdSuggestionProvider.java new file mode 100644 index 000000000..23fb22bef --- /dev/null +++ b/src/main/java/com/refinedmods/refinedstorage/command/network/autocrafting/AutocraftingIdSuggestionProvider.java @@ -0,0 +1,31 @@ +package com.refinedmods.refinedstorage.command.network.autocrafting; + +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import com.mojang.brigadier.suggestion.SuggestionProvider; +import com.mojang.brigadier.suggestion.Suggestions; +import com.mojang.brigadier.suggestion.SuggestionsBuilder; +import com.refinedmods.refinedstorage.api.network.INetwork; +import com.refinedmods.refinedstorage.apiimpl.API; +import net.minecraft.command.CommandSource; +import net.minecraft.command.arguments.BlockPosArgument; +import net.minecraft.command.arguments.DimensionArgument; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.server.ServerWorld; + +import java.util.concurrent.CompletableFuture; + +public class AutocraftingIdSuggestionProvider implements SuggestionProvider { + @Override + public CompletableFuture getSuggestions(CommandContext context, SuggestionsBuilder builder) throws CommandSyntaxException { + ServerWorld world = DimensionArgument.getDimensionArgument(context, "dimension"); + BlockPos pos = BlockPosArgument.getBlockPos(context, "pos"); + INetwork network = API.instance().getNetworkManager(world).getNetwork(pos); + + if (network != null) { + network.getCraftingManager().getTasks().forEach(task -> builder.suggest(task.getId().toString())); + } + + return builder.buildFuture(); + } +} diff --git a/src/main/java/com/refinedmods/refinedstorage/command/network/autocrafting/GetAutocraftingCommand.java b/src/main/java/com/refinedmods/refinedstorage/command/network/autocrafting/GetAutocraftingCommand.java new file mode 100644 index 000000000..29c171128 --- /dev/null +++ b/src/main/java/com/refinedmods/refinedstorage/command/network/autocrafting/GetAutocraftingCommand.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 net.minecraft.util.text.TranslationTextComponent; + +import java.util.UUID; + +public class GetAutocraftingCommand extends NetworkCommand { + public static ArgumentBuilder register() { + return Commands.literal("get").then( + Commands.argument("id", UUIDArgument.func_239194_a_()).suggests(new AutocraftingIdSuggestionProvider()) + .executes(new GetAutocraftingCommand()) + ); + } + + @Override + protected int run(CommandContext context, INetwork network) { + UUID id = UUIDArgument.func_239195_a_(context, "id"); + + ICraftingTask task = network.getCraftingManager().getTask(id); + if (task == null) { + context.getSource().sendErrorMessage(new TranslationTextComponent("commands.refinedstorage.network.autocrafting.get.error.not_found")); + } else { + ListAutocraftingCommand.addInfo(context, task); + } + + return 0; + } +} diff --git a/src/main/java/com/refinedmods/refinedstorage/command/network/autocrafting/ListAutocraftingCommand.java b/src/main/java/com/refinedmods/refinedstorage/command/network/autocrafting/ListAutocraftingCommand.java new file mode 100644 index 000000000..827b201d6 --- /dev/null +++ b/src/main/java/com/refinedmods/refinedstorage/command/network/autocrafting/ListAutocraftingCommand.java @@ -0,0 +1,61 @@ +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.ICraftingRequestInfo; +import com.refinedmods.refinedstorage.api.autocrafting.task.ICraftingTask; +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.ITextComponent; +import net.minecraft.util.text.StringTextComponent; + +public class ListAutocraftingCommand extends NetworkCommand { + public static ArgumentBuilder register() { + return Commands.literal("list").executes(new ListAutocraftingCommand()); + } + + @Override + protected int run(CommandContext context, INetwork network) { + network.getCraftingManager().getTasks().forEach(task -> addInfo(context, task)); + return 0; + } + + public static void addInfo(CommandContext context, ICraftingTask task) { + context.getSource().sendFeedback( + new StringTextComponent(getAmount(task.getRequested()) + "x ") + .append(getName(task.getRequested()).deepCopy().setStyle(Styles.YELLOW)) + .appendString(" ") + .appendString("(" + task.getCompletionPercentage() + "%)") + .appendString(" ") + .append(new StringTextComponent("[" + task.getId().toString() + "]").setStyle(Styles.GRAY)), + false + ); + } + + private static int getAmount(ICraftingRequestInfo info) { + if (info.getItem() != null) { + return info.getItem().getCount(); + } + + if (info.getFluid() != null) { + return info.getFluid().getAmount(); + } + + return 0; + } + + private static ITextComponent getName(ICraftingRequestInfo info) { + if (info.getItem() != null) { + return info.getItem().getDisplayName(); + } + + if (info.getFluid() != null) { + return info.getFluid().getDisplayName(); + } + + return StringTextComponent.EMPTY; + } +} diff --git a/src/main/resources/assets/refinedstorage/lang/en_us.json b/src/main/resources/assets/refinedstorage/lang/en_us.json index 8c64e51ef..cc75230ee 100644 --- a/src/main/resources/assets/refinedstorage/lang/en_us.json +++ b/src/main/resources/assets/refinedstorage/lang/en_us.json @@ -314,6 +314,7 @@ "commands.refinedstorage.network.list.nodes": "%s nodes", "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.", "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",