From 3e15f1e8fa48b1a93469f3f9f3bedf86754ea7cc Mon Sep 17 00:00:00 2001 From: iceBear67 Date: Sat, 13 Jul 2024 00:36:40 +0800 Subject: [PATCH] fix: basic functionality are now working. --- src/main/java/io/ib67/sfcraft/Lifecycle.java | 2 +- .../java/io/ib67/sfcraft/SFCraftInitializer.java | 12 ++++++++++-- src/main/java/io/ib67/sfcraft/ServerModule.java | 2 +- .../java/io/ib67/sfcraft/callback/Utility.java | 2 +- .../ib67/sfcraft/geoip/MaxMindGeoIPService.java | 6 ++---- .../ib67/sfcraft/init/GuiceModInitializer.java | 16 ++++++++++++---- .../mixin/server/AbstractFurnaceBlockMixin.java | 2 ++ .../mixin/server/LegacyQueryHandlerMixin.java | 2 ++ .../sfcraft/mixin/server/SleepManagerMixin.java | 2 +- src/main/resources/sfcraft.mixins.json | 1 + 10 files changed, 33 insertions(+), 14 deletions(-) diff --git a/src/main/java/io/ib67/sfcraft/Lifecycle.java b/src/main/java/io/ib67/sfcraft/Lifecycle.java index 3c3aab9..8e9bf84 100644 --- a/src/main/java/io/ib67/sfcraft/Lifecycle.java +++ b/src/main/java/io/ib67/sfcraft/Lifecycle.java @@ -6,6 +6,6 @@ public interface Lifecycle { void onStateChange(State state); enum State { - ENABLED, DISABLED,ERROR; + ENABLED, DISABLED,ERROR } } diff --git a/src/main/java/io/ib67/sfcraft/SFCraftInitializer.java b/src/main/java/io/ib67/sfcraft/SFCraftInitializer.java index 3d335c4..4173818 100644 --- a/src/main/java/io/ib67/sfcraft/SFCraftInitializer.java +++ b/src/main/java/io/ib67/sfcraft/SFCraftInitializer.java @@ -3,6 +3,9 @@ package io.ib67.sfcraft; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.inject.*; +import io.ib67.sfcraft.module.chat.ChatPingModule; +import io.ib67.sfcraft.module.chat.ChatSendLocModule; +import io.ib67.sfcraft.module.randomevt.LongNightModule; import io.ib67.sfcraft.registry.chat.SimpleMessageDecorator; import io.ib67.sfcraft.registry.event.SFRandomEventRegistry; import io.ib67.sfcraft.init.GuiceModInitializer; @@ -43,6 +46,10 @@ public class SFCraftInitializer extends GuiceModInitializer { registerFeature(PlayLimitModule.class); registerFeature(BackModule.class); registerFeature(ManagementModule.class); + + registerFeature(ChatPingModule.class); + registerFeature(ChatSendLocModule.class); + registerFeature(LongNightModule.class); } @Override @@ -52,13 +59,14 @@ public class SFCraftInitializer extends GuiceModInitializer { SFCraft.server = minecraftServer; SFCraft.injector = getInjector(); getModuleManager().switchGlobalState(Lifecycle.State.ENABLED); + log.info("Load completed! "+getModuleManager().getModules().size()+" modules were loaded."); } @Override protected Injector onInit() { return Guice.createInjector( - this, - new SFCraft() + new SFCraft(), + this ); } } diff --git a/src/main/java/io/ib67/sfcraft/ServerModule.java b/src/main/java/io/ib67/sfcraft/ServerModule.java index 3005554..1924f4a 100644 --- a/src/main/java/io/ib67/sfcraft/ServerModule.java +++ b/src/main/java/io/ib67/sfcraft/ServerModule.java @@ -18,7 +18,7 @@ public abstract class ServerModule extends AbstractModule implements Lifecycle { } this.state = state; } catch (Exception exception) { - log.error("An error occurred when " + getName() + " is changing its state into " + state); + log.error("An error occurred when " + getName() + " is changing its state into " + state,exception); this.state = State.ERROR; } } diff --git a/src/main/java/io/ib67/sfcraft/callback/Utility.java b/src/main/java/io/ib67/sfcraft/callback/Utility.java index 62616b9..c3fa633 100644 --- a/src/main/java/io/ib67/sfcraft/callback/Utility.java +++ b/src/main/java/io/ib67/sfcraft/callback/Utility.java @@ -36,7 +36,7 @@ class Utility { } static Optional anyMatch(T[] ts, Function function, Predicate failurePredicate) { - A r = null; + A r; for (T handler : ts) { r = function.apply(handler); if (failurePredicate.test(r)) { diff --git a/src/main/java/io/ib67/sfcraft/geoip/MaxMindGeoIPService.java b/src/main/java/io/ib67/sfcraft/geoip/MaxMindGeoIPService.java index 80433c6..7a31eb4 100644 --- a/src/main/java/io/ib67/sfcraft/geoip/MaxMindGeoIPService.java +++ b/src/main/java/io/ib67/sfcraft/geoip/MaxMindGeoIPService.java @@ -27,13 +27,11 @@ import static java.net.http.HttpResponse.BodyHandlers.ofFile; @Singleton public class MaxMindGeoIPService implements Module, GeoIPService { private static final URI GEOIP_DOWNLOAD_URL = URI.create("http://sfclub.cc/GeoLite2-City.mmdb"); - @Inject - @ConfigRoot - private Path configRoot; private Path mmdbPath; private final DatabaseReader databaseReader; - public MaxMindGeoIPService() throws InterruptedException { + @Inject + public MaxMindGeoIPService(@ConfigRoot Path configRoot) throws InterruptedException { mmdbPath = configRoot.resolve("GeoLite2-City.mmdb"); databaseReader = loadData(); } diff --git a/src/main/java/io/ib67/sfcraft/init/GuiceModInitializer.java b/src/main/java/io/ib67/sfcraft/init/GuiceModInitializer.java index 5c3d31a..955c5d4 100644 --- a/src/main/java/io/ib67/sfcraft/init/GuiceModInitializer.java +++ b/src/main/java/io/ib67/sfcraft/init/GuiceModInitializer.java @@ -10,6 +10,7 @@ import io.ib67.sfcraft.module.manager.ModuleManager; import io.ib67.sfcraft.module.manager.SimpleModuleManager; import lombok.AccessLevel; import lombok.Getter; +import lombok.extern.log4j.Log4j2; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; @@ -20,6 +21,7 @@ import java.util.HashMap; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; +@Log4j2 public abstract class GuiceModInitializer extends AbstractModule implements ModInitializer { public static AtomicBoolean initialized = new AtomicBoolean(false); @Getter(AccessLevel.PROTECTED) @@ -33,15 +35,20 @@ public abstract class GuiceModInitializer extends AbstractModule implements ModI ServerPlayConnectionEvents.JOIN.register(handler::defend); ServerLifecycleEvents.SERVER_STARTED.register(this::onServerStarted); injector = onInit(); - } - - private void onServerStarted(MinecraftServer server) { var map = new HashMap(); for (Class registeredFeature : registeredFeatures) { var module = injector.getInstance(registeredFeature); - map.put(module.getName(), module); + try { + module.onInitialize(); + map.put(module.getName(), module); + } catch (Exception e) { + log.error("Cannot initialize module " + module.getName(), e); + } } moduleManager = new SimpleModuleManager(ImmutableMap.copyOf(map)); + } + + private void onServerStarted(MinecraftServer server) { onReady(server); initialized.set(true); } @@ -57,5 +64,6 @@ public abstract class GuiceModInitializer extends AbstractModule implements ModI protected void registerFeature(Class featureClass) { binder().bind(featureClass).in(Singleton.class); + registeredFeatures.add(featureClass); } } diff --git a/src/main/java/io/ib67/sfcraft/mixin/server/AbstractFurnaceBlockMixin.java b/src/main/java/io/ib67/sfcraft/mixin/server/AbstractFurnaceBlockMixin.java index 3c8160f..3a83819 100644 --- a/src/main/java/io/ib67/sfcraft/mixin/server/AbstractFurnaceBlockMixin.java +++ b/src/main/java/io/ib67/sfcraft/mixin/server/AbstractFurnaceBlockMixin.java @@ -14,6 +14,7 @@ import net.minecraft.world.World; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Unique; @Mixin(AbstractFurnaceBlock.class) public abstract class AbstractFurnaceBlockMixin extends BlockWithEntity { @@ -32,6 +33,7 @@ public abstract class AbstractFurnaceBlockMixin extends BlockWithEntity { return world.isClient ? null : BlockWithEntity.validateTicker(givenType, expectedType, AbstractFurnaceBlockMixin::tickMultiple); } + @Unique private static void tickMultiple(World world, BlockPos pos, BlockState state, AbstractFurnaceBlockEntity blockEntity) { AbstractFurnaceBlockEntity.tick(world, pos, state, blockEntity); int i = world.getGameRules().getInt(GameRules.PLAYERS_SLEEPING_PERCENTAGE); diff --git a/src/main/java/io/ib67/sfcraft/mixin/server/LegacyQueryHandlerMixin.java b/src/main/java/io/ib67/sfcraft/mixin/server/LegacyQueryHandlerMixin.java index d3a4f25..b963690 100644 --- a/src/main/java/io/ib67/sfcraft/mixin/server/LegacyQueryHandlerMixin.java +++ b/src/main/java/io/ib67/sfcraft/mixin/server/LegacyQueryHandlerMixin.java @@ -5,6 +5,7 @@ import io.netty.channel.ChannelHandlerContext; import net.minecraft.network.QueryableServer; import net.minecraft.network.handler.LegacyQueryHandler; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; @@ -16,6 +17,7 @@ import java.util.Locale; @Mixin(LegacyQueryHandler.class) public class LegacyQueryHandlerMixin { + @Unique SocketAddress address; @Inject(method = "channelRead", at = @At("HEAD")) diff --git a/src/main/java/io/ib67/sfcraft/mixin/server/SleepManagerMixin.java b/src/main/java/io/ib67/sfcraft/mixin/server/SleepManagerMixin.java index 5ffdb30..6df3638 100644 --- a/src/main/java/io/ib67/sfcraft/mixin/server/SleepManagerMixin.java +++ b/src/main/java/io/ib67/sfcraft/mixin/server/SleepManagerMixin.java @@ -17,7 +17,7 @@ public abstract class SleepManagerMixin { cir.setReturnValue(false); return; } - var world = players.get(0).getServerWorld(); + var world = players.getFirst().getServerWorld(); if (world.getTimeOfDay() % 24000 >= 12544) { if(!world.isRaining()){ cir.setReturnValue(false); diff --git a/src/main/resources/sfcraft.mixins.json b/src/main/resources/sfcraft.mixins.json index f2353fd..ba72c76 100644 --- a/src/main/resources/sfcraft.mixins.json +++ b/src/main/resources/sfcraft.mixins.json @@ -8,6 +8,7 @@ "client": [ ], "server": [ + "server.MinecraftServerMixin", "server.ServerPlayNetworkHandlerMixin", "server.bridge.ServerWorldBridge", "server.SleepManagerMixin",