Init for multiloader

This commit is contained in:
lukasabbe
2025-06-12 20:34:08 +02:00
commit 8f402847a0
78 changed files with 2313 additions and 0 deletions
@@ -0,0 +1,18 @@
package com.lukasabbe.bookshelfinspector;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.fml.ModList;
import net.neoforged.fml.ModLoadingContext;
import net.neoforged.fml.common.Mod;
import net.neoforged.neoforge.client.gui.IConfigScreenFactory;
@Mod(Constants.MOD_ID)
public class BookshelfInspectorNeoForge {
public BookshelfInspectorNeoForge(IEventBus eventBus) {
EventHandler.init();
eventBus.addListener(NetworkHandler::registerPayloads);
BookshelfInspector.init();
ModLoadingContext.get().registerExtensionPoint(IConfigScreenFactory.class, () -> (client, parent) -> ClothConfigGenerator.createConfig(parent));
}
}
@@ -0,0 +1,12 @@
package com.lukasabbe.bookshelfinspector;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.fml.common.Mod;
@Mod(value = Constants.MOD_ID, dist = Dist.CLIENT)
public class BookshelfInspectorNeoForgeClient {
public BookshelfInspectorNeoForgeClient(IEventBus bus) {
BookshelfInspectorClient.clientInit();
}
}
@@ -0,0 +1,38 @@
package com.lukasabbe.bookshelfinspector;
import me.shedaniel.clothconfig2.api.ConfigBuilder;
import me.shedaniel.clothconfig2.api.ConfigEntryBuilder;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.network.chat.Component;
public class ClothConfigGenerator {
public static Screen createConfig(Screen parent){
ConfigBuilder builder = ConfigBuilder
.create()
.setParentScreen(parent)
.setTitle(Component.translatable("bookshelfinspector.config.title"));
ConfigEntryBuilder entryBuilder = builder.entryBuilder();
builder
.getOrCreateCategory(Component.translatable("bookshelfinspector.config.category"))
.addEntry(entryBuilder
.startBooleanToggle(Component.translatable("bookshelfinspector.config.lectern.toggle"), BookshelfInspectorClient.config.lecternToggle)
.setTooltip(Component.translatable("bookshelfinspector.config.lectern.toggle.tooltip"))
.setDefaultValue(true)
.setSaveConsumer(val -> BookshelfInspectorClient.config.lecternToggle = val).build())
.addEntry(entryBuilder
.startIntSlider(Component.translatable("bookshelfinspector.config.scale"),BookshelfInspectorClient.config.scale,0,20)
.setTooltip(Component.translatable("bookshelfinspector.config.scale.tooltip"))
.setDefaultValue(10).setSaveConsumer(val -> BookshelfInspectorClient.config.scale = val)
.build())
.addEntry(entryBuilder
.startBooleanToggle(Component.translatable("bookshelfinspector.config.roman_scale"), BookshelfInspectorClient.config.useRoman)
.setTooltip(Component.translatable("bookshelfinspector.config.roman_scale.tooltip"))
.setDefaultValue(false)
.setSaveConsumer(val -> BookshelfInspectorClient.config.useRoman = val)
.build());
builder.setSavingRunnable(BookshelfInspectorClient.config::saveConfig);
return builder.build();
}
}
@@ -0,0 +1,30 @@
package com.lukasabbe.bookshelfinspector;
import com.lukasabbe.bookshelfinspector.platform.handlers.OnPlayerDisconnectEvent;
import com.lukasabbe.bookshelfinspector.platform.handlers.OnPlayerJoinEvent;
import net.minecraft.server.level.ServerPlayer;
import net.neoforged.neoforge.client.event.ClientPlayerNetworkEvent;
import net.neoforged.neoforge.common.NeoForge;
import net.neoforged.neoforge.event.entity.player.PlayerEvent;
import java.util.ArrayList;
import java.util.List;
public class EventHandler {
public static List<OnPlayerJoinEvent> playerJoinEvents = new ArrayList<>();
public static List<OnPlayerDisconnectEvent> playerDisconnectEvents = new ArrayList<>();
public static void init(){
NeoForge.EVENT_BUS.addListener(EventHandler::onJoin);
NeoForge.EVENT_BUS.addListener(EventHandler::onDisconnect);
}
private static void onJoin(PlayerEvent.PlayerLoggedInEvent event){
playerJoinEvents.forEach(onPlayerJoinEvent -> onPlayerJoinEvent.onPlayerJoin((ServerPlayer) event.getEntity(),event.getEntity().getServer()));
}
private static void onDisconnect(ClientPlayerNetworkEvent.LoggingOut event){
playerDisconnectEvents.forEach(OnPlayerDisconnectEvent::onDisconnect);
}
}
@@ -0,0 +1,40 @@
package com.lukasabbe.bookshelfinspector;
import com.lukasabbe.bookshelfinspector.network.packets.BookShelfInventoryPayload;
import com.lukasabbe.bookshelfinspector.network.packets.BookShelfInventoryRequestPayload;
import com.lukasabbe.bookshelfinspector.network.packets.LecternInventoryRequestPayload;
import com.lukasabbe.bookshelfinspector.network.packets.ModCheckPayload;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.server.level.ServerPlayer;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent;
import net.neoforged.neoforge.network.registration.PayloadRegistrar;
public class NetworkHandler {
@SubscribeEvent
public static void registerPayloads(final RegisterPayloadHandlersEvent event){
final PayloadRegistrar registrar = event.registrar("1");
registrar.playToServer(
BookShelfInventoryRequestPayload.ID,
BookShelfInventoryRequestPayload.CODEC,
((payload, context) -> BookshelfInspector.networkHandlers.bookShelfInventoryRequestServerPayloadHandler.receive(payload, (ServerPlayer) context.player()))
);
registrar.playToServer(
LecternInventoryRequestPayload.ID,
LecternInventoryRequestPayload.CODEC,
((payload, context) -> BookshelfInspector.networkHandlers.lecternInventoryRequestServerPayloadHandler.receive(payload, (ServerPlayer) context.player()))
);
registrar.playToClient(
BookShelfInventoryPayload.ID,
BookShelfInventoryPayload.CODEC,
((payload, context) -> BookshelfInspector.networkHandlers.bookShelfInventoryHandlerServer.receive(payload, (LocalPlayer) context.player()))
);
registrar.playToClient(
ModCheckPayload.ID,
ModCheckPayload.CODEC,
((payload, context) -> BookshelfInspector.networkHandlers.modServerPayloadHandler.receive(payload, (LocalPlayer) context.player()))
);
}
}
@@ -0,0 +1,18 @@
package com.lukasabbe.bookshelfinspector.platform;
import com.lukasabbe.bookshelfinspector.EventHandler;
import com.lukasabbe.bookshelfinspector.platform.handlers.OnPlayerDisconnectEvent;
import com.lukasabbe.bookshelfinspector.platform.handlers.OnPlayerJoinEvent;
import com.lukasabbe.bookshelfinspector.platform.services.IEventHelper;
public class NeoForgeEventHelper implements IEventHelper {
@Override
public void registerOnPlayerJoinEvent(OnPlayerJoinEvent event) {
EventHandler.playerJoinEvents.add(event);
}
@Override
public void registerOnPlayerDisconnect(OnPlayerDisconnectEvent event) {
EventHandler.playerDisconnectEvents.add(event);
}
}
@@ -0,0 +1,18 @@
package com.lukasabbe.bookshelfinspector.platform;
import com.lukasabbe.bookshelfinspector.platform.services.INetworkHelper;
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
import net.minecraft.server.level.ServerPlayer;
import net.neoforged.neoforge.network.PacketDistributor;
public class NeoForgeNetworkHelper implements INetworkHelper {
@Override
public void sendPacketFromServer(ServerPlayer player, CustomPacketPayload payload) {
PacketDistributor.sendToPlayer(player, payload);
}
@Override
public void sendPacketFromClient(CustomPacketPayload payload) {
PacketDistributor.sendToServer(payload);
}
}
@@ -0,0 +1,43 @@
package com.lukasabbe.bookshelfinspector.platform;
import com.lukasabbe.bookshelfinspector.platform.services.IPlatformHelper;
import net.neoforged.fml.ModContainer;
import net.neoforged.fml.ModList;
import net.neoforged.fml.config.ModConfig;
import net.neoforged.fml.loading.FMLLoader;
import net.neoforged.fml.loading.FMLPaths;
import java.nio.file.Path;
public class NeoForgePlatformHelper implements IPlatformHelper {
@Override
public String getPlatformName() {
return "NeoForge";
}
@Override
public boolean isModLoaded(String modId) {
return ModList.get().isLoaded(modId);
}
@Override
public boolean isDevelopmentEnvironment() {
return !FMLLoader.isProduction();
}
@Override
public Path getConfigPath(String file) {
return FMLPaths.CONFIGDIR.get().resolve(file);
}
@Override
public Path getFileInModContainer(String mod, String fileName) {
if(ModList.get().getModContainerById(mod).isEmpty()) return null;
ModContainer container = ModList.get().getModContainerById(mod).get();
return container.getModInfo().getOwningFile().getFile().findResource(fileName);
}
}
@@ -0,0 +1,34 @@
modLoader = "javafml" #mandatory
loaderVersion = "${neoforge_loader_version_range}" #mandatory
license = "${license}" # Review your options at https://choosealicense.com/.
#issueTrackerURL="https://change.me.to.your.issue.tracker.example.invalid/" #optional
[[mods]] #mandatory
modId = "${mod_id}" #mandatory
version = "${version}" #mandatory
displayName = "${mod_name}" #mandatory
#updateJSONURL="https://change.me.example.invalid/updates.json" #optional (see https://docs.neoforged.net/docs/misc/updatechecker/)
#displayURL="https://change.me.to.your.mods.homepage.example.invalid/" #optional (displayed in the mod UI)
logoFile="${mod_id}.png" #optional
credits="${credits}" #optional
authors = "${mod_author}" #optional
description = '''${description}''' #mandatory (Supports multiline text)
[[mixins]]
config = "${mod_id}.mixins.json"
[[dependencies.${mod_id}]] #optional
modId = "neoforge" #mandatory
type="required" #mandatory (Can be one of "required", "optional", "incompatible" or "discouraged")
versionRange = "[${neoforge_version},)" #mandatory
ordering = "NONE" # The order that this dependency should load in relation to your mod, required to be either 'BEFORE' or 'AFTER' if the dependency is not mandatory
side = "BOTH" # Side this dependency is applied on - 'BOTH', 'CLIENT' or 'SERVER'
[[dependencies.${mod_id}]]
modId = "minecraft"
type="required" #mandatory (Can be one of "required", "optional", "incompatible" or "discouraged")
versionRange = "${minecraft_version_range}"
ordering = "NONE"
side = "BOTH"
# Features are specific properties of the game environment, that you may want to declare you require. This example declares
# that your mod requires GL version 3.2 or higher. Other features will be added. They are side aware so declaring this won't
# stop your mod loading on the server for example.
#[features.${mod_id}]
#openGLVersion="[3.2,)"
@@ -0,0 +1 @@
com.lukasabbe.bookshelfinspector.platform.NeoForgeEventHelper
@@ -0,0 +1 @@
com.lukasabbe.bookshelfinspector.platform.NeoForgeNetworkHelper
@@ -0,0 +1 @@
com.lukasabbe.bookshelfinspector.platform.NeoForgePlatformHelper