Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -24,69 +24,81 @@ public Config deserialize(JsonElement json, Type typeOfT, JsonDeserializationCon
}

//Extra Categories
JsonObject mainConfig = obj.getAsJsonObject("Main Config");
JsonObject roleConfig = obj.getAsJsonObject("Role Config");
JsonObject rollbackConfig = obj.getAsJsonObject("Rollback Config");
JsonObject elevatorConfig = obj.getAsJsonObject("Elevator Config");
JsonObject sqlLogConfig = obj.getAsJsonObject("SQL Log Config");
JsonObject warpConfig = obj.getAsJsonObject("Warp Data");
JsonObject spawnConfig = obj.getAsJsonObject("Spawn Data");
JsonObject discordIntegrationConfig = obj.getAsJsonObject("Discord Integration Config");
JsonObject mainConfig = obj.has("Main Config") ? obj.getAsJsonObject("Main Config") : null;
JsonObject roleConfig = obj.has("Role Config") ? obj.getAsJsonObject("Role Config") : null;
JsonObject rollbackConfig = obj.has("Rollback Config") ? obj.getAsJsonObject("Rollback Config") : null;
JsonObject elevatorConfig = obj.has("Elevator Config") ? obj.getAsJsonObject("Elevator Config") : null;
JsonObject sqlLogConfig = obj.has("SQL Log Config") ? obj.getAsJsonObject("SQL Log Config") : null;
JsonObject warpConfig = obj.has("Warp Data") ? obj.getAsJsonObject("Warp Data") : null;
JsonObject spawnConfig = obj.has("Spawn Data") ? obj.getAsJsonObject("Spawn Data") : null;
JsonObject discordIntegrationConfig = obj.has("Discord Integration Config") ? obj.getAsJsonObject("Discord Integration Config") : null;


//Main Options
config.enableContainerLocking = mainConfig.get("enableContainerLocking").getAsBoolean();
config.enableRoles = mainConfig.get("enableRoles").getAsBoolean();
config.enableRollback = mainConfig.get("enableRollback").getAsBoolean();
config.enableTPA = mainConfig.get("enableTPA").getAsBoolean();
config.enableHomes = mainConfig.get("enableHomes").getAsBoolean();
config.enableWarps = mainConfig.get("enableWarps").getAsBoolean();
config.enableSpawn = mainConfig.get("enableSpawn").getAsBoolean();
config.enableElevators = mainConfig.get("enableElevators").getAsBoolean();
config.enableKits = mainConfig.get("enableKits").getAsBoolean();
config.enableRules = mainConfig.get("enableRules").getAsBoolean();
config.enableSmite = mainConfig.get("enableSmite").getAsBoolean();
config.enableCrews = mainConfig.get("enableCrews").getAsBoolean();
config.enableSQLPlayerLogging = mainConfig.get("enableSQLPlayerLogging").getAsBoolean();
config.enableTXTPlayerLogging = mainConfig.get("enableTXTPlayerLogging").getAsBoolean();
config.enableDiscordIntegration = mainConfig.get("enableDiscordIntegration").getAsBoolean();
config.enableMagnets = mainConfig.get("enableMagnets").getAsBoolean();
if(mainConfig != null){
config.enableContainerLocking = mainConfig.has("enableContainerLocking") ? mainConfig.get("enableContainerLocking").getAsBoolean() : config.enableContainerLocking;
config.enableRoles = mainConfig.has("enableRoles") ? mainConfig.get("enableRoles").getAsBoolean() : config.enableRoles;
config.enableRollback = mainConfig.has("enableRollback") ? mainConfig.get("enableRollback").getAsBoolean() : config.enableRollback;
config.enableTPA = mainConfig.has("enableTPA") ? mainConfig.get("enableTPA").getAsBoolean() : config.enableTPA;
config.enableHomes = mainConfig.has("enableHomes") ? mainConfig.get("enableHomes").getAsBoolean() : config.enableHomes;
config.enableWarps = mainConfig.has("enableWarps") ? mainConfig.get("enableWarps").getAsBoolean() : config.enableWarps;
config.enableSpawn = mainConfig.has("enableSpawn") ? mainConfig.get("enableSpawn").getAsBoolean() : config.enableSpawn;
config.enableElevators = mainConfig.has("enableElevators") ? mainConfig.get("enableElevators").getAsBoolean() : config.enableElevators;
config.enableKits = mainConfig.has("enableKits") ? mainConfig.get("enableKits").getAsBoolean() : config.enableKits;
config.enableRules = mainConfig.has("enableRules") ? mainConfig.get("enableRules").getAsBoolean() : config.enableRules;
config.enableSmite = mainConfig.has("enableSmite") ? mainConfig.get("enableSmite").getAsBoolean() : config.enableSmite;
config.enableCrews = mainConfig.has("enableCrews") ? mainConfig.get("enableCrews").getAsBoolean() : config.enableCrews;
config.enableSQLPlayerLogging = mainConfig.has("enableSQLPlayerLogging") ? mainConfig.get("enableSQLPlayerLogging").getAsBoolean() : config.enableSQLPlayerLogging;
config.enableTXTPlayerLogging = mainConfig.has("enableTXTPlayerLogging") ? mainConfig.get("enableTXTPlayerLogging").getAsBoolean() : config.enableTXTPlayerLogging;
config.enableDiscordIntegration = mainConfig.has("enableDiscordIntegration") ? mainConfig.get("enableDiscordIntegration").getAsBoolean() : config.enableDiscordIntegration;
config.enableMagnets = mainConfig.has("enableMagnets") ? mainConfig.get("enableMagnets").getAsBoolean() : config.enableMagnets;
}

//Role Options
if(roleConfig.has("defaultRole")){
config.defaultRole = roleConfig.get("defaultRole").getAsString();
if(roleConfig != null){
if(roleConfig.has("defaultRole")){
config.defaultRole = roleConfig.get("defaultRole").getAsString();
}
config.displayMode = roleConfig.has("displayMode") ? roleConfig.get("displayMode").getAsString() : config.displayMode;
}
config.displayMode = roleConfig.get("displayMode").getAsString();

//Rollback Options
config.snapshotsEnabled = rollbackConfig.get("snapshotsEnabled").getAsBoolean();
config.backupsEnabled = rollbackConfig.get("backupsEnabled").getAsBoolean();
config.snapshotsImmune = rollbackConfig.get("snapshotsImmune").getAsInt();
config.backupsImmune = rollbackConfig.get("backupsImmune").getAsInt();
config.snapshotsLimit = rollbackConfig.get("snapshotsLimit").getAsInt();
config.backupsLimit = rollbackConfig.get("backupsLimit").getAsInt();
config.sizeLimit = rollbackConfig.get("sizeLimit").getAsString();
config.timeBetweenSnapshots = rollbackConfig.get("timeBetweenSnapshots").getAsInt();
config.timeBetweenBackups = rollbackConfig.get("timeBetweenBackups").getAsInt();
config.timeBetweenBackupPruning = rollbackConfig.get("timeBetweenBackupPruning").getAsInt();
config.timeBetweenSnapshotPruning = rollbackConfig.get("timeBetweenSnapshotPruning").getAsInt();
config.lastSnapshot = rollbackConfig.get("lastSnapshot").getAsDouble();
config.lastBackup = rollbackConfig.get("lastBackup").getAsDouble();
config.lastBackupPrune = rollbackConfig.get("lastBackupPrune").getAsDouble();
config.lastSnapshotPrune = rollbackConfig.get("lastSnapshotPrune").getAsDouble();
if(rollbackConfig != null){
config.snapshotsEnabled = rollbackConfig.has("snapshotsEnabled") ? rollbackConfig.get("snapshotsEnabled").getAsBoolean() : config.snapshotsEnabled;
config.backupsEnabled = rollbackConfig.has("backupsEnabled") ? rollbackConfig.get("backupsEnabled").getAsBoolean() : config.backupsEnabled;
config.snapshotsImmune = rollbackConfig.has("snapshotsImmune") ? rollbackConfig.get("snapshotsImmune").getAsInt() : config.snapshotsImmune;
config.backupsImmune = rollbackConfig.has("backupsImmune") ? rollbackConfig.get("backupsImmune").getAsInt() : config.backupsImmune;
config.snapshotsLimit = rollbackConfig.has("snapshotsLimit") ? rollbackConfig.get("snapshotsLimit").getAsInt() : config.snapshotsLimit;
config.backupsLimit = rollbackConfig.has("backupsLimit") ? rollbackConfig.get("backupsLimit").getAsInt() : config.backupsLimit;
config.sizeLimit = rollbackConfig.has("sizeLimit") ? rollbackConfig.get("sizeLimit").getAsString() : config.sizeLimit;
config.timeBetweenSnapshots = rollbackConfig.has("timeBetweenSnapshots") ? rollbackConfig.get("timeBetweenSnapshots").getAsInt() : config.timeBetweenSnapshots;
config.timeBetweenBackups = rollbackConfig.has("timeBetweenBackups") ? rollbackConfig.get("timeBetweenBackups").getAsInt() : config.timeBetweenBackups;
config.timeBetweenBackupPruning = rollbackConfig.has("timeBetweenBackupPruning") ? rollbackConfig.get("timeBetweenBackupPruning").getAsInt() : config.timeBetweenBackupPruning;
config.timeBetweenSnapshotPruning = rollbackConfig.has("timeBetweenSnapshotPruning") ? rollbackConfig.get("timeBetweenSnapshotPruning").getAsInt() : config.timeBetweenSnapshotPruning;
config.lastSnapshot = rollbackConfig.has("lastSnapshot") ? rollbackConfig.get("lastSnapshot").getAsDouble() : config.lastSnapshot;
config.lastBackup = rollbackConfig.has("lastBackup") ? rollbackConfig.get("lastBackup").getAsDouble() : config.lastBackup;
config.lastBackupPrune = rollbackConfig.has("lastBackupPrune") ? rollbackConfig.get("lastBackupPrune").getAsDouble() : config.lastBackupPrune;
config.lastSnapshotPrune = rollbackConfig.has("lastSnapshotPrune") ? rollbackConfig.get("lastSnapshotPrune").getAsDouble() : config.lastSnapshotPrune;
}

//Elevator Options
config.allowObstructions = elevatorConfig.get("allowObstructions").getAsBoolean();
config.elevatorCooldown = elevatorConfig.get("elevatorCooldown").getAsInt();
if(elevatorConfig != null){
config.allowObstructions = elevatorConfig.has("allowObstructions") ? elevatorConfig.get("allowObstructions").getAsBoolean() : config.allowObstructions;
config.elevatorCooldown = elevatorConfig.has("elevatorCooldown") ? elevatorConfig.get("elevatorCooldown").getAsInt() : config.elevatorCooldown;
}

//SQL Options
config.JDBCConnectionUrl = sqlLogConfig.get("JDBCConnectionUrl").getAsString();
if(sqlLogConfig != null){
config.JDBCConnectionUrl = sqlLogConfig.has("JDBCConnectionUrl") ? sqlLogConfig.get("JDBCConnectionUrl").getAsString() : config.JDBCConnectionUrl;
}

//Discord Options
config.token = discordIntegrationConfig.get("token").getAsString();
config.channelID = discordIntegrationConfig.get("channelID").getAsString();
config.serverPFPURL = discordIntegrationConfig.get("serverPFPURL").getAsString();
config.serverName = discordIntegrationConfig.get("serverName").getAsString();
if(discordIntegrationConfig != null){
config.token = discordIntegrationConfig.has("token") ? discordIntegrationConfig.get("token").getAsString() : config.token;
config.channelID = discordIntegrationConfig.has("channelID") ? discordIntegrationConfig.get("channelID").getAsString() : config.channelID;
config.serverPFPURL = discordIntegrationConfig.has("serverPFPURL") ? discordIntegrationConfig.get("serverPFPURL").getAsString() : config.serverPFPURL;
config.serverName = discordIntegrationConfig.has("serverName") ? discordIntegrationConfig.get("serverName").getAsString() : config.serverName;
}

//Warp Options
if(warpConfig != null){
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package MelonUtilities.mixins;

import MelonUtilities.config.Data;
import MelonUtilities.utility.discord.DiscordChatRelay;
import net.minecraft.server.MinecraftServer;
import org.spongepowered.asm.mixin.Mixin;
Expand All @@ -12,9 +13,15 @@ public class MinecraftServerMixinDiscord {

@Inject(
method = "initiateShutdown",
at = @At("HEAD")
at = @At("HEAD"),
require = 0
)
public void sendStopMessage(CallbackInfo ci) {
private void sendStopMessage(CallbackInfo ci) {
// Only process if Discord integration is enabled
if (!Data.MainConfig.config.enableDiscordIntegration) {
return;
}

DiscordChatRelay.sendServerStoppedMessage();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package MelonUtilities.mixins;

import MelonUtilities.config.Data;
import MelonUtilities.utility.discord.DiscordChatRelay;
import net.minecraft.core.net.packet.PacketLogin;
import net.minecraft.server.entity.player.PlayerServer;
Expand All @@ -20,10 +21,24 @@ public class PacketHandlerLoginMixinDiscord {
shift = At.Shift.BEFORE,
ordinal = 0
),
locals = LocalCapture.CAPTURE_FAILHARD
locals = LocalCapture.CAPTURE_FAILHARD,
require = 0
)
void sendJoinMessage(PacketLogin packet1login, CallbackInfo ci, PlayerServer player) {
private void sendJoinMessage(PacketLogin packet1login, CallbackInfo ci, PlayerServer player) {
// Only process if Discord integration is enabled
if (!Data.MainConfig.config.enableDiscordIntegration) {
return;
}

if (player == null) {
return;
}

String username = player.username;
if (username == null || username.isEmpty()) {
return;
}

DiscordChatRelay.sendJoinLeaveMessage(username, true);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,41 +2,65 @@

import MelonUtilities.config.Data;
import MelonUtilities.utility.discord.DiscordChatRelay;
import net.minecraft.core.net.ChatEmotes;
import com.llamalad7.mixinextras.sugar.Local;
import net.minecraft.core.net.packet.PacketChat;
import net.minecraft.server.entity.player.PlayerServer;
import net.minecraft.server.net.handler.PacketHandlerServer;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(value = PacketHandlerServer.class, remap = false)
public class PacketHandlerServerMixinDiscord {
@Shadow private PlayerServer playerEntity;

@Redirect(method = "handleChat", at = @At(value = "INVOKE", target = "Lnet/minecraft/core/net/ChatEmotes;process(Ljava/lang/String;)Ljava/lang/String;"))
String redirectChatHandle(String s) {
String message = ChatEmotes.process(s);

@Inject(
method = "handleChat",
at = @At(value = "INVOKE", target = "Lnet/minecraft/core/net/ChatEmotes;process(Ljava/lang/String;)Ljava/lang/String;", shift = At.Shift.AFTER),
require = 0
)
private void onChatProcessed(PacketChat packet, CallbackInfo ci, @Local String message) {
// Only process if Discord integration is enabled
if (!Data.MainConfig.config.enableDiscordIntegration) {
return message;
return;
}

if (playerEntity == null) {
return;
}

String username = playerEntity.username;
if (username == null || username.isEmpty()) {
return;
}

// 'message' is the processed message from ChatEmotes.process
// Send to Discord
DiscordChatRelay.sendToDiscord(username, message);

return message;
}

@Inject(
method = "handleErrorMessage",
at = @At("HEAD")
at = @At("HEAD"),
require = 0
)
void sendLeaveMessage(String s, Object[] aobj, CallbackInfo ci) {
private void sendLeaveMessage(String s, Object[] aobj, CallbackInfo ci) {
// Only process if Discord integration is enabled
if (!Data.MainConfig.config.enableDiscordIntegration) {
return;
}

if (playerEntity == null) {
return;
}

String username = playerEntity.username;
if (username == null || username.isEmpty()) {
return;
}

DiscordChatRelay.sendJoinLeaveMessage(username, false);
}
}
2 changes: 1 addition & 1 deletion src/main/resources/MelonUtilities.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"compatibilityLevel": "JAVA_8",
"mixins": [
"CommandManagerMixin",
"SpawnCommandMixin"
"SpawnCommandMixin",
"PaintBrushMixin",
"PlayerMixinElevator"
],
Expand Down