Experimental multiserver sync support.

This commit is contained in:
AppleDash 2017-09-21 22:58:00 -04:00
parent 1f0df591fd
commit d399e7a6be
8 changed files with 61 additions and 5 deletions

View File

@ -9,7 +9,7 @@
<version>0</version>
</parent>
<artifactId>SaneEconomyCore</artifactId>
<version>0.12.7-SNAPSHOT</version>
<version>0.13.0-SNAPSHOT</version>
<dependencies>
<dependency>

View File

@ -1,15 +1,24 @@
package org.appledash.saneeconomy;
import com.google.common.collect.Iterables;
import com.google.common.io.ByteArrayDataInput;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
import org.appledash.saneeconomy.command.*;
import org.appledash.saneeconomy.economy.EconomyManager;
import org.appledash.saneeconomy.economy.backend.type.EconomyStorageBackendMySQL;
import org.appledash.saneeconomy.economy.logger.TransactionLogger;
import org.appledash.saneeconomy.event.SaneEconomyTransactionEvent;
import org.appledash.saneeconomy.listeners.JoinQuitListener;
import org.appledash.saneeconomy.updates.GithubVersionChecker;
import org.appledash.saneeconomy.utils.SaneEconomyConfiguration;
import org.appledash.saneeconomy.vault.VaultHook;
import org.appledash.sanelib.SanePlugin;
import org.appledash.sanelib.command.SaneCommand;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import java.io.File;
import java.util.HashMap;
@ -71,6 +80,45 @@ public class SaneEconomy extends SanePlugin implements ISaneEconomy {
getServer().getScheduler().runTaskTimerAsynchronously(this, () -> {
economyManager.getBackend().reloadTopPlayerBalances();
}, 0, (20 * 300) /* Update baltop every 5 minutes */);
if (this.getConfig().getBoolean("multi-server-sync", false)) {
this.getServer().getPluginManager().registerEvents(new Listener() {
@EventHandler
public void onTransaction(SaneEconomyTransactionEvent evt) { // Trust me, I'm a doctor.
OfflinePlayer player = evt.getTransaction().getReceiver().tryCastToPlayer();
if (player != null && !player.isOnline()) {
Player fakeSender = Iterables.getFirst(SaneEconomy.this.getServer().getOnlinePlayers(), null);
if (fakeSender != null) {
ByteArrayDataOutput bado = ByteStreams.newDataOutput();
bado.writeUTF("SaneEconomy");
bado.writeUTF("SyncDatabase");
fakeSender.sendPluginMessage(SaneEconomy.this, "BungeeCord", bado.toByteArray());
}
}
}
}, this);
this.getServer().getMessenger().registerIncomingPluginChannel(this, "BungeeCord", (channel, player, bytes) -> {
if (!channel.equals("BungeeCord")) {
return;
}
ByteArrayDataInput badi = ByteStreams.newDataInput(bytes);
String subChannel = badi.readUTF();
if (subChannel.equals("SaneEconomy")) {
String opCode = badi.readUTF();
if (opCode.equals("SyncDatabase")) {
SaneEconomy.this.getEconomyManager().getBackend().reloadDatabase();
} else {
SaneEconomy.this.getLogger().warning("Invalid OpCode received on SaneEconomy plugin message channel: " + opCode);
}
}
});
this.getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
}
}
@Override

View File

@ -13,6 +13,9 @@ public interface Economable {
Economable PLUGIN = new EconomablePlugin();
String getUniqueIdentifier();
default OfflinePlayer tryCastToPlayer() {
return null;
}
static Economable wrap(OfflinePlayer player) {
return new EconomablePlayer(player);

View File

@ -17,4 +17,9 @@ public class EconomablePlayer implements Economable {
public String getUniqueIdentifier() {
return "player:" + handle.getUniqueId();
}
@Override
public OfflinePlayer tryCastToPlayer() {
return this.handle;
}
}

View File

@ -16,7 +16,7 @@
<dependency>
<groupId>org.appledash</groupId>
<artifactId>SaneEconomyCore</artifactId>
<version>0.12.7-SNAPSHOT</version>
<version>0.13.0-SNAPSHOT</version>
</dependency>
</dependencies>

View File

@ -17,7 +17,7 @@
<dependency>
<groupId>org.appledash</groupId>
<artifactId>SaneEconomyCore</artifactId>
<version>0.12.7-SNAPSHOT</version>
<version>0.13.0-SNAPSHOT</version>
</dependency>
</dependencies>

View File

@ -16,7 +16,7 @@
<dependency>
<groupId>org.appledash</groupId>
<artifactId>SaneEconomyCore</artifactId>
<version>0.12.7-SNAPSHOT</version>
<version>0.13.0-SNAPSHOT</version>
</dependency>
</dependencies>

View File

@ -47,7 +47,7 @@
<dependency>
<groupId>org.appledash</groupId>
<artifactId>sanelib</artifactId>
<version>0.3.2-SNAPSHOT</version>
<version>0.3.6-SNAPSHOT</version>
</dependency>
</dependencies>