Merge branch 'minecraft-lod-mod-main'

This commit is contained in:
James Seibel
2023-07-11 18:52:11 -05:00
20 changed files with 145 additions and 239 deletions
+1 -1
View File
@@ -1,3 +1,3 @@
[submodule "coreSubProjects"]
path = coreSubProjects
url = https://gitlab.com/jeseibel/distant-horizons-core.git
url = https://gitlab.com/s809/distant-horizons-core.git
+1 -1
View File
@@ -216,7 +216,7 @@ subprojects { p ->
forgeShadowMe("com.formdev:flatlaf-extras:${rootProject.flatlaf_version}")
// Netty
forgeShadowMe("io.netty:netty-all:4.1.94.Final")
forgeShadowMe("io.netty:netty-all:${rootProject.netty_version}")
// Remember, for lwjgl dependancies that arent included in Minecraft, you need to also need to add it to the ShadowJar thing
forgeShadowMe("org.lwjgl:lwjgl-jawt:3.2.2") {
@@ -30,15 +30,21 @@ import com.seibel.distanthorizons.core.config.ConfigBase;
* This is the common main class
* @author Ran
*/
public class LodCommonMain {
public class LodCommonMain
{
public static boolean forge = false;
public static LodForgeMethodCaller forgeMethodCaller;
public static void startup(LodForgeMethodCaller caller) {
if (caller != null) {
public static void startup(LodForgeMethodCaller forgeMethodCaller)
{
if (forgeMethodCaller != null)
{
LodCommonMain.forge = true;
forgeMethodCaller = caller;
LodCommonMain.forgeMethodCaller = forgeMethodCaller;
}
DependencySetup.createSharedBindings();
SharedApi.init();
// if (!serverSided) {
@@ -53,4 +59,5 @@ public class LodCommonMain {
ConfigBase.INSTANCE = new ConfigBase(ModInfo.ID, ModInfo.NAME, Config.class,1);
Config.completeDelayedSetup();
}
}
@@ -1,43 +0,0 @@
/*
* This file is part of the Distant Horizons mod (formerly the LOD Mod),
* licensed under the GNU LGPL v3 License.
*
* Copyright (C) 2020-2022 James Seibel
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.seibel.distanthorizons.common.networking;
import net.minecraft.client.Minecraft;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.world.entity.player.Player;
/**
* This is packet handler for our mod
* It basically handles the packets sent from the server & client
*
* @author Ran
*/
// TODO: Server sided stuff here
public class NetworkHandler {
public static void receivePacketClient(Minecraft client, FriendlyByteBuf buf, Player player) {
// This just exists here for testing purposes, it'll be removed in the future
System.out.println("Received int " + buf.readInt());
}
public static void receivePacketServer(FriendlyByteBuf buf, Player player) {
}
}
@@ -1,61 +0,0 @@
/*
* This file is part of the Distant Horizons mod (formerly the LOD Mod),
* licensed under the GNU LGPL v3 License.
*
* Copyright (C) 2020-2022 James Seibel
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.seibel.distanthorizons.common.networking;
/*
#if MC_1_16_5
import me.shedaniel.architectury.networking.NetworkManager;
#else
import dev.architectury.networking.NetworkManager;
#endif
import net.minecraft.client.Minecraft;
import net.minecraft.network.FriendlyByteBuf;
*/
/**
* @author Ran
*/
// Comment: What does the 'server' side mean? Dedicated server? Or does it include the internal server?
// (I removed the hookup that calls the register method, since I'm not sure what it is doing yet)
public class NetworkReceiver {
/*
public void register_Client() {
NetworkManager.registerReceiver(NetworkManager.serverToClient(), Networking.RESOURCE_LOCATION, new ClientReceiver());
}
public void register_Server() {
NetworkManager.registerReceiver(NetworkManager.clientToServer(), Networking.RESOURCE_LOCATION, new ServerReceiver());
}
static class ServerReceiver implements NetworkManager.NetworkReceiver {
@Override
public void receive(FriendlyByteBuf buf, NetworkManager.PacketContext context) {
com.seibel.distanthorizons.common.networking.NetworkHandler.receivePacketServer(buf, context.getPlayer());
}
}
static class ClientReceiver implements NetworkManager.NetworkReceiver {
@Override
public void receive(FriendlyByteBuf buf, NetworkManager.PacketContext context) {
com.seibel.distanthorizons.common.networking.NetworkHandler.receivePacketClient(Minecraft.getInstance(), buf, context.getPlayer());
}
}
*/
}
@@ -1,67 +0,0 @@
/*
* This file is part of the Distant Horizons mod (formerly the LOD Mod),
* licensed under the GNU LGPL v3 License.
*
* Copyright (C) 2020-2022 James Seibel
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.seibel.distanthorizons.common.networking;
import com.seibel.distanthorizons.coreapi.ModInfo;
//#if MC_1_16_5
//import me.shedaniel.architectury.networking.NetworkManager;
//#else
//import dev.architectury.networking.NetworkManager;
//#endif
import io.netty.buffer.Unpooled;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerPlayer;
/**
* This class holds most of the networking code for the mod.
* @author Ran
*/
public class Networking {
public static final ResourceLocation RESOURCE_LOCATION = new ResourceLocation("lod", "data");
public static FriendlyByteBuf createNew() {
// TODO: Probably replace the Unpooled.buffer()
FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.buffer());
buf.writeInt(ModInfo.PROTOCOL_VERSION);
return buf;
}
/**
* Sends a packet to a player.
*
* @param player the player to send the packet to
* @param buf the payload of the packet.
*/
public static void send(ServerPlayer player, FriendlyByteBuf buf) {
// NetworkManager.sendToPlayer(player, RESOURCE_LOCATION, buf);
}
/**
* Sends a packet to the connected server.
*
* @param buf the payload of the packet
* @throws IllegalStateException if the client is not connected to a server
*/
public static void send(FriendlyByteBuf buf) throws IllegalStateException {
// NetworkManager.sendToServer(RESOURCE_LOCATION, buf);
}
}
@@ -45,7 +45,9 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftSha
* @author Ran
* @version 12-1-2021
*/
public class DependencySetup {
public class DependencySetup
{
public static void createSharedBindings()
{
SingletonInjector.INSTANCE.bind(ILangWrapper.class, LangWrapper.INSTANCE);
@@ -56,15 +58,18 @@ public class DependencySetup {
}
//@Environment(EnvType.SERVER)
public static void createServerBindings() {
public static void createServerBindings()
{
SingletonInjector.INSTANCE.bind(IMinecraftSharedWrapper.class, MinecraftDedicatedServerWrapper.INSTANCE);
}
//@Environment(EnvType.CLIENT)
public static void createClientBindings() {
public static void createClientBindings()
{
SingletonInjector.INSTANCE.bind(IMinecraftClientWrapper.class, MinecraftClientWrapper.INSTANCE);
SingletonInjector.INSTANCE.bind(IMinecraftSharedWrapper.class, MinecraftClientWrapper.INSTANCE);
SingletonInjector.INSTANCE.bind(IMinecraftRenderWrapper.class, MinecraftRenderWrapper.INSTANCE);
SingletonInjector.INSTANCE.bind(IReflectionHandler.class, ReflectionHandler.INSTANCE);
}
}
@@ -23,7 +23,9 @@ import java.util.function.Supplier;
public class DependencySetupDoneCheck
{
// TODO move to DependencySetup
public static boolean isDone = false;
// TODO why is this here and what is its purpose?
public static Supplier<Boolean> getIsCurrentThreadDistantGeneratorThread = (() -> {return false;});
}
@@ -124,7 +124,7 @@ public class WrapperFactory implements IWrapperFactory
// Intentional compiler error to bring attention to the missing wrapper function.
// If you need to work on an unimplemented version but don't have the ability to implement this yet
// you can comment it out, but please don't commit it. Someone will have to implement it .
// After implementing the new version please read this method's javadocs for instructions
// on what other locations also need to be updated, the DhAPI specifically needs to
// be updated to state which objects this method accepts.
@@ -22,6 +22,7 @@ package com.seibel.distanthorizons.common.wrappers.minecraft;
import java.io.File;
import java.lang.invoke.MethodHandles;
import java.util.ArrayList;
import java.util.UUID;
import com.mojang.blaze3d.platform.NativeImage;
import com.seibel.distanthorizons.common.wrappers.McObjectConverter;
@@ -148,6 +149,11 @@ public class MinecraftClientWrapper implements IMinecraftClientWrapper, IMinecra
return mc.player != null;
}
@Override
public UUID getPlayerUUID() {
return getPlayer().getUUID();
}
@Override
public DhBlockPos getPlayerBlockPos()
{
@@ -0,0 +1,43 @@
package com.seibel.distanthorizons.common.wrappers.misc;
import com.google.common.collect.MapMaker;
import com.seibel.distanthorizons.common.wrappers.world.ServerLevelWrapper;
import com.seibel.distanthorizons.core.wrapperInterfaces.misc.IServerPlayerWrapper;
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IServerLevelWrapper;
import net.minecraft.server.level.ServerPlayer;
import java.util.UUID;
import java.util.concurrent.ConcurrentMap;
public class ServerPlayerWrapper implements IServerPlayerWrapper {
private static final ConcurrentMap<ServerPlayer, ServerPlayerWrapper>
serverPlayerWrapperMap = new MapMaker().weakKeys().makeMap();
private final ServerPlayer serverPlayer;
public static ServerPlayerWrapper getWrapper(ServerPlayer serverPlayer)
{
return serverPlayerWrapperMap.computeIfAbsent(serverPlayer, ServerPlayerWrapper::new);
}
private ServerPlayerWrapper(ServerPlayer serverPlayer) {
this.serverPlayer = serverPlayer;
}
public UUID getUUID() {
return serverPlayer.getUUID();
}
public IServerLevelWrapper getLevel() {
return ServerLevelWrapper.getWrapper(serverPlayer.getLevel());
}
public Object getWrappedMcObject() {
return serverPlayer;
}
@Override
public String toString() {
return "Wrapped{" + serverPlayer.toString() + "}";
}
}
@@ -31,7 +31,7 @@ import net.minecraft.world.level.chunk.ChunkAccess;
import net.minecraft.world.level.chunk.ChunkStatus;
import net.minecraft.world.level.chunk.ProtoChunk;
import net.minecraft.world.level.levelgen.Heightmap;
#if POST_MC_1_18_2
#if POST_MC_1_18_2
#endif
public final class StepFeatures {
@@ -1,5 +1,6 @@
package com.seibel.distanthorizons.fabric;
import com.seibel.distanthorizons.common.LodCommonMain;
import com.seibel.distanthorizons.common.wrappers.DependencySetup;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.api.EnvType;
@@ -20,6 +21,7 @@ public class FabricClientMain implements ClientModInitializer
{
DependencySetup.createClientBindings();
FabricMain.init();
LodCommonMain.initConfig();
server_proxy = new FabricServerProxy(false);
server_proxy.registerEvents();
@@ -40,9 +40,11 @@ import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientChunkEvents;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents;
import net.fabricmc.fabric.api.event.player.AttackBlockCallback;
import net.fabricmc.fabric.api.event.player.UseBlockCallback;
import net.fabricmc.fabric.api.networking.v1.PacketSender;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.TitleScreen;
@@ -50,6 +52,9 @@ import java.nio.FloatBuffer;
import java.util.HashSet;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.multiplayer.ClientPacketListener;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.level.chunk.ChunkAccess;
import net.minecraft.world.phys.HitResult;
@@ -226,6 +231,12 @@ public class FabricClientProxy
onKeyInput();
}
});
ClientPlayNetworking.registerGlobalReceiver(new ResourceLocation("distant_horizons", "world_control"), // TODO move these strings into a constant somewhere
(Minecraft client, ClientPacketListener handler, FriendlyByteBuf byteBuffer, PacketSender responseSender) ->
{
ClientApi.INSTANCE.serverMessageReceived(byteBuffer);
});
}
private boolean isValidTime() { return !(Minecraft.getInstance().screen instanceof TitleScreen); }
@@ -1,7 +1,9 @@
package com.seibel.distanthorizons.fabric;
import com.seibel.distanthorizons.common.LodCommonMain;
import com.seibel.distanthorizons.common.wrappers.DependencySetup;
import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftDedicatedServerWrapper;
import com.seibel.distanthorizons.core.config.eventHandlers.presets.ThreadPresetConfigEventHandler;
import com.seibel.distanthorizons.core.util.LodUtil;
import net.fabricmc.api.DedicatedServerModInitializer;
import net.fabricmc.api.EnvType;
@@ -17,23 +19,37 @@ public class FabricDedicatedServerMain implements DedicatedServerModInitializer
private static final Logger LOGGER = LogManager.getLogger(FabricDedicatedServerMain.class.getSimpleName());
public static FabricServerProxy server_proxy;
public boolean hasPostSetupDone = false;
@Override
public void onInitializeServer() {
DependencySetup.createServerBindings();
FabricMain.init();
server_proxy = new FabricServerProxy(true);
server_proxy.registerEvents();
ServerLifecycleEvents.SERVER_STARTING.register((server) -> {
if (hasPostSetupDone) return;
hasPostSetupDone = true;
LodUtil.assertTrue(server instanceof DedicatedServer);
MinecraftDedicatedServerWrapper.INSTANCE.dedicatedServer = (DedicatedServer) server;
FabricMain.postInit();
LOGGER.info("Dedicated server inited at {}", server.getServerDirectory());
});
}
public boolean hasPostSetupDone = false;
@Override
public void onInitializeServer()
{
DependencySetup.createServerBindings();
FabricMain.init();
// FIXME this prevents returning uninitialized Config values
// resulting from a circular reference mid-initialization in a static class
// ThreadPresetConfigEventHandler <-> Config
ThreadPresetConfigEventHandler.INSTANCE.toString();
server_proxy = new FabricServerProxy(true);
server_proxy.registerEvents();
ServerLifecycleEvents.SERVER_STARTING.register((server) ->
{
if (this.hasPostSetupDone)
{
return;
}
this.hasPostSetupDone = true;
LodUtil.assertTrue(server instanceof DedicatedServer);
MinecraftDedicatedServerWrapper.INSTANCE.dedicatedServer = (DedicatedServer) server;
LodCommonMain.initConfig();
FabricMain.postInit();
LOGGER.info("Dedicated server initialized at "+server.getServerDirectory());
});
}
}
@@ -21,6 +21,7 @@ package com.seibel.distanthorizons.fabric;
import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiAfterDhInitEvent;
import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiBeforeDhInitEvent;
import com.seibel.distanthorizons.core.config.ConfigBase;
import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.*;
import com.seibel.distanthorizons.common.LodCommonMain;
import com.seibel.distanthorizons.coreapi.ModInfo;
@@ -54,6 +55,9 @@ public class FabricMain
if (Config.Client.Advanced.Graphics.Fog.disableVanillaFog.get() && SingletonInjector.INSTANCE.get(IModChecker.class).isModLoaded("bclib"))
ModAccessorInjector.INSTANCE.get(IBCLibAccessor.class).setRenderCustomFog(false); // Remove BCLib's fog
if (ConfigBase.INSTANCE == null)
throw new IllegalStateException("Config was not initialized. Make sure to call LodCommonMain.initConfig() before calling this method.");
LOGGER.info("Mod Post-Initialized");
}
@@ -88,9 +92,5 @@ public class FabricMain
LOGGER.info(ModInfo.READABLE_NAME + " Initialized");
ApiEventInjector.INSTANCE.fireAllEvents(DhApiAfterDhInitEvent.class, null);
// Init config
// The reason im initialising in this rather than the post init process is cus im using this for the auto updater
LodCommonMain.initConfig();
}
}
@@ -1,7 +1,7 @@
package com.seibel.distanthorizons.fabric;
import com.seibel.distanthorizons.common.networking.Networking;
import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper;
import com.seibel.distanthorizons.common.wrappers.misc.ServerPlayerWrapper;
import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper;
import com.seibel.distanthorizons.common.wrappers.world.ServerLevelWrapper;
import com.seibel.distanthorizons.common.wrappers.worldGeneration.BatchGenerationEnvironment;
@@ -16,13 +16,13 @@ import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerWorldEvents;
import net.fabricmc.fabric.api.networking.v1.PacketSender;
import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.TitleScreen;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.multiplayer.ClientPacketListener;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import org.apache.logging.log4j.Logger;
@@ -67,6 +67,7 @@ public class FabricServerProxy
private IClientLevelWrapper getClientLevelWrapper(ClientLevel level) { return ClientLevelWrapper.getWrapper(level); }
private ServerLevelWrapper getServerLevelWrapper(ServerLevel level) { return ServerLevelWrapper.getWrapper(level); }
private ServerPlayerWrapper getServerPlayerWrapper(ServerPlayer player) { return ServerPlayerWrapper.getWrapper(player); }
/** Registers Fabric Events */
public void registerEvents()
@@ -76,9 +77,6 @@ public class FabricServerProxy
/* Register the mod needed event callbacks */
// TEST EVENT
//ServerTickEvents.END_SERVER_TICK.register(this::tester);
// ServerTickEvent
ServerTickEvents.END_SERVER_TICK.register((server) -> SERVER_API.serverTickEvent());
@@ -130,23 +128,20 @@ public class FabricServerProxy
});
// ServerChunkSaveEvent - Done in MixinChunkMap
ClientPlayNetworking.registerGlobalReceiver(new ResourceLocation("distant_horizons", "world_control"), // TODO move these strings into a constant somewhere
(Minecraft client, ClientPacketListener handler, FriendlyByteBuf byteBuffer, PacketSender responseSender) ->
{
ClientApi.INSTANCE.serverMessageReceived(byteBuffer);
});
}
// This just exists here for testing purposes, it'll be removed in the future
public void tester(MinecraftServer server)
{ // I disabled the Networking functions for now so this will not work atm - coolGi
for (ServerPlayer player : server.getPlayerList().getPlayers())
ServerPlayConnectionEvents.JOIN.register((handler, sender, server) ->
{
FriendlyByteBuf payload = Networking.createNew();
payload.writeInt(1);
System.out.println("Sending int 1");
Networking.send(player, payload);
}
if (isValidTime())
{
ServerApi.INSTANCE.serverPlayerJoinEvent(getServerPlayerWrapper(handler.player));
}
});
ServerPlayConnectionEvents.DISCONNECT.register((handler, server) ->
{
if (isValidTime())
{
ServerApi.INSTANCE.serverPlayerDisconnectEvent(getServerPlayerWrapper(handler.player));
}
});
}
}
@@ -67,5 +67,5 @@ public class MixinClientPacketListener
}
#endif
}
@@ -1,6 +1,5 @@
package com.seibel.distanthorizons.forge;
import com.seibel.distanthorizons.common.networking.Networking;
import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper;
import com.seibel.distanthorizons.common.wrappers.world.ServerLevelWrapper;
import com.seibel.distanthorizons.common.wrappers.worldGeneration.BatchGenerationEnvironment;
@@ -145,14 +144,4 @@ public class ForgeServerProxy
}
}
}
// This just exists here for testing purposes, it'll be removed in the future
public void tester(MinecraftServer server) {
for (ServerPlayer player : server.getPlayerList().getPlayers()) {
FriendlyByteBuf payload = Networking.createNew();
payload.writeInt(1);
System.out.println("Sending int 1");
Networking.send(player, payload);
}
}
}
+1
View File
@@ -26,6 +26,7 @@ flatlaf_version=3.0
svgSalamander_version=1.1.3
log4j_version=2.20.0
netty_version=4.1.94.Final
lwjgl_version=3.2.3
joml_version=1.10.2