fix: basic functionality are now working.

This commit is contained in:
iceBear67 committed 2024-07-13 00:36:40 +08:00
1 parent 1df034a8ca
commit 3e15f1e8fa
10 files changed
+33 -14

No files matched your search

+1 -1
View File
@@ -6,6 +6,6 @@ public interface Lifecycle {
void onStateChange(State state); void onStateChange(State state);
enum State { enum State {
ENABLED, DISABLED,ERROR; ENABLED, DISABLED,ERROR
} }
} }
@@ -3,6 +3,9 @@ package io.ib67.sfcraft;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
import com.google.inject.*; 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.chat.SimpleMessageDecorator;
import io.ib67.sfcraft.registry.event.SFRandomEventRegistry; import io.ib67.sfcraft.registry.event.SFRandomEventRegistry;
import io.ib67.sfcraft.init.GuiceModInitializer; import io.ib67.sfcraft.init.GuiceModInitializer;
@@ -43,6 +46,10 @@ public class SFCraftInitializer extends GuiceModInitializer {
registerFeature(PlayLimitModule.class); registerFeature(PlayLimitModule.class);
registerFeature(BackModule.class); registerFeature(BackModule.class);
registerFeature(ManagementModule.class); registerFeature(ManagementModule.class);
registerFeature(ChatPingModule.class);
registerFeature(ChatSendLocModule.class);
registerFeature(LongNightModule.class);
} }
@Override @Override
@@ -52,13 +59,14 @@ public class SFCraftInitializer extends GuiceModInitializer {
SFCraft.server = minecraftServer; SFCraft.server = minecraftServer;
SFCraft.injector = getInjector(); SFCraft.injector = getInjector();
getModuleManager().switchGlobalState(Lifecycle.State.ENABLED); getModuleManager().switchGlobalState(Lifecycle.State.ENABLED);
log.info("Load completed! "+getModuleManager().getModules().size()+" modules were loaded.");
} }
@Override @Override
protected Injector onInit() { protected Injector onInit() {
return Guice.createInjector( return Guice.createInjector(
this, new SFCraft(),
new SFCraft() this
); );
} }
} }
@@ -18,7 +18,7 @@ public abstract class ServerModule extends AbstractModule implements Lifecycle {
} }
this.state = state; this.state = state;
} catch (Exception exception) { } 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; this.state = State.ERROR;
} }
} }
@@ -36,7 +36,7 @@ class Utility {
} }
static <T, A> Optional<A> anyMatch(T[] ts, Function<T, A> function, Predicate<A> failurePredicate) { static <T, A> Optional<A> anyMatch(T[] ts, Function<T, A> function, Predicate<A> failurePredicate) {
A r = null; A r;
for (T handler : ts) { for (T handler : ts) {
r = function.apply(handler); r = function.apply(handler);
if (failurePredicate.test(r)) { if (failurePredicate.test(r)) {
@@ -27,13 +27,11 @@ import static java.net.http.HttpResponse.BodyHandlers.ofFile;
@Singleton @Singleton
public class MaxMindGeoIPService implements Module, GeoIPService { public class MaxMindGeoIPService implements Module, GeoIPService {
private static final URI GEOIP_DOWNLOAD_URL = URI.create("http://sfclub.cc/GeoLite2-City.mmdb"); private static final URI GEOIP_DOWNLOAD_URL = URI.create("http://sfclub.cc/GeoLite2-City.mmdb");
@Inject
@ConfigRoot
private Path configRoot;
private Path mmdbPath; private Path mmdbPath;
private final DatabaseReader databaseReader; private final DatabaseReader databaseReader;
public MaxMindGeoIPService() throws InterruptedException { @Inject
public MaxMindGeoIPService(@ConfigRoot Path configRoot) throws InterruptedException {
mmdbPath = configRoot.resolve("GeoLite2-City.mmdb"); mmdbPath = configRoot.resolve("GeoLite2-City.mmdb");
databaseReader = loadData(); databaseReader = loadData();
} }
@@ -10,6 +10,7 @@ import io.ib67.sfcraft.module.manager.ModuleManager;
import io.ib67.sfcraft.module.manager.SimpleModuleManager; import io.ib67.sfcraft.module.manager.SimpleModuleManager;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.Getter; import lombok.Getter;
import lombok.extern.log4j.Log4j2;
import net.fabricmc.api.ModInitializer; import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents;
@@ -20,6 +21,7 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
@Log4j2
public abstract class GuiceModInitializer extends AbstractModule implements ModInitializer { public abstract class GuiceModInitializer extends AbstractModule implements ModInitializer {
public static AtomicBoolean initialized = new AtomicBoolean(false); public static AtomicBoolean initialized = new AtomicBoolean(false);
@Getter(AccessLevel.PROTECTED) @Getter(AccessLevel.PROTECTED)
@@ -33,15 +35,20 @@ public abstract class GuiceModInitializer extends AbstractModule implements ModI
ServerPlayConnectionEvents.JOIN.register(handler::defend); ServerPlayConnectionEvents.JOIN.register(handler::defend);
ServerLifecycleEvents.SERVER_STARTED.register(this::onServerStarted); ServerLifecycleEvents.SERVER_STARTED.register(this::onServerStarted);
injector = onInit(); injector = onInit();
}
private void onServerStarted(MinecraftServer server) {
var map = new HashMap<String, ServerModule>(); var map = new HashMap<String, ServerModule>();
for (Class<? extends ServerModule> registeredFeature : registeredFeatures) { for (Class<? extends ServerModule> registeredFeature : registeredFeatures) {
var module = injector.getInstance(registeredFeature); 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)); moduleManager = new SimpleModuleManager(ImmutableMap.copyOf(map));
}
private void onServerStarted(MinecraftServer server) {
onReady(server); onReady(server);
initialized.set(true); initialized.set(true);
} }
@@ -57,5 +64,6 @@ public abstract class GuiceModInitializer extends AbstractModule implements ModI
protected void registerFeature(Class<? extends ServerModule> featureClass) { protected void registerFeature(Class<? extends ServerModule> featureClass) {
binder().bind(featureClass).in(Singleton.class); binder().bind(featureClass).in(Singleton.class);
registeredFeatures.add(featureClass);
} }
} }
@@ -14,6 +14,7 @@ import net.minecraft.world.World;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Unique;
@Mixin(AbstractFurnaceBlock.class) @Mixin(AbstractFurnaceBlock.class)
public abstract class AbstractFurnaceBlockMixin extends BlockWithEntity { 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); return world.isClient ? null : BlockWithEntity.validateTicker(givenType, expectedType, AbstractFurnaceBlockMixin::tickMultiple);
} }
@Unique
private static void tickMultiple(World world, BlockPos pos, BlockState state, AbstractFurnaceBlockEntity blockEntity) { private static void tickMultiple(World world, BlockPos pos, BlockState state, AbstractFurnaceBlockEntity blockEntity) {
AbstractFurnaceBlockEntity.tick(world, pos, state, blockEntity); AbstractFurnaceBlockEntity.tick(world, pos, state, blockEntity);
int i = world.getGameRules().getInt(GameRules.PLAYERS_SLEEPING_PERCENTAGE); int i = world.getGameRules().getInt(GameRules.PLAYERS_SLEEPING_PERCENTAGE);
@@ -5,6 +5,7 @@ import io.netty.channel.ChannelHandlerContext;
import net.minecraft.network.QueryableServer; import net.minecraft.network.QueryableServer;
import net.minecraft.network.handler.LegacyQueryHandler; import net.minecraft.network.handler.LegacyQueryHandler;
import org.spongepowered.asm.mixin.Mixin; 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.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.Redirect;
@@ -16,6 +17,7 @@ import java.util.Locale;
@Mixin(LegacyQueryHandler.class) @Mixin(LegacyQueryHandler.class)
public class LegacyQueryHandlerMixin { public class LegacyQueryHandlerMixin {
@Unique
SocketAddress address; SocketAddress address;
@Inject(method = "channelRead", at = @At("HEAD")) @Inject(method = "channelRead", at = @At("HEAD"))
@@ -17,7 +17,7 @@ public abstract class SleepManagerMixin {
cir.setReturnValue(false); cir.setReturnValue(false);
return; return;
} }
var world = players.get(0).getServerWorld(); var world = players.getFirst().getServerWorld();
if (world.getTimeOfDay() % 24000 >= 12544) { if (world.getTimeOfDay() % 24000 >= 12544) {
if(!world.isRaining()){ if(!world.isRaining()){
cir.setReturnValue(false); cir.setReturnValue(false);
+1
View File
@@ -8,6 +8,7 @@
"client": [ "client": [
], ],
"server": [ "server": [
"server.MinecraftServerMixin",
"server.ServerPlayNetworkHandlerMixin", "server.ServerPlayNetworkHandlerMixin",
"server.bridge.ServerWorldBridge", "server.bridge.ServerWorldBridge",
"server.SleepManagerMixin", "server.SleepManagerMixin",