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();
|
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));
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user