Packet System + Bungee GUI #59
18
SpigotCore_Main/src/de/steamwar/coms/Packet.java
Normale Datei
18
SpigotCore_Main/src/de/steamwar/coms/Packet.java
Normale Datei
@ -0,0 +1,18 @@
|
||||
package de.steamwar.coms;
|
||||
|
||||
import de.steamwar.coms.sender.PacketSender;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.io.Serializable;
|
||||
|
||||
public abstract class Packet implements Serializable {
|
||||
|
||||
public void send() {
|
||||
PacketSender.sendPacket(this);
|
||||
}
|
||||
|
||||
public abstract String getName();
|
||||
|
||||
public abstract void writeVars(ObjectOutputStream objectOutputStream) throws IOException;
|
||||
}
|
10
SpigotCore_Main/src/de/steamwar/coms/receiver/Handler.java
Normale Datei
10
SpigotCore_Main/src/de/steamwar/coms/receiver/Handler.java
Normale Datei
@ -0,0 +1,10 @@
|
||||
package de.steamwar.coms.receiver;
|
||||
|
||||
|
||||
import com.google.common.io.ByteArrayDataInput;
|
||||
|
||||
public abstract class Handler {
|
||||
Lixfel
hat
Handler ist doch etwas arg generisch. Vllt. den Verwendungszweck des Handlers beschreiben. Handler ist doch etwas arg generisch. Vllt. den Verwendungszweck des Handlers beschreiben.
|
||||
|
||||
protected abstract String getName();
|
||||
|
||||
public abstract void handle(ByteArrayDataInput byteArrayDataInput) throws Exception;
|
||||
}
|
35
SpigotCore_Main/src/de/steamwar/coms/receiver/PacketHandler.java
Normale Datei
35
SpigotCore_Main/src/de/steamwar/coms/receiver/PacketHandler.java
Normale Datei
@ -0,0 +1,35 @@
|
||||
package de.steamwar.coms.receiver;
|
||||
Lixfel
hat
Ist das System so groß, dass es auch noch Untermodule benötigt? Ist das System so groß, dass es auch noch Untermodule benötigt?
|
||||
|
||||
import com.google.common.io.ByteArrayDataInput;
|
||||
import com.google.common.io.ByteStreams;
|
||||
import de.steamwar.coms.receiver.handlers.PingHandler;
|
||||
import de.steamwar.coms.receiver.handlers.TestHandler;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.messaging.PluginMessageListener;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class PacketHandler implements PluginMessageListener {
|
||||
|
||||
Lixfel
hat
Auch PacketHandler zu generisch. Auch PacketHandler zu generisch.
|
||||
private static Map<String, Handler> handlerMap = new HashMap<>();
|
||||
|
||||
public static void registerHandler(Handler handler) {
|
||||
handlerMap.put(handler.getName(), handler);
|
||||
}
|
||||
Lixfel
hat
So wie ich das sehe, ist das der einzige Fall, wo .getName() benötigt wird. Evtl. stattdessen eine Zahl als Identifier und Runnable hernehmen, dann müsste man nur eine Funktion übergeben und nicht (unbedingt) für jede Funktionalität eine neue Klasse aufmachen. So wie ich das sehe, ist das der einzige Fall, wo .getName() benötigt wird. Evtl. stattdessen eine Zahl als Identifier und Runnable hernehmen, dann müsste man nur eine Funktion übergeben und nicht (unbedingt) für jede Funktionalität eine neue Klasse aufmachen.
|
||||
|
||||
static {
|
||||
registerHandler(new TestHandler());
|
||||
registerHandler(new PingHandler());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPluginMessageReceived(String s, Player player, byte[] bytes) {
|
||||
ByteArrayDataInput in = ByteStreams.newDataInput(bytes);
|
||||
try {
|
||||
handlerMap.get(in.readUTF()).handle(in);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package de.steamwar.coms.receiver.handlers;
|
||||
|
||||
import com.google.common.io.ByteArrayDataInput;
|
||||
import de.steamwar.coms.receiver.Handler;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.SoundCategory;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class PingHandler extends Handler {
|
||||
Lixfel
hat
Wozu ist das nötig? Wozu ist das nötig?
Chaoscaot
hat
Dass bei @Player ein kleiner Ton kommt. Dass bei @Player ein kleiner Ton kommt.
|
||||
|
||||
@Override
|
||||
protected String getName() {
|
||||
return "Ping";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(ByteArrayDataInput byteArrayDataInput) throws Exception {
|
||||
String uuid = byteArrayDataInput.readUTF();
|
||||
System.out.println(uuid);
|
||||
if(Bukkit.getPlayer(UUID.fromString(uuid)).isOnline()) {
|
||||
Player player = Bukkit.getPlayer(UUID.fromString(uuid));
|
||||
player.playSound(player.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, SoundCategory.MASTER, 1, 1);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package de.steamwar.coms.receiver.handlers;
|
||||
|
||||
import com.google.common.io.ByteArrayDataInput;
|
||||
import de.steamwar.coms.receiver.Handler;
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
public class TestHandler extends Handler {
|
||||
@Override
|
||||
protected String getName() {
|
||||
return "Test";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(ByteArrayDataInput byteArrayDataInput) throws Exception {
|
||||
Bukkit.getOnlinePlayers().stream().forEach(player -> player.sendMessage("TEST!"));
|
||||
}
|
||||
}
|
30
SpigotCore_Main/src/de/steamwar/coms/sender/PacketSender.java
Normale Datei
30
SpigotCore_Main/src/de/steamwar/coms/sender/PacketSender.java
Normale Datei
@ -0,0 +1,30 @@
|
||||
package de.steamwar.coms.sender;
|
||||
|
||||
import com.google.common.io.ByteArrayDataOutput;
|
||||
import com.google.common.io.ByteStreams;
|
||||
import de.steamwar.coms.Packet;
|
||||
import de.steamwar.core.Core;
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
Lixfel
hat
Die Funktion würde ich eher in Packet integrieren, dafür braucht es nicht eine extra Klasse. Die Funktion würde ich eher in Packet integrieren, dafür braucht es nicht eine extra Klasse.
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class PacketSender {
|
||||
|
||||
public static void sendPacket(Packet packet) {
|
||||
try {
|
||||
ByteArrayDataOutput out = ByteStreams.newDataOutput();
|
||||
out.writeUTF(packet.getName());
|
||||
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||
ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
|
||||
packet.writeVars(objectOutputStream);
|
||||
objectOutputStream.flush();
|
||||
out.writeUTF(outputStream.toByteArray().toString());
|
||||
Bukkit.getOnlinePlayers().stream().limit(1).collect(Collectors.toList()).get(0).sendPluginMessage(Core.getInstance(), "sw:bridge", out.toByteArray());
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
@ -19,6 +19,7 @@
|
||||
|
||||
package de.steamwar.core;
|
||||
|
||||
import de.steamwar.coms.receiver.PacketHandler;
|
||||
import de.steamwar.core.events.ChattingEvent;
|
||||
import de.steamwar.core.events.ChunkListener;
|
||||
import de.steamwar.core.events.PlayerJoinedEvent;
|
||||
@ -61,6 +62,9 @@ public class Core extends JavaPlugin{
|
||||
ChunkListener.init();
|
||||
if(version >= 12)
|
||||
ErrorLogger.init();
|
||||
getServer().getMessenger().registerIncomingPluginChannel( this, "sw:bridge", new PacketHandler());
|
||||
getServer().getMessenger().registerOutgoingPluginChannel( this, "sw:bridge" );
|
||||
Lixfel
hat
Wozu braucht es den Channel? Wozu braucht es den Channel?
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -19,13 +19,14 @@
|
||||
|
||||
package de.steamwar.sql;
|
||||
|
||||
import javax.xml.bind.DatatypeConverter;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.time.Instant;
|
||||
|
||||
import javax.xml.bind.DatatypeConverter;
|
||||
Lixfel
hat
Nenene, keinen DatatypeConverter bitte mehr! (einfach mal bitte den neuen master reinmergen) Nenene, keinen DatatypeConverter bitte mehr! (einfach mal bitte den neuen master reinmergen)
|
||||
|
||||
public class DownloadSchematic {
|
||||
private DownloadSchematic(){}
|
||||
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren
Üblicherweise kürzt man comms mit doppel-m ab