Skip to content

Commit

Permalink
Move some things around and do some cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
Gaming32 committed May 26, 2024
1 parent 8ebe352 commit 2d8cb95
Show file tree
Hide file tree
Showing 11 changed files with 235 additions and 76 deletions.
51 changes: 29 additions & 22 deletions common/src/main/java/io/github/gaming32/bingo/Bingo.java
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,33 @@ public class Bingo {
public static final Set<UUID> needAdvancementsClear = new HashSet<>();

public static void init() {
registerEventHandlers();
initializeRegistries();

BingoPlatform.platform.registerDataReloadListeners(registrar -> {
registrar.register(BingoTag.ReloadListener.ID, new BingoTag.ReloadListener(registrar.registryAccess()));
registrar.register(BingoDifficulty.ReloadListener.ID, new BingoDifficulty.ReloadListener(registrar.registryAccess()));
registrar.register(
BingoGoal.ReloadListener.ID, new BingoGoal.ReloadListener(registrar.registryAccess()),
List.of(BingoTag.ReloadListener.ID, BingoDifficulty.ReloadListener.ID)
);
});

BingoNetworking.instance().onRegister(registrar -> {
registrar.register(PacketFlow.CLIENTBOUND, InitBoardPacket.TYPE, InitBoardPacket.CODEC);
registrar.register(PacketFlow.CLIENTBOUND, RemoveBoardPacket.TYPE, RemoveBoardPacket.CODEC);
registrar.register(PacketFlow.CLIENTBOUND, ResyncStatesPacket.TYPE, ResyncStatesPacket.CODEC);
registrar.register(PacketFlow.CLIENTBOUND, SyncTeamPacket.TYPE, SyncTeamPacket.CODEC);
registrar.register(PacketFlow.CLIENTBOUND, UpdateProgressPacket.TYPE, UpdateProgressPacket.CODEC);
registrar.register(PacketFlow.CLIENTBOUND, UpdateStatePacket.TYPE, UpdateStatePacket.CODEC);

registrar.register(PacketFlow.SERVERBOUND, KeyPressedPacket.TYPE, KeyPressedPacket.CODEC);
});

LOGGER.info("I got the diagonal!");
}

private static void registerEventHandlers() {
Event.REGISTER_COMMANDS.register(BingoCommand::register);

Event.PLAYER_JOIN.register(player -> {
Expand Down Expand Up @@ -138,7 +165,9 @@ public static void init() {
LOGGER.error("Failed to store persistent Bingo game", e);
}
});
}

private static void initializeRegistries() {
BingoConditions.load();
BingoParamSets.load();
GoalIconType.load();
Expand All @@ -147,28 +176,6 @@ public static void init() {
BingoEntitySubPredicates.load();
BingoItemSubPredicates.load();
BingoTriggers.load();

BingoPlatform.platform.registerDataReloadListeners(registrar -> {
registrar.register(BingoTag.ReloadListener.ID, new BingoTag.ReloadListener(registrar.registryAccess()));
registrar.register(BingoDifficulty.ReloadListener.ID, new BingoDifficulty.ReloadListener(registrar.registryAccess()));
registrar.register(
BingoGoal.ReloadListener.ID, new BingoGoal.ReloadListener(registrar.registryAccess()),
List.of(BingoTag.ReloadListener.ID, BingoDifficulty.ReloadListener.ID)
);
});

BingoNetworking.instance().onRegister(registrar -> {
registrar.register(PacketFlow.CLIENTBOUND, InitBoardPacket.TYPE, InitBoardPacket.CODEC);
registrar.register(PacketFlow.CLIENTBOUND, RemoveBoardPacket.TYPE, RemoveBoardPacket.CODEC);
registrar.register(PacketFlow.CLIENTBOUND, ResyncStatesPacket.TYPE, ResyncStatesPacket.CODEC);
registrar.register(PacketFlow.CLIENTBOUND, SyncTeamPacket.TYPE, SyncTeamPacket.CODEC);
registrar.register(PacketFlow.CLIENTBOUND, UpdateProgressPacket.TYPE, UpdateProgressPacket.CODEC);
registrar.register(PacketFlow.CLIENTBOUND, UpdateStatePacket.TYPE, UpdateStatePacket.CODEC);

registrar.register(PacketFlow.SERVERBOUND, KeyPressedPacket.TYPE, KeyPressedPacket.CODEC);
});

LOGGER.info("I got the diagonal!");
}

public static void updateCommandTree(PlayerList playerList) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@
import io.github.gaming32.bingo.network.ClientGoal;
import io.github.gaming32.bingo.platform.BingoPlatform;
import io.github.gaming32.bingo.platform.event.ClientEvents;
import io.github.gaming32.bingo.platform.registrar.KeyMappingBuilder;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.ChatFormatting;
import net.minecraft.client.KeyMapping;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Font;
import net.minecraft.client.gui.GuiGraphics;
Expand Down Expand Up @@ -60,6 +60,29 @@ public static void init() {
CONFIG.load();
CONFIG.save();

registerEventHandlers();

DefaultIconRenderers.setup();

BingoPlatform.platform.registerKeyMappings(builder -> {
builder
.name("bingo.key.board")
.category("bingo.key.category")
.keyCode(InputConstants.KEY_B)
.conflictContext(KeyMappingBuilder.ConflictContext.IN_GAME)
.register(minecraft -> {
if (clientGame != null) {
minecraft.setScreen(new BoardScreen());
}
});
});

BingoPlatform.platform.registerClientTooltips(registrar -> registrar.register(IconTooltip.class, ClientIconTooltip::new));

Bingo.LOGGER.info("Bongo");
}

private static void registerEventHandlers() {
ClientEvents.KEY_RELEASED_PRE.register((screen, keyCode, scanCode, modifiers) -> {
if (clientGame == null || !(screen instanceof ChatScreen)) {
return false;
Expand Down Expand Up @@ -92,22 +115,6 @@ public static void init() {
clientTeam = receivedClientTeam;
}
});

DefaultIconRenderers.setup();

final KeyMapping boardKey = new KeyMapping("bingo.key.board", InputConstants.KEY_B, "bingo.key.category");
BingoPlatform.platform.registerKeyMappings(registrar -> registrar.accept(boardKey));
ClientEvents.CLIENT_TICK_START.register(minecraft -> {
while (boardKey.consumeClick()) {
if (clientGame != null) {
minecraft.setScreen(new BoardScreen());
}
}
});

BingoPlatform.platform.registerClientTooltips(registrar -> registrar.register(IconTooltip.class, ClientIconTooltip::new));

Bingo.LOGGER.info("Bongo");
}

public static RecipeViewerPlugin getRecipeViewerPlugin() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,15 @@
package io.github.gaming32.bingo.platform;

import io.github.gaming32.bingo.network.BingoNetworking;
import io.github.gaming32.bingo.platform.registrar.ClientTooltipRegistrar;
import io.github.gaming32.bingo.platform.registrar.DataReloadListenerRegistrar;
import io.github.gaming32.bingo.platform.registrar.KeyMappingBuilder;
import io.github.gaming32.bingo.platform.registry.DeferredRegister;
import io.github.gaming32.bingo.platform.registry.RegistryBuilder;
import net.minecraft.client.KeyMapping;
import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.ReloadableServerResources;
import net.minecraft.server.packs.resources.PreparableReloadListener;
import net.minecraft.world.inventory.tooltip.TooltipComponent;

import java.nio.file.Path;
import java.util.Collection;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;

public abstract class BingoPlatform {
public static BingoPlatform platform;
Expand All @@ -31,27 +24,11 @@ public abstract class BingoPlatform {

public abstract void registerClientTooltips(Consumer<ClientTooltipRegistrar> handler);

public abstract void registerKeyMappings(Consumer<Consumer<KeyMapping>> handler);
public abstract void registerKeyMappings(Consumer<KeyMappingBuilder> handler);

public abstract void registerDataReloadListeners(Consumer<DataReloadListenerRegistrar> handler);

public abstract <T> DeferredRegister<T> createDeferredRegister(Registry<T> registry);

public abstract <T> DeferredRegister<T> buildDeferredRegister(RegistryBuilder builder);

public interface ClientTooltipRegistrar {
<T extends TooltipComponent> void register(Class<T> clazz, Function<? super T, ? extends ClientTooltipComponent> factory);
}

public interface DataReloadListenerRegistrar {
ReloadableServerResources serverResources();

HolderLookup.Provider registryAccess();

default void register(ResourceLocation id, PreparableReloadListener listener) {
register(id, listener, List.of());
}

void register(ResourceLocation id, PreparableReloadListener listener, Collection<ResourceLocation> dependencies);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
package io.github.gaming32.bingo.platform.registrar;

import com.mojang.blaze3d.platform.InputConstants;
import net.minecraft.client.KeyMapping;
import net.minecraft.client.Minecraft;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;

public abstract class AbstractKeyMappingBuilder implements KeyMappingBuilder {
protected final List<KeyMappingWithAction> mappings = new ArrayList<>();

protected String name;
protected String category;
protected InputConstants.Type keyType;
protected int keyCode;
protected ConflictContext conflictContext;

protected AbstractKeyMappingBuilder() {
reset();
}

private void reset() {
name = null;
keyType = InputConstants.Type.KEYSYM;
keyCode = -1;
category = null;
conflictContext = ConflictContext.UNIVERSAL;
}

@Override
public KeyMappingBuilder name(String name) {
this.name = name;
return this;
}

@Override
public KeyMappingBuilder category(String category) {
this.category = category;
return this;
}

@Override
public KeyMappingBuilder keyType(InputConstants.Type type) {
this.keyType = type;
return this;
}

@Override
public KeyMappingBuilder keyCode(int keyCode) {
this.keyCode = keyCode;
return this;
}

@Override
public KeyMappingBuilder conflictContext(ConflictContext conflictContext) {
this.conflictContext = conflictContext;
return this;
}

@Override
public KeyMappingWithAction register(Consumer<Minecraft> action) {
if (name == null) {
throw new IllegalStateException("KeyMappingBuilder.name not set");
}
if (category == null) {
throw new IllegalStateException("KeyMappingBuilder.category not set");
}
if (action == null) {
throw new IllegalStateException("KeyMappingBuilder.action not set");
}
final var result = new KeyMappingWithAction(new KeyMapping(name, keyType, keyCode, category), action);
mappings.add(result);
return result;
}

public void registerAll(Consumer<KeyMapping> consumer) {
mappings.stream().map(KeyMappingWithAction::mapping).forEach(consumer);
}

public void handleAll(Minecraft minecraft) {
for (final KeyMappingWithAction mapping : mappings) {
while (mapping.mapping().consumeClick()) {
mapping.action().accept(minecraft);
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package io.github.gaming32.bingo.platform.registrar;

import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent;
import net.minecraft.world.inventory.tooltip.TooltipComponent;

import java.util.function.Function;

public interface ClientTooltipRegistrar {
<T extends TooltipComponent> void register(Class<T> clazz, Function<? super T, ? extends ClientTooltipComponent> factory);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package io.github.gaming32.bingo.platform.registrar;

import net.minecraft.core.HolderLookup;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.ReloadableServerResources;
import net.minecraft.server.packs.resources.PreparableReloadListener;

import java.util.Collection;
import java.util.List;

public interface DataReloadListenerRegistrar {
ReloadableServerResources serverResources();

HolderLookup.Provider registryAccess();

default void register(ResourceLocation id, PreparableReloadListener listener) {
register(id, listener, List.of());
}

void register(ResourceLocation id, PreparableReloadListener listener, Collection<ResourceLocation> dependencies);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package io.github.gaming32.bingo.platform.registrar;

import com.mojang.blaze3d.platform.InputConstants;
import net.minecraft.client.KeyMapping;
import net.minecraft.client.Minecraft;

import java.util.function.Consumer;

public interface KeyMappingBuilder {
KeyMappingBuilder name(String name);

KeyMappingBuilder category(String category);

KeyMappingBuilder keyType(InputConstants.Type type);

KeyMappingBuilder keyCode(int keyCode);

KeyMappingBuilder conflictContext(ConflictContext conflictContext);

KeyMappingWithAction register(Consumer<Minecraft> action);

enum ConflictContext {
UNIVERSAL, GUI, IN_GAME
}

record KeyMappingWithAction(KeyMapping mapping, Consumer<Minecraft> action) {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@
import io.github.gaming32.bingo.platform.BingoPlatform;
import io.github.gaming32.bingo.platform.event.ClientEvents;
import io.github.gaming32.bingo.platform.event.Event;
import io.github.gaming32.bingo.platform.registrar.AbstractKeyMappingBuilder;
import io.github.gaming32.bingo.platform.registrar.ClientTooltipRegistrar;
import io.github.gaming32.bingo.platform.registrar.DataReloadListenerRegistrar;
import io.github.gaming32.bingo.platform.registrar.KeyMappingBuilder;
import io.github.gaming32.bingo.platform.registry.DeferredRegister;
import io.github.gaming32.bingo.platform.registry.RegistryBuilder;
import net.fabricmc.api.EnvType;
Expand All @@ -23,7 +27,6 @@
import net.fabricmc.fabric.api.event.registry.FabricRegistryBuilder;
import net.fabricmc.fabric.api.event.registry.RegistryAttribute;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.client.KeyMapping;
import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent;
import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceKey;
Expand Down Expand Up @@ -79,8 +82,11 @@ public <T extends TooltipComponent> void register(Class<T> clazz, Function<? sup
}

@Override
public void registerKeyMappings(Consumer<Consumer<KeyMapping>> handler) {
handler.accept(KeyBindingHelper::registerKeyBinding);
public void registerKeyMappings(Consumer<KeyMappingBuilder> handler) {
final var builder = new AbstractKeyMappingBuilder() {};
handler.accept(builder);
builder.registerAll(KeyBindingHelper::registerKeyBinding);
ClientTickEvents.END_CLIENT_TICK.register(builder::handleAll);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.github.gaming32.bingo.fabric.event;

import io.github.gaming32.bingo.platform.BingoPlatform;
import io.github.gaming32.bingo.platform.registrar.DataReloadListenerRegistrar;
import net.fabricmc.fabric.api.event.Event;
import net.fabricmc.fabric.api.event.EventFactory;
import net.minecraft.server.level.ServerPlayer;
Expand Down Expand Up @@ -35,7 +35,7 @@ public class FabricEvents {
}
);

public static final Event<Consumer<BingoPlatform.DataReloadListenerRegistrar>> ADD_RELOAD_LISTENERS = EventFactory.createArrayBacked(
public static final Event<Consumer<DataReloadListenerRegistrar>> ADD_RELOAD_LISTENERS = EventFactory.createArrayBacked(
Consumer.class, handlers -> registrar -> {
for (final var handler : handlers) {
handler.accept(registrar);
Expand Down
Loading

0 comments on commit 2d8cb95

Please sign in to comment.