aboutsummaryrefslogtreecommitdiffhomepage
path: root/patch-remap/mache-vineflower/net/minecraft/server/commands/ScheduleCommand.java.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patch-remap/mache-vineflower/net/minecraft/server/commands/ScheduleCommand.java.patch')
-rw-r--r--patch-remap/mache-vineflower/net/minecraft/server/commands/ScheduleCommand.java.patch196
1 files changed, 196 insertions, 0 deletions
diff --git a/patch-remap/mache-vineflower/net/minecraft/server/commands/ScheduleCommand.java.patch b/patch-remap/mache-vineflower/net/minecraft/server/commands/ScheduleCommand.java.patch
new file mode 100644
index 0000000000..e63f3cfbfa
--- /dev/null
+++ b/patch-remap/mache-vineflower/net/minecraft/server/commands/ScheduleCommand.java.patch
@@ -0,0 +1,196 @@
+--- a/net/minecraft/server/commands/ScheduleCommand.java
++++ b/net/minecraft/server/commands/ScheduleCommand.java
+@@ -3,21 +3,19 @@
+ import com.mojang.brigadier.CommandDispatcher;
+ import com.mojang.brigadier.arguments.IntegerArgumentType;
+ import com.mojang.brigadier.arguments.StringArgumentType;
+-import com.mojang.brigadier.context.CommandContext;
++import com.mojang.brigadier.builder.LiteralArgumentBuilder;
++import com.mojang.brigadier.builder.RequiredArgumentBuilder;
+ import com.mojang.brigadier.exceptions.CommandSyntaxException;
+ import com.mojang.brigadier.exceptions.DynamicCommandExceptionType;
+ import com.mojang.brigadier.exceptions.SimpleCommandExceptionType;
+ import com.mojang.brigadier.suggestion.SuggestionProvider;
+-import com.mojang.brigadier.suggestion.SuggestionsBuilder;
+ import com.mojang.datafixers.util.Either;
+ import com.mojang.datafixers.util.Pair;
+ import java.util.Collection;
+ import net.minecraft.commands.CommandSourceStack;
+-import net.minecraft.commands.Commands;
+ import net.minecraft.commands.SharedSuggestionProvider;
+ import net.minecraft.commands.arguments.TimeArgument;
+ import net.minecraft.commands.arguments.item.FunctionArgument;
+-import net.minecraft.commands.functions.CommandFunction;
+ import net.minecraft.network.chat.Component;
+ import net.minecraft.resources.ResourceLocation;
+ import net.minecraft.server.MinecraftServer;
+@@ -26,114 +24,75 @@
+ import net.minecraft.world.level.timers.TimerQueue;
+
+ public class ScheduleCommand {
++
+ private static final SimpleCommandExceptionType ERROR_SAME_TICK = new SimpleCommandExceptionType(Component.translatable("commands.schedule.same_tick"));
+- private static final DynamicCommandExceptionType ERROR_CANT_REMOVE = new DynamicCommandExceptionType(
+- functionName -> Component.translatableEscape("commands.schedule.cleared.failure", functionName)
+- );
+- private static final SuggestionProvider<CommandSourceStack> SUGGEST_SCHEDULE = (context, builder) -> SharedSuggestionProvider.suggest(
+- context.getSource().getServer().getWorldData().overworldData().getScheduledEvents().getEventsIds(), builder
+- );
++ private static final DynamicCommandExceptionType ERROR_CANT_REMOVE = new DynamicCommandExceptionType((object) -> {
++ return Component.translatableEscape("commands.schedule.cleared.failure", object);
++ });
++ private static final SuggestionProvider<CommandSourceStack> SUGGEST_SCHEDULE = (commandcontext, suggestionsbuilder) -> {
++ return SharedSuggestionProvider.suggest((Iterable) ((CommandSourceStack) commandcontext.getSource()).getServer().getWorldData().overworldData().getScheduledEvents().getEventsIds(), suggestionsbuilder);
++ };
+
++ public ScheduleCommand() {}
++
+ public static void register(CommandDispatcher<CommandSourceStack> dispatcher) {
+- dispatcher.register(
+- Commands.literal("schedule")
+- .requires(source -> source.hasPermission(2))
+- .then(
+- Commands.literal("function")
+- .then(
+- Commands.argument("function", FunctionArgument.functions())
+- .suggests(FunctionCommand.SUGGEST_FUNCTION)
+- .then(
+- Commands.argument("time", TimeArgument.time())
+- .executes(
+- context -> schedule(
+- context.getSource(),
+- FunctionArgument.getFunctionOrTag(context, "function"),
+- IntegerArgumentType.getInteger(context, "time"),
+- true
+- )
+- )
+- .then(
+- Commands.literal("append")
+- .executes(
+- context -> schedule(
+- context.getSource(),
+- FunctionArgument.getFunctionOrTag(context, "function"),
+- IntegerArgumentType.getInteger(context, "time"),
+- false
+- )
+- )
+- )
+- .then(
+- Commands.literal("replace")
+- .executes(
+- context -> schedule(
+- context.getSource(),
+- FunctionArgument.getFunctionOrTag(context, "function"),
+- IntegerArgumentType.getInteger(context, "time"),
+- true
+- )
+- )
+- )
+- )
+- )
+- )
+- .then(
+- Commands.literal("clear")
+- .then(
+- Commands.argument("function", StringArgumentType.greedyString())
+- .suggests(SUGGEST_SCHEDULE)
+- .executes(context -> remove(context.getSource(), StringArgumentType.getString(context, "function")))
+- )
+- )
+- );
++ dispatcher.register((LiteralArgumentBuilder) ((LiteralArgumentBuilder) ((LiteralArgumentBuilder) net.minecraft.commands.Commands.literal("schedule").requires((commandlistenerwrapper) -> {
++ return commandlistenerwrapper.hasPermission(2);
++ })).then(net.minecraft.commands.Commands.literal("function").then(net.minecraft.commands.Commands.argument("function", FunctionArgument.functions()).suggests(FunctionCommand.SUGGEST_FUNCTION).then(((RequiredArgumentBuilder) ((RequiredArgumentBuilder) net.minecraft.commands.Commands.argument("time", TimeArgument.time()).executes((commandcontext) -> {
++ return schedule((CommandSourceStack) commandcontext.getSource(), FunctionArgument.getFunctionOrTag(commandcontext, "function"), IntegerArgumentType.getInteger(commandcontext, "time"), true);
++ })).then(net.minecraft.commands.Commands.literal("append").executes((commandcontext) -> {
++ return schedule((CommandSourceStack) commandcontext.getSource(), FunctionArgument.getFunctionOrTag(commandcontext, "function"), IntegerArgumentType.getInteger(commandcontext, "time"), false);
++ }))).then(net.minecraft.commands.Commands.literal("replace").executes((commandcontext) -> {
++ return schedule((CommandSourceStack) commandcontext.getSource(), FunctionArgument.getFunctionOrTag(commandcontext, "function"), IntegerArgumentType.getInteger(commandcontext, "time"), true);
++ })))))).then(net.minecraft.commands.Commands.literal("clear").then(net.minecraft.commands.Commands.argument("function", StringArgumentType.greedyString()).suggests(ScheduleCommand.SUGGEST_SCHEDULE).executes((commandcontext) -> {
++ return remove((CommandSourceStack) commandcontext.getSource(), StringArgumentType.getString(commandcontext, "function"));
++ }))));
+ }
+
+- private static int schedule(
+- CommandSourceStack source,
+- Pair<ResourceLocation, Either<CommandFunction<CommandSourceStack>, Collection<CommandFunction<CommandSourceStack>>>> function,
+- int time,
+- boolean append
+- ) throws CommandSyntaxException {
++ private static int schedule(CommandSourceStack source, Pair<ResourceLocation, Either<net.minecraft.commands.functions.CommandFunction<CommandSourceStack>, Collection<net.minecraft.commands.functions.CommandFunction<CommandSourceStack>>>> function, int time, boolean append) throws CommandSyntaxException {
+ if (time == 0) {
+- throw ERROR_SAME_TICK.create();
++ throw ScheduleCommand.ERROR_SAME_TICK.create();
+ } else {
+- long l = source.getLevel().getGameTime() + (long)time;
+- ResourceLocation resourceLocation = function.getFirst();
+- TimerQueue<MinecraftServer> scheduledEvents = source.getServer().getWorldData().overworldData().getScheduledEvents();
+- function.getSecond()
+- .ifLeft(
+- commandFunction -> {
+- String string = resourceLocation.toString();
+- if (append) {
+- scheduledEvents.remove(string);
+- }
+-
+- scheduledEvents.schedule(string, l, new FunctionCallback(resourceLocation));
+- source.sendSuccess(
+- () -> Component.translatable("commands.schedule.created.function", Component.translationArg(resourceLocation), time, l), true
+- );
+- }
+- )
+- .ifRight(functions -> {
+- String string = "#" + resourceLocation;
+- if (append) {
+- scheduledEvents.remove(string);
+- }
+-
+- scheduledEvents.schedule(string, l, new FunctionTagCallback(resourceLocation));
+- source.sendSuccess(() -> Component.translatable("commands.schedule.created.tag", Component.translationArg(resourceLocation), time, l), true);
+- });
+- return Math.floorMod(l, Integer.MAX_VALUE);
++ long j = source.getLevel().getGameTime() + (long) time;
++ ResourceLocation minecraftkey = (ResourceLocation) function.getFirst();
++ TimerQueue<MinecraftServer> customfunctioncallbacktimerqueue = source.getLevel().serverLevelData.overworldData().getScheduledEvents(); // CraftBukkit - SPIGOT-6667: Use world specific function timer
++
++ ((Either) function.getSecond()).ifLeft((net_minecraft_commands_functions_commandfunction) -> {
++ String s = minecraftkey.toString();
++
++ if (append) {
++ customfunctioncallbacktimerqueue.remove(s);
++ }
++
++ customfunctioncallbacktimerqueue.schedule(s, j, new FunctionCallback(minecraftkey));
++ source.sendSuccess(() -> {
++ return Component.translatable("commands.schedule.created.function", Component.translationArg(minecraftkey), time, j);
++ }, true);
++ }).ifRight((collection) -> {
++ String s = "#" + minecraftkey;
++
++ if (append) {
++ customfunctioncallbacktimerqueue.remove(s);
++ }
++
++ customfunctioncallbacktimerqueue.schedule(s, j, new FunctionTagCallback(minecraftkey));
++ source.sendSuccess(() -> {
++ return Component.translatable("commands.schedule.created.tag", Component.translationArg(minecraftkey), time, j);
++ }, true);
++ });
++ return Math.floorMod(j, Integer.MAX_VALUE);
+ }
+ }
+
+ private static int remove(CommandSourceStack source, String function) throws CommandSyntaxException {
+ int i = source.getServer().getWorldData().overworldData().getScheduledEvents().remove(function);
++
+ if (i == 0) {
+- throw ERROR_CANT_REMOVE.create(function);
++ throw ScheduleCommand.ERROR_CANT_REMOVE.create(function);
+ } else {
+- source.sendSuccess(() -> Component.translatable("commands.schedule.cleared.success", i, function), true);
++ source.sendSuccess(() -> {
++ return Component.translatable("commands.schedule.cleared.success", i, function);
++ }, true);
+ return i;
+ }
+ }