Compare commits

...

10 Commits

Author SHA1 Message Date
NichtStudioCode
2c498eabe3
Update LICENSE 2024-03-31 10:47:34 +02:00
NichtStudioCode
0928e1f4d1 Bump version 2024-03-31 10:31:58 +02:00
NichtStudioCode
72a5639b2d Fix Window not set as parent of GUI after reopening 2024-03-31 10:31:35 +02:00
NichtStudioCode
954df03ea2 Bump version 2024-03-06 10:07:03 +01:00
NichtStudioCode
2d790314d3 Fix #65 2024-03-06 10:06:03 +01:00
NichtStudioCode
51aff8fe96 Add some NotNull annotations 2024-03-06 10:05:51 +01:00
NichtStudioCode
f76896231c Bump version 2024-01-12 09:05:41 +01:00
NichtStudioCode
e4d24de018 Fix ComponentLocalizer '%' escape and error message 2024-01-12 09:05:12 +01:00
NichtStudioCode
02de62fca8
Update README.md 2023-12-17 10:17:03 +01:00
NichtStudioCode
eb04148acb Bump version 2023-12-17 09:50:47 +01:00
33 changed files with 179 additions and 43 deletions

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2021 NichtStudioCode
Copyright (c) 2024 NichtStudioCode
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

@ -7,7 +7,7 @@
# InvUI
An Inventory API for Minecraft Spigot servers.
Supports all versions from 1.14.0 to 1.20.2.
Supports all versions from 1.14.0 to 1.20.4.
[Documentation](https://xenondevs.xyz/docs/invui/)
@ -19,7 +19,6 @@ Supports all versions from 1.14.0 to 1.20.2.
* Easily customizable (Create your own GUI types and Items)
* VirtualInventory: Store real items inside GUIs, customize maximum stack size per slot, etc.
* Easy way to add localization using the ItemProvider system and the built-in ItemBuilder
* Supports custom textures (forced resource pack system, compatible with AuthMe)
* Advanced ItemBuilder (Normal, Potion, Skull, Banner, Firework) with BaseComponent support
* Support for BaseComponents in inventory titles
* Uncloseable inventories

@ -5,7 +5,7 @@
<parent>
<groupId>xyz.xenondevs.invui</groupId>
<artifactId>invui-parent</artifactId>
<version>1.23</version>
<version>1.27</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

@ -5,7 +5,7 @@
<parent>
<groupId>xyz.xenondevs.invui</groupId>
<artifactId>invui-parent</artifactId>
<version>1.23</version>
<version>1.27</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

@ -5,7 +5,7 @@
<parent>
<groupId>xyz.xenondevs.invui</groupId>
<artifactId>invui-parent</artifactId>
<version>1.23</version>
<version>1.27</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

@ -5,7 +5,7 @@
<parent>
<groupId>xyz.xenondevs.invui</groupId>
<artifactId>invui-parent</artifactId>
<version>1.23</version>
<version>1.27</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

@ -5,7 +5,7 @@
<parent>
<groupId>xyz.xenondevs.invui</groupId>
<artifactId>invui-parent</artifactId>
<version>1.23</version>
<version>1.27</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

@ -5,7 +5,7 @@
<parent>
<groupId>xyz.xenondevs.invui</groupId>
<artifactId>invui-parent</artifactId>
<version>1.23</version>
<version>1.27</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

@ -5,7 +5,7 @@
<parent>
<groupId>xyz.xenondevs.invui</groupId>
<artifactId>invui-parent</artifactId>
<version>1.23</version>
<version>1.27</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

@ -5,7 +5,7 @@
<parent>
<groupId>xyz.xenondevs.invui</groupId>
<artifactId>invui-parent</artifactId>
<version>1.23</version>
<version>1.27</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

@ -5,7 +5,7 @@
<parent>
<groupId>xyz.xenondevs.invui</groupId>
<artifactId>invui-parent</artifactId>
<version>1.23</version>
<version>1.27</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

@ -0,0 +1,139 @@
<?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">
<parent>
<groupId>xyz.xenondevs.invui</groupId>
<artifactId>invui-parent</artifactId>
<version>1.27</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>inventory-access-r18</artifactId>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<spigot.version>1.20.4-R0.1-SNAPSHOT</spigot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot</artifactId>
<version>${spigot.version}</version>
<classifier>remapped-mojang</classifier>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>xyz.xenondevs.invui</groupId>
<artifactId>inventory-access</artifactId>
<version>${project.parent.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>xyz.xenondevs.string-remapper</groupId>
<artifactId>string-remapper-maven-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<id>remap-spigot</id>
<goals>
<goal>remap</goal>
</goals>
<configuration>
<spigotVersion>${spigot.version}</spigotVersion>
<goal>spigot</goal>
<classesIn>${project.build.directory}/classes</classesIn>
<classesOut>${project.build.directory}/classes-spigot</classesOut>
</configuration>
</execution>
<execution>
<id>remap-mojang</id>
<goals>
<goal>remap</goal>
</goals>
<configuration>
<spigotVersion>${spigot.version}</spigotVersion>
<goal>mojang</goal>
<classesIn>${project.build.directory}/classes</classesIn>
<classesOut>${project.build.directory}/classes-mojang</classesOut>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.2</version>
<executions>
<execution>
<id>default-jar</id>
<phase>none</phase>
</execution>
<execution>
<id>spigot</id>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<classesDirectory>${project.build.directory}/classes-spigot</classesDirectory>
</configuration>
</execution>
<execution>
<id>mojang</id>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<classesDirectory>${project.build.directory}/classes-mojang</classesDirectory>
<classifier>remapped-mojang</classifier>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>net.md-5</groupId>
<artifactId>specialsource-maven-plugin</artifactId>
<version>1.2.2</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>remap</goal>
</goals>
<id>remap-obf</id>
<configuration>
<srgIn>org.spigotmc:minecraft-server:${spigot.version}:txt:maps-mojang</srgIn>
<reverse>true</reverse>
<remappedDependencies>org.spigotmc:spigot:${spigot.version}:jar:remapped-mojang</remappedDependencies>
<remappedArtifactAttached>false</remappedArtifactAttached>
<finalName>${project.artifactId}-${project.version}-remapped-obf</finalName>
</configuration>
</execution>
<execution>
<phase>package</phase>
<goals>
<goal>remap</goal>
</goals>
<id>remap-spigot</id>
<configuration>
<inputFile>${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar</inputFile>
<srgIn>org.spigotmc:minecraft-server:${spigot.version}:csrg:maps-spigot</srgIn>
<remappedDependencies>org.spigotmc:spigot:${spigot.version}:jar:remapped-obf</remappedDependencies>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

@ -5,7 +5,7 @@
<parent>
<groupId>xyz.xenondevs.invui</groupId>
<artifactId>invui-parent</artifactId>
<version>1.23</version>
<version>1.27</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

@ -5,7 +5,7 @@
<parent>
<groupId>xyz.xenondevs.invui</groupId>
<artifactId>invui-parent</artifactId>
<version>1.23</version>
<version>1.27</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

@ -5,7 +5,7 @@
<parent>
<groupId>xyz.xenondevs.invui</groupId>
<artifactId>invui-parent</artifactId>
<version>1.23</version>
<version>1.27</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

@ -5,7 +5,7 @@
<parent>
<groupId>xyz.xenondevs.invui</groupId>
<artifactId>invui-parent</artifactId>
<version>1.23</version>
<version>1.27</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

@ -5,7 +5,7 @@
<parent>
<groupId>xyz.xenondevs.invui</groupId>
<artifactId>invui-parent</artifactId>
<version>1.23</version>
<version>1.27</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

@ -5,7 +5,7 @@
<parent>
<groupId>xyz.xenondevs.invui</groupId>
<artifactId>invui-parent</artifactId>
<version>1.23</version>
<version>1.27</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

@ -5,7 +5,7 @@
<parent>
<groupId>xyz.xenondevs.invui</groupId>
<artifactId>invui-parent</artifactId>
<version>1.23</version>
<version>1.27</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

@ -5,7 +5,7 @@
<parent>
<groupId>xyz.xenondevs.invui</groupId>
<artifactId>invui-parent</artifactId>
<version>1.23</version>
<version>1.27</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

@ -5,7 +5,7 @@
<parent>
<groupId>xyz.xenondevs.invui</groupId>
<artifactId>invui-parent</artifactId>
<version>1.23</version>
<version>1.27</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

@ -34,14 +34,14 @@ abstract class ComponentLocalizer<C> {
var end = matcher.end();
// check for escaped %
var matchedStr = formatString.substring(i, start);
var matchedStr = formatString.substring(start, end);
if ("%%".equals(matchedStr)) {
sb.append('%');
} else {
// check for invalid format, only %s is supported
var argType = matcher.group(2);
if (!"s".equals(argType)) {
throw new IllegalStateException("Unsupported format: '" + matchedStr + "'");
throw new IllegalStateException("Unsupported placeholder format: '" + matchedStr + "'");
}
// retrieve argument index

@ -7,7 +7,7 @@
<parent>
<groupId>xyz.xenondevs.invui</groupId>
<artifactId>invui-parent</artifactId>
<version>1.23</version>
<version>1.27</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -31,7 +31,7 @@ public class InvUI implements Listener {
public @NotNull Plugin getPlugin() {
if (plugin == null) {
plugin = tryFindPlugin();
setPlugin(tryFindPlugin());
if (plugin == null)
throw new IllegalStateException("Plugin is not set. Set it using InvUI.getInstance().setPlugin(plugin);");
@ -60,6 +60,9 @@ public class InvUI implements Listener {
if (this.plugin != null)
throw new IllegalStateException("Plugin is already set");
if (plugin == null)
return;
Bukkit.getPluginManager().registerEvents(this, plugin);
this.plugin = plugin;
}

@ -2,16 +2,17 @@ package xyz.xenondevs.invui.item;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.function.Supplier;
public interface ItemProvider extends Supplier<ItemStack>, Cloneable {
public interface ItemProvider extends Supplier<@NotNull ItemStack>, Cloneable {
/**
* An {@link ItemProvider} for an {@link ItemStack}.
*/
ItemProvider EMPTY = new ItemWrapper(new ItemStack(Material.AIR));
@NotNull ItemProvider EMPTY = new ItemWrapper(new ItemStack(Material.AIR));
/**
* Gets the {@link ItemStack} translated in the specified language.
@ -19,14 +20,14 @@ public interface ItemProvider extends Supplier<ItemStack>, Cloneable {
* @param lang The language to translate the item in.
* @return The {@link ItemStack}
*/
ItemStack get(@Nullable String lang);
@NotNull ItemStack get(@Nullable String lang);
/**
* Gets the {@link ItemStack} without requesting a specific language.
*
* @return The {@link ItemStack}
*/
default ItemStack get() {
default @NotNull ItemStack get() {
return get(null);
}

@ -1,6 +1,7 @@
package xyz.xenondevs.invui.item;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import java.util.UUID;
@ -17,7 +18,7 @@ public class ItemWrapper implements ItemProvider {
}
@Override
public ItemStack get(String lang) {
public @NotNull ItemStack get(String lang) {
return itemStack;
}

@ -24,8 +24,6 @@ public abstract class AbstractMergedWindow extends AbstractDoubleWindow {
public AbstractMergedWindow(Player player, ComponentWrapper title, AbstractGui gui, Inventory upperInventory, boolean closeable) {
super(player, title, gui.getSize(), upperInventory, closeable);
this.gui = gui;
gui.addParent(this);
}
@Override

@ -32,8 +32,6 @@ public abstract class AbstractSingleWindow extends AbstractWindow {
this.gui = gui;
this.size = gui.getSize();
this.inventory = inventory;
gui.addParent(this);
}
@Override

@ -27,9 +27,6 @@ public abstract class AbstractSplitWindow extends AbstractDoubleWindow {
super(player, title, upperGui.getSize() + lowerGui.getSize(), upperInventory, closeable);
this.upperGui = upperGui;
this.lowerGui = lowerGui;
upperGui.addParent(this);
lowerGui.addParent(this);
}
@Override

@ -261,6 +261,7 @@ public abstract class AbstractWindow implements Window, GuiParent {
hasHandledClose = false;
initItems();
WindowManager.getInstance().addWindow(this);
for (AbstractGui gui : getGuis()) gui.addParent(this);
openInventory(viewer);
}
@ -331,8 +332,7 @@ public abstract class AbstractWindow implements Window, GuiParent {
}
});
Arrays.stream(getGuis())
.forEach(gui -> gui.removeParent(this));
for (AbstractGui gui : getGuis()) gui.removeParent(this);
}
@Override

@ -6,7 +6,7 @@
<parent>
<groupId>xyz.xenondevs.invui</groupId>
<artifactId>invui-parent</artifactId>
<version>1.23</version>
<version>1.27</version>
</parent>
<artifactId>invui-kotlin</artifactId>

@ -6,7 +6,7 @@
<parent>
<groupId>xyz.xenondevs.invui</groupId>
<artifactId>invui-parent</artifactId>
<version>1.23</version>
<version>1.27</version>
</parent>
<artifactId>invui</artifactId>

@ -6,7 +6,7 @@
<groupId>xyz.xenondevs.invui</groupId>
<artifactId>invui-parent</artifactId>
<version>1.23</version>
<version>1.27</version>
<packaging>pom</packaging>
<properties>