Add Bungee GUI Prototype
Dieser Commit ist enthalten in:
Ursprung
4565f7da7e
Commit
34534b49d8
@ -20,6 +20,7 @@
|
|||||||
package de.steamwar.bungeecore;
|
package de.steamwar.bungeecore;
|
||||||
|
|
||||||
import de.steamwar.bungeecore.commands.*;
|
import de.steamwar.bungeecore.commands.*;
|
||||||
|
import de.steamwar.bungeecore.coms.receiver.PacketHandler;
|
||||||
import de.steamwar.bungeecore.listeners.*;
|
import de.steamwar.bungeecore.listeners.*;
|
||||||
import de.steamwar.bungeecore.listeners.mods.Fabric;
|
import de.steamwar.bungeecore.listeners.mods.Fabric;
|
||||||
import de.steamwar.bungeecore.listeners.mods.Forge;
|
import de.steamwar.bungeecore.listeners.mods.Forge;
|
||||||
@ -72,6 +73,10 @@ public class BungeeCore extends Plugin {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable(){
|
public void onEnable(){
|
||||||
|
|
||||||
|
getProxy().registerChannel("sw:bridge");
|
||||||
|
getProxy().registerChannel("sw:return");
|
||||||
|
|
||||||
setInstance(this);
|
setInstance(this);
|
||||||
loadConfig();
|
loadConfig();
|
||||||
|
|
||||||
@ -124,14 +129,15 @@ public class BungeeCore extends Plugin {
|
|||||||
new IgnoreCommand();
|
new IgnoreCommand();
|
||||||
new UnIgnoreCommand();
|
new UnIgnoreCommand();
|
||||||
|
|
||||||
|
new TestCommand();
|
||||||
|
|
||||||
new EventStarter();
|
new EventStarter();
|
||||||
new Broadcaster();
|
new Broadcaster();
|
||||||
new SessionManager();
|
new SessionManager();
|
||||||
|
new PacketHandler();
|
||||||
|
|
||||||
new TablistManager();
|
new TablistManager();
|
||||||
|
|
||||||
getProxy().registerChannel("sw:bridge");
|
|
||||||
|
|
||||||
getProxy().getScheduler().schedule(this, () -> {
|
getProxy().getScheduler().schedule(this, () -> {
|
||||||
SteamwarUser.clearCache();
|
SteamwarUser.clearCache();
|
||||||
Team.clearCache();
|
Team.clearCache();
|
||||||
|
33
src/de/steamwar/bungeecore/commands/TestCommand.java
Normale Datei
33
src/de/steamwar/bungeecore/commands/TestCommand.java
Normale Datei
@ -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();
|
||||||
|
}
|
||||||
|
}
|
@ -1,9 +1,18 @@
|
|||||||
package de.steamwar.bungeecore.coms.handlers;
|
package de.steamwar.bungeecore.coms.handlers;
|
||||||
|
|
||||||
import com.google.common.io.ByteArrayDataInput;
|
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 de.steamwar.bungeecore.coms.receiver.Handler;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class InventoryCallbackHandler extends Handler {
|
public class InventoryCallbackHandler extends Handler {
|
||||||
|
|
||||||
|
public static final Map<String, SWInventory> inventoryHashMap = new HashMap<>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getName() {
|
protected String getName() {
|
||||||
return "InventoryCallback";
|
return "InventoryCallback";
|
||||||
@ -11,6 +20,20 @@ public class InventoryCallbackHandler extends Handler {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handle(ByteArrayDataInput byteArrayDataInput) {
|
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,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
25
src/de/steamwar/bungeecore/coms/packets/CloseInventoryPacket.java
Normale Datei
25
src/de/steamwar/bungeecore/coms/packets/CloseInventoryPacket.java
Normale Datei
@ -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;
|
||||||
|
}
|
||||||
|
}
|
@ -5,19 +5,19 @@ import de.steamwar.bungeecore.coms.packets.inventory.SWItem;
|
|||||||
import de.steamwar.bungeecore.coms.sender.Packet;
|
import de.steamwar.bungeecore.coms.sender.Packet;
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
public class InventoryPacket extends Packet {
|
public class InventoryPacket extends Packet {
|
||||||
|
|
||||||
String title;
|
String title;
|
||||||
String name;
|
|
||||||
String player;
|
String player;
|
||||||
int size;
|
int size;
|
||||||
SWItem[] items;
|
HashMap<Integer, SWItem> items;
|
||||||
|
|
||||||
public InventoryPacket(int size, String title, String name, ProxiedPlayer player) {
|
public InventoryPacket(int size, String title, ProxiedPlayer player) {
|
||||||
items = new SWItem[size];
|
items = new HashMap<>();
|
||||||
this.title = title;
|
this.title = title;
|
||||||
this.size = size;
|
this.size = size;
|
||||||
this.name = name;
|
|
||||||
this.player = player.getUniqueId().toString();
|
this.player = player.getUniqueId().toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -28,28 +28,26 @@ public class InventoryPacket extends Packet {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeVars(ByteArrayDataOutput byteArrayDataOutput) {
|
public void writeVars(ByteArrayDataOutput byteArrayDataOutput) {
|
||||||
byteArrayDataOutput.writeUTF(name);
|
|
||||||
byteArrayDataOutput.writeUTF(player);
|
byteArrayDataOutput.writeUTF(player);
|
||||||
byteArrayDataOutput.writeUTF(title);
|
byteArrayDataOutput.writeUTF(title);
|
||||||
byteArrayDataOutput.writeInt(size);
|
byteArrayDataOutput.writeInt(size);
|
||||||
byteArrayDataOutput.writeInt(items.length);
|
byteArrayDataOutput.writeInt(items.size());
|
||||||
for (SWItem item:
|
for (int i = 0; i < size; i++) {
|
||||||
items) {
|
if(items.get(i) != null)
|
||||||
if(item == null)
|
byteArrayDataOutput.writeUTF(items.get(i).writeToString());
|
||||||
byteArrayDataOutput.writeUTF(item.writeToString());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addItem(SWItem item) {
|
public void addItem(SWItem item) {
|
||||||
for (int i = 0; i < items.length; i++) {
|
for (int i = 0; i < items.size(); i++) {
|
||||||
if (items[i] != null) {
|
if (items.get(i) != null) {
|
||||||
items[i] = item;
|
items.put(i, item);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setItem(int index, SWItem item) {
|
public void setItem(int index, SWItem item) {
|
||||||
items[index] = item;
|
items.put(index, item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
45
src/de/steamwar/bungeecore/coms/packets/inventory/InvCallback.java
Normale Datei
45
src/de/steamwar/bungeecore/coms/packets/inventory/InvCallback.java
Normale Datei
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,75 @@
|
|||||||
package de.steamwar.bungeecore.coms.packets.inventory;
|
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 {
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package de.steamwar.bungeecore.coms.packets.inventory;
|
|||||||
|
|
||||||
import com.google.gson.JsonArray;
|
import com.google.gson.JsonArray;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonParser;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -12,20 +13,49 @@ public class SWItem {
|
|||||||
boolean enchanted, hideAttributes;
|
boolean enchanted, hideAttributes;
|
||||||
int position;
|
int position;
|
||||||
List<String> lore;
|
List<String> lore;
|
||||||
|
InvCallback callback;
|
||||||
|
|
||||||
public SWItem(String material, int position, String title) {
|
public SWItem(String material, int position, String title) {
|
||||||
this.material = material;
|
this.material = material.toUpperCase();
|
||||||
lore = new ArrayList<>();
|
lore = new ArrayList<>();
|
||||||
this.position = position;
|
this.position = position;
|
||||||
this.title = title;
|
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() {
|
public String getMaterial() {
|
||||||
return material;
|
return material;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMaterial(String material) {
|
public void setMaterial(String material) {
|
||||||
this.material = material;
|
this.material = material.toUpperCase();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getSkullOwner() {
|
public String getSkullOwner() {
|
||||||
@ -67,7 +97,7 @@ public class SWItem {
|
|||||||
object.addProperty("enchanted", true);
|
object.addProperty("enchanted", true);
|
||||||
if(hideAttributes)
|
if(hideAttributes)
|
||||||
object.addProperty("hideAttributes", true);
|
object.addProperty("hideAttributes", true);
|
||||||
if(!lore.isEmpty()) {
|
if(lore != null) {
|
||||||
JsonArray array = new JsonArray();
|
JsonArray array = new JsonArray();
|
||||||
for (String lores:
|
for (String lores:
|
||||||
lore) {
|
lore) {
|
||||||
@ -76,6 +106,30 @@ public class SWItem {
|
|||||||
object.add("lore", array);
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package de.steamwar.bungeecore.coms.receiver;
|
|||||||
|
|
||||||
import com.google.common.io.ByteArrayDataInput;
|
import com.google.common.io.ByteArrayDataInput;
|
||||||
import com.google.common.io.ByteStreams;
|
import com.google.common.io.ByteStreams;
|
||||||
|
import de.steamwar.bungeecore.coms.handlers.InventoryCallbackHandler;
|
||||||
import de.steamwar.bungeecore.listeners.BasicListener;
|
import de.steamwar.bungeecore.listeners.BasicListener;
|
||||||
import net.md_5.bungee.api.event.PluginMessageEvent;
|
import net.md_5.bungee.api.event.PluginMessageEvent;
|
||||||
import net.md_5.bungee.event.EventHandler;
|
import net.md_5.bungee.event.EventHandler;
|
||||||
@ -11,14 +12,16 @@ import java.util.Map;
|
|||||||
|
|
||||||
public class PacketHandler extends BasicListener {
|
public class PacketHandler extends BasicListener {
|
||||||
|
|
||||||
private static Map<String, Handler> handlerMap = new HashMap<>();
|
private static final Map<String, Handler> handlerMap = new HashMap<>();
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPluginMessage(PluginMessageEvent event) {
|
public void onPluginMessage(PluginMessageEvent event) {
|
||||||
if(!event.getTag().equalsIgnoreCase("sw:bridge"))
|
System.out.println(event.toString());
|
||||||
|
if(!event.getTag().equalsIgnoreCase("sw:return"))
|
||||||
return;
|
return;
|
||||||
ByteArrayDataInput in = ByteStreams.newDataInput( event.getData() );
|
ByteArrayDataInput in = ByteStreams.newDataInput(event.getData());
|
||||||
handlerMap.get(in.readUTF()).handle(in);
|
String handler = in.readUTF();
|
||||||
|
handlerMap.get(handler).handle(in);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void registerHandler(Handler handler) {
|
public static void registerHandler(Handler handler) {
|
||||||
@ -26,6 +29,6 @@ public class PacketHandler extends BasicListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static {
|
static {
|
||||||
//TODO Register Handlers
|
registerHandler(new InventoryCallbackHandler());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren