fabric: Remap to Mojang names

This commit is contained in:
Jason Penilla 2021-06-13 16:16:02 -07:00 committed by Jason
parent 7dd9517795
commit 28821b5ff1
51 changed files with 656 additions and 670 deletions

View file

@ -35,16 +35,16 @@ import com.mojang.brigadier.CommandDispatcher;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.command.v1.FabricClientCommandSource;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.SaveLevelScreen;
import net.minecraft.client.gui.screen.TitleScreen;
import net.minecraft.client.gui.screen.multiplayer.MultiplayerScreen;
import net.minecraft.client.realms.gui.screen.RealmsBridgeScreen;
import net.minecraft.command.CommandSource;
import net.minecraft.command.argument.ArgumentTypes;
import net.minecraft.text.ClickEvent;
import net.minecraft.text.LiteralText;
import net.minecraft.text.TranslatableText;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.GenericDirtMessageScreen;
import net.minecraft.client.gui.screens.TitleScreen;
import net.minecraft.client.gui.screens.multiplayer.JoinMultiplayerScreen;
import net.minecraft.commands.SharedSuggestionProvider;
import net.minecraft.commands.synchronization.ArgumentTypes;
import net.minecraft.network.chat.ClickEvent;
import net.minecraft.network.chat.TextComponent;
import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.realms.RealmsBridge;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.io.BufferedWriter;
@ -69,23 +69,23 @@ public final class FabricClientExample implements ClientModInitializer {
"cloud-dump-" + Instant.now().toString().replace(':', '-') + ".json"
);
ctx.getSender().sendFeedback(
new LiteralText("Dumping command output to ")
.append(new LiteralText(target.toString())
.styled(s -> s.withClickEvent(new ClickEvent(
new TextComponent("Dumping command output to ")
.append(new TextComponent(target.toString())
.withStyle(s -> s.withClickEvent(new ClickEvent(
ClickEvent.Action.OPEN_FILE,
target.toAbsolutePath().toString()
))))
);
try (BufferedWriter writer = Files.newBufferedWriter(target); JsonWriter json = new JsonWriter(writer)) {
final CommandDispatcher<CommandSource> dispatcher = MinecraftClient.getInstance()
.getNetworkHandler()
.getCommandDispatcher();
final JsonObject object = ArgumentTypes.toJson(dispatcher, dispatcher.getRoot());
final CommandDispatcher<SharedSuggestionProvider> dispatcher = Minecraft.getInstance()
.getConnection()
.getCommands();
final JsonObject object = ArgumentTypes.serializeNodeToJson(dispatcher, dispatcher.getRoot());
json.setIndent(" ");
Streams.write(object, json);
} catch (final IOException ex) {
ctx.getSender().sendError(new LiteralText(
ctx.getSender().sendError(new TextComponent(
"Unable to write file, see console for details: " + ex.getMessage()
));
}
@ -94,38 +94,38 @@ public final class FabricClientExample implements ClientModInitializer {
commandManager.command(base.literal("say")
.argument(StringArgument.greedy("message"))
.handler(ctx -> ctx.getSender().sendFeedback(
new LiteralText("Cloud client commands says: " + ctx.get("message"))
new TextComponent("Cloud client commands says: " + ctx.get("message"))
)));
commandManager.command(base.literal("quit")
.handler(ctx -> {
final MinecraftClient client = MinecraftClient.getInstance();
final Minecraft client = Minecraft.getInstance();
disconnectClient(client);
client.scheduleStop();
client.stop();
}));
commandManager.command(base.literal("disconnect")
.handler(ctx -> disconnectClient(MinecraftClient.getInstance())));
.handler(ctx -> disconnectClient(Minecraft.getInstance())));
commandManager.command(base.literal("requires_cheats")
.permission(FabricClientCommandManager.cheatsAllowed(false))
.handler(ctx -> ctx.getSender().sendFeedback(new LiteralText("Cheats are enabled!"))));
.handler(ctx -> ctx.getSender().sendFeedback(new TextComponent("Cheats are enabled!"))));
}
private static void disconnectClient(final @NonNull MinecraftClient client) {
boolean singlePlayer = client.isInSingleplayer();
client.world.disconnect();
private static void disconnectClient(final @NonNull Minecraft client) {
boolean singlePlayer = client.hasSingleplayerServer();
client.level.disconnect();
if (singlePlayer) {
client.disconnect(new SaveLevelScreen(new TranslatableText("menu.savingLevel")));
client.clearLevel(new GenericDirtMessageScreen(new TranslatableComponent("menu.savingLevel")));
} else {
client.disconnect();
client.clearLevel();
}
if (singlePlayer) {
client.openScreen(new TitleScreen());
client.setScreen(new TitleScreen());
} else if (client.isConnectedToRealms()) {
new RealmsBridgeScreen().switchToRealms(new TitleScreen());
new RealmsBridge().switchToRealms(new TitleScreen());
} else {
client.openScreen(new MultiplayerScreen(new TitleScreen()));
client.setScreen(new JoinMultiplayerScreen(new TitleScreen()));
}
}

View file

@ -30,8 +30,8 @@ import cloud.commandframework.arguments.standard.IntegerArgument;
import cloud.commandframework.arguments.standard.StringArgument;
import cloud.commandframework.execution.CommandExecutionCoordinator;
import cloud.commandframework.fabric.FabricServerCommandManager;
import cloud.commandframework.fabric.argument.ColorArgument;
import cloud.commandframework.fabric.argument.ItemDataArgument;
import cloud.commandframework.fabric.argument.ItemInputArgument;
import cloud.commandframework.fabric.argument.NamedColorArgument;
import cloud.commandframework.fabric.argument.server.ColumnPosArgument;
import cloud.commandframework.fabric.argument.server.MultipleEntitySelectorArgument;
import cloud.commandframework.fabric.argument.server.MultiplePlayerSelectorArgument;
@ -47,20 +47,20 @@ import net.fabricmc.loader.api.FabricLoader;
import net.fabricmc.loader.api.ModContainer;
import net.fabricmc.loader.api.metadata.ModMetadata;
import net.fabricmc.loader.api.metadata.Person;
import net.minecraft.command.argument.ItemStackArgument;
import net.minecraft.network.MessageType;
import net.minecraft.server.command.ServerCommandSource;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.text.ClickEvent;
import net.minecraft.text.HoverEvent;
import net.minecraft.text.LiteralText;
import net.minecraft.text.MutableText;
import net.minecraft.text.TextColor;
import net.minecraft.text.Texts;
import net.minecraft.util.Formatting;
import net.minecraft.util.Util;
import net.minecraft.util.math.ChunkPos;
import net.minecraft.util.math.Vec3d;
import net.minecraft.ChatFormatting;
import net.minecraft.Util;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.commands.arguments.item.ItemInput;
import net.minecraft.network.chat.ChatType;
import net.minecraft.network.chat.ClickEvent;
import net.minecraft.network.chat.ComponentUtils;
import net.minecraft.network.chat.HoverEvent;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.network.chat.TextColor;
import net.minecraft.network.chat.TextComponent;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.level.ChunkPos;
import net.minecraft.world.phys.Vec3;
import java.util.Collection;
import java.util.Comparator;
@ -72,13 +72,13 @@ public final class FabricExample implements ModInitializer {
@Override
public void onInitialize() {
// Create a commands manager. We'll use native command source types for this.
final FabricServerCommandManager<ServerCommandSource> manager =
final FabricServerCommandManager<CommandSourceStack> manager =
FabricServerCommandManager.createNative(CommandExecutionCoordinator.simpleCoordinator());
final Command.Builder<ServerCommandSource> base = manager.commandBuilder("cloudtest");
final Command.Builder<CommandSourceStack> base = manager.commandBuilder("cloudtest");
final CommandArgument<ServerCommandSource, String> name = StringArgument.of("name");
final CommandArgument<ServerCommandSource, Integer> hugs = IntegerArgument.<ServerCommandSource>newBuilder("hugs")
final CommandArgument<CommandSourceStack, String> name = StringArgument.of("name");
final CommandArgument<CommandSourceStack, Integer> hugs = IntegerArgument.<CommandSourceStack>newBuilder("hugs")
.asOptionalWithDefault("1")
.build();
@ -87,38 +87,38 @@ public final class FabricExample implements ModInitializer {
.argument(name)
.argument(hugs)
.handler(ctx -> {
ctx.getSender().sendFeedback(new LiteralText("Hello, ")
ctx.getSender().sendSuccess(new TextComponent("Hello, ")
.append(ctx.get(name))
.append(", hope you're doing well!")
.styled(style -> style.withColor(TextColor.fromRgb(0xAA22BB))), false);
.withStyle(style -> style.withColor(TextColor.fromRgb(0xAA22BB))), false);
ctx.getSender().sendFeedback(new LiteralText("Cloud would like to give you ")
.append(new LiteralText(String.valueOf(ctx.get(hugs)))
.styled(style -> style.withColor(TextColor.fromRgb(0xFAB3DA))))
ctx.getSender().sendSuccess(new TextComponent("Cloud would like to give you ")
.append(new TextComponent(String.valueOf(ctx.get(hugs)))
.withStyle(style -> style.withColor(TextColor.fromRgb(0xFAB3DA))))
.append(" hug(s) <3")
.styled(style -> style.withBold(true)), false);
.withStyle(style -> style.withBold(true)), false);
}));
final CommandArgument<ServerCommandSource, MultiplePlayerSelector> playerSelector =
final CommandArgument<CommandSourceStack, MultiplePlayerSelector> playerSelector =
MultiplePlayerSelectorArgument.of("players");
final CommandArgument<ServerCommandSource, Formatting> textColor = ColorArgument.of("color");
final CommandArgument<CommandSourceStack, ChatFormatting> textColor = NamedColorArgument.of("color");
manager.command(base.literal("wave")
.argument(playerSelector)
.argument(textColor)
.handler(ctx -> {
final MultiplePlayerSelector selector = ctx.get(playerSelector);
final Collection<ServerPlayerEntity> selected = selector.get();
final Collection<ServerPlayer> selected = selector.get();
selected.forEach(selectedPlayer ->
selectedPlayer.sendMessage(
new LiteralText("Wave from ")
.styled(style -> style.withColor(ctx.get(textColor)))
new TextComponent("Wave from ")
.withStyle(style -> style.withColor(ctx.get(textColor)))
.append(ctx.getSender().getDisplayName()),
MessageType.SYSTEM,
ChatType.SYSTEM,
Util.NIL_UUID
));
ctx.getSender().sendFeedback(
new LiteralText(String.format("Waved at %d players (%s)", selected.size(),
ctx.getSender().sendSuccess(
new TextComponent(String.format("Waved at %d players (%s)", selected.size(),
selector.inputString()
)),
false
@ -128,15 +128,15 @@ public final class FabricExample implements ModInitializer {
manager.command(base.literal("give")
.permission("cloud.give")
.argument(MultiplePlayerSelectorArgument.of("targets"))
.argument(ItemDataArgument.of("item"))
.argument(IntegerArgument.<ServerCommandSource>newBuilder("amount")
.argument(ItemInputArgument.of("item"))
.argument(IntegerArgument.<CommandSourceStack>newBuilder("amount")
.withMin(1)
.asOptionalWithDefault("1"))
.handler(ctx -> {
final ItemStackArgument item = ctx.get("item");
final ItemInput item = ctx.get("item");
final MultiplePlayerSelector targets = ctx.get("targets");
final int amount = ctx.get("amount");
GiveCommandAccess.give(
GiveCommandAccess.giveItem(
ctx.getSender(),
item,
targets.get(),
@ -144,43 +144,45 @@ public final class FabricExample implements ModInitializer {
);
}));
final Command.Builder<ServerCommandSource> mods = base.literal("mods").permission("cloud.mods");
final Command.Builder<CommandSourceStack> mods = base.literal("mods").permission("cloud.mods");
manager.command(mods.handler(ctx -> {
final List<ModMetadata> modList = FabricLoader.getInstance().getAllMods().stream()
.map(ModContainer::getMetadata)
.sorted(Comparator.comparing(ModMetadata::getId))
.collect(Collectors.toList());
final LiteralText text = new LiteralText("");
text.append(new LiteralText("Loaded Mods")
.styled(style -> style.withColor(Formatting.BLUE).withFormatting(Formatting.BOLD)));
text.append(new LiteralText(String.format(" (%s)\n", modList.size()))
.styled(style -> style.withColor(Formatting.GRAY).withFormatting(Formatting.ITALIC)));
final TextComponent text = new TextComponent("");
text.append(new TextComponent("Loaded Mods")
.withStyle(style -> style.withColor(ChatFormatting.BLUE).applyFormat(ChatFormatting.BOLD)));
text.append(new TextComponent(String.format(" (%s)\n", modList.size()))
.withStyle(style -> style.withColor(ChatFormatting.GRAY).applyFormat(ChatFormatting.ITALIC)));
for (final ModMetadata mod : modList) {
text.append(
new LiteralText("")
.styled(style -> style.withColor(Formatting.WHITE)
new TextComponent("")
.withStyle(style -> style.withColor(ChatFormatting.WHITE)
.withClickEvent(new ClickEvent(
ClickEvent.Action.SUGGEST_COMMAND,
String.format("/cloudtest mods %s", mod.getId())
))
.withHoverEvent(new HoverEvent(
HoverEvent.Action.SHOW_TEXT,
new LiteralText("Click for more info")
new TextComponent("Click for more info")
)))
.append(new LiteralText(mod.getName()).styled(style -> style.withColor(Formatting.GREEN)))
.append(new LiteralText(String.format(" (%s) ", mod.getId()))
.styled(style -> style.withColor(Formatting.GRAY).withFormatting(Formatting.ITALIC)))
.append(new LiteralText(String.format("v%s", mod.getVersion())))
.append(new TextComponent(mod.getName()).withStyle(style -> style.withColor(ChatFormatting.GREEN)))
.append(new TextComponent(String.format(" (%s) ", mod.getId()))
.withStyle(style -> style
.withColor(ChatFormatting.GRAY)
.applyFormat(ChatFormatting.ITALIC)))
.append(new TextComponent(String.format("v%s", mod.getVersion())))
);
if (modList.indexOf(mod) != modList.size() - 1) {
text.append(new LiteralText(", ").styled(style -> style.withColor(Formatting.GRAY)));
text.append(new TextComponent(", ").withStyle(style -> style.withColor(ChatFormatting.GRAY)));
}
}
ctx.getSender().sendFeedback(text, false);
ctx.getSender().sendSuccess(text, false);
}));
final CommandArgument<ServerCommandSource, ModMetadata> modMetadata = manager.argumentBuilder(ModMetadata.class, "mod")
final CommandArgument<CommandSourceStack, ModMetadata> modMetadata = manager.argumentBuilder(ModMetadata.class, "mod")
.withSuggestionsProvider((ctx, input) -> FabricLoader.getInstance().getAllMods().stream()
.map(ModContainer::getMetadata)
.map(ModMetadata::getId)
@ -203,25 +205,25 @@ public final class FabricExample implements ModInitializer {
manager.command(mods.argument(modMetadata)
.handler(ctx -> {
final ModMetadata meta = ctx.get(modMetadata);
final MutableText text = new LiteralText("")
.append(new LiteralText(meta.getName())
.styled(style -> style.withColor(Formatting.BLUE).withFormatting(Formatting.BOLD)))
.append(new LiteralText("\n modid: " + meta.getId()))
.append(new LiteralText("\n version: " + meta.getVersion()))
.append(new LiteralText("\n type: " + meta.getType()));
final MutableComponent text = new TextComponent("")
.append(new TextComponent(meta.getName())
.withStyle(style -> style.withColor(ChatFormatting.BLUE).applyFormat(ChatFormatting.BOLD)))
.append(new TextComponent("\n modid: " + meta.getId()))
.append(new TextComponent("\n version: " + meta.getVersion()))
.append(new TextComponent("\n type: " + meta.getType()));
if (!meta.getDescription().isEmpty()) {
text.append(new LiteralText("\n description: " + meta.getDescription()));
text.append(new TextComponent("\n description: " + meta.getDescription()));
}
if (!meta.getAuthors().isEmpty()) {
text.append(new LiteralText("\n authors: " + meta.getAuthors().stream()
text.append(new TextComponent("\n authors: " + meta.getAuthors().stream()
.map(Person::getName)
.collect(Collectors.joining(", "))));
}
if (!meta.getLicense().isEmpty()) {
text.append(new LiteralText("\n license: " + String.join(", ", meta.getLicense())));
text.append(new TextComponent("\n license: " + String.join(", ", meta.getLicense())));
}
ctx.getSender().sendFeedback(
ctx.getSender().sendSuccess(
text,
false
);
@ -233,25 +235,25 @@ public final class FabricExample implements ModInitializer {
.argument(Vec3dArgument.of("location"))
.handler(ctx -> {
final MultipleEntitySelector selector = ctx.get("targets");
final Vec3d location = ctx.<Coordinates>get("location").position();
final Vec3 location = ctx.<Coordinates>get("location").position();
selector.get().forEach(target ->
target.requestTeleport(location.getX(), location.getY(), location.getZ()));
target.teleportToWithTicket(location.x(), location.y(), location.z()));
}));
manager.command(base.literal("gotochunk")
.permission("cloud.gotochunk")
.argument(ColumnPosArgument.of("chunk_position"))
.handler(ctx -> {
final ServerPlayerEntity player;
final ServerPlayer player;
try {
player = ctx.getSender().getPlayer();
player = ctx.getSender().getPlayerOrException();
} catch (final CommandSyntaxException e) {
ctx.getSender().sendFeedback(Texts.toText(e.getRawMessage()), false);
ctx.getSender().sendSuccess(ComponentUtils.fromMessage(e.getRawMessage()), false);
return;
}
final Vec3d vec = ctx.<ColumnCoordinates>get("chunk_position").position();
final ChunkPos pos = new ChunkPos((int) vec.getX(), (int) vec.getZ());
player.requestTeleport(pos.getStartX(), 128, pos.getStartZ());
final Vec3 vec = ctx.<ColumnCoordinates>get("chunk_position").position();
final ChunkPos pos = new ChunkPos((int) vec.x(), (int) vec.z());
player.teleportToWithTicket(pos.getMinBlockX(), 128, pos.getMinBlockZ());
}));
}

View file

@ -24,10 +24,10 @@
package cloud.commandframework.fabric.testmod.mixin;
import com.mojang.brigadier.Command;
import net.minecraft.command.argument.ItemStackArgument;
import net.minecraft.server.command.GiveCommand;
import net.minecraft.server.command.ServerCommandSource;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.commands.arguments.item.ItemInput;
import net.minecraft.server.commands.GiveCommand;
import net.minecraft.server.level.ServerPlayer;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Invoker;
@ -36,11 +36,11 @@ import java.util.Collection;
@Mixin(GiveCommand.class)
public interface GiveCommandAccess {
@Invoker("execute")
static int give(
final ServerCommandSource source,
final ItemStackArgument item,
final Collection<ServerPlayerEntity> targets,
@Invoker("giveItem")
static int giveItem(
final CommandSourceStack source,
final ItemInput item,
final Collection<ServerPlayer> targets,
final int count
) {
return Command.SINGLE_SUCCESS;