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();
private final PackManager packManager = new PackManager();
private final PackMapper packMapper = new PackMapper();
private final PackMapper packMapper = new PackMapper(packManager);
@Override
public void onInitializeClient() {
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"),
CommandSuggestionsArgumentType.class, SingletonArgumentInfo.contextFree(CommandSuggestionsArgumentType::new));

View File

@@ -1,6 +1,5 @@
package org.geysermc.packgenerator;
import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
import org.geysermc.packgenerator.pack.BedrockPack;
import java.io.IOException;
@@ -24,6 +23,10 @@ public final class PackManager {
currentPack.ifPresent(consumer);
}
public void runOrElse(Consumer<BedrockPack> consumer, Runnable runnable) {
currentPack.ifPresentOrElse(consumer, runnable);
}
public <T> Optional<T> run(Function<BedrockPack, T> 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.world.item.ItemStack;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
@@ -15,7 +16,7 @@ public class ItemSuggestionProvider implements CustomItemProvider {
private boolean waitingOnClear = false;
public ItemSuggestionProvider(List<String> commands) {
remainingCommands = commands;
remainingCommands = new ArrayList<>(commands);
}
public Stream<ItemStack> nextItems(LocalPlayer player, ClientPacketListener connection) {
@@ -47,6 +48,6 @@ public class ItemSuggestionProvider implements CustomItemProvider {
@Override
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;
public class PackMapper {
private final PackManager packManager;
private CustomItemProvider itemProvider;
public PackMapper(PackManager manager) {
this.manager = manager;
}
public void setItemProvider(CustomItemProvider itemProvider) {
this.itemProvider = itemProvider;
}
public void tick(PackManager packManager, Minecraft minecraft) {
public void tick(Minecraft minecraft) {
if (itemProvider != null) {
LocalPlayer player = Objects.requireNonNull(minecraft.player);
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
long mapped = itemProvider.nextItems(player, connection)
.map(pack::map)
.filter(Optional::isPresent)
.count();
if (mapped != 0) {
player.displayClientMessage(Component.literal("Mapped " + mapped + " items"), false);
}
if (itemProvider.isDone()) {
player.displayClientMessage(Component.literal("Finished mapping items from provider"), false);
itemProvider = null;
}
});
}, () -> itemProvider = null);
}
}
}