Initial buggy plugin channel support

This commit is contained in:
s809
2024-03-05 22:10:05 +05:00
parent a59f359133
commit 4d573c4aea
12 changed files with 183 additions and 79 deletions
@@ -1,21 +1,20 @@
package com.seibel.distanthorizons.common.wrappers.level;
import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper;
import com.seibel.distanthorizons.core.level.IServerKeyedClientLevel;
import com.seibel.distanthorizons.core.level.IKeyedClientLevelManager;
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper;
import com.seibel.distanthorizons.core.wrapperInterfaces.world.ILevelWrapper;
import net.minecraft.client.multiplayer.ClientLevel;
import java.util.Objects;
import org.jetbrains.annotations.Nullable;
public class KeyedClientLevelManager implements IKeyedClientLevelManager
{
public static final KeyedClientLevelManager INSTANCE = new KeyedClientLevelManager();
/** This is set and managed by the ClientApi for servers with support for DH. */
private IServerKeyedClientLevel overrideWrapper = null;
private boolean useOverrideWrapper = false;
@Nullable
private IServerKeyedClientLevel serverKeyedLevel = null;
private boolean managedByServer = false;
//=============//
@@ -30,25 +29,40 @@ public class KeyedClientLevelManager implements IKeyedClientLevelManager
// level override logic //
//======================//
@Override
public void setServerKeyedLevel(IServerKeyedClientLevel clientLevel) { this.overrideWrapper = clientLevel; }
@Override
public IServerKeyedClientLevel getOverrideWrapper() { return this.overrideWrapper; }
@Override
public IServerKeyedClientLevel getServerKeyedLevel(ILevelWrapper level, String serverLevelKey)
@Nullable
public IServerKeyedClientLevel getServerKeyedLevel()
{
Objects.requireNonNull(level);
Objects.requireNonNull(serverLevelKey);
return new ServerKeyedClientLevel((ClientLevel) level.getWrappedMcObject(), serverLevelKey);
return this.serverKeyedLevel;
}
@Override
public IServerKeyedClientLevel setServerKeyedLevel(IClientLevelWrapper clientLevel, String levelKey)
{
IServerKeyedClientLevel keyedLevel = new ServerKeyedClientLevel((ClientLevel) clientLevel.getWrappedMcObject(), levelKey);
this.serverKeyedLevel = keyedLevel;
this.managedByServer = true;
return keyedLevel;
}
@Override
public void setUseOverrideWrapper(boolean useOverrideWrapper) { this.useOverrideWrapper = useOverrideWrapper; }
public void clearServerKeyedLevel()
{
this.serverKeyedLevel = null;
}
@Override
public boolean getUseOverrideWrapper() { return this.useOverrideWrapper; }
public boolean isEnabled()
{
return this.managedByServer;
}
@Override
public void disable()
{
this.clearServerKeyedLevel();
this.managedByServer = false;
}
}
@@ -0,0 +1,36 @@
package com.seibel.distanthorizons.common.wrappers.network;
import com.seibel.distanthorizons.core.wrapperInterfaces.misc.IPluginPacketSender;
import com.seibel.distanthorizons.core.wrapperInterfaces.misc.IServerPlayerWrapper;
import com.seibel.distanthorizons.coreapi.ModInfo;
import io.netty.buffer.ByteBuf;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerPlayer;
import org.jetbrains.annotations.Nullable;
public abstract class AbstractPluginPacketSender implements IPluginPacketSender
{
public static final ResourceLocation PLUGIN_CHANNEL_RESOURCE = new ResourceLocation(ModInfo.RESOURCE_NAMESPACE, ModInfo.PLUGIN_CHANNEL_PATH);
@Override
public final void sendPluginPacket(@Nullable IServerPlayerWrapper serverPlayer, ByteBuf buffer)
{
FriendlyByteBuf mcBuffer = new FriendlyByteBuf(buffer);
if (serverPlayer != null)
{
this.sendPluginPacketServer((ServerPlayer) serverPlayer.getWrappedMcObject(), mcBuffer);
}
else
{
this.sendPluginPacketClient(mcBuffer);
}
}
protected abstract void sendPluginPacketClient(FriendlyByteBuf mcBuffer);
protected abstract void sendPluginPacketServer(ServerPlayer serverPlayer, FriendlyByteBuf mcBuffer);
}
@@ -1,7 +1,6 @@
package com.seibel.distanthorizons.common.wrappers.world;
import com.seibel.distanthorizons.api.enums.worldGeneration.EDhApiLevelType;
import com.seibel.distanthorizons.api.interfaces.world.IDhApiDimensionTypeWrapper;
import com.seibel.distanthorizons.common.wrappers.McObjectConverter;
import com.seibel.distanthorizons.common.wrappers.block.BiomeWrapper;
import com.seibel.distanthorizons.common.wrappers.block.BlockStateWrapper;
@@ -10,6 +9,7 @@ import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper;
import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftClientWrapper;
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
import com.seibel.distanthorizons.core.level.IKeyedClientLevelManager;
import com.seibel.distanthorizons.core.level.IServerKeyedClientLevel;
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
import com.seibel.distanthorizons.core.pos.DhBlockPos;
import com.seibel.distanthorizons.core.pos.DhChunkPos;
@@ -20,9 +20,7 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapp
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IDimensionTypeWrapper;
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IServerLevelWrapper;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.level.LightLayer;
import net.minecraft.world.level.chunk.ChunkAccess;
import net.minecraft.world.level.chunk.ChunkSource;
import net.minecraft.world.level.chunk.ChunkStatus;
@@ -64,9 +62,10 @@ public class ClientLevelWrapper implements IClientLevelWrapper
}
// used if the client is connected to a server that defines the currently loaded level
if (KEYED_CLIENT_LEVEL_MANAGER.getUseOverrideWrapper())
IServerKeyedClientLevel overrideLevel = KEYED_CLIENT_LEVEL_MANAGER.getServerKeyedLevel();
if (overrideLevel != null)
{
return KEYED_CLIENT_LEVEL_MANAGER.getOverrideWrapper();
return overrideLevel;
}
return getWrapperIgnoringOverride(level);
@@ -99,13 +98,11 @@ public class ClientLevelWrapper implements IClientLevelWrapper
}
catch (Exception e)
{
LOGGER.error("Failed to get server side wrapper for client level: " + level);
LOGGER.error("Failed to get server side wrapper for client level: " + this.level);
return null;
}
}
//====================//
// base level methods //
//====================//
@@ -29,6 +29,7 @@ import com.seibel.distanthorizons.common.wrappers.block.BlockStateWrapper;
import com.seibel.distanthorizons.common.wrappers.block.cache.ServerBlockDetailMap;
import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper;
import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftClientWrapper;
import com.seibel.distanthorizons.core.level.IServerKeyedClientLevel;
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
import com.seibel.distanthorizons.core.pos.DhBlockPos;
import com.seibel.distanthorizons.core.pos.DhChunkPos;
@@ -92,13 +93,13 @@ public class ServerLevelWrapper implements IServerLevelWrapper
@Override
public File getSaveFolder()
{
return level.getChunkSource().getDataStorage().dataFolder;
return this.level.getChunkSource().getDataStorage().dataFolder;
}
@Override
public DimensionTypeWrapper getDimensionType()
{
return DimensionTypeWrapper.getDimensionTypeWrapper(level.dimensionType());
return DimensionTypeWrapper.getDimensionTypeWrapper(this.level.dimensionType());
}
@Override
@@ -106,25 +107,25 @@ public class ServerLevelWrapper implements IServerLevelWrapper
public ServerLevel getLevel()
{
return level;
return this.level;
}
@Override
public boolean hasCeiling()
{
return level.dimensionType().hasCeiling();
return this.level.dimensionType().hasCeiling();
}
@Override
public boolean hasSkyLight()
{
return level.dimensionType().hasSkyLight();
return this.level.dimensionType().hasSkyLight();
}
@Override
public int getHeight()
{
return level.getHeight();
return this.level.getHeight();
}
@Override
@@ -133,42 +134,48 @@ public class ServerLevelWrapper implements IServerLevelWrapper
#if MC_VER < MC_1_17_1
return 0;
#else
return level.getMinBuildHeight();
return this.level.getMinBuildHeight();
#endif
}
@Override
public IChunkWrapper tryGetChunk(DhChunkPos pos)
{
if (!level.hasChunk(pos.x, pos.z)) return null;
ChunkAccess chunk = level.getChunk(pos.x, pos.z, ChunkStatus.FULL, false);
if (chunk == null) return null;
return new ChunkWrapper(chunk, level, this);
if (!this.level.hasChunk(pos.x, pos.z))
{
return null;
}
ChunkAccess chunk = this.level.getChunk(pos.x, pos.z, ChunkStatus.FULL, false);
if (chunk == null)
{
return null;
}
return new ChunkWrapper(chunk, this.level, this);
}
@Override
public boolean hasChunkLoaded(int chunkX, int chunkZ)
{
// world.hasChunk(chunkX, chunkZ); THIS DOES NOT WORK FOR CLIENT LEVEL CAUSE MOJANG ALWAYS RETURN TRUE FOR THAT!
ChunkSource source = level.getChunkSource();
ChunkSource source = this.level.getChunkSource();
return source.hasChunk(chunkX, chunkZ);
}
@Override
public IBlockStateWrapper getBlockState(DhBlockPos pos)
{
return BlockStateWrapper.fromBlockState(level.getBlockState(McObjectConverter.Convert(pos)), this);
return BlockStateWrapper.fromBlockState(this.level.getBlockState(McObjectConverter.Convert(pos)), this);
}
@Override
public IBiomeWrapper getBiome(DhBlockPos pos)
{
return BiomeWrapper.getBiomeWrapper(level.getBiome(McObjectConverter.Convert(pos)), this);
return BiomeWrapper.getBiomeWrapper(this.level.getBiome(McObjectConverter.Convert(pos)), this);
}
@Override
public ServerLevel getWrappedMcObject()
{
return level;
return this.level;
}
@Override
@@ -177,7 +184,7 @@ public class ServerLevelWrapper implements IServerLevelWrapper
@Override
public String toString()
{
return "Wrapped{" + level.toString() + "@" + getDimensionType().getDimensionName() + "}";
return "Wrapped{" + this.level.toString() + "@" + this.getDimensionType().getDimensionName() + "}";
}
}
@@ -22,6 +22,7 @@ package com.seibel.distanthorizons.fabric;
import com.seibel.distanthorizons.common.AbstractModInitializer;
import com.seibel.distanthorizons.common.rendering.SeamlessOverdraw;
import com.seibel.distanthorizons.common.wrappers.McObjectConverter;
import com.seibel.distanthorizons.common.wrappers.network.AbstractPluginPacketSender;
import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper;
import com.seibel.distanthorizons.core.api.internal.ClientApi;
import com.mojang.blaze3d.platform.InputConstants;
@@ -32,18 +33,16 @@ import com.seibel.distanthorizons.core.config.Config;
import com.seibel.distanthorizons.core.dependencyInjection.ModAccessorInjector;
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
import com.seibel.distanthorizons.core.pos.DhBlockPos;
import com.seibel.distanthorizons.core.pos.DhChunkPos;
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper;
import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.ISodiumAccessor;
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper;
import com.seibel.distanthorizons.coreapi.ModInfo;
import com.seibel.distanthorizons.fabric.wrappers.modAccessor.SodiumAccessor;
import io.netty.buffer.ByteBuf;
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.ClientPlayConnectionEvents;
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;
@@ -60,7 +59,6 @@ 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;
@@ -93,6 +91,7 @@ public class FabricClientProxy implements AbstractModInitializer.IEventProxy
* Registers Fabric Events
* @author Ran
*/
@Override
public void registerEvents()
{
LOGGER.info("Registering Fabric Client Events");
@@ -236,16 +235,16 @@ public class FabricClientProxy implements AbstractModInitializer.IEventProxy
// networking event //
//==================//
ClientPlayNetworking.registerGlobalReceiver(new ResourceLocation(ModInfo.NETWORKING_RESOURCE_NAMESPACE, ModInfo.MULTIVERSE_PLUGIN_NAMESPACE),
ClientPlayNetworking.registerGlobalReceiver(AbstractPluginPacketSender.PLUGIN_CHANNEL_RESOURCE,
(Minecraft client, ClientPacketListener handler, FriendlyByteBuf friendlyByteBuf, PacketSender responseSender) ->
{
// converting to a ByteBuf is necessary otherwise Fabric will complain when the game boots
ByteBuf nettyByteBuf = friendlyByteBuf.asReadOnly();
// remove the Bukkit/Forge packet ID byte
nettyByteBuf.readByte();
//nettyByteBuf.readByte();
ClientApi.INSTANCE.serverMessageReceived(nettyByteBuf);
ClientApi.INSTANCE.pluginMessageReceived(nettyByteBuf);
});
}
@@ -275,14 +274,14 @@ public class FabricClientProxy implements AbstractModInitializer.IEventProxy
// Diff and trigger events
for (int keyCode : currentKeyDown)
{
if (!previouslyPressKeyCodes.contains(keyCode))
if (!this.previouslyPressKeyCodes.contains(keyCode))
{
ClientApi.INSTANCE.keyPressedEvent(keyCode);
}
}
// Update the set
previouslyPressKeyCodes = currentKeyDown;
this.previouslyPressKeyCodes = currentKeyDown;
}
}
@@ -26,6 +26,7 @@ import com.seibel.distanthorizons.core.config.ConfigBase;
import com.seibel.distanthorizons.core.dependencyInjection.ModAccessorInjector;
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper;
import com.seibel.distanthorizons.core.wrapperInterfaces.misc.IPluginPacketSender;
import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.*;
import com.seibel.distanthorizons.coreapi.ModInfo;
import com.seibel.distanthorizons.fabric.wrappers.modAccessor.*;
@@ -54,12 +55,16 @@ import java.util.function.Consumer;
*/
public class FabricMain extends AbstractModInitializer implements ClientModInitializer, DedicatedServerModInitializer
{
private static final ResourceLocation INITIAL_PHASE = ResourceLocation.tryParse("distanthorizons:dedicated_server_initial");
private static final ResourceLocation INITIAL_PHASE = new ResourceLocation(ModInfo.RESOURCE_NAMESPACE, ModInfo.DEDICATED_SERVER_INITIAL_PATH);
@Override
protected void createInitialBindings() { SingletonInjector.INSTANCE.bind(IModChecker.class, ModChecker.INSTANCE); }
protected void createInitialBindings()
{
SingletonInjector.INSTANCE.bind(IModChecker.class, ModChecker.INSTANCE);
SingletonInjector.INSTANCE.bind(IPluginPacketSender.class, new FabricPluginPacketSender());
}
@Override
protected IEventProxy createClientProxy() { return new FabricClientProxy(); }
@@ -123,15 +128,21 @@ public class FabricMain extends AbstractModInitializer implements ClientModIniti
SingletonInjector.INSTANCE.runDelayedSetup();
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 MC_VER >= MC_1_20_1
if (SingletonInjector.INSTANCE.get(IModChecker.class).isModLoaded("sodium"))
{
ModAccessorInjector.INSTANCE.get(ISodiumAccessor.class).setFogOcclusion(false); // FIXME: This is a tmp fix for sodium 0.5.0, and 0.5.1. This is fixed in sodium 0.5.2
}
#endif
if (ConfigBase.INSTANCE == null)
{
throw new IllegalStateException("Config was not initialized. Make sure to call LodCommonMain.initConfig() before calling this method.");
}
}
}
@@ -0,0 +1,23 @@
package com.seibel.distanthorizons.fabric;
import com.seibel.distanthorizons.common.wrappers.network.AbstractPluginPacketSender;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.server.level.ServerPlayer;
public class FabricPluginPacketSender extends AbstractPluginPacketSender
{
@Override
protected void sendPluginPacketClient(FriendlyByteBuf mcBuffer)
{
ClientPlayNetworking.send(PLUGIN_CHANNEL_RESOURCE, mcBuffer);
}
@Override
protected void sendPluginPacketServer(ServerPlayer serverPlayer, FriendlyByteBuf mcBuffer)
{
ServerPlayNetworking.send(serverPlayer, PLUGIN_CHANNEL_RESOURCE, mcBuffer);
}
}
@@ -3,19 +3,23 @@ package com.seibel.distanthorizons.fabric;
import com.seibel.distanthorizons.common.AbstractModInitializer;
import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper;
import com.seibel.distanthorizons.common.wrappers.misc.ServerPlayerWrapper;
import com.seibel.distanthorizons.common.wrappers.network.AbstractPluginPacketSender;
import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper;
import com.seibel.distanthorizons.common.wrappers.world.ServerLevelWrapper;
import com.seibel.distanthorizons.common.wrappers.worldGeneration.BatchGenerationEnvironment;
import com.seibel.distanthorizons.core.api.internal.ClientApi;
import com.seibel.distanthorizons.core.api.internal.ServerApi;
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper;
import com.seibel.distanthorizons.core.wrapperInterfaces.world.ILevelWrapper;
import io.netty.buffer.ByteBuf;
import net.fabricmc.fabric.api.entity.event.v1.ServerEntityWorldChangeEvents;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerChunkEvents;
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.ServerPlayConnectionEvents;
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.TitleScreen;
import net.minecraft.client.multiplayer.ClientLevel;
@@ -52,7 +56,7 @@ public class FabricServerProxy implements AbstractModInitializer.IEventProxy
private boolean isValidTime()
{
if (isDedicated)
if (this.isDedicated)
{
return true;
}
@@ -66,6 +70,7 @@ public class FabricServerProxy implements AbstractModInitializer.IEventProxy
private ServerPlayerWrapper getServerPlayerWrapper(ServerPlayer player) { return ServerPlayerWrapper.getWrapper(player); }
/** Registers Fabric Events */
@Override
public void registerEvents()
{
LOGGER.info("Registering Fabric Server Events");
@@ -80,15 +85,15 @@ public class FabricServerProxy implements AbstractModInitializer.IEventProxy
//TODO: Check if both of these use the correct timed events. (i.e. is it 'ed' or 'ing' one?)
ServerLifecycleEvents.SERVER_STARTING.register((server) ->
{
if (isValidTime())
if (this.isValidTime())
{
ServerApi.INSTANCE.serverLoadEvent(isDedicated);
ServerApi.INSTANCE.serverLoadEvent(this.isDedicated);
}
});
// ServerWorldUnloadEvent
ServerLifecycleEvents.SERVER_STOPPED.register((server) ->
{
if (isValidTime())
if (this.isValidTime())
{
ServerApi.INSTANCE.serverUnloadEvent();
}
@@ -97,25 +102,25 @@ public class FabricServerProxy implements AbstractModInitializer.IEventProxy
// ServerLevelLoadEvent
ServerWorldEvents.LOAD.register((server, level) ->
{
if (isValidTime())
if (this.isValidTime())
{
ServerApi.INSTANCE.serverLevelLoadEvent(getServerLevelWrapper(level));
ServerApi.INSTANCE.serverLevelLoadEvent(this.getServerLevelWrapper(level));
}
});
// ServerLevelUnloadEvent
ServerWorldEvents.UNLOAD.register((server, level) ->
{
if (isValidTime())
if (this.isValidTime())
{
ServerApi.INSTANCE.serverLevelUnloadEvent(getServerLevelWrapper(level));
ServerApi.INSTANCE.serverLevelUnloadEvent(this.getServerLevelWrapper(level));
}
});
// ServerChunkLoadEvent
ServerChunkEvents.CHUNK_LOAD.register((server, chunk) ->
{
ILevelWrapper level = getServerLevelWrapper((ServerLevel) chunk.getLevel());
if (isValidTime())
ILevelWrapper level = this.getServerLevelWrapper((ServerLevel) chunk.getLevel());
if (this.isValidTime())
{
ServerApi.INSTANCE.serverChunkLoadEvent(
new ChunkWrapper(chunk, chunk.getLevel(), level),
@@ -126,29 +131,43 @@ public class FabricServerProxy implements AbstractModInitializer.IEventProxy
ServerPlayConnectionEvents.JOIN.register((handler, sender, server) ->
{
if (isValidTime())
if (this.isValidTime())
{
ServerApi.INSTANCE.serverPlayerJoinEvent(getServerPlayerWrapper(handler.player));
ServerApi.INSTANCE.serverPlayerJoinEvent(this.getServerPlayerWrapper(handler.player));
}
});
ServerPlayConnectionEvents.DISCONNECT.register((handler, server) ->
{
if (isValidTime())
if (this.isValidTime())
{
ServerApi.INSTANCE.serverPlayerDisconnectEvent(getServerPlayerWrapper(handler.player));
ServerApi.INSTANCE.serverPlayerDisconnectEvent(this.getServerPlayerWrapper(handler.player));
}
});
ServerEntityWorldChangeEvents.AFTER_PLAYER_CHANGE_WORLD.register((player, origin, dest) ->
{
if (isValidTime())
if (this.isValidTime())
{
ServerApi.INSTANCE.serverPlayerLevelChangeEvent(
getServerPlayerWrapper(player),
getServerLevelWrapper(origin),
getServerLevelWrapper(dest)
this.getServerPlayerWrapper(player),
this.getServerLevelWrapper(origin),
this.getServerLevelWrapper(dest)
);
}
});
//if (this.isDedicated)
//{
// ServerPlayNetworking.registerGlobalReceiver(AbstractPluginPacketSender.PLUGIN_CHANNEL_RESOURCE, (server, serverPlayer, handler, friendlyByteBuf, responseSender) ->
// {
// // converting to a ByteBuf is necessary otherwise Fabric will complain when the game boots
// ByteBuf nettyByteBuf = friendlyByteBuf.asReadOnly();
//
// // remove the Bukkit/Forge packet ID byte
// nettyByteBuf.readByte();
//
// ClientApi.INSTANCE.pluginMessageReceived(nettyByteBuf);
// });
//}
}
}
@@ -27,7 +27,7 @@ public class MixinClientPacketListener
void onHandleLoginEnd(CallbackInfo ci) { ClientApi.INSTANCE.onClientOnlyConnected(); }
@Inject(method = "handleRespawn", at = @At("HEAD"))
void onHandleRespawnStart(CallbackInfo ci) { ClientApi.INSTANCE.clientLevelUnloadEvent(ClientLevelWrapper.getWrapper(this.level)); }
void onHandleRespawnStart(CallbackInfo ci) { ClientApi.INSTANCE.clientLevelUnloadEvent(ClientLevelWrapper.getWrapper(this.level), true); }
@Inject(method = "handleRespawn", at = @At("RETURN"))
void onHandleRespawnEnd(CallbackInfo ci) { ClientApi.INSTANCE.clientLevelLoadEvent(ClientLevelWrapper.getWrapper(this.level)); }
@@ -79,8 +79,6 @@ import net.minecraftforge.event.TickEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import org.lwjgl.opengl.GL32;
import java.util.function.Predicate;
/**
* This handles all events sent to the client,
* and is the starting point for most of the mod.
@@ -277,10 +275,10 @@ public class ForgeClientProxy implements AbstractModInitializer.IEventProxy
{
#if MC_VER >= MC_1_20_2
Channel.VersionTest versionTest = (status, version)
-> status != Channel.VersionTest.Status.PRESENT || version == ModInfo.MULTIVERSE_PLUGIN_PROTOCOL_VERSION;
-> status != Channel.VersionTest.Status.PRESENT || version == ModInfo.PLUGIN_PROTOCOL_VERSION;
multiversePluginChannel = ChannelBuilder.named(new ResourceLocation(ModInfo.NETWORKING_RESOURCE_NAMESPACE, ModInfo.MULTIVERSE_PLUGIN_NAMESPACE))
.networkProtocolVersion(ModInfo.MULTIVERSE_PLUGIN_PROTOCOL_VERSION)
multiversePluginChannel = ChannelBuilder.named(new ResourceLocation(ModInfo.RESOURCE_NAMESPACE, ModInfo.PLUGIN_CHANNEL_PATH))
.networkProtocolVersion(ModInfo.PLUGIN_PROTOCOL_VERSION)
.serverAcceptedVersions(versionTest)
.clientAcceptedVersions(versionTest)
.simpleChannel();
@@ -289,7 +287,7 @@ public class ForgeClientProxy implements AbstractModInitializer.IEventProxy
.decoder(FriendlyByteBuf::asReadOnly)
.consumerNetworkThread((nettyByteBuf, contextRef) ->
{
ClientApi.INSTANCE.serverMessageReceived(nettyByteBuf);
ClientApi.INSTANCE.pluginMessageReceived(nettyByteBuf);
contextRef.setPacketHandled(true);
})
.add();
@@ -266,7 +266,7 @@ public class NeoforgeClientProxy implements AbstractModInitializer.IEventProxy
try
{
int version = Integer.parseInt(versionString);
return ModInfo.MULTIVERSE_PLUGIN_PROTOCOL_VERSION == version;
return ModInfo.PLUGIN_PROTOCOL_VERSION == version;
}
catch (NumberFormatException ignored)
{