Skip to content
This repository has been archived by the owner on Sep 19, 2023. It is now read-only.

Commit

Permalink
Version 1.0.0 build 1
Browse files Browse the repository at this point in the history
  • Loading branch information
DaniFoldi committed May 5, 2021
1 parent 3a0274b commit b70e960
Show file tree
Hide file tree
Showing 18 changed files with 667 additions and 49 deletions.
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
.gradle/
.idea/
build/
build/

*.DS_Store
11 changes: 9 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ plugins {
}

group 'hu.nugget'
version '0.0.1'
version '1.0.0'
sourceCompatibility = '1.8'

repositories {
mavenCentral()
Expand All @@ -19,6 +20,10 @@ dependencies {
compileOnly 'de.exceptionflug:protocolize-items:1.6.7-SNAPSHOT'
compileOnly 'de.exceptionflug:protocolize-inventory:1.6.7-SNAPSHOT'

implementation ('com.electronwill.night-config:yaml:3.6.0') {
exclude module: 'snakeyaml'
}

implementation'org.jetbrains:annotations:20.1.0'
implementation 'javax.inject:javax.inject:1'
implementation 'com.google.dagger:dagger:2.34'
Expand All @@ -33,7 +38,9 @@ processResources {
}

shadowJar {
minimize()
minimize {
exclude(dependency('com.electronwill.night-config:.*:.*'))
}
relocate 'org.jetbrains.annotations', 'hu.nugget.bungeegui.reloc.annotations'
archiveFileName.set("${project.name}-${project.version}.jar")
}
53 changes: 53 additions & 0 deletions src/main/java/hu/nugget/bungeegui/BungeeGuiCommand.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package hu.nugget.bungeegui;

import hu.nugget.bungeegui.gui.GuiHandler;
import hu.nugget.bungeegui.util.Message;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.plugin.Command;
import net.md_5.bungee.api.plugin.TabExecutor;

import java.util.List;
import java.util.Locale;
import java.util.stream.Collectors;

public class BungeeGuiCommand extends Command implements TabExecutor {

private final String name;
private final GuiHandler guiHandler;

public BungeeGuiCommand(String name, GuiHandler guiHandler) {
super(guiHandler.getGui(name).getCommandAliases().stream().findFirst().orElseThrow(), guiHandler.getGui(name).getPermission(), guiHandler.getGui(name).getCommandAliases().stream().skip(1L).toArray(String[]::new));
this.name = name;
this.guiHandler = guiHandler;
}

@Override
public void execute(CommandSender sender, String[] args) {
if (!(sender instanceof ProxiedPlayer)) {
sender.sendMessage(Message.PLAYER_ONLY.toComponent());
return;
}

if (args.length == 0 && guiHandler.getGui(name).isTargeted()) {
sender.sendMessage(Message.TARGET_REQUIRED.toComponent());
return;
}

guiHandler.open(name, (ProxiedPlayer)sender, args.length == 0 ? "" : args[0]);
}

@Override
public Iterable<String> onTabComplete(CommandSender sender, String[] args) {
if (!guiHandler.getGui(name).isTargeted()) {
return List.of();
}
if (args.length > 1) {
return List.of();
}

String filter = args.length == 0 ? "" : args[args.length - 1];
return ProxyServer.getInstance().getPlayers().stream().map(CommandSender::getName).filter(n -> n.toLowerCase(Locale.ROOT).startsWith(filter.toLowerCase(Locale.ROOT))).collect(Collectors.toList());
}
}
34 changes: 33 additions & 1 deletion src/main/java/hu/nugget/bungeegui/BungeeGuiListener.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
package hu.nugget.bungeegui;

import de.exceptionflug.protocolize.inventory.Inventory;
import de.exceptionflug.protocolize.inventory.InventoryType;
import de.exceptionflug.protocolize.inventory.event.InventoryClickEvent;
import de.exceptionflug.protocolize.inventory.event.InventoryCloseEvent;
import hu.nugget.bungeegui.gui.GuiGrid;
import hu.nugget.bungeegui.gui.GuiHandler;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.event.PlayerDisconnectEvent;
import net.md_5.bungee.api.plugin.Listener;
import net.md_5.bungee.event.EventHandler;
import org.jetbrains.annotations.NotNull;
Expand All @@ -19,11 +23,39 @@ public BungeeGuiListener(final @NotNull GuiHandler guiHandler) {
}

@EventHandler
@SuppressWarnings("unused")
public void onInventoryClick(final @NotNull InventoryClickEvent event) {
final GuiGrid openGui = guiHandler.getOpenGui(event.getPlayer().getUniqueId());
if (openGui == null) {
return;
}

final ProxiedPlayer player = event.getPlayer();
final Inventory inv = event.getInventory();
final Inventory inventory = event.getInventory();
final int slot = event.getSlot();

if (inventory.getType().equals(InventoryType.PLAYER)) {
return;
}
if (slot == -999) {
return;
}

final String target = guiHandler.getGuiTarget(player.getUniqueId());

guiHandler.runCommand(player,openGui, slot, target);
guiHandler.close(player);
}

@EventHandler
@SuppressWarnings("unused")
public void onInventoryClose(final @NotNull InventoryCloseEvent event) {
guiHandler.close(event.getPlayer());
}

@EventHandler
@SuppressWarnings("unused")
public void onDisconnect(final @NotNull PlayerDisconnectEvent event) {
guiHandler.close(event.getPlayer());
}
}
56 changes: 53 additions & 3 deletions src/main/java/hu/nugget/bungeegui/BungeeGuiLoader.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,63 @@
package hu.nugget.bungeegui;

import com.electronwill.nightconfig.core.Config;
import hu.nugget.bungeegui.gui.GuiHandler;
import hu.nugget.bungeegui.util.FileUtil;
import hu.nugget.bungeegui.util.Message;
import hu.nugget.bungeegui.util.StringUtil;
import net.md_5.bungee.api.plugin.PluginManager;

import javax.inject.Inject;
import java.io.IOException;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;

public class BungeeGuiLoader {

private final GuiHandler guiHandler;
private final BungeeGuiPlugin plugin;
private final Logger logger;
private final PluginManager pluginManager;
private final Path datafolder;

@Inject
public BungeeGuiLoader() {}
public BungeeGuiLoader(GuiHandler guiHandler, BungeeGuiPlugin plugin, Logger logger, PluginManager pluginManager, Path datafolder) {
this.guiHandler = guiHandler;
this.plugin = plugin;
this.logger = logger;
this.pluginManager = pluginManager;
this.datafolder = datafolder;
}

void load() {
StringUtil.blockPrint("Loading " + plugin.getDescription().getName() + " version " + plugin.getDescription().getVersion()).forEach(logger::info);

try {
FileUtil.ensureFile(datafolder, "config.yml");
} catch (IOException e) {
logger.severe("Could not preload config file");
logger.severe(e.getMessage());
e.printStackTrace();
}

Config config = guiHandler.load(datafolder.resolve("config.yml"));

Map<String, String> messages = new HashMap<>();
for (Config.Entry message: ((Config)config.get("messages")).entrySet()) {
messages.put(message.getKey(), message.getValue());
}
Message.setMessageProvider(messages);

void load() {}
pluginManager.registerCommand(plugin, new ReloadCommand(this));
guiHandler.registerCommands();
pluginManager.registerListener(plugin, new BungeeGuiListener(guiHandler));
}

void unload() {}
void unload() {
StringUtil.blockPrint("Unloading " + plugin.getDescription().getName() + " version " + plugin.getDescription().getVersion()).forEach(logger::info);
pluginManager.unregisterCommands(plugin);
pluginManager.unregisterListeners(plugin);
}
}
9 changes: 9 additions & 0 deletions src/main/java/hu/nugget/bungeegui/BungeeGuiPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,26 @@

import hu.nugget.bungeegui.inject.BungeeGuiComponent;
import hu.nugget.bungeegui.inject.DaggerBungeeGuiComponent;
import hu.nugget.bungeegui.util.FileUtil;
import net.md_5.bungee.api.plugin.Plugin;

import javax.inject.Inject;
import java.io.File;
import java.io.IOException;

public class BungeeGuiPlugin extends Plugin {
private BungeeGuiLoader loader;

@Override
public void onEnable() {
final BungeeGuiComponent component = DaggerBungeeGuiComponent.builder()
.plugin(this)
.logger(getLogger())
.pluginManager(getProxy().getPluginManager())
.datafolder(getDataFolder().toPath())
.build();
this.loader = component.loader();

this.loader.load();
}

Expand Down
32 changes: 32 additions & 0 deletions src/main/java/hu/nugget/bungeegui/ReloadCommand.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package hu.nugget.bungeegui;

import hu.nugget.bungeegui.util.Message;
import hu.nugget.bungeegui.util.Pair;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.plugin.Command;

import java.time.Duration;
import java.time.Instant;

public class ReloadCommand extends Command {

private final BungeeGuiLoader loader;

public ReloadCommand(BungeeGuiLoader loader) {
super("bguireload", "bungeegui.reload");
this.loader = loader;
}

@Override
public void execute(CommandSender sender, String[] args) {
Instant loadStart = Instant.now();

loader.unload();
loader.load();

Instant loadEnd = Instant.now();
long length = Duration.between(loadStart, loadEnd).toMillis();

sender.sendMessage(Message.RELOAD_SUCCESS.toComponent(Pair.of("time", String.valueOf(length))));
}
}
43 changes: 43 additions & 0 deletions src/main/java/hu/nugget/bungeegui/api/BungeeGuiAPI.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package hu.nugget.bungeegui.api;

import hu.nugget.bungeegui.gui.GuiHandler;
import net.md_5.bungee.api.connection.ProxiedPlayer;

import javax.inject.Inject;
import javax.inject.Singleton;

@Singleton
@SuppressWarnings("unused")
public class BungeeGuiAPI {

private static BungeeGuiAPI apiInstance;
public static BungeeGuiAPI getInstance() {
return apiInstance;
}
protected static void setInstance(BungeeGuiAPI apiInstance) {
BungeeGuiAPI.apiInstance = apiInstance;
}

private final GuiHandler guiHandler;

@Inject
public BungeeGuiAPI(GuiHandler guiHandler) {
this.guiHandler = guiHandler;
}

public void openGui(ProxiedPlayer player, String guiName, String target) {
guiHandler.open(guiName, player, target);
}

public void closeGui(ProxiedPlayer player) {
guiHandler.close(player);
}

public boolean hasOpenGui(ProxiedPlayer player) {
return guiHandler.getOpenGui(player.getUniqueId()) != null;
}

public String getOpenGui(ProxiedPlayer player) {
return guiHandler.getGuiName(guiHandler.getOpenGui(player.getUniqueId()));
}
}
47 changes: 39 additions & 8 deletions src/main/java/hu/nugget/bungeegui/gui/GuiGrid.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,52 @@

import org.jetbrains.annotations.NotNull;

import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.UUID;

public class GuiGrid {
private final Map<Integer, GuiItem> items;
private final Set<UUID> viewers = new HashSet<>();
private final boolean isTargeted;
private final List<String> commandAliases;
private final String permission;
private final int guiSize;
private final String title;

public GuiGrid(final @NotNull Map<Integer, GuiItem> items) {
public GuiGrid(final @NotNull Map<Integer, GuiItem> items,
final boolean isTargeted,
final @NotNull List<String> commandAliases,
final @NotNull String permission,
final int guiSize,
final @NotNull String title) {
this.items = items;
this.isTargeted = isTargeted;
this.commandAliases = commandAliases;
this.permission = permission;
this.guiSize = guiSize;
this.title = title;
}

public @NotNull Optional<GuiItem> getItem(final int slot) {
return Optional.ofNullable(this.items.get(slot));
public Map<Integer, GuiItem> getItems() {
return Map.copyOf(items);
}

public boolean isTargeted() {
return isTargeted;
}

public List<String> getCommandAliases() {
return commandAliases;
}

public String getPermission() {
return permission;
}

public int getGuiSize() {
return guiSize;
}

public String getTitle() {
return title;
}
}
Loading

0 comments on commit b70e960

Please sign in to comment.