SteamWar/BungeeCore
Archiviert
13
2

Packet System + Bungee GUI #111

Manuell gemergt
YoyoNow hat 12 Commits von packet-system nach master 2020-09-26 09:21:46 +02:00 zusammengeführt
9 geänderte Dateien mit 284 neuen und 26 gelöschten Zeilen
Nur Änderungen aus Commit 34534b49d8 werden angezeigt - Alle Commits anzeigen

Datei anzeigen

@ -20,6 +20,7 @@
package de.steamwar.bungeecore;
import de.steamwar.bungeecore.commands.*;
import de.steamwar.bungeecore.coms.receiver.PacketHandler;
import de.steamwar.bungeecore.listeners.*;
import de.steamwar.bungeecore.listeners.mods.Fabric;
import de.steamwar.bungeecore.listeners.mods.Forge;
@ -72,6 +73,10 @@ public class BungeeCore extends Plugin {
@Override
public void onEnable(){
getProxy().registerChannel("sw:bridge");
getProxy().registerChannel("sw:return");
setInstance(this);
loadConfig();
@ -124,14 +129,15 @@ public class BungeeCore extends Plugin {
new IgnoreCommand();
new UnIgnoreCommand();
new TestCommand();
new EventStarter();
new Broadcaster();
new SessionManager();
new PacketHandler();
new TablistManager();
getProxy().registerChannel("sw:bridge");
getProxy().getScheduler().schedule(this, () -> {
SteamwarUser.clearCache();
Team.clearCache();

Datei anzeigen

@ -0,0 +1,33 @@
package de.steamwar.bungeecore.commands;
import de.steamwar.bungeecore.coms.packets.inventory.SWInventory;
import de.steamwar.bungeecore.coms.packets.inventory.SWItem;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.connection.ProxiedPlayer;
public class TestCommand extends BasicCommand {
public TestCommand() {
super("test", null);
}
@Override
public void execute(CommandSender commandSender, String[] strings) {
if(!(commandSender instanceof ProxiedPlayer))
return;
SWInventory inventory = new SWInventory((ProxiedPlayer) commandSender, 3*9, "Test Inventory");
SWItem item = new SWItem("DIRT", 13, "§e§lTest Item");
item.setSkullOwner(commandSender.getName());
for (ProxiedPlayer player:
((ProxiedPlayer) commandSender).getServer().getInfo().getPlayers()) {
item.addLore("§6" + player.getDisplayName());
}
item.setEnchanted(true);
item.setCallback(click -> {
inventory.close();
commandSender.sendMessage("TEST!!! FJOnbds");
});
inventory.addItem(item);
inventory.open();
}
}

Datei anzeigen

@ -1,9 +1,18 @@
package de.steamwar.bungeecore.coms.handlers;
import com.google.common.io.ByteArrayDataInput;
import de.steamwar.bungeecore.coms.packets.inventory.InvCallback;
import de.steamwar.bungeecore.coms.packets.inventory.SWInventory;
import de.steamwar.bungeecore.coms.packets.inventory.SWItem;
import de.steamwar.bungeecore.coms.receiver.Handler;
import java.util.HashMap;
import java.util.Map;
public class InventoryCallbackHandler extends Handler {
public static final Map<String, SWInventory> inventoryHashMap = new HashMap<>();
@Override
protected String getName() {
return "InventoryCallback";
@ -11,6 +20,20 @@ public class InventoryCallbackHandler extends Handler {
@Override
public void handle(ByteArrayDataInput byteArrayDataInput) {
String owner = byteArrayDataInput.readUTF();
CallbackType type = CallbackType.valueOf(byteArrayDataInput.readUTF());
if(type == CallbackType.CLICK) {
SWItem item = SWItem.getFromJson(byteArrayDataInput.readUTF());
InvCallback.ClickType clickType = InvCallback.ClickType.valueOf(byteArrayDataInput.readUTF());
System.out.println(item.writeToString());
inventoryHashMap.get(owner).handleCallback(clickType, item);
}else if(type == CallbackType.CLOSE) {
inventoryHashMap.get(owner).handleClose();
}
}
public enum CallbackType {
CLICK,
CLOSE,
}
}

Datei anzeigen

@ -0,0 +1,25 @@
package de.steamwar.bungeecore.coms.packets;
import com.google.common.io.ByteArrayDataOutput;
import de.steamwar.bungeecore.coms.sender.Packet;
import net.md_5.bungee.api.connection.ProxiedPlayer;
public class CloseInventoryPacket extends Packet {
ProxiedPlayer player;
@Override
public String getName() {
return "InvClose";
}
@Override
public void writeVars(ByteArrayDataOutput byteArrayDataOutput) {
byteArrayDataOutput.writeUTF(player.getUniqueId().toString());
}
public CloseInventoryPacket setPlayer(ProxiedPlayer player) {
this.player = player;
return this;
}
}

Datei anzeigen

@ -5,19 +5,19 @@ import de.steamwar.bungeecore.coms.packets.inventory.SWItem;
import de.steamwar.bungeecore.coms.sender.Packet;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import java.util.HashMap;
public class InventoryPacket extends Packet {
String title;
String name;
String player;
int size;
SWItem[] items;
HashMap<Integer, SWItem> items;
public InventoryPacket(int size, String title, String name, ProxiedPlayer player) {
items = new SWItem[size];
public InventoryPacket(int size, String title, ProxiedPlayer player) {
items = new HashMap<>();
this.title = title;
this.size = size;
this.name = name;
this.player = player.getUniqueId().toString();
}
@ -28,28 +28,26 @@ public class InventoryPacket extends Packet {
@Override
public void writeVars(ByteArrayDataOutput byteArrayDataOutput) {
byteArrayDataOutput.writeUTF(name);
byteArrayDataOutput.writeUTF(player);
byteArrayDataOutput.writeUTF(title);
byteArrayDataOutput.writeInt(size);
byteArrayDataOutput.writeInt(items.length);
for (SWItem item:
items) {
if(item == null)
byteArrayDataOutput.writeUTF(item.writeToString());
byteArrayDataOutput.writeInt(items.size());
for (int i = 0; i < size; i++) {
if(items.get(i) != null)
byteArrayDataOutput.writeUTF(items.get(i).writeToString());
}
}
public void addItem(SWItem item) {
for (int i = 0; i < items.length; i++) {
if (items[i] != null) {
items[i] = item;
for (int i = 0; i < items.size(); i++) {
if (items.get(i) != null) {
items.put(i, item);
return;
}
}
}
public void setItem(int index, SWItem item) {
items[index] = item;
items.put(index, item);
}
}

Datei anzeigen

@ -0,0 +1,45 @@
package de.steamwar.bungeecore.coms.packets.inventory;
public interface InvCallback {
void clicked(ClickType click);
public static enum ClickType {
LEFT,
SHIFT_LEFT,
RIGHT,
SHIFT_RIGHT,
WINDOW_BORDER_LEFT,
WINDOW_BORDER_RIGHT,
MIDDLE,
NUMBER_KEY,
DOUBLE_CLICK,
DROP,
CONTROL_DROP,
CREATIVE,
UNKNOWN;
private ClickType() {
}
public boolean isKeyboardClick() {
return this == NUMBER_KEY || this == DROP || this == CONTROL_DROP;
}
public boolean isCreativeAction() {
return this == MIDDLE || this == CREATIVE;
}
public boolean isRightClick() {
return this == RIGHT || this == SHIFT_RIGHT;
}
public boolean isLeftClick() {
return this == LEFT || this == SHIFT_LEFT || this == DOUBLE_CLICK || this == CREATIVE;
}
public boolean isShiftClick() {
return this == SHIFT_LEFT || this == SHIFT_RIGHT || this == CONTROL_DROP;
}
}
}

Datei anzeigen

@ -1,4 +1,75 @@
package de.steamwar.bungeecore.coms.packets.inventory;
import de.steamwar.bungeecore.coms.handlers.InventoryCallbackHandler;
import de.steamwar.bungeecore.coms.packets.CloseInventoryPacket;
import de.steamwar.bungeecore.coms.packets.InventoryPacket;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import java.util.HashMap;
import java.util.Map;
public class SWInventory {
Map<Integer, SWItem> itemMap;
InvCallback close;
ProxiedPlayer player;
int size;
String title;
public SWInventory(ProxiedPlayer proxiedPlayer, int size, String title) {
itemMap = new HashMap<>();
InventoryCallbackHandler.inventoryHashMap.put(proxiedPlayer.getUniqueId().toString(), this);
this.player = proxiedPlayer;
this.size = size;
this.title = title;
}
public void addItem(SWItem item) {
itemMap.put(item.position, item);
}
public void removeItem(SWItem item) {
itemMap.remove(item.position);
}
public void removeItem(int position) {
itemMap.remove(position);
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public void handleCallback(InvCallback.ClickType type, SWItem item) {
itemMap.get(item.position).callback.clicked(type);
}
public void handleClose() {
if(close != null)
close.clicked(null);
}
public void open() {
InventoryPacket inv = new InventoryPacket(size, title, player);
for (Map.Entry<Integer, SWItem> entry : itemMap.entrySet()) {
inv.setItem(entry.getKey(), entry.getValue());
}
inv.send(player);
}
public void close() {
new CloseInventoryPacket().setPlayer(player).send(player);
}
}

Datei anzeigen

@ -2,6 +2,7 @@ package de.steamwar.bungeecore.coms.packets.inventory;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import java.util.ArrayList;
import java.util.List;
@ -12,20 +13,49 @@ public class SWItem {
boolean enchanted, hideAttributes;
int position;
List<String> lore;
InvCallback callback;
public SWItem(String material, int position, String title) {
this.material = material;
this.material = material.toUpperCase();
lore = new ArrayList<>();
this.position = position;
this.title = title;
}
private SWItem(String json) {
JsonObject object = new JsonParser().parse(json).getAsJsonObject();
material = object.get("material").getAsString();
position = object.get("position").getAsInt();
title = object.get("title").getAsString();
if(object.has("skullOwner")) {
skullOwner = object.get("skullOwner").getAsString();
}
if(object.has("enchanted"))
enchanted = true;
if(object.has("hideAttributes"))
hideAttributes = true;
if(object.has("lore")) {
List<String> lore = new ArrayList<>();
JsonArray array = object.getAsJsonArray("lore");
array.forEach(jsonElement -> lore.add(jsonElement.getAsString()));
this.lore = lore;
}
}
public void setCallback(InvCallback callback) {
this.callback = callback;
}
public InvCallback getCallback() {
return callback;
}
public String getMaterial() {
return material;
}
public void setMaterial(String material) {
this.material = material;
this.material = material.toUpperCase();
}
public String getSkullOwner() {
@ -67,7 +97,7 @@ public class SWItem {
object.addProperty("enchanted", true);
if(hideAttributes)
object.addProperty("hideAttributes", true);
if(!lore.isEmpty()) {
if(lore != null) {
JsonArray array = new JsonArray();
for (String lores:
lore) {
@ -76,6 +106,30 @@ public class SWItem {
object.add("lore", array);
}
return object.getAsString();
return object.toString();
}
public static SWItem getFromJson(String json) {
return new SWItem(json);
}
@Override
public boolean equals(Object o) {
if(!(o instanceof SWItem))
return false;
SWItem item = (SWItem) o;
if(item.enchanted != enchanted)
return false;
if(item.hideAttributes != hideAttributes)
return false;
if(!item.material.equals(material))
return false;
if(!item.lore.equals(lore))
return false;
if(!item.skullOwner.equals(skullOwner))
return false;
if(item.position != position)
return false;
return true;
}
}

Datei anzeigen

@ -2,6 +2,7 @@ package de.steamwar.bungeecore.coms.receiver;
import com.google.common.io.ByteArrayDataInput;
import com.google.common.io.ByteStreams;
import de.steamwar.bungeecore.coms.handlers.InventoryCallbackHandler;
import de.steamwar.bungeecore.listeners.BasicListener;
import net.md_5.bungee.api.event.PluginMessageEvent;
import net.md_5.bungee.event.EventHandler;
@ -11,14 +12,16 @@ import java.util.Map;
public class PacketHandler extends BasicListener {
private static Map<String, Handler> handlerMap = new HashMap<>();
private static final Map<String, Handler> handlerMap = new HashMap<>();
@EventHandler
public void onPluginMessage(PluginMessageEvent event) {
if(!event.getTag().equalsIgnoreCase("sw:bridge"))
System.out.println(event.toString());
if(!event.getTag().equalsIgnoreCase("sw:return"))
return;
ByteArrayDataInput in = ByteStreams.newDataInput( event.getData() );
handlerMap.get(in.readUTF()).handle(in);
ByteArrayDataInput in = ByteStreams.newDataInput(event.getData());
String handler = in.readUTF();
handlerMap.get(handler).handle(in);
}
public static void registerHandler(Handler handler) {
@ -26,6 +29,6 @@ public class PacketHandler extends BasicListener {
}
static {
//TODO Register Handlers
registerHandler(new InventoryCallbackHandler());
}
}