commit
7b5b8f4d1c
29 changed files with 826 additions and 0 deletions
@ -0,0 +1,3 @@ |
||||
# Default ignored files |
||||
/shelf/ |
||||
/workspace.xml |
||||
@ -0,0 +1,19 @@ |
||||
<component name="ArtifactManager"> |
||||
<artifact type="jar" build-on-make="true" name="MenuMaker:jar"> |
||||
<output-path>$USER_HOME$/Plocha/betaserver/plugins</output-path> |
||||
<root id="archive" name="MenuMaker.jar"> |
||||
<element id="module-output" name="MenuMaker" /> |
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/yaml/snakeyaml/2.0/snakeyaml-2.0.jar" path-in-jar="/" /> |
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/net/kyori/examination-string/1.3.0/examination-string-1.3.0.jar" path-in-jar="/" /> |
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.13.1/jackson-core-2.13.1.jar" path-in-jar="/" /> |
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.13.1/jackson-dataformat-yaml-2.13.1.jar" path-in-jar="/" /> |
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.13.1/jackson-databind-2.13.1.jar" path-in-jar="/" /> |
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/net/kyori/examination-api/1.3.0/examination-api-1.3.0.jar" path-in-jar="/" /> |
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/jetbrains/annotations/24.1.0/annotations-24.1.0.jar" path-in-jar="/" /> |
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/net/kyori/adventure-key/4.16.0/adventure-key-4.16.0.jar" path-in-jar="/" /> |
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/net/kyori/adventure-api/4.16.0/adventure-api-4.16.0.jar" path-in-jar="/" /> |
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.13.1/jackson-annotations-2.13.1.jar" path-in-jar="/" /> |
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/net/kyori/adventure-text-minimessage/4.16.0/adventure-text-minimessage-4.16.0.jar" path-in-jar="/" /> |
||||
</root> |
||||
</artifact> |
||||
</component> |
||||
@ -0,0 +1,13 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project version="4"> |
||||
<component name="CompilerConfiguration"> |
||||
<annotationProcessing> |
||||
<profile name="Maven default annotation processors profile" enabled="true"> |
||||
<sourceOutputDir name="target/generated-sources/annotations" /> |
||||
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" /> |
||||
<outputRelativeToContentRoot value="true" /> |
||||
<module name="MenuMaker" /> |
||||
</profile> |
||||
</annotationProcessing> |
||||
</component> |
||||
</project> |
||||
@ -0,0 +1,7 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project version="4"> |
||||
<component name="Encoding"> |
||||
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" /> |
||||
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" /> |
||||
</component> |
||||
</project> |
||||
@ -0,0 +1,30 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project version="4"> |
||||
<component name="RemoteRepositoriesConfiguration"> |
||||
<remote-repository> |
||||
<option name="id" value="central" /> |
||||
<option name="name" value="Central Repository" /> |
||||
<option name="url" value="https://repo.maven.apache.org/maven2" /> |
||||
</remote-repository> |
||||
<remote-repository> |
||||
<option name="id" value="sonatype" /> |
||||
<option name="name" value="sonatype" /> |
||||
<option name="url" value="https://oss.sonatype.org/content/groups/public/" /> |
||||
</remote-repository> |
||||
<remote-repository> |
||||
<option name="id" value="spigotmc-repo" /> |
||||
<option name="name" value="spigotmc-repo" /> |
||||
<option name="url" value="https://hub.spigotmc.org/nexus/content/repositories/snapshots/" /> |
||||
</remote-repository> |
||||
<remote-repository> |
||||
<option name="id" value="central" /> |
||||
<option name="name" value="Maven Central repository" /> |
||||
<option name="url" value="https://repo1.maven.org/maven2" /> |
||||
</remote-repository> |
||||
<remote-repository> |
||||
<option name="id" value="jboss.community" /> |
||||
<option name="name" value="JBoss Community repository" /> |
||||
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" /> |
||||
</remote-repository> |
||||
</component> |
||||
</project> |
||||
@ -0,0 +1,14 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project version="4"> |
||||
<component name="ExternalStorageConfigurationManager" enabled="true" /> |
||||
<component name="MavenProjectsManager"> |
||||
<option name="originalFiles"> |
||||
<list> |
||||
<option value="$PROJECT_DIR$/pom.xml" /> |
||||
</list> |
||||
</option> |
||||
</component> |
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="17" project-jdk-type="JavaSDK"> |
||||
<output url="file://$PROJECT_DIR$/out" /> |
||||
</component> |
||||
</project> |
||||
@ -0,0 +1,8 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project version="4"> |
||||
<component name="ProjectModuleManager"> |
||||
<modules> |
||||
<module fileurl="file://$PROJECT_DIR$/MenuMaker.iml" filepath="$PROJECT_DIR$/MenuMaker.iml" /> |
||||
</modules> |
||||
</component> |
||||
</project> |
||||
@ -0,0 +1,124 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project version="4"> |
||||
<component name="Palette2"> |
||||
<group name="Swing"> |
||||
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false"> |
||||
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" /> |
||||
</item> |
||||
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false"> |
||||
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" /> |
||||
</item> |
||||
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false"> |
||||
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" /> |
||||
</item> |
||||
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true"> |
||||
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" /> |
||||
</item> |
||||
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" /> |
||||
<initial-values> |
||||
<property name="text" value="Button" /> |
||||
</initial-values> |
||||
</item> |
||||
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" /> |
||||
<initial-values> |
||||
<property name="text" value="RadioButton" /> |
||||
</initial-values> |
||||
</item> |
||||
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" /> |
||||
<initial-values> |
||||
<property name="text" value="CheckBox" /> |
||||
</initial-values> |
||||
</item> |
||||
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false"> |
||||
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" /> |
||||
<initial-values> |
||||
<property name="text" value="Label" /> |
||||
</initial-values> |
||||
</item> |
||||
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> |
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> |
||||
<preferred-size width="150" height="-1" /> |
||||
</default-constraints> |
||||
</item> |
||||
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> |
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> |
||||
<preferred-size width="150" height="-1" /> |
||||
</default-constraints> |
||||
</item> |
||||
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> |
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> |
||||
<preferred-size width="150" height="-1" /> |
||||
</default-constraints> |
||||
</item> |
||||
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true"> |
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> |
||||
<preferred-size width="150" height="50" /> |
||||
</default-constraints> |
||||
</item> |
||||
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true"> |
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> |
||||
<preferred-size width="150" height="50" /> |
||||
</default-constraints> |
||||
</item> |
||||
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true"> |
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> |
||||
<preferred-size width="150" height="50" /> |
||||
</default-constraints> |
||||
</item> |
||||
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true"> |
||||
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" /> |
||||
</item> |
||||
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> |
||||
<preferred-size width="150" height="50" /> |
||||
</default-constraints> |
||||
</item> |
||||
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3"> |
||||
<preferred-size width="150" height="50" /> |
||||
</default-constraints> |
||||
</item> |
||||
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> |
||||
<preferred-size width="150" height="50" /> |
||||
</default-constraints> |
||||
</item> |
||||
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3"> |
||||
<preferred-size width="200" height="200" /> |
||||
</default-constraints> |
||||
</item> |
||||
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false"> |
||||
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3"> |
||||
<preferred-size width="200" height="200" /> |
||||
</default-constraints> |
||||
</item> |
||||
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true"> |
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" /> |
||||
</item> |
||||
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" /> |
||||
</item> |
||||
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false"> |
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" /> |
||||
</item> |
||||
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" /> |
||||
</item> |
||||
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false"> |
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1"> |
||||
<preferred-size width="-1" height="20" /> |
||||
</default-constraints> |
||||
</item> |
||||
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false"> |
||||
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" /> |
||||
</item> |
||||
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" /> |
||||
</item> |
||||
</group> |
||||
</component> |
||||
</project> |
||||
@ -0,0 +1,6 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project version="4"> |
||||
<component name="VcsDirectoryMappings"> |
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" /> |
||||
</component> |
||||
</project> |
||||
@ -0,0 +1,13 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<module version="4"> |
||||
<component name="FacetManager"> |
||||
<facet type="minecraft" name="Minecraft"> |
||||
<configuration> |
||||
<autoDetectTypes> |
||||
<platformType>SPIGOT</platformType> |
||||
</autoDetectTypes> |
||||
<projectReimportVersion>1</projectReimportVersion> |
||||
</configuration> |
||||
</facet> |
||||
</component> |
||||
</module> |
||||
@ -0,0 +1,86 @@ |
||||
<?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>xyz.soukup</groupId> |
||||
<artifactId>MenuMaker</artifactId> |
||||
<version>1.0-SNAPSHOT</version> |
||||
<packaging>jar</packaging> |
||||
|
||||
<name>MenuMaker</name> |
||||
|
||||
<properties> |
||||
<java.version>1.8</java.version> |
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |
||||
</properties> |
||||
|
||||
<build> |
||||
<plugins> |
||||
<plugin> |
||||
<groupId>org.apache.maven.plugins</groupId> |
||||
<artifactId>maven-compiler-plugin</artifactId> |
||||
<version>3.8.1</version> |
||||
<configuration> |
||||
<source>${java.version}</source> |
||||
<target>${java.version}</target> |
||||
</configuration> |
||||
</plugin> |
||||
<plugin> |
||||
<groupId>org.apache.maven.plugins</groupId> |
||||
<artifactId>maven-shade-plugin</artifactId> |
||||
<version>3.2.4</version> |
||||
<executions> |
||||
<execution> |
||||
<phase>package</phase> |
||||
<goals> |
||||
<goal>shade</goal> |
||||
</goals> |
||||
</execution> |
||||
</executions> |
||||
</plugin> |
||||
</plugins> |
||||
<resources> |
||||
<resource> |
||||
<directory>src/main/resources</directory> |
||||
<filtering>true</filtering> |
||||
</resource> |
||||
</resources> |
||||
</build> |
||||
|
||||
<repositories> |
||||
<repository> |
||||
<id>spigotmc-repo</id> |
||||
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url> |
||||
</repository> |
||||
<repository> |
||||
<id>sonatype</id> |
||||
<url>https://oss.sonatype.org/content/groups/public/</url> |
||||
</repository> |
||||
</repositories> |
||||
|
||||
<dependencies> |
||||
<dependency> |
||||
<groupId>org.spigotmc</groupId> |
||||
<artifactId>spigot-api</artifactId> |
||||
<version>1.20.1-R0.1-SNAPSHOT</version> |
||||
<scope>provided</scope> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>net.kyori</groupId> |
||||
<artifactId>adventure-text-minimessage</artifactId> |
||||
<version>4.16.0</version> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>com.fasterxml.jackson.dataformat</groupId> |
||||
<artifactId>jackson-dataformat-yaml</artifactId> |
||||
<version>2.13.1</version> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>com.fasterxml.jackson.core</groupId> |
||||
<artifactId>jackson-core</artifactId> |
||||
<version>2.13.1</version> <!-- or the version compatible with your project --> |
||||
</dependency> |
||||
</dependencies> |
||||
</project> |
||||
@ -0,0 +1,56 @@ |
||||
package xyz.soukup.menumaker; |
||||
|
||||
import org.bukkit.Bukkit; |
||||
import org.bukkit.NamespacedKey; |
||||
import org.bukkit.entity.Player; |
||||
import org.bukkit.persistence.PersistentDataType; |
||||
import org.bukkit.plugin.java.JavaPlugin; |
||||
import xyz.soukup.menumaker.commands.*; |
||||
import xyz.soukup.menumaker.events.saveInventory; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
import java.util.Objects; |
||||
import java.util.logging.Logger; |
||||
import java.util.regex.Matcher; |
||||
import java.util.regex.Pattern; |
||||
|
||||
public final class MenuMaker extends JavaPlugin { |
||||
public static Logger logger = Bukkit.getLogger(); |
||||
|
||||
@Override |
||||
public void onEnable() { |
||||
Objects.requireNonNull(getCommand("menumaker")).setExecutor(new menumaker()); |
||||
Objects.requireNonNull(getCommand("menumaker")).setTabCompleter(new menumaker()); |
||||
Objects.requireNonNull(getCommand("createitem")).setTabCompleter(new createItem()); |
||||
Objects.requireNonNull(getCommand("enchantitem")).setExecutor(new enchantitem()); |
||||
Objects.requireNonNull(getCommand("enchantitem")).setTabCompleter(new enchantitem()); |
||||
Objects.requireNonNull(getCommand("createitem")).setExecutor(new createItem()); |
||||
Objects.requireNonNull(getCommand("hideenchant")).setExecutor(new hideEnchant()); |
||||
Objects.requireNonNull(getCommand("setsize")).setExecutor(new setsize()); |
||||
getServer().getPluginManager().registerEvents(new saveInventory(), this); |
||||
logger.info("plugin enabled"); |
||||
|
||||
|
||||
} |
||||
|
||||
@Override |
||||
public void onDisable() { |
||||
// Plugin shutdown logic
|
||||
} |
||||
|
||||
public static List<String> getArgs(String input) { |
||||
List<String> result = new ArrayList<>(); |
||||
Pattern pattern = Pattern.compile("\"([^\"]*)\"|([^\\s]+)"); |
||||
Matcher matcher = pattern.matcher(input); |
||||
while (matcher.find()) { |
||||
String match = matcher.group(1); // Check if the first group (quoted string) matched
|
||||
if (match == null) { |
||||
match = matcher.group(2); // If not, use the second group (unquoted string)
|
||||
} |
||||
result.add(match); |
||||
} |
||||
return result; |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,39 @@ |
||||
package xyz.soukup.menumaker; |
||||
|
||||
import org.bukkit.NamespacedKey; |
||||
import org.bukkit.entity.Player; |
||||
import org.bukkit.inventory.meta.ItemMeta; |
||||
import org.bukkit.persistence.PersistentDataContainer; |
||||
import org.bukkit.persistence.PersistentDataType; |
||||
|
||||
public class PDC { |
||||
public static void WritePlayerPDC(Player player, String key, PersistentDataType type, Object value){ |
||||
NamespacedKey nKey = new NamespacedKey(MenuMaker.getPlugin(MenuMaker.class), key); |
||||
PersistentDataContainer pdc = player.getPersistentDataContainer(); |
||||
pdc.set(nKey, type, value); |
||||
|
||||
} |
||||
public static Object GetPlayerPDC(Player player, String key, PersistentDataType type){ |
||||
NamespacedKey nKey = new NamespacedKey(MenuMaker.getPlugin(MenuMaker.class), key); |
||||
PersistentDataContainer pdc = player.getPersistentDataContainer(); |
||||
return pdc.get(nKey, type); |
||||
} |
||||
public static void DeletePlayerPDC(Player player, String key){ |
||||
NamespacedKey nKey = new NamespacedKey(MenuMaker.getPlugin(MenuMaker.class), key); |
||||
PersistentDataContainer pdc = player.getPersistentDataContainer(); |
||||
pdc.remove(nKey); |
||||
|
||||
} |
||||
public static ItemMeta WriteItemMetaPDC(ItemMeta itemMeta, String key, PersistentDataType type, Object value){ |
||||
NamespacedKey nKey = new NamespacedKey(MenuMaker.getPlugin(MenuMaker.class), key); |
||||
PersistentDataContainer pdc = itemMeta.getPersistentDataContainer(); |
||||
pdc.set(nKey, type, value); |
||||
return itemMeta; |
||||
|
||||
} |
||||
public static Object GetItemMetaPDC(ItemMeta itemMeta, String key, PersistentDataType type){ |
||||
NamespacedKey nKey = new NamespacedKey(MenuMaker.getPlugin(MenuMaker.class), key); |
||||
PersistentDataContainer pdc = itemMeta.getPersistentDataContainer(); |
||||
return pdc.get(nKey, type); |
||||
} |
||||
} |
||||
@ -0,0 +1,78 @@ |
||||
package xyz.soukup.menumaker.commands; |
||||
|
||||
import org.bukkit.ChatColor; |
||||
import org.bukkit.Material; |
||||
import org.bukkit.command.Command; |
||||
import org.bukkit.command.CommandSender; |
||||
import org.bukkit.command.TabExecutor; |
||||
import org.bukkit.entity.Player; |
||||
import org.bukkit.inventory.ItemStack; |
||||
import org.bukkit.inventory.meta.ItemMeta; |
||||
import xyz.soukup.menumaker.MenuMaker; |
||||
|
||||
import javax.annotation.Nonnull; |
||||
import java.awt.*; |
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
import java.util.Objects; |
||||
|
||||
public class createItem implements TabExecutor { |
||||
@Override |
||||
public boolean onCommand(@Nonnull CommandSender commandSender,@Nonnull Command command,@Nonnull String s,@Nonnull String[] args) { |
||||
StringBuilder argsString = new StringBuilder(); |
||||
for (String ss : args){ |
||||
argsString.append(ss).append(" "); |
||||
} |
||||
List<String> processedArgs = MenuMaker.getArgs(argsString.toString()); |
||||
if (!processedArgs.isEmpty() && Material.getMaterial(processedArgs.get(0).toUpperCase()) != null){ |
||||
ItemStack item = new ItemStack(Objects.requireNonNull(Material.getMaterial(processedArgs.get(0).toUpperCase()))); |
||||
if (processedArgs.size() > 1){ |
||||
ItemMeta itemMeta = item.getItemMeta(); |
||||
assert itemMeta != null; |
||||
itemMeta.setDisplayName(ChatColor.translateAlternateColorCodes('&', processedArgs.get(1))); |
||||
if (processedArgs.size() > 2){ |
||||
processedArgs.remove(0); |
||||
processedArgs.remove(0); |
||||
int i = 0; |
||||
while (i< processedArgs.size()){ |
||||
processedArgs.set(i, ChatColor.translateAlternateColorCodes('&', processedArgs.get(i))); |
||||
i++; |
||||
} |
||||
itemMeta.setLore(processedArgs); |
||||
} |
||||
item.setItemMeta(itemMeta); |
||||
} |
||||
((Player) commandSender).getInventory().addItem(item); |
||||
return true; |
||||
}else{ |
||||
commandSender.sendMessage(ChatColor.RED + "chybí argument"); |
||||
return false; |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public List<String> onTabComplete(@Nonnull CommandSender commandSender,@Nonnull Command command,@Nonnull String s,@Nonnull String[] args) { |
||||
List<String> completetion = new ArrayList<>(); |
||||
StringBuilder argsString = new StringBuilder(); |
||||
for (String ss : args){ |
||||
argsString.append(ss).append(" "); |
||||
} |
||||
List<String> processedArgs = MenuMaker.getArgs(argsString.toString()); |
||||
if (args.length == 1){ |
||||
for (Material m: Material.values()){ |
||||
String mname = m.name().toLowerCase(); |
||||
if (mname.contains(args[0])){ |
||||
completetion.add(mname); |
||||
} |
||||
|
||||
} |
||||
}else if (processedArgs.size() > 2){ |
||||
|
||||
completetion.add("\"lore linka\""); |
||||
}else{ |
||||
completetion.add("\"název itemu\""); |
||||
} |
||||
|
||||
return completetion; |
||||
} |
||||
} |
||||
@ -0,0 +1,60 @@ |
||||
package xyz.soukup.menumaker.commands; |
||||
|
||||
import org.bukkit.Bukkit; |
||||
import org.bukkit.ChatColor; |
||||
import org.bukkit.NamespacedKey; |
||||
import org.bukkit.command.Command; |
||||
import org.bukkit.command.CommandSender; |
||||
import org.bukkit.command.TabExecutor; |
||||
import org.bukkit.enchantments.Enchantment; |
||||
import org.bukkit.entity.Player; |
||||
import org.bukkit.inventory.ItemStack; |
||||
import org.jetbrains.annotations.NotNull; |
||||
import org.jetbrains.annotations.Nullable; |
||||
import xyz.soukup.menumaker.PDC; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
|
||||
public class enchantitem implements TabExecutor { |
||||
@Override |
||||
public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] args) { |
||||
Player player = (Player) commandSender; |
||||
ItemStack item = player.getInventory().getItemInMainHand(); |
||||
if (item == null) { |
||||
commandSender.sendMessage("No item"); |
||||
return false; |
||||
} |
||||
|
||||
for (Enchantment enchantment : Enchantment.values()) { |
||||
if (enchantment.getKey().toString().equals(args[0])){ |
||||
int level = 1; |
||||
if (Integer.getInteger(args[1]) != null){ |
||||
level = Integer.parseInt(args[1]); |
||||
} |
||||
item.addUnsafeEnchantment(enchantment, level); |
||||
return true; |
||||
} |
||||
} |
||||
commandSender.sendMessage(ChatColor.RED + "Wrong enchant"); |
||||
return false; |
||||
} |
||||
@Nullable |
||||
@Override |
||||
public List<String> onTabComplete(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] args) { |
||||
List<String> completetions = new ArrayList<>(); |
||||
|
||||
if (args.length <= 1){ |
||||
for (Enchantment enchantment: Enchantment.values()){ |
||||
completetions.add(enchantment.getKey().toString()); |
||||
} |
||||
}else{ |
||||
completetions.add("1"); |
||||
completetions.add("2"); |
||||
completetions.add("3"); |
||||
completetions.add("4"); |
||||
completetions.add("5"); |
||||
} |
||||
return completetions; |
||||
} |
||||
} |
||||
@ -0,0 +1,29 @@ |
||||
package xyz.soukup.menumaker.commands; |
||||
|
||||
import org.bukkit.ChatColor; |
||||
import org.bukkit.command.Command; |
||||
import org.bukkit.command.CommandExecutor; |
||||
import org.bukkit.command.CommandSender; |
||||
import org.bukkit.entity.Player; |
||||
import org.bukkit.inventory.ItemFlag; |
||||
import org.bukkit.inventory.ItemStack; |
||||
import org.bukkit.inventory.meta.ItemMeta; |
||||
import org.jetbrains.annotations.NotNull; |
||||
|
||||
public class hideEnchant implements CommandExecutor { |
||||
@Override |
||||
public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] strings) { |
||||
ItemStack item = ((Player) commandSender).getInventory().getItemInMainHand(); |
||||
ItemMeta meta = item.getItemMeta(); |
||||
assert meta != null; |
||||
if (meta.hasItemFlag(ItemFlag.HIDE_ENCHANTS)){ |
||||
meta.removeItemFlags(ItemFlag.HIDE_ENCHANTS); |
||||
commandSender.sendMessage(ChatColor.AQUA + "Enchants will be shown"); |
||||
}else { |
||||
meta.addItemFlags(ItemFlag.HIDE_ENCHANTS); |
||||
commandSender.sendMessage(ChatColor.AQUA + "Enchants won' be shown"); |
||||
|
||||
} |
||||
return true; |
||||
} |
||||
} |
||||
@ -0,0 +1,124 @@ |
||||
package xyz.soukup.menumaker.commands; |
||||
|
||||
import org.bukkit.Bukkit; |
||||
import org.bukkit.ChatColor; |
||||
import org.bukkit.command.Command; |
||||
|
||||
import org.bukkit.command.CommandSender; |
||||
import org.bukkit.command.TabExecutor; |
||||
import org.bukkit.configuration.ConfigurationSection; |
||||
import org.bukkit.configuration.file.YamlConfiguration; |
||||
import org.bukkit.entity.Player; |
||||
import org.bukkit.inventory.Inventory; |
||||
import org.bukkit.inventory.ItemStack; |
||||
import org.bukkit.persistence.PersistentDataType; |
||||
import xyz.soukup.menumaker.MenuMaker; |
||||
import xyz.soukup.menumaker.PDC; |
||||
|
||||
|
||||
import javax.annotation.Nonnull; |
||||
import java.io.File; |
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
|
||||
public class menumaker implements TabExecutor { |
||||
MenuMaker plugin = MenuMaker.getPlugin(MenuMaker.class); |
||||
@Override |
||||
public boolean onCommand(@Nonnull CommandSender commandSender,@Nonnull Command command,@Nonnull String s,@Nonnull String[] args) { |
||||
Player player = (Player) commandSender; |
||||
StringBuilder nameBuilder; |
||||
int i; |
||||
switch (args[0]){ |
||||
case "create": |
||||
File menuFile = new File(plugin.getDataFolder() + "/menus/", args[2] + ".yml"); |
||||
if (menuFile.exists()){ |
||||
commandSender.sendMessage(ChatColor.RED + "Menu already exists. Use /mm edit " + args[2]); |
||||
return false; |
||||
} |
||||
nameBuilder = new StringBuilder(); |
||||
i = 3; |
||||
while (i < args.length){ |
||||
nameBuilder.append(args[i]).append(" "); |
||||
i++; |
||||
} |
||||
Inventory inventory = Bukkit.createInventory(null, Integer.parseInt(args[1]), ChatColor.translateAlternateColorCodes('&', nameBuilder.toString())); |
||||
PDC.WritePlayerPDC(player, "opened-inv", PersistentDataType.STRING, args[2]); |
||||
player.openInventory(inventory); |
||||
return true; |
||||
case "edit": |
||||
File mFile = new File(plugin.getDataFolder() + "/menus/", args[1] + ".yml"); |
||||
if (!mFile.exists()){ |
||||
commandSender.sendMessage(ChatColor.RED + "Menu does not exists. Use /mm create <size> <name> <Display Name>"); |
||||
return false; |
||||
} |
||||
YamlConfiguration menuConfig = YamlConfiguration.loadConfiguration(mFile); |
||||
String name = menuConfig.getString("data.name"); |
||||
int size = menuConfig.getInt("data.size"); |
||||
if (args.length > 2){ |
||||
nameBuilder = new StringBuilder(); |
||||
i = 2; |
||||
while (i < args.length){ |
||||
nameBuilder.append(args[i]).append(" "); |
||||
i++; |
||||
} |
||||
name = ChatColor.translateAlternateColorCodes('&', nameBuilder.toString()); |
||||
|
||||
} |
||||
assert name != null; |
||||
Inventory menu = Bukkit.createInventory(null, size, name); |
||||
for (int ii = 0; ii < size; ii++) { |
||||
if (menuConfig.getObject("data.items." + ii + ".itemstack", ItemStack.class) != null){ |
||||
menu.setItem(ii, menuConfig.getObject("data.items." + ii + ".itemstack", ItemStack.class)); |
||||
} |
||||
} |
||||
PDC.WritePlayerPDC(player, "opened-inv", PersistentDataType.STRING, args[1]); |
||||
|
||||
player.openInventory(menu); |
||||
|
||||
} |
||||
return false; |
||||
} |
||||
|
||||
@Override |
||||
public List<String> onTabComplete(@Nonnull CommandSender commandSender, @Nonnull Command command,@Nonnull String s,@Nonnull String[] args) { |
||||
List<String> completetions = new ArrayList<>(); |
||||
switch (args.length){ |
||||
case 1: |
||||
completetions.add("create"); |
||||
completetions.add("edit"); |
||||
completetions.add("delete"); |
||||
case 2: |
||||
if (args[0].equals("create")) { |
||||
completetions.add("9"); |
||||
completetions.add("18"); |
||||
completetions.add("27"); |
||||
completetions.add("36"); |
||||
completetions.add("45"); |
||||
completetions.add("54"); |
||||
} |
||||
} |
||||
return completetions; |
||||
} |
||||
|
||||
public static Inventory loadInventoryFromFile(File file) { |
||||
YamlConfiguration config = YamlConfiguration.loadConfiguration(file); |
||||
|
||||
// Check if the "data" key exists
|
||||
if (!config.contains("data")) { |
||||
return null; // If "data" key doesn't exist, return null
|
||||
} |
||||
|
||||
ConfigurationSection dataSection = config.getConfigurationSection("data"); |
||||
Inventory inventory = Bukkit.createInventory(null, dataSection.getInt("size"), dataSection.getString("title")); |
||||
|
||||
// Deserialize ItemStacks from the YAML configuration
|
||||
for (String key : dataSection.getKeys(false)) { |
||||
if (!key.equals("size") && !key.equals("title")) { |
||||
ItemStack item = dataSection.getItemStack(key); |
||||
inventory.addItem(item); |
||||
} |
||||
} |
||||
|
||||
return inventory; |
||||
} |
||||
} |
||||
@ -0,0 +1,15 @@ |
||||
package xyz.soukup.menumaker.commands; |
||||
|
||||
import org.bukkit.command.Command; |
||||
import org.bukkit.command.CommandExecutor; |
||||
import org.bukkit.command.CommandSender; |
||||
import org.bukkit.entity.Player; |
||||
import org.jetbrains.annotations.NotNull; |
||||
|
||||
public class setsize implements CommandExecutor { |
||||
@Override |
||||
public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] args) { |
||||
((Player) commandSender).getInventory().getItemInMainHand().setAmount(Integer.getInteger(args[0])); |
||||
return true; |
||||
} |
||||
} |
||||
@ -0,0 +1,60 @@ |
||||
package xyz.soukup.menumaker.events; |
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper; |
||||
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; |
||||
import org.bukkit.ChatColor; |
||||
import org.bukkit.Material; |
||||
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.inventory.InventoryCloseEvent; |
||||
import org.bukkit.inventory.Inventory; |
||||
import org.bukkit.inventory.InventoryView; |
||||
import org.bukkit.inventory.ItemStack; |
||||
import org.bukkit.persistence.PersistentDataType; |
||||
import xyz.soukup.menumaker.MenuMaker; |
||||
import xyz.soukup.menumaker.PDC; |
||||
|
||||
import java.io.File; |
||||
import java.io.IOException; |
||||
import java.nio.file.Files; |
||||
import java.nio.file.Paths; |
||||
|
||||
public class saveInventory implements Listener { |
||||
|
||||
@EventHandler |
||||
public void onPlayerCloseMenuEditor(InventoryCloseEvent event) throws IOException { |
||||
Player player = (Player) event.getPlayer(); |
||||
String inventoryName = (String) PDC.GetPlayerPDC(player, "opened-inv", PersistentDataType.STRING); |
||||
if (inventoryName != null){ |
||||
PDC.DeletePlayerPDC(player, "opened-inv"); |
||||
|
||||
MenuMaker plugin = MenuMaker.getPlugin(MenuMaker.class); |
||||
Files.createDirectories(Paths.get(plugin.getDataFolder() + "/menus")); |
||||
File menuFile = new File(plugin.getDataFolder() + "/menus/", inventoryName + ".yml"); |
||||
|
||||
YamlConfiguration menuConfig = YamlConfiguration.loadConfiguration(menuFile); |
||||
Inventory menu = event.getInventory(); |
||||
InventoryView view = event.getView(); |
||||
menuConfig.set("data.name", view.getTitle()); |
||||
menuConfig.set("data.size", menu.getSize()); |
||||
int i = 0; |
||||
for (ItemStack item: menu.getContents()){ |
||||
if(item != null){ |
||||
menuConfig.set("data.items." + i + ".itemstack", item); |
||||
menuConfig.set("data.items." + i + ".identifier", null); |
||||
}else{ |
||||
menuConfig.set("data.items." + i + ".itemstack", null); |
||||
menuConfig.set("data.items." + i + ".identifier", null); |
||||
} |
||||
i++; |
||||
} |
||||
menuConfig.save(menuFile); |
||||
player.sendMessage(ChatColor.AQUA + "menu saved as plugins/menumaker/menus/"+ inventoryName + ".yml"); |
||||
|
||||
|
||||
|
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,21 @@ |
||||
name: MenuMaker |
||||
version: '${project.version}' |
||||
main: xyz.soukup.menumaker.MenuMaker |
||||
api-version: '1.20' |
||||
commands: |
||||
menumaker: |
||||
permission: menumaker.commands.menumaker |
||||
aliases: |
||||
- "mm" |
||||
createitem: |
||||
permission: menumaker.commands.createitem |
||||
aliases: |
||||
- "ci" |
||||
enchantitem: |
||||
permission: menumaker.commands.enchantitem |
||||
aliases: |
||||
- "ei" |
||||
hideenchant: |
||||
permission: menumaker.commands.hideenchand |
||||
aliases: |
||||
- "he" |
||||
@ -0,0 +1,21 @@ |
||||
name: MenuMaker |
||||
version: '1.0-SNAPSHOT' |
||||
main: xyz.soukup.menumaker.MenuMaker |
||||
api-version: '1.20' |
||||
commands: |
||||
menumaker: |
||||
permission: menumaker.commands.menumaker |
||||
aliases: |
||||
- "mm" |
||||
createitem: |
||||
permission: menumaker.commands.createitem |
||||
aliases: |
||||
- "ci" |
||||
enchantitem: |
||||
permission: menumaker.commands.enchantitem |
||||
aliases: |
||||
- "ei" |
||||
hideenchant: |
||||
permission: menumaker.commands.hideenchand |
||||
aliases: |
||||
- "he" |
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in new issue