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

Some fixes

This commit is contained in:
Eclipse
2025-07-04 08:22:45 +00:00
parent c0b88453b1
commit 242e4ec1c7
4 changed files with 20 additions and 9 deletions

View File

@@ -19,12 +19,12 @@ public class GeyserMappingsGenerator implements ClientModInitializer {
public static final Logger LOGGER = LogUtils.getLogger(); public static final Logger LOGGER = LogUtils.getLogger();
private final PackManager packManager = new PackManager(); private final PackManager packManager = new PackManager();
private final PackMapper packMapper = new PackMapper(); private final PackMapper packMapper = new PackMapper(packManager);
@Override @Override
public void onInitializeClient() { public void onInitializeClient() {
ClientCommandRegistrationCallback.EVENT.register((dispatcher, buildContext) -> PackGeneratorCommand.register(dispatcher, packManager, packMapper)); ClientCommandRegistrationCallback.EVENT.register((dispatcher, buildContext) -> PackGeneratorCommand.register(dispatcher, packManager, packMapper));
ClientTickEvents.START_CLIENT_TICK.register(minecraft -> packMapper.tick(packManager, minecraft)); ClientTickEvents.START_CLIENT_TICK.register(packMapper::tick);
ArgumentTypeRegistry.registerArgumentType(getModdedLocation("command_suggestions"), ArgumentTypeRegistry.registerArgumentType(getModdedLocation("command_suggestions"),
CommandSuggestionsArgumentType.class, SingletonArgumentInfo.contextFree(CommandSuggestionsArgumentType::new)); CommandSuggestionsArgumentType.class, SingletonArgumentInfo.contextFree(CommandSuggestionsArgumentType::new));

View File

@@ -1,6 +1,5 @@
package org.geysermc.packgenerator; package org.geysermc.packgenerator;
import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
import org.geysermc.packgenerator.pack.BedrockPack; import org.geysermc.packgenerator.pack.BedrockPack;
import java.io.IOException; import java.io.IOException;
@@ -24,6 +23,10 @@ public final class PackManager {
currentPack.ifPresent(consumer); currentPack.ifPresent(consumer);
} }
public void runOrElse(Consumer<BedrockPack> consumer, Runnable runnable) {
currentPack.ifPresentOrElse(consumer, runnable);
}
public <T> Optional<T> run(Function<BedrockPack, T> function) { public <T> Optional<T> run(Function<BedrockPack, T> function) {
return currentPack.map(function); return currentPack.map(function);
} }

View File

@@ -5,6 +5,7 @@ import net.minecraft.client.player.LocalPlayer;
import net.minecraft.network.protocol.game.ServerboundChatCommandPacket; import net.minecraft.network.protocol.game.ServerboundChatCommandPacket;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.stream.Stream; import java.util.stream.Stream;
@@ -15,7 +16,7 @@ public class ItemSuggestionProvider implements CustomItemProvider {
private boolean waitingOnClear = false; private boolean waitingOnClear = false;
public ItemSuggestionProvider(List<String> commands) { public ItemSuggestionProvider(List<String> commands) {
remainingCommands = commands; remainingCommands = new ArrayList<>(commands);
} }
public Stream<ItemStack> nextItems(LocalPlayer player, ClientPacketListener connection) { public Stream<ItemStack> nextItems(LocalPlayer player, ClientPacketListener connection) {
@@ -47,6 +48,6 @@ public class ItemSuggestionProvider implements CustomItemProvider {
@Override @Override
public boolean isDone() { public boolean isDone() {
return remainingCommands.isEmpty(); return remainingCommands.isEmpty() && !waitingOnItem && !waitingOnClear;
} }
} }

View File

@@ -10,29 +10,36 @@ import java.util.Objects;
import java.util.Optional; import java.util.Optional;
public class PackMapper { public class PackMapper {
private final PackManager packManager;
private CustomItemProvider itemProvider; private CustomItemProvider itemProvider;
public PackMapper(PackManager manager) {
this.manager = manager;
}
public void setItemProvider(CustomItemProvider itemProvider) { public void setItemProvider(CustomItemProvider itemProvider) {
this.itemProvider = itemProvider; this.itemProvider = itemProvider;
} }
public void tick(PackManager packManager, Minecraft minecraft) { public void tick(Minecraft minecraft) {
if (itemProvider != null) { if (itemProvider != null) {
LocalPlayer player = Objects.requireNonNull(minecraft.player); LocalPlayer player = Objects.requireNonNull(minecraft.player);
ClientPacketListener connection = Objects.requireNonNull(minecraft.getConnection()); ClientPacketListener connection = Objects.requireNonNull(minecraft.getConnection());
packManager.run(pack -> { packManager.runOrElse(pack -> {
// TODO maybe report problems here... probably better to do so in pack class though // TODO maybe report problems here... probably better to do so in pack class though
long mapped = itemProvider.nextItems(player, connection) long mapped = itemProvider.nextItems(player, connection)
.map(pack::map) .map(pack::map)
.filter(Optional::isPresent) .filter(Optional::isPresent)
.count(); .count();
player.displayClientMessage(Component.literal("Mapped " + mapped + " items"), false); if (mapped != 0) {
player.displayClientMessage(Component.literal("Mapped " + mapped + " items"), false);
}
if (itemProvider.isDone()) { if (itemProvider.isDone()) {
player.displayClientMessage(Component.literal("Finished mapping items from provider"), false); player.displayClientMessage(Component.literal("Finished mapping items from provider"), false);
itemProvider = null; itemProvider = null;
} }
}); }, () -> itemProvider = null);
} }
} }
} }