Skip to content

Commit

Permalink
sync with sakura-ryoko/servux
Browse files Browse the repository at this point in the history
  • Loading branch information
TexBlock committed Jul 24, 2024
1 parent 12e73a8 commit ea41a22
Show file tree
Hide file tree
Showing 31 changed files with 1,518 additions and 130 deletions.
2 changes: 1 addition & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ mappings_patch="1.21+build.4"
neoforge="21.0.60-beta"

# Mod properties
version="0.1.1"
version="0.1.2"
maven-group="org.thinkingstudio"
archives-name="ServuxForged"

Expand Down
21 changes: 14 additions & 7 deletions src/main/java/fi/dy/masa/servux/Servux.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,29 +2,36 @@

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import fi.dy.masa.servux.dataproviders.DataProviderManager;
import fi.dy.masa.servux.dataproviders.EntitiesDataProvider;
import fi.dy.masa.servux.dataproviders.LitematicsDataProvider;
import fi.dy.masa.servux.dataproviders.StructureDataProvider;
import fi.dy.masa.servux.dataproviders.*;
import fi.dy.masa.servux.event.PlayerHandler;
import fi.dy.masa.servux.event.PlayerListener;
import fi.dy.masa.servux.servux.PlayerListener;
import fi.dy.masa.servux.event.ServerHandler;
import fi.dy.masa.servux.event.ServerListener;
import fi.dy.masa.servux.servux.ServerListener;

public class Servux
{
public static final Logger logger = LogManager.getLogger(Reference.MOD_ID);

public static void onInitialize()
{
DataProviderManager.INSTANCE.registerDataProvider(StructureDataProvider.INSTANCE);
DataProviderManager.INSTANCE.registerDataProvider(ServuxConfigProvider.INSTANCE);
DataProviderManager.INSTANCE.registerDataProvider(LitematicsDataProvider.INSTANCE);
DataProviderManager.INSTANCE.registerDataProvider(EntitiesDataProvider.INSTANCE);
DataProviderManager.INSTANCE.registerDataProvider(StructureDataProvider.INSTANCE);
//DataProviderManager.INSTANCE.registerDataProvider(TweaksDataProvider.INSTANCE);

ServerListener serverListener = new ServerListener();
ServerHandler.getInstance().registerServerHandler(serverListener);

PlayerListener playerListener = new PlayerListener();
PlayerHandler.getInstance().registerPlayerHandler(playerListener);
}

public static void debugLog(String msg, Object... args)
{
if (ServuxConfigProvider.INSTANCE.hasDebugMode())
{
logger.info(msg, args);
}
}
}
22 changes: 22 additions & 0 deletions src/main/java/fi/dy/masa/servux/commands/CommandProvider.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package fi.dy.masa.servux.commands;

import com.mojang.brigadier.CommandDispatcher;
import net.minecraft.command.CommandRegistryAccess;
import net.minecraft.server.command.CommandManager;
import net.minecraft.server.command.ServerCommandSource;

public class CommandProvider
{
private static final CommandProvider INSTANCE = new CommandProvider();
public static CommandProvider getInstance() { return INSTANCE; }

/**
* The idea here is to eventually create a more Robust Command Provider, using an interface
*/
public void registerCommands(CommandDispatcher<ServerCommandSource> dispatcher,
CommandRegistryAccess registryAccess,
CommandManager.RegistrationEnvironment environment)
{
ServuxCommand.register(dispatcher);
}
}
34 changes: 34 additions & 0 deletions src/main/java/fi/dy/masa/servux/commands/ServuxCommand.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package fi.dy.masa.servux.commands;

import com.mojang.brigadier.CommandDispatcher;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import net.minecraft.server.command.CommandManager;
import net.minecraft.server.command.ServerCommandSource;
import fi.dy.masa.servux.Reference;
import fi.dy.masa.servux.dataproviders.ServuxConfigProvider;

public class ServuxCommand
{
@SuppressWarnings("unchecked")
public static void register(CommandDispatcher<ServerCommandSource> dispatcher)
{
dispatcher.register((LiteralArgumentBuilder)((LiteralArgumentBuilder) CommandManager
.literal(Reference.MOD_ID).requires((source) ->
ServuxConfigProvider.INSTANCE.hasPermission(source.getPlayer()) || source.hasPermissionLevel(4)))
.then(CommandManager.literal("reload").requires((source) ->
ServuxConfigProvider.INSTANCE.hasBasePermission_Node(source.getPlayer(), "reload") || source.hasPermissionLevel(4))
.executes((ctx) ->
{
ServuxConfigProvider.INSTANCE.doReloadConfig(ctx.getSource());
return 1;
}))
.then(CommandManager.literal("save").requires((source) ->
ServuxConfigProvider.INSTANCE.hasBasePermission_Node(source.getPlayer(), "save") || source.hasPermissionLevel(4))
.executes((ctx) ->
{
ServuxConfigProvider.INSTANCE.doSaveConfig(ctx.getSource());
return 1;
}))
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ public abstract class DataProviderBase implements IDataProvider
protected final int protocolVersion;
protected final int defaultPerm;
protected boolean enabled;
protected boolean playRegistered;
private int tickRate = 40;

protected DataProviderBase(String name, Identifier channel, int protocolVersion, int defaultPerm, String permNode, String description)
Expand Down Expand Up @@ -59,6 +60,18 @@ public void setEnabled(boolean enabled)
this.enabled = enabled;
}

@Override
public boolean isRegistered()
{
return this.playRegistered;
}

@Override
public void setRegistered(boolean toggle)
{
this.playRegistered = toggle;
}

protected void setTickRate(int tickRate)
{
this.tickRate = Math.max(tickRate, 1);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import com.google.gson.JsonPrimitive;
import net.minecraft.server.MinecraftServer;
import fi.dy.masa.servux.Reference;
import fi.dy.masa.servux.Servux;
import fi.dy.masa.servux.util.JsonUtils;

public class DataProviderManager
Expand Down Expand Up @@ -111,11 +112,29 @@ protected void updatePacketHandlerRegistration(IDataProvider provider)
}
}

public void onServerTickEndPre()
{
for (IDataProvider provider : this.providersImmutable)
{
provider.onTickEndPre();
}
}

public void onServerTickEndPost()
{
for (IDataProvider provider : this.providersImmutable)
{
provider.onTickEndPost();
}
}

public void readFromConfig()
{
JsonElement el = JsonUtils.parseJsonFile(this.getConfigFile());
JsonObject obj = null;

Servux.debugLog("DataProviderManager#readFromConfig()");

if (el != null && el.isJsonObject())
{
JsonObject root = el.getAsJsonObject();
Expand Down Expand Up @@ -149,6 +168,8 @@ public void writeToConfig()
JsonObject root = new JsonObject();
JsonObject objToggles = new JsonObject();

Servux.debugLog("DataProviderManager#writeToConfig()");

for (IDataProvider provider : this.providersImmutable)
{
String name = provider.getName();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,11 @@ protected EntitiesDataProvider()
public void registerHandler()
{
ServerPlayHandler.getInstance().registerServerPlayHandler(HANDLER);
HANDLER.registerPlayPayload(ServuxEntitiesPacket.Payload.ID, ServuxEntitiesPacket.Payload.CODEC, IPluginServerPlayHandler.BOTH_SERVER);
if (this.isRegistered() == false)
{
HANDLER.registerPlayPayload(ServuxEntitiesPacket.Payload.ID, ServuxEntitiesPacket.Payload.CODEC, IPluginServerPlayHandler.BOTH_SERVER);
this.setRegistered(true);
}
HANDLER.registerPlayReceiver(ServuxEntitiesPacket.Payload.ID, HANDLER::receivePlayPayload);
}

Expand All @@ -58,12 +62,13 @@ public IPluginServerPlayHandler<?> getPacketHandler()
return HANDLER;
}


public void sendMetadata(ServerPlayerEntity player)
{
if (this.hasPermission(player) == false)
{
// No Permission
Servux.logger.warn("entity_data: Denying access for player {}, Insufficient Permissions", player.getName().getLiteralString());
Servux.debugLog("entity_data: Denying access for player {}, Insufficient Permissions", player.getName().getLiteralString());
return;
}

Expand Down Expand Up @@ -138,6 +143,18 @@ public boolean hasPermission(ServerPlayerEntity player)
return Permissions.check(player, this.permNode, this.permissionLevel > -1 ? this.permissionLevel : this.defaultPerm);
}

@Override
public void onTickEndPre()
{
// NO-OP
}

@Override
public void onTickEndPost()
{
// NO-OP
}

@Override
public JsonObject toJson()
{
Expand Down
21 changes: 21 additions & 0 deletions src/main/java/fi/dy/masa/servux/dataproviders/IDataProvider.java
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,20 @@ public interface IDataProvider
*/
void setEnabled(boolean enabled);

/**
* Returns true if this data provider is currently Play Registered,
* This is meant to stop Servux from trying to re-register the Play Channel
* @return
*/
boolean isRegistered();

/**
* Marks this Data Provider as Play Registered.
* This is meant to stop Servux from trying to re-register the Play Channel
* @param toggle
*/
void setRegistered(boolean toggle);

/**
* Informs this data provider that the server has started and should be waiting for requests
* @return
Expand Down Expand Up @@ -101,6 +115,13 @@ default void tick(MinecraftServer server, int tickCounter)
*/
boolean hasPermission(ServerPlayerEntity player);

/**
* Signal The Data Providers when the server is shutting down
* (Pre / Post)
*/
void onTickEndPre();
void onTickEndPost();

/**
* Config file handling
* @return
Expand Down
Loading

0 comments on commit ea41a22

Please sign in to comment.