mirror of
https://github.com/GeyserMC/Rainbow.git
synced 2025-12-19 14:59:16 +00:00
Some fixes
This commit is contained in:
@@ -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));
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
player.displayClientMessage(Component.literal("Mapped " + mapped + " items"), false);
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user