initial commit

This commit is contained in:
Steev 2022-05-10 02:17:51 +02:00
commit 37b687b999
15 changed files with 516 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
.idea
out
target

63
config.yml Normal file
View File

@ -0,0 +1,63 @@
menu:
navigator:
title: "Navigator"
material: "COMPASS"
slots: 54
slot: 4
permission: slpnet.lobby.navigator
items:
tridentwar:
title: "TridentWar"
material: "TRIDENT"
description: "test\ntest"
slot: 18
action:
type: "connect"
argument: "tw1"
bedwars:
title: "Bedwars"
material: "RED_BED"
description: "test\ntest"
slot: 20
action:
type: "connect"
argument: "tw1"
masterbuilders:
title: "Master Builder"
material: "CRAFTING_TABLE"
description: "test\ntest"
slot: 22
action:
type: "connect"
argument: "tw1"
profile:
title: "Profile"
material: "BOOK"
slot: 2
slots: 54
permission: slpnet.lobby.profile
items:
tridentwar:
title: "TridentWar"
material: "TRIDENT"
description: "test\ntest"
slot: 18
action:
type: "connect"
argument: "tw1"
bedwars:
title: "Bedwars"
material: "RED_BED"
description: "test\ntest"
slot: 20
action:
type: "connect"
argument: "tw1"
masterbuilders:
title: "Master Builder"
material: "CRAFTING_TABLE"
description: "test\ntest"
slot: 22
action:
type: "connect"
argument: "tw1"

20
off.txt Normal file
View File

@ -0,0 +1,20 @@
Inventory inv = inventories.get(this.lobbyManager.getLobby().config.getString(key + ".title"));
// Nullpointer debugging
System.out.println(key + "0");
if(this.lobbyManager.getLobby().config.get("menu." + key + ".items") == null) System.out.println("Error: no items have been set, Menu will not be created"); // fixes nullpointer
if(this.lobbyManager.getLobby().config.get("menu." + key + ".items") == null) return; // fixes nullpointer
for(String keyItem : this.lobbyManager.getLobby().config.getConfigurationSection("menu." + key + ".items").getKeys(true)) {
if(this.lobbyManager.getLobby().config.get("menu." + key + ".items") == null) System.out.println("Error: no items have been set, Menu will not be created"); // fixes nullpointer
if(this.lobbyManager.getLobby().config.get("menu." + key + ".items") == null) return; // fixes nullpointer
// Error: material from config results null though it shouldn't
System.out.println(this.lobbyManager.getLobby().config.getString("menu."+key+".items."+keyItem+".material") + "1");
System.out.println(keyItem + "2");
inv.setItem(this.lobbyManager.getLobby().config.getInt("menu." + key + ".items." + keyItem + ".slot"),
createGuiItem(Material.getMaterial(this.lobbyManager.getLobby().config.getString("menu." + key + ".items." + keyItem + ".material")),
this.lobbyManager.getLobby().config.getString("menu." + key + ".items." + keyItem + ".title"),
this.lobbyManager.getLobby().config.getString("menu." + key + ".items." + keyItem + ".description")
)
);
}

4
plugin.yml Normal file
View File

@ -0,0 +1,4 @@
name: Lobby
main: de.slpnetwork.lobby.Lobby
version: 0.1
api-version: 1.18

34
pom.xml Normal file
View File

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>de.slpnetwork.lobby</groupId>
<artifactId>slpnetlobby</artifactId>
<version>1.0</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<repositories>
<!-- This adds the Spigot Maven repository to the build -->
<repository>
<id>spigot-repo</id>
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
</repository>
</repositories>
<dependencies>
<!--This adds the Spigot API artifact to the build -->
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.18.2-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>

12
slpnetlobby.iml Normal file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<module version="4">
<component name="FacetManager">
<facet type="minecraft" name="Minecraft">
<configuration>
<autoDetectTypes>
<platformType>SPIGOT</platformType>
</autoDetectTypes>
</configuration>
</facet>
</component>
</module>

View File

@ -0,0 +1,91 @@
package de.slpnetwork.lobby;
import de.slpnetwork.lobby.Manager.InventoryManager;
import de.slpnetwork.lobby.Manager.LobbyManager;
import org.bukkit.Material;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.plugin.messaging.PluginMessageListener;
import java.io.File;
public class Lobby extends JavaPlugin implements Listener, PluginMessageListener {
public LobbyManager lobbyManager;
public FileConfiguration config;
public File itemData;
public FileConfiguration itemDataConfig;
public File menuData;
public FileConfiguration menuDataConfig;
@Override
public void onEnable(){
super.onEnable();
this.getServer().getLogger().info("Initializing Configs");
try {
this.saveDefaultConfig();
config = this.getConfig();
itemData = new File(this.getDataFolder(), "items.yml");
itemDataConfig = YamlConfiguration.loadConfiguration(itemData);
menuData = new File(this.getDataFolder(), "menu.yml");
menuDataConfig = YamlConfiguration.loadConfiguration(menuData);
}catch (Exception ex) {
}
this.lobbyManager = new LobbyManager(this);
this.getServer().getPluginManager().registerEvents(this, this);
this.getServer().getPluginManager().registerEvents(new InventoryManager(this.lobbyManager), this);
this.getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
this.getServer().getMessenger().registerIncomingPluginChannel(this, "BungeeCord", this);
}
@Override
public void onDisable(){
super.onDisable();
}
@EventHandler
public void onPlayerJoin(PlayerJoinEvent e) {
e.getPlayer().getInventory().clear();
// TODO: loop over itemdataconfig(items)
for (String key: this.config.getConfigurationSection("menu").getKeys(false)) {
// TODO: replace current datapoints with new ones
ItemStack is = new ItemStack(Material.getMaterial(this.config.getString("menu." + key + ".material")));
ItemMeta im = is.getItemMeta();
im.setDisplayName(this.config.getString("menu." + key + ".title"));
im.addItemFlags();
is.setItemMeta(im);
e.getPlayer().getInventory().setItem(this.config.getInt("menu." + key + ".slot"), is);
}
}
@EventHandler
public void onPlayerUse(PlayerInteractEvent e) {
// Error: somewhere on the way of triggering
// The menu does not get opened
try {
Player p = e.getPlayer();
// TODO: Replace current datapoints with new ones
// TODO: Grab menu Datapoint based on Material Type
this.lobbyManager.getInventoryManager().openInventory(p, p.getInventory().getItemInMainHand().getItemMeta().getDisplayName());
} catch (Exception ex) {
// possibly nullpointer nothing else can happen here
}
}
@Override
public void onPluginMessageReceived(String channel, Player player, byte[] bytes) {
if (!channel.equals("BungeeCord")) { return; }
}
}

View File

@ -0,0 +1,115 @@
package de.slpnetwork.lobby.Manager;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryDragEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.Arrays;
import java.util.HashMap;
public class InventoryManager implements Listener {
private final LobbyManager lobbyManager;
private HashMap<String, Inventory> inventories;
public InventoryManager(LobbyManager lobbyManager){
this.lobbyManager = lobbyManager;
this.lobbyManager.getLobby().getServer().getLogger().info("Initializing Lobby");
this.lobbyManager.setInventoryManager(this);
this.inventories = new HashMap<String, Inventory>();
// TODO: replace default config with menudataconfig and iterate over its menu datapoint
for(String key: this.lobbyManager.getLobby().config.getConfigurationSection("menu").getKeys(false)) {
// TODO: replace current datapoints with new ones
this.inventories.put(
this.lobbyManager.getLobby().config.getString("menu." + key + ".title"), Bukkit.createInventory(null,
this.lobbyManager.getLobby().config.getInt("menu." + key + ".slots"),
this.lobbyManager.getLobby().config.getString("menu." + key + ".title")
)
);
System.out.println(this.inventories.size() + " inventories stored"); // debugging inventories not beeing generated
initializeItems(key);
}
}
void initializeItems(String key){
Inventory inv = inventories.get(this.lobbyManager.getLobby().config.getString("menu." + key + ".title"));
// Nullpointer debugging
System.out.println(key + "0");
if(this.lobbyManager.getLobby().config.get("menu." + key) == null) System.out.println("Error: no items have been set, Menu will not be created"); // fixes nullpointer
if(this.lobbyManager.getLobby().config.get("menu." + key) == null) return; // fixes nullpointer
for(String keyItem : this.lobbyManager.getLobby().config.getConfigurationSection("menu." + key + ".items").getKeys(false)) {
System.out.println("debug-> " + keyItem);
System.out.println(this.lobbyManager.getLobby().config.getString("menu."+key+".items."+keyItem+".material") + "1");
inv.setItem(this.lobbyManager.getLobby().config.getInt("menu." + key + ".items." + keyItem + ".slot"),
createGuiItem(Material.getMaterial(this.lobbyManager.getLobby().config.getString("menu." + key + ".items." + keyItem + ".material")),
this.lobbyManager.getLobby().config.getString("menu." + key + ".items." + keyItem + ".title"),
this.lobbyManager.getLobby().config.getString("menu." + key + ".items." + keyItem + ".description")
)
);
}
}
protected ItemStack createGuiItem(final Material material, final String name, final String... lore) {
final ItemStack item = new ItemStack(material, 1);
final ItemMeta meta = item.getItemMeta();
// Set the name of the item
meta.setDisplayName(name);
// Set the lore of the item
meta.setLore(Arrays.asList(lore));
item.setItemMeta(meta);
return item;
}
// You can open the inventory with this
public void openInventory(final HumanEntity ent, String Inventory) {
System.out.println(Inventory);
System.out.println(inventories.containsKey(Inventory));
if(inventories.containsKey(Inventory)) {
ent.openInventory(inventories.get(Inventory));
}
}
// Check for clicks on items
@EventHandler
public void onInventoryClick(final InventoryClickEvent e) {
if(!inventories.containsValue(e.getInventory())) return;
e.setCancelled(true);
final ItemStack clickedItem = e.getCurrentItem();
this.lobbyManager.getLobby().getServer().getLogger().info(clickedItem.toString());
// verify current item is not null
if (clickedItem == null || clickedItem.getType().isAir()) return;
final Player p = (Player) e.getWhoClicked();
this.lobbyManager.getCommandInterpreter().execute(p.getPlayer(),
this.lobbyManager.getLobby().config.getString("menu." + e.getView().getTitle().toLowerCase()+ ".items."+ clickedItem.getItemMeta().getDisplayName().toLowerCase() + ".action.type"),
this.lobbyManager.getLobby().config.getString("menu." + e.getView().getTitle().toLowerCase()+ ".items."+ clickedItem.getItemMeta().getDisplayName().toLowerCase() + ".action.argument"));
// Using slots click is a best option for your inventory click's
p.sendMessage("You clicked at slot " + e.getRawSlot());
}
// Cancel dragging in our inventory
@EventHandler
public void onInventoryClick(final InventoryDragEvent e) {
if (inventories.containsValue(e.getInventory())) {
e.setCancelled(true);
}
}
}

View File

@ -0,0 +1,37 @@
package de.slpnetwork.lobby.Manager;
import de.slpnetwork.lobby.Lobby;
import de.slpnetwork.lobby.Utils.CommandInterpreter;
public class LobbyManager {
private Lobby lobby;
private InventoryManager inventoryManager;
private CommandInterpreter commandInterpreter;
private PlayerManager playerManager;
public LobbyManager(Lobby lobby) {
this.lobby = lobby;
this.commandInterpreter = new CommandInterpreter(this);
this.playerManager = new PlayerManager(this);
}
public Lobby getLobby() {
return lobby;
}
public InventoryManager getInventoryManager() {
return inventoryManager;
}
public CommandInterpreter getCommandInterpreter() {
return commandInterpreter;
}
public PlayerManager getPlayerManager() {
return playerManager;
}
public void setInventoryManager(InventoryManager inventoryManager) {
this.inventoryManager = inventoryManager;
}
}

View File

@ -0,0 +1,43 @@
package de.slpnetwork.lobby.Manager;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
public class PlayerManager {
private LobbyManager lobbyManager;
public PlayerManager(LobbyManager lobbyManager) {
this.lobbyManager = lobbyManager;
}
public void giveItems(Player player){
player.getInventory().addItem(new ItemStack(Material.BOOK));
player.getInventory().addItem(new ItemStack(Material.COMPASS));
player.getInventory().addItem(new ItemStack(Material.PLAYER_HEAD));
}
/**
* teleports a player to a location
* @param player the wanted player
* @param loc the wanted location
*/
public void teleportPlayer(Player player, Location loc) {
player.teleport(loc);
}
/**
* Moves a player from a server to another
* @param dest the destination
* @param target the player to send
*/
public void moveFromServer(String dest, Player target) {
ByteArrayDataOutput aOut = ByteStreams.newDataOutput();
aOut.writeUTF("Connect");
aOut.writeUTF(dest);
target.sendPluginMessage(this.lobbyManager.getLobby(), "BungeeCord", aOut.toByteArray());
}
}

View File

@ -0,0 +1,4 @@
package de.slpnetwork.lobby.Manager;
public class ScoreboradManager {
}

View File

@ -0,0 +1,38 @@
package de.slpnetwork.lobby.Utils;
import de.slpnetwork.lobby.Manager.LobbyManager;
import org.bukkit.entity.Player;
import java.util.Objects;
public class CommandInterpreter {
private LobbyManager lobbyManager;
public CommandInterpreter(LobbyManager lobbyManager) {
this.lobbyManager = lobbyManager;
}
/**
* Executes configured action
* @param executor User who performed the Action
* @param action the action to perform
* @param args aditional arguments
*/
public void execute(Player executor, String action, String args){
switch (action.toLowerCase()) {
default:
this.lobbyManager.getLobby().getServer().getLogger().warning("The Action: '" + action + "' is not defined");
break;
case "menu":
// opens menu
this.lobbyManager.getInventoryManager().openInventory(executor, args);
break;
case "teleport":
break;
case "connect":
this.lobbyManager.getPlayerManager().moveFromServer(args, Objects.requireNonNull(executor.getPlayer()));
break;
case "execute":
break;
}
}
}

View File

@ -0,0 +1,7 @@
items:
COMPASS:
menu: "navigator"
display: "Navigator"
slot: 4
material: "COMPASS"
permission: "lobby.item.navigator"

View File

@ -0,0 +1,15 @@
navigator:
title: "Navigator"
identifier: "navigator"
slots: 54
slot: 4
permission: slpnet.lobby.navigator
items:
tridentwar:
title: "TridentWar"
material: "TRIDENT"
description: "test\ntest"
slot: 18
action:
type: "connect"
argument: "tw1"

30
todo.md Normal file
View File

@ -0,0 +1,30 @@
# first target
- [X] Plugin Stabillity
- [X] Debuggin: items properly handed on Join [In Progress]
- [ ] command interpreter
- [ ] Player prefix
- [ ] Connection Prefix
- [ ] Teleportation Prefix
- [ ] Comamnd Execution Prefix
- [ ] open prefix
- Opens a specified new inventory and closes the old one
- [ ] prefix chainig (eg. execute prefix + player prefix)
- [ ] Inventory Layering
# secondary
- [ ] Scoreboard Support
- [ ] Motd Message Suport
- [ ] Custom Bossbar support
- [ ] Scheduled Message Support
- [ ] Custom event based Title Support
- [ ] Firework Support
- [ ] Sound Support
- [ ] Updatable Items in Inventory
- [ ] Items change on events (eg. settings toggle)
- [ ] User Settings
- [ ] Players will be shown
- [ ] Toggle Referal Program
- [ ] Languages
- [ ] fly
- [ ] Doublejump
- [ ] User Refereal Program
- [ ] Documentation