1
0
mirror of https://github.com/GeyserMC/Rainbow.git synced 2025-12-19 14:59:16 +00:00

Some refactors

This commit is contained in:
Eclipse
2025-07-04 07:25:15 +00:00
parent 18a09d3181
commit ba0ddc3eb5
6 changed files with 64 additions and 31 deletions

View File

@@ -8,8 +8,8 @@ import net.fabricmc.fabric.api.command.v2.ArgumentTypeRegistry;
import net.minecraft.commands.synchronization.SingletonArgumentInfo;
import net.minecraft.resources.ResourceLocation;
import org.geysermc.packgenerator.command.CommandSuggestionsArgumentType;
import org.geysermc.packgenerator.command.ItemSuggestionMapper;
import org.geysermc.packgenerator.command.PackGeneratorCommand;
import org.geysermc.packgenerator.mapper.PackMappers;
import org.slf4j.Logger;
public class GeyserMappingsGenerator implements ClientModInitializer {
@@ -18,16 +18,19 @@ public class GeyserMappingsGenerator implements ClientModInitializer {
public static final String MOD_NAME = "Geyser Mappings Generator";
public static final Logger LOGGER = LogUtils.getLogger();
private final PackManager packManager = new PackManager();
private final PackMappers packMappers = new PackMappers(packManager);
@Override
public void onInitializeClient() {
ClientCommandRegistrationCallback.EVENT.register((dispatcher, buildContext) -> PackGeneratorCommand.register(dispatcher));
ClientTickEvents.START_CLIENT_TICK.register(minecraft -> ItemSuggestionMapper.getInstance().tick(minecraft));
ClientCommandRegistrationCallback.EVENT.register((dispatcher, buildContext) -> PackGeneratorCommand.register(dispatcher, packManager, packMappers));
ClientTickEvents.START_CLIENT_TICK.register(packMappers::tick);
ArgumentTypeRegistry.registerArgumentType(getModdedLocation("command_suggestions"),
CommandSuggestionsArgumentType.class, SingletonArgumentInfo.contextFree(CommandSuggestionsArgumentType::new));
}
public ResourceLocation getModdedLocation(String path) {
public static ResourceLocation getModdedLocation(String path) {
return ResourceLocation.fromNamespaceAndPath(MOD_ID, path);
}
}

View File

@@ -8,12 +8,8 @@ import java.util.Optional;
public final class PackManager {
private static final PackManager INSTANCE = new PackManager();
private BedrockPack currentPack;
private PackManager() {}
public void startPack(String name) throws IOException {
if (currentPack != null) {
throw new IllegalStateException("Already started a pack (" + currentPack.name() + ")");
@@ -40,8 +36,4 @@ public final class PackManager {
throw new IllegalStateException("Create a new pack first!");
}
}
public static PackManager getInstance() {
return INSTANCE;
}
}

View File

@@ -10,7 +10,9 @@ import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.item.ItemStack;
import org.geysermc.packgenerator.GeyserMappingsGenerator;
import org.geysermc.packgenerator.PackManager;
import org.geysermc.packgenerator.mapper.PackMappers;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
@@ -18,14 +20,14 @@ import java.util.function.Consumer;
public class PackGeneratorCommand {
public static void register(CommandDispatcher<FabricClientCommandSource> dispatcher) {
public static void register(CommandDispatcher<FabricClientCommandSource> dispatcher, PackManager packManager, PackMappers mappers) {
dispatcher.register(ClientCommandManager.literal("packgenerator")
.then(ClientCommandManager.literal("create")
.then(ClientCommandManager.argument("name", StringArgumentType.word())
.executes(context -> {
String name = StringArgumentType.getString(context, "name");
try {
PackManager.getInstance().startPack(name);
packManager.startPack(name);
} catch (Exception exception) {
context.getSource().sendError(Component.literal("Failed to create new pack: " + exception.getMessage()));
return -1;
@@ -38,7 +40,7 @@ public class PackGeneratorCommand {
.then(ClientCommandManager.literal("map")
.executes(context -> {
ItemStack heldItem = context.getSource().getPlayer().getMainHandItem();
Optional<Boolean> problems = PackManager.getInstance().map(heldItem);
Optional<Boolean> problems = packManager.map(heldItem);
if (problems.isEmpty()) {
context.getSource().sendError(Component.literal("No item found to map!"));
} else if (problems.get()) {
@@ -49,11 +51,11 @@ public class PackGeneratorCommand {
})
)
.then(ClientCommandManager.literal("mapinventory")
.executes(context -> mapInventory(context.getSource().getPlayer().getInventory(), context.getSource()::sendFeedback, true))
.executes(context -> mapInventory(packManager, context.getSource().getPlayer().getInventory(), context.getSource()::sendFeedback, true))
)
.then(ClientCommandManager.literal("finish")
.executes(context -> {
if (!PackManager.getInstance().finish()) {
if (!packManager.finish()) {
context.getSource().sendError(Component.literal("Errors occurred whilst trying to write the pack to disk!"));
}
context.getSource().sendFeedback(Component.literal("Wrote pack to disk"));
@@ -63,14 +65,14 @@ public class PackGeneratorCommand {
.then(ClientCommandManager.literal("auto")
.then(ClientCommandManager.argument("suggestions", CommandSuggestionsArgumentType.TYPE)
.executes(context -> {
PackManager.getInstance().ensurePackIsCreated();
packManager.ensurePackIsCreated();
Pair<String, CompletableFuture<Suggestions>> suggestions = CommandSuggestionsArgumentType.getSuggestions(context, "suggestions");
String baseCommand = suggestions.getFirst();
suggestions.getSecond().thenAccept(completed -> {
ItemSuggestionMapper.getInstance().start(completed.getList().stream()
mappers.getSuggestionMapper().start(completed.getList().stream()
.map(suggestion -> baseCommand.substring(0, suggestion.getRange().getStart()) + suggestion.getText())
.toList());
context.getSource().sendFeedback(Component.literal("Running " + ItemSuggestionMapper.getInstance().queueSize() + " commands to obtain custom items to map"));
context.getSource().sendFeedback(Component.literal("Running " + mappers.getSuggestionMapper().queueSize() + " commands to obtain custom items to map"));
});
return 0;
})
@@ -79,11 +81,11 @@ public class PackGeneratorCommand {
);
}
public static int mapInventory(Inventory inventory, Consumer<Component> feedback, boolean feedbackOnEmpty) {
public static int mapInventory(PackManager manager, Inventory inventory, Consumer<Component> feedback, boolean feedbackOnEmpty) {
int mapped = 0;
boolean errors = false;
for (ItemStack stack : inventory) {
Optional<Boolean> problems = PackManager.getInstance().map(stack);
Optional<Boolean> problems = manager.map(stack);
if (problems.isPresent()) {
mapped++;
errors |= problems.get();

View File

@@ -0,0 +1,11 @@
package org.geysermc.packgenerator.mapper;
import org.geysermc.packgenerator.PackManager;
public class InventoryMapper {
private final PackManager packManager;
public InventoryMapper(PackManager packManager) {
this.packManager = packManager;
}
}

View File

@@ -1,22 +1,25 @@
package org.geysermc.packgenerator.command;
package org.geysermc.packgenerator.mapper;
import net.minecraft.client.Minecraft;
import net.minecraft.network.chat.Component;
import net.minecraft.network.protocol.game.ServerboundChatCommandPacket;
import org.geysermc.packgenerator.PackManager;
import org.geysermc.packgenerator.command.PackGeneratorCommand;
import java.util.ArrayList;
import java.util.List;
// TODO safety
public final class ItemSuggestionMapper {
private static final ItemSuggestionMapper INSTANCE = new ItemSuggestionMapper();
private final PackManager packManager;
private final List<String> remainingCommands = new ArrayList<>();
private boolean waitingOnItem = false;
private boolean waitingOnClear = false;
private int mapped = 0;
private ItemSuggestionMapper() {}
public ItemSuggestionMapper(PackManager packManager) {
this.packManager = packManager;
}
// TODO
public boolean start(List<String> commands) {
@@ -41,7 +44,7 @@ public final class ItemSuggestionMapper {
waitingOnItem = true;
} else {
if (!minecraft.player.getInventory().isEmpty()) {
mapped += PackGeneratorCommand.mapInventory(minecraft.player.getInventory(),
mapped += PackGeneratorCommand.mapInventory(packManager, minecraft.player.getInventory(),
component -> minecraft.player.displayClientMessage(component, false), false);
minecraft.getConnection().send(new ServerboundChatCommandPacket("clear"));
@@ -67,8 +70,4 @@ public final class ItemSuggestionMapper {
waitingOnClear = false;
mapped = 0;
}
public static ItemSuggestionMapper getInstance() {
return INSTANCE;
}
}

View File

@@ -0,0 +1,26 @@
package org.geysermc.packgenerator.mapper;
import net.minecraft.client.Minecraft;
import org.geysermc.packgenerator.PackManager;
public class PackMappers {
private final ItemSuggestionMapper suggestionMapper;
private final InventoryMapper inventoryMapper;
public PackMappers(PackManager packManager) {
this.suggestionMapper = new ItemSuggestionMapper(packManager);
this.inventoryMapper = new InventoryMapper(packManager);
}
public ItemSuggestionMapper getSuggestionMapper() {
return suggestionMapper;
}
public InventoryMapper getInventoryMapper() {
return inventoryMapper;
}
public void tick(Minecraft minecraft) {
suggestionMapper.tick(minecraft);
}
}