Spaces:
Build error
Build error
package net.minecraft.server.commands; | |
import com.google.common.collect.Lists; | |
import com.mojang.brigadier.CommandDispatcher; | |
import com.mojang.brigadier.arguments.StringArgumentType; | |
import com.mojang.brigadier.context.CommandContext; | |
import com.mojang.brigadier.exceptions.CommandSyntaxException; | |
import com.mojang.brigadier.exceptions.Dynamic2CommandExceptionType; | |
import com.mojang.brigadier.exceptions.DynamicCommandExceptionType; | |
import com.mojang.brigadier.suggestion.SuggestionProvider; | |
import com.mojang.brigadier.suggestion.SuggestionsBuilder; | |
import java.util.Collection; | |
import java.util.List; | |
import java.util.stream.Collectors; | |
import net.minecraft.commands.CommandSourceStack; | |
import net.minecraft.commands.Commands; | |
import net.minecraft.commands.SharedSuggestionProvider; | |
import net.minecraft.network.chat.Component; | |
import net.minecraft.network.chat.ComponentUtils; | |
import net.minecraft.server.packs.repository.Pack; | |
import net.minecraft.server.packs.repository.PackRepository; | |
import net.minecraft.server.packs.repository.PackSource; | |
import net.minecraft.world.flag.FeatureFlagSet; | |
import net.minecraft.world.flag.FeatureFlags; | |
public class DataPackCommand { | |
private static final DynamicCommandExceptionType ERROR_UNKNOWN_PACK = new DynamicCommandExceptionType( | |
p_308647_ -> Component.translatableEscape("commands.datapack.unknown", p_308647_) | |
); | |
private static final DynamicCommandExceptionType ERROR_PACK_ALREADY_ENABLED = new DynamicCommandExceptionType( | |
p_308646_ -> Component.translatableEscape("commands.datapack.enable.failed", p_308646_) | |
); | |
private static final DynamicCommandExceptionType ERROR_PACK_ALREADY_DISABLED = new DynamicCommandExceptionType( | |
p_308645_ -> Component.translatableEscape("commands.datapack.disable.failed", p_308645_) | |
); | |
private static final DynamicCommandExceptionType ERROR_CANNOT_DISABLE_FEATURE = new DynamicCommandExceptionType( | |
p_326235_ -> Component.translatableEscape("commands.datapack.disable.failed.feature", p_326235_) | |
); | |
private static final Dynamic2CommandExceptionType ERROR_PACK_FEATURES_NOT_ENABLED = new Dynamic2CommandExceptionType( | |
(p_308643_, p_308644_) -> Component.translatableEscape("commands.datapack.enable.failed.no_flags", p_308643_, p_308644_) | |
); | |
private static final SuggestionProvider<CommandSourceStack> SELECTED_PACKS = (p_136848_, p_136849_) -> SharedSuggestionProvider.suggest( | |
p_136848_.getSource().getServer().getPackRepository().getSelectedIds().stream().map(StringArgumentType::escapeIfRequired), p_136849_ | |
); | |
private static final SuggestionProvider<CommandSourceStack> UNSELECTED_PACKS = (p_248113_, p_248114_) -> { | |
PackRepository packrepository = p_248113_.getSource().getServer().getPackRepository(); | |
Collection<String> collection = packrepository.getSelectedIds(); | |
FeatureFlagSet featureflagset = p_248113_.getSource().enabledFeatures(); | |
return SharedSuggestionProvider.suggest( | |
packrepository.getAvailablePacks() | |
.stream() | |
.filter(p_248116_ -> p_248116_.getRequestedFeatures().isSubsetOf(featureflagset)) | |
.map(Pack::getId) | |
.filter(p_250072_ -> !collection.contains(p_250072_)) | |
.map(StringArgumentType::escapeIfRequired), | |
p_248114_ | |
); | |
}; | |
public static void register(CommandDispatcher<CommandSourceStack> p_136809_) { | |
p_136809_.register( | |
Commands.literal("datapack") | |
.requires(p_136872_ -> p_136872_.hasPermission(2)) | |
.then( | |
Commands.literal("enable") | |
.then( | |
Commands.argument("name", StringArgumentType.string()) | |
.suggests(UNSELECTED_PACKS) | |
.executes( | |
p_136876_ -> enablePack( | |
p_136876_.getSource(), | |
getPack(p_136876_, "name", true), | |
(p_180059_, p_180060_) -> p_180060_.getDefaultPosition().insert(p_180059_, p_180060_, Pack::selectionConfig, false) | |
) | |
) | |
.then( | |
Commands.literal("after") | |
.then( | |
Commands.argument("existing", StringArgumentType.string()) | |
.suggests(SELECTED_PACKS) | |
.executes( | |
p_136880_ -> enablePack( | |
p_136880_.getSource(), | |
getPack(p_136880_, "name", true), | |
(p_180056_, p_180057_) -> p_180056_.add( | |
p_180056_.indexOf(getPack(p_136880_, "existing", false)) + 1, p_180057_ | |
) | |
) | |
) | |
) | |
) | |
.then( | |
Commands.literal("before") | |
.then( | |
Commands.argument("existing", StringArgumentType.string()) | |
.suggests(SELECTED_PACKS) | |
.executes( | |
p_136878_ -> enablePack( | |
p_136878_.getSource(), | |
getPack(p_136878_, "name", true), | |
(p_180046_, p_180047_) -> p_180046_.add( | |
p_180046_.indexOf(getPack(p_136878_, "existing", false)), p_180047_ | |
) | |
) | |
) | |
) | |
) | |
.then( | |
Commands.literal("last") | |
.executes(p_136874_ -> enablePack(p_136874_.getSource(), getPack(p_136874_, "name", true), List::add)) | |
) | |
.then( | |
Commands.literal("first") | |
.executes( | |
p_136882_ -> enablePack( | |
p_136882_.getSource(), | |
getPack(p_136882_, "name", true), | |
(p_180052_, p_180053_) -> p_180052_.add(0, p_180053_) | |
) | |
) | |
) | |
) | |
) | |
.then( | |
Commands.literal("disable") | |
.then( | |
Commands.argument("name", StringArgumentType.string()) | |
.suggests(SELECTED_PACKS) | |
.executes(p_136870_ -> disablePack(p_136870_.getSource(), getPack(p_136870_, "name", false))) | |
) | |
) | |
.then( | |
Commands.literal("list") | |
.executes(p_136864_ -> listPacks(p_136864_.getSource())) | |
.then(Commands.literal("available").executes(p_136846_ -> listAvailablePacks(p_136846_.getSource()))) | |
.then(Commands.literal("enabled").executes(p_136811_ -> listEnabledPacks(p_136811_.getSource()))) | |
) | |
); | |
} | |
private static int enablePack(CommandSourceStack p_136829_, Pack p_136830_, DataPackCommand.Inserter p_136831_) throws CommandSyntaxException { | |
PackRepository packrepository = p_136829_.getServer().getPackRepository(); | |
List<Pack> list = Lists.newArrayList(packrepository.getSelectedPacks()); | |
p_136831_.apply(list, p_136830_); | |
p_136829_.sendSuccess(() -> Component.translatable("commands.datapack.modify.enable", p_136830_.getChatLink(true)), true); | |
ReloadCommand.reloadPacks(list.stream().map(Pack::getId).collect(Collectors.toList()), p_136829_); | |
return list.size(); | |
} | |
private static int disablePack(CommandSourceStack p_136826_, Pack p_136827_) { | |
PackRepository packrepository = p_136826_.getServer().getPackRepository(); | |
List<Pack> list = Lists.newArrayList(packrepository.getSelectedPacks()); | |
list.remove(p_136827_); | |
p_136826_.sendSuccess(() -> Component.translatable("commands.datapack.modify.disable", p_136827_.getChatLink(true)), true); | |
ReloadCommand.reloadPacks(list.stream().map(Pack::getId).collect(Collectors.toList()), p_136826_); | |
return list.size(); | |
} | |
private static int listPacks(CommandSourceStack p_136824_) { | |
return listEnabledPacks(p_136824_) + listAvailablePacks(p_136824_); | |
} | |
private static int listAvailablePacks(CommandSourceStack p_136855_) { | |
PackRepository packrepository = p_136855_.getServer().getPackRepository(); | |
packrepository.reload(); | |
Collection<Pack> collection = packrepository.getSelectedPacks(); | |
Collection<Pack> collection1 = packrepository.getAvailablePacks(); | |
FeatureFlagSet featureflagset = p_136855_.enabledFeatures(); | |
List<Pack> list = collection1.stream().filter(p_248121_ -> !collection.contains(p_248121_) && p_248121_.getRequestedFeatures().isSubsetOf(featureflagset)).toList(); | |
if (list.isEmpty()) { | |
p_136855_.sendSuccess(() -> Component.translatable("commands.datapack.list.available.none"), false); | |
} else { | |
p_136855_.sendSuccess( | |
() -> Component.translatable( | |
"commands.datapack.list.available.success", list.size(), ComponentUtils.formatList(list, p_136844_ -> p_136844_.getChatLink(false)) | |
), | |
false | |
); | |
} | |
return list.size(); | |
} | |
private static int listEnabledPacks(CommandSourceStack p_136866_) { | |
PackRepository packrepository = p_136866_.getServer().getPackRepository(); | |
packrepository.reload(); | |
Collection<? extends Pack> collection = packrepository.getSelectedPacks(); | |
if (collection.isEmpty()) { | |
p_136866_.sendSuccess(() -> Component.translatable("commands.datapack.list.enabled.none"), false); | |
} else { | |
p_136866_.sendSuccess( | |
() -> Component.translatable( | |
"commands.datapack.list.enabled.success", | |
collection.size(), | |
ComponentUtils.formatList(collection, p_136807_ -> p_136807_.getChatLink(true)) | |
), | |
false | |
); | |
} | |
return collection.size(); | |
} | |
private static Pack getPack(CommandContext<CommandSourceStack> p_136816_, String p_136817_, boolean p_136818_) throws CommandSyntaxException { | |
String s = StringArgumentType.getString(p_136816_, p_136817_); | |
PackRepository packrepository = p_136816_.getSource().getServer().getPackRepository(); | |
Pack pack = packrepository.getPack(s); | |
if (pack == null) { | |
throw ERROR_UNKNOWN_PACK.create(s); | |
} else { | |
boolean flag = packrepository.getSelectedPacks().contains(pack); | |
if (p_136818_ && flag) { | |
throw ERROR_PACK_ALREADY_ENABLED.create(s); | |
} else if (!p_136818_ && !flag) { | |
throw ERROR_PACK_ALREADY_DISABLED.create(s); | |
} else { | |
FeatureFlagSet featureflagset = p_136816_.getSource().enabledFeatures(); | |
FeatureFlagSet featureflagset1 = pack.getRequestedFeatures(); | |
if (!p_136818_ && !featureflagset1.isEmpty() && pack.getPackSource() == PackSource.FEATURE) { | |
throw ERROR_CANNOT_DISABLE_FEATURE.create(s); | |
} else if (!featureflagset1.isSubsetOf(featureflagset)) { | |
throw ERROR_PACK_FEATURES_NOT_ENABLED.create(s, FeatureFlags.printMissingFlags(featureflagset, featureflagset1)); | |
} else { | |
return pack; | |
} | |
} | |
} | |
} | |
interface Inserter { | |
void apply(List<Pack> p_136884_, Pack p_136885_) throws CommandSyntaxException; | |
} | |
} |