mirror of
https://github.com/songoda/EpicBuckets.git
synced 2024-09-27 13:02:54 +02:00
Backed up EpicBuckets + started recode
This commit is contained in:
parent
cb385f64c3
commit
29da1dee91
13
.idea/libraries/Maven__com_flowpowered_flow_math_1_0_3.xml
Normal file
13
.idea/libraries/Maven__com_flowpowered_flow_math_1_0_3.xml
Normal file
@ -0,0 +1,13 @@
|
||||
<component name="libraryTable">
|
||||
<library name="Maven: com.flowpowered:flow-math:1.0.3">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/flowpowered/flow-math/1.0.3/flow-math-1.0.3.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/flowpowered/flow-math/1.0.3/flow-math-1.0.3-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/flowpowered/flow-math/1.0.3/flow-math-1.0.3-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
@ -0,0 +1,13 @@
|
||||
<component name="libraryTable">
|
||||
<library name="Maven: com.google.code.findbugs:jsr305:3.0.2">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
13
.idea/libraries/Maven__com_sk89q_worldedit_7_0_0.xml
Normal file
13
.idea/libraries/Maven__com_sk89q_worldedit_7_0_0.xml
Normal file
@ -0,0 +1,13 @@
|
||||
<component name="libraryTable">
|
||||
<library name="Maven: com.sk89q:worldedit:7.0.0">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/sk89q/worldedit/7.0.0/worldedit-7.0.0.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/sk89q/worldedit/7.0.0/worldedit-7.0.0-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/sk89q/worldedit/7.0.0/worldedit-7.0.0-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
13
.idea/libraries/Maven__me_lucko_helper_5_3_0.xml
Normal file
13
.idea/libraries/Maven__me_lucko_helper_5_3_0.xml
Normal file
@ -0,0 +1,13 @@
|
||||
<component name="libraryTable">
|
||||
<library name="Maven: me.lucko:helper:5.3.0">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/me/lucko/helper/5.3.0/helper-5.3.0.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/me/lucko/helper/5.3.0/helper-5.3.0-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/me/lucko/helper/5.3.0/helper-5.3.0-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
13
.idea/libraries/Maven__org_spigotmc_spigot_1_13_2.xml
Normal file
13
.idea/libraries/Maven__org_spigotmc_spigot_1_13_2.xml
Normal file
@ -0,0 +1,13 @@
|
||||
<component name="libraryTable">
|
||||
<library name="Maven: org.spigotmc:spigot:1.13.2">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/spigotmc/spigot/1.13.2/spigot-1.13.2.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/spigotmc/spigot/1.13.2/spigot-1.13.2-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/spigotmc/spigot/1.13.2/spigot-1.13.2-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
124
.idea/uiDesigner.xml
Normal file
124
.idea/uiDesigner.xml
Normal file
@ -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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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>
|
8
pom.xml
8
pom.xml
@ -54,10 +54,16 @@
|
||||
</repository>
|
||||
</repositories>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>me.lucko</groupId>
|
||||
<artifactId>helper</artifactId>
|
||||
<version>LATEST</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.spigotmc</groupId>
|
||||
<artifactId>spigot</artifactId>
|
||||
<version>1.12.2</version>
|
||||
<version>1.13.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.songoda</groupId>
|
||||
|
@ -1,182 +1,21 @@
|
||||
package com.songoda.epicbuckets;
|
||||
|
||||
import com.songoda.epicbuckets.commands.GenbucketAdminCommand;
|
||||
import com.songoda.epicbuckets.commands.GenbucketCommand;
|
||||
import com.songoda.epicbuckets.filehandler.files.ShopFile;
|
||||
import com.songoda.epicbuckets.listeners.GenbucketPlaceListener;
|
||||
import com.songoda.epicbuckets.listeners.InventoryClickListener;
|
||||
import com.songoda.epicbuckets.util.ChatUtil;
|
||||
import com.songoda.epicbuckets.util.ServerVersion;
|
||||
import net.milkbowl.vault.chat.Chat;
|
||||
import net.milkbowl.vault.economy.Economy;
|
||||
import net.milkbowl.vault.permission.Permission;
|
||||
import org.apache.commons.lang.ArrayUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.RegisteredServiceProvider;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public class EpicBuckets extends JavaPlugin {
|
||||
private static CommandSender console = Bukkit.getConsoleSender();
|
||||
|
||||
private static EpicBuckets INSTANCE;
|
||||
private static Permission permission = null;
|
||||
private static Economy economy = null;
|
||||
private static Chat chat = null;
|
||||
public YamlConfiguration shopFile;
|
||||
private static EpicBuckets instance;
|
||||
|
||||
private Locale locale;
|
||||
|
||||
private ServerVersion serverVersion = ServerVersion.fromPackageName(Bukkit.getServer().getClass().getPackage().getName());
|
||||
|
||||
public static EpicBuckets getInstance() {
|
||||
return INSTANCE;
|
||||
}
|
||||
public static EpicBuckets getInstance() { return instance; }
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
console.sendMessage(ChatUtil.colorString("&a============================="));
|
||||
console.sendMessage(ChatUtil.colorString("&7EpicBuckets " + this.getDescription().getVersion() + " by &5Songoda <3!"));
|
||||
console.sendMessage(ChatUtil.colorString("&7Action: &aEnabling&7..."));
|
||||
INSTANCE = this;
|
||||
|
||||
if (!isEnabled())
|
||||
return;
|
||||
|
||||
// Locales
|
||||
Locale.init(this);
|
||||
Locale.saveDefaultLocale("en_US");
|
||||
this.locale = Locale.getLocale(getConfig().getString("Locale", "en_US"));
|
||||
|
||||
|
||||
this.setUpFiles();
|
||||
|
||||
this.setupPermissions();
|
||||
this.setupEconomy();
|
||||
this.setupChat();
|
||||
this.setUpCommands();
|
||||
this.registerListeners();
|
||||
|
||||
console.sendMessage(ChatUtil.colorString("&a============================="));
|
||||
}
|
||||
|
||||
private void save(String folder, String file) {
|
||||
File f = null;
|
||||
if(folder != null && !folder.equals(""))
|
||||
f = new File(getDataFolder() + File.separator + folder + File.separator, file);
|
||||
else
|
||||
f = new File(getDataFolder() + File.separator, file);
|
||||
if(!f.exists()) {
|
||||
f.getParentFile().mkdirs();
|
||||
saveResource(folder != null && !folder.equals("") ? folder + File.separator + file : file, false);
|
||||
}
|
||||
if(file.equals("shops.yml")) {
|
||||
shopFile = YamlConfiguration.loadConfiguration(f);
|
||||
}
|
||||
instance = this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
console.sendMessage(ChatUtil.colorString("&a============================="));
|
||||
console.sendMessage(ChatUtil.colorString("&7EpicBuckets " + this.getDescription().getVersion() + " by &5Songoda <3!"));
|
||||
console.sendMessage(ChatUtil.colorString("&7Action: &cDisabling&7..."));
|
||||
console.sendMessage(ChatUtil.colorString("&a============================="));
|
||||
}
|
||||
|
||||
private void setUpFiles() {
|
||||
|
||||
if (!getDataFolder().exists()) {
|
||||
getDataFolder().mkdirs();
|
||||
getLogger().warning("Folder not found, generating files!");
|
||||
saveResource("shops.yml", false);
|
||||
saveDefaultConfig();
|
||||
}
|
||||
saveDefaultConfig();
|
||||
save(null, "shops.yml");
|
||||
}
|
||||
|
||||
public double getBalance(Player player) {
|
||||
return economy.getBalance(player);
|
||||
}
|
||||
|
||||
public void withdrawBalance(Player player, int amount, boolean sendMessage) {
|
||||
|
||||
if (sendMessage)
|
||||
player.sendMessage(locale.getMessage("interface.withdrawl.success").replace("{amount}", String.valueOf(amount)));
|
||||
|
||||
economy.withdrawPlayer(player, amount);
|
||||
}
|
||||
|
||||
|
||||
private void setUpCommands() {
|
||||
|
||||
getCommand("genbucket").setExecutor(new GenbucketCommand());
|
||||
getCommand("genbucketadmin").setExecutor(new GenbucketAdminCommand());
|
||||
|
||||
}
|
||||
|
||||
private void registerListeners() {
|
||||
|
||||
this.getServer().getPluginManager().registerEvents(new InventoryClickListener(), this);
|
||||
this.getServer().getPluginManager().registerEvents(new GenbucketPlaceListener(), this);
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void reloadFiles() {
|
||||
this.locale.reloadMessages();
|
||||
reloadConfig();
|
||||
|
||||
}
|
||||
|
||||
private boolean setupPermissions() {
|
||||
RegisteredServiceProvider<Permission> permissionProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.permission.Permission.class);
|
||||
if (permissionProvider != null) {
|
||||
permission = permissionProvider.getProvider();
|
||||
}
|
||||
return (permission != null);
|
||||
}
|
||||
|
||||
private boolean setupChat() {
|
||||
|
||||
RegisteredServiceProvider<Chat> chatProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.chat.Chat.class);
|
||||
if (chatProvider != null) {
|
||||
chat = chatProvider.getProvider();
|
||||
}
|
||||
|
||||
return (chat != null);
|
||||
}
|
||||
|
||||
private boolean setupEconomy() {
|
||||
RegisteredServiceProvider<Economy> economyProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class);
|
||||
if (economyProvider != null) {
|
||||
economy = economyProvider.getProvider();
|
||||
}
|
||||
|
||||
return (economy != null);
|
||||
}
|
||||
|
||||
public ServerVersion getServerVersion() {
|
||||
return serverVersion;
|
||||
}
|
||||
|
||||
public boolean isServerVersion(ServerVersion version) {
|
||||
return serverVersion == version;
|
||||
}
|
||||
public boolean isServerVersion(ServerVersion... versions) {
|
||||
return ArrayUtils.contains(versions, serverVersion);
|
||||
}
|
||||
|
||||
public boolean isServerVersionAtLeast(ServerVersion version) {
|
||||
return serverVersion.ordinal() >= version.ordinal();
|
||||
}
|
||||
|
||||
public Locale getLocale() {
|
||||
return locale;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,364 +0,0 @@
|
||||
package com.songoda.epicbuckets;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.Lists;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* Assists in the creation of multiple localizations and languages,
|
||||
* as well as the generation of default .lang files
|
||||
*
|
||||
* @author Parker Hawke - 2008Choco
|
||||
*/
|
||||
public class Locale {
|
||||
|
||||
private static JavaPlugin plugin;
|
||||
private static final List<Locale> LOCALES = Lists.newArrayList();
|
||||
|
||||
private static final Pattern NODE_PATTERN = Pattern.compile("(\\w+(?:\\.{1}\\w+)*)\\s*=\\s*\"(.*)\"");
|
||||
private static final String FILE_EXTENSION = ".lang";
|
||||
private static File localeFolder;
|
||||
|
||||
private static String defaultLocale;
|
||||
|
||||
private final Map<String, String> nodes = new HashMap<>();
|
||||
|
||||
private final File file;
|
||||
private final String name, region;
|
||||
|
||||
private Locale(String name, String region) {
|
||||
if (plugin == null)
|
||||
throw new IllegalStateException("Cannot generate locales without first initializing the class (Locale#init(JavaPlugin))");
|
||||
|
||||
this.name = name.toLowerCase();
|
||||
this.region = region.toUpperCase();
|
||||
|
||||
String fileName = name + "_" + region + FILE_EXTENSION;
|
||||
this.file = new File(localeFolder, fileName);
|
||||
|
||||
if (this.reloadMessages()) return;
|
||||
|
||||
plugin.getLogger().info("Loaded locale " + fileName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the name of the language that this locale is based on.
|
||||
* (i.e. "en" for English, or "fr" for French)
|
||||
*
|
||||
* @return the name of the language
|
||||
*/
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the name of the region that this locale is from.
|
||||
* (i.e. "US" for United States or "CA" for Canada)
|
||||
*
|
||||
* @return the name of the region
|
||||
*/
|
||||
public String getRegion() {
|
||||
return region;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the entire locale tag (i.e. "en_US")
|
||||
*
|
||||
* @return the language tag
|
||||
*/
|
||||
public String getLanguageTag() {
|
||||
return name + "_" + region;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the file that represents this locale
|
||||
*
|
||||
* @return the locale file (.lang)
|
||||
*/
|
||||
public File getFile() {
|
||||
return file;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a message set for a specific node
|
||||
*
|
||||
* @param node the node to get
|
||||
* @return the message for the specified node
|
||||
*/
|
||||
public String getMessage(String node) {
|
||||
return ChatColor.translateAlternateColorCodes('&', this.getMessageOrDefault(node, node));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a message set for a specific node and replace its params with a supplied arguments.
|
||||
*
|
||||
* @param node the node to get
|
||||
* @param args the replacement arguments
|
||||
* @return the message for the specified node
|
||||
*/
|
||||
public String getMessage(String node, Object... args) {
|
||||
String message = getMessage(node);
|
||||
for (Object arg : args) {
|
||||
message = message.replaceFirst("\\%.*?\\%", arg.toString());
|
||||
}
|
||||
return message;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a message set for a specific node
|
||||
*
|
||||
* @param node the node to get
|
||||
* @param defaultValue the default value given that a value for the node was not found
|
||||
* @return the message for the specified node. Default if none found
|
||||
*/
|
||||
public String getMessageOrDefault(String node, String defaultValue) {
|
||||
return this.nodes.getOrDefault(node, defaultValue);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the key-value map of nodes to messages
|
||||
*
|
||||
* @return node-message map
|
||||
*/
|
||||
public Map<String, String> getMessageNodeMap() {
|
||||
return ImmutableMap.copyOf(nodes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear the previous message cache and load new messages directly from file
|
||||
*
|
||||
* @return reload messages from file
|
||||
*/
|
||||
public boolean reloadMessages() {
|
||||
if (!this.file.exists()) {
|
||||
plugin.getLogger().warning("Could not find file for locale " + this.name);
|
||||
return false;
|
||||
}
|
||||
|
||||
this.nodes.clear(); // Clear previous data (if any)
|
||||
|
||||
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
|
||||
String line;
|
||||
for (int lineNumber = 0; (line = reader.readLine()) != null; lineNumber++) {
|
||||
if (line.isEmpty() || line.startsWith("#") /* Comment */) continue;
|
||||
|
||||
Matcher matcher = NODE_PATTERN.matcher(line);
|
||||
if (!matcher.find()) {
|
||||
System.err.println("Invalid locale syntax at (line=" + lineNumber + ")");
|
||||
continue;
|
||||
}
|
||||
|
||||
nodes.put(matcher.group(1), matcher.group(2));
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the locale class to generate information and search for localizations.
|
||||
* This must be called before any other methods in the Locale class can be invoked.
|
||||
* Note that this will also call {@link #searchForLocales()}, so there is no need to
|
||||
* invoke it for yourself after the initialization
|
||||
*
|
||||
* @param plugin the plugin instance
|
||||
*/
|
||||
public static void init(JavaPlugin plugin) {
|
||||
Locale.plugin = plugin;
|
||||
|
||||
if (localeFolder == null) {
|
||||
localeFolder = new File(plugin.getDataFolder(), "locales/");
|
||||
}
|
||||
|
||||
localeFolder.mkdirs();
|
||||
Locale.searchForLocales();
|
||||
}
|
||||
|
||||
/**
|
||||
* Find all .lang file locales under the "locales" folder
|
||||
*/
|
||||
public static void searchForLocales() {
|
||||
if (!localeFolder.exists()) localeFolder.mkdirs();
|
||||
|
||||
for (File file : localeFolder.listFiles()) {
|
||||
String name = file.getName();
|
||||
if (!name.endsWith(".lang")) continue;
|
||||
|
||||
String fileName = name.substring(0, name.lastIndexOf('.'));
|
||||
String[] localeValues = fileName.split("_");
|
||||
|
||||
if (localeValues.length != 2) continue;
|
||||
if (localeExists(localeValues[0] + "_" + localeValues[1])) continue;
|
||||
|
||||
LOCALES.add(new Locale(localeValues[0], localeValues[1]));
|
||||
plugin.getLogger().info("Found and loaded locale \"" + fileName + "\"");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a locale by its entire proper name (i.e. "en_US")
|
||||
*
|
||||
* @param name the full name of the locale
|
||||
* @return locale of the specified name
|
||||
*/
|
||||
public static Locale getLocale(String name) {
|
||||
for (Locale locale : LOCALES)
|
||||
if (locale.getLanguageTag().equalsIgnoreCase(name)) return locale;
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a locale from the cache by its name (i.e. "en" from "en_US")
|
||||
*
|
||||
* @param name the name of the language
|
||||
* @return locale of the specified language. Null if not cached
|
||||
*/
|
||||
public static Locale getLocaleByName(String name) {
|
||||
for (Locale locale : LOCALES)
|
||||
if (locale.getName().equalsIgnoreCase(name)) return locale;
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a locale from the cache by its region (i.e. "US" from "en_US")
|
||||
*
|
||||
* @param region the name of the region
|
||||
* @return locale of the specified region. Null if not cached
|
||||
*/
|
||||
public static Locale getLocaleByRegion(String region) {
|
||||
for (Locale locale : LOCALES)
|
||||
if (locale.getRegion().equalsIgnoreCase(region)) return locale;
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether a locale exists and is registered or not
|
||||
*
|
||||
* @param name the whole language tag (i.e. "en_US")
|
||||
* @return true if it exists
|
||||
*/
|
||||
public static boolean localeExists(String name) {
|
||||
for (Locale locale : LOCALES)
|
||||
if (locale.getLanguageTag().equals(name)) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an immutable list of all currently loaded locales
|
||||
*
|
||||
* @return list of all locales
|
||||
*/
|
||||
public static List<Locale> getLocales() {
|
||||
return ImmutableList.copyOf(LOCALES);
|
||||
}
|
||||
|
||||
/**
|
||||
* Save a default locale file from the project source directory, to the locale folder
|
||||
*
|
||||
* @param path the path to the file to save
|
||||
* @param fileName the name of the file to save
|
||||
* @return true if the operation was successful, false otherwise
|
||||
*/
|
||||
public static boolean saveDefaultLocale(String path, String fileName) {
|
||||
if (!localeFolder.exists()) localeFolder.mkdirs();
|
||||
|
||||
if (!fileName.endsWith(FILE_EXTENSION))
|
||||
fileName = (fileName.lastIndexOf(".") == -1 ? fileName : fileName.substring(0, fileName.lastIndexOf('.'))) + FILE_EXTENSION;
|
||||
|
||||
File destinationFile = new File(localeFolder, fileName);
|
||||
if (destinationFile.exists()) {
|
||||
return compareFiles(plugin.getResource(fileName), destinationFile);
|
||||
}
|
||||
|
||||
try (OutputStream outputStream = new FileOutputStream(destinationFile)) {
|
||||
IOUtils.copy(plugin.getResource(fileName), outputStream);
|
||||
|
||||
fileName = fileName.substring(0, fileName.lastIndexOf('.'));
|
||||
String[] localeValues = fileName.split("_");
|
||||
|
||||
if (localeValues.length != 2) return false;
|
||||
|
||||
LOCALES.add(new Locale(localeValues[0], localeValues[1]));
|
||||
if (defaultLocale == null) defaultLocale = fileName;
|
||||
|
||||
return true;
|
||||
} catch (IOException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Save a default locale file from the project source directory, to the locale folder
|
||||
*
|
||||
* @param fileName the name of the file to save
|
||||
* @return true if the operation was successful, false otherwise
|
||||
*/
|
||||
public static boolean saveDefaultLocale(String fileName) {
|
||||
return saveDefaultLocale("", fileName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear all current locale data
|
||||
*/
|
||||
public static void clearLocaleData() {
|
||||
for (Locale locale : LOCALES)
|
||||
locale.nodes.clear();
|
||||
LOCALES.clear();
|
||||
}
|
||||
|
||||
// Write new changes to existing files, if any at all
|
||||
private static boolean compareFiles(InputStream defaultFile, File existingFile) {
|
||||
// Look for default
|
||||
if (defaultFile == null) {
|
||||
defaultFile = plugin.getResource(defaultLocale != null ? defaultLocale : "en_US");
|
||||
if (defaultFile == null) return false; // No default at all
|
||||
}
|
||||
|
||||
boolean changed = false;
|
||||
|
||||
List<String> defaultLines, existingLines;
|
||||
try (BufferedReader defaultReader = new BufferedReader(new InputStreamReader(defaultFile));
|
||||
BufferedReader existingReader = new BufferedReader(new FileReader(existingFile));
|
||||
BufferedWriter writer = new BufferedWriter(new FileWriter(existingFile, true))) {
|
||||
defaultLines = defaultReader.lines().collect(Collectors.toList());
|
||||
existingLines = existingReader.lines().map(s -> s.split("\\s*=")[0]).collect(Collectors.toList());
|
||||
|
||||
for (String defaultValue : defaultLines) {
|
||||
if (defaultValue.isEmpty() || defaultValue.startsWith("#")) continue;
|
||||
|
||||
String key = defaultValue.split("\\s*=")[0];
|
||||
|
||||
if (!existingLines.contains(key)) {
|
||||
if (!changed) {
|
||||
writer.newLine();
|
||||
writer.newLine();
|
||||
writer.write("# New messages for " + plugin.getName() + " v" + plugin.getDescription().getVersion());
|
||||
}
|
||||
|
||||
writer.newLine();
|
||||
writer.write(defaultValue);
|
||||
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return changed;
|
||||
}
|
||||
|
||||
}
|
@ -1,359 +0,0 @@
|
||||
package com.songoda.epicbuckets.commands;
|
||||
|
||||
import com.songoda.epicbuckets.EpicBuckets;
|
||||
import com.songoda.epicbuckets.genbuckets.GenbucketItem;
|
||||
import com.songoda.epicbuckets.genbuckets.GenbucketManager;
|
||||
import com.songoda.epicbuckets.inventories.InventoryManager;
|
||||
import com.songoda.epicbuckets.util.ChatUtil;
|
||||
import com.songoda.epicbuckets.util.Util;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
/**
|
||||
* GenbucketAdminCommand created by: SoFocused
|
||||
* Date Created: oktober 06 2018
|
||||
* Time created: 11:56
|
||||
*/
|
||||
public class GenbucketAdminCommand implements CommandExecutor {
|
||||
|
||||
private EpicBuckets plugin = EpicBuckets.getInstance();
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
|
||||
|
||||
if (args.length == 0) {
|
||||
|
||||
if (!sender.hasPermission("genbucketadmin.command.help")) {
|
||||
sender.sendMessage(plugin.getLocale().getMessage("event.general.nopermission"));
|
||||
return true;
|
||||
}
|
||||
|
||||
sender.sendMessage("");
|
||||
sender.sendMessage(ChatUtil.colorString(ChatUtil.getPrefix() + "&7Version " + plugin.getDescription().getVersion() + " Created with <3 by &5&l&oBrianna"));
|
||||
sender.sendMessage(ChatUtil.colorString("&8 - &agenbucketadmin info&7 - Plugin information"));
|
||||
sender.sendMessage(ChatUtil.colorString("&8 - &agenbucketadmin admin&7 - Toggle admin mode"));
|
||||
sender.sendMessage(ChatUtil.colorString("&8 - &agenbucketadmin reload&7 - Reload the configs"));
|
||||
sender.sendMessage(ChatUtil.colorString("&8 - &agenbucketadmin toggleStatus&7 - Enable/Disable genbuckets"));
|
||||
sender.sendMessage(ChatUtil.colorString("&8 - &agenbucketadmin toggleSponge&7 - Enable/Disable sponges"));
|
||||
sender.sendMessage(ChatUtil.colorString("&8 - &agenbucketadmin toggleEnchant&7 - Toggle glowing genbuckets"));
|
||||
sender.sendMessage(ChatUtil.colorString("&8 - &agenbucketadmin toggleInfinity&7 - Toggle infinite genbuckets"));
|
||||
sender.sendMessage(ChatUtil.colorString("&8 - &agenbucketadmin activepanel&7 - Opens a GUI"));
|
||||
sender.sendMessage(ChatUtil.colorString("&8 - &agenbucketadmin setHeight <int>&7 - Modify vertical height"));
|
||||
sender.sendMessage(ChatUtil.colorString("&8 - &agenbucketadmin setLength <int>&7 - Modify horizontal length"));
|
||||
sender.sendMessage(ChatUtil.colorString("&8 - &agenbucketadmin give <player> <shop> <key> <amount>"));
|
||||
sender.sendMessage("");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (args.length == 1) {
|
||||
|
||||
String permission = "genbucketadmin.command." + args[0];
|
||||
|
||||
if (args[0].equalsIgnoreCase("admin")) {
|
||||
|
||||
if (!sender.hasPermission(permission)) {
|
||||
sender.sendMessage(plugin.getLocale().getMessage("event.general.nopermission"));
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(sender instanceof Player)) {
|
||||
sender.sendMessage(plugin.getLocale().getMessage("event.general.playercommand"));
|
||||
return true;
|
||||
}
|
||||
|
||||
Player player = (Player) sender;
|
||||
|
||||
boolean isPlayerInAdminMode = GenbucketManager.adminList.contains(player.getUniqueId());
|
||||
|
||||
if (isPlayerInAdminMode) {
|
||||
|
||||
// Player is in admin mode
|
||||
|
||||
GenbucketManager.adminList.remove(player.getUniqueId());
|
||||
|
||||
player.sendMessage(plugin.getLocale().getMessage("command.admin.off"));
|
||||
|
||||
} else {
|
||||
|
||||
// Player is not in admin mode
|
||||
|
||||
GenbucketManager.adminList.add(player.getUniqueId());
|
||||
|
||||
player.sendMessage(plugin.getLocale().getMessage("command.admin.on"));
|
||||
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if (args[0].equalsIgnoreCase("reload")) {
|
||||
|
||||
if (!sender.hasPermission(permission)) {
|
||||
sender.sendMessage(plugin.getLocale().getMessage("event.general.nopermission"));
|
||||
return true;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
EpicBuckets.getInstance().reloadFiles();
|
||||
|
||||
} catch (Exception e) {
|
||||
sender.sendMessage(plugin.getLocale().getMessage("event.general.error"));
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
sender.sendMessage(plugin.getLocale().getMessage("command.reload.success"));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
if (args[0].equalsIgnoreCase("activepanel")) {
|
||||
|
||||
if (!sender.hasPermission(permission)) {
|
||||
sender.sendMessage(plugin.getLocale().getMessage("event.general.nopermission"));
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(sender instanceof Player)) {
|
||||
sender.sendMessage(plugin.getLocale().getMessage("event.general.playercommand"));
|
||||
return true;
|
||||
}
|
||||
|
||||
Player player = (Player) sender;
|
||||
|
||||
InventoryManager inventoryManager = new InventoryManager();
|
||||
|
||||
inventoryManager.openActiveGenbuckets(player);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if (args[0].equalsIgnoreCase("toggleStatus")) {
|
||||
|
||||
if (!sender.hasPermission(permission)) {
|
||||
sender.sendMessage(plugin.getLocale().getMessage("event.general.nopermission"));
|
||||
return true;
|
||||
}
|
||||
|
||||
boolean oldValue = Util.disableGenbuckets();
|
||||
|
||||
plugin.getConfig().set("DISABLE-GENBUCKETS", !oldValue);
|
||||
|
||||
toggleSetting(sender, "disable-genbuckets", oldValue);
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
if (args[0].equalsIgnoreCase("toggleInfinity")) {
|
||||
|
||||
if (!sender.hasPermission(permission)) {
|
||||
sender.sendMessage(plugin.getLocale().getMessage("event.general.nopermission"));
|
||||
return true;
|
||||
}
|
||||
|
||||
boolean oldValue = Util.infiniteGenbuckets();
|
||||
|
||||
plugin.getConfig().set("INFINITE-USE", !oldValue);
|
||||
|
||||
plugin.saveConfig();
|
||||
|
||||
toggleSetting(sender, "INFINITE-USE", oldValue);
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
if (args[0].equalsIgnoreCase("toggleSponge")) {
|
||||
|
||||
if (!sender.hasPermission(permission)) {
|
||||
sender.sendMessage(plugin.getLocale().getMessage("event.general.nopermission"));
|
||||
return true;
|
||||
}
|
||||
|
||||
boolean oldValue = Util.useSpongeSupport();
|
||||
|
||||
plugin.getConfig().set("USE-SPONGE-SUPPORT", !oldValue);
|
||||
|
||||
plugin.saveConfig();
|
||||
|
||||
toggleSetting(sender, "use-sponge-support", oldValue);
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
if (args[0].equalsIgnoreCase("info")) {
|
||||
|
||||
String spigotUserId = "%%__USER__%%";
|
||||
String resourceId = "%%__RESOURCE__%%";
|
||||
String uniqueDownload = "%%__NONCE__%%";
|
||||
sender.sendMessage("§aName: §c" + EpicBuckets.getInstance().getDescription().getName());
|
||||
sender.sendMessage("§aVersion: §c" + EpicBuckets.getInstance().getDescription().getVersion());
|
||||
sender.sendMessage("§aDeveloper: §c" + EpicBuckets.getInstance().getDescription().getAuthors());
|
||||
sender.sendMessage("§aSpigot ID: §c" + spigotUserId);
|
||||
sender.sendMessage("§aResource ID: §c" + resourceId);
|
||||
sender.sendMessage("§aUnique download ID: §c" + uniqueDownload);
|
||||
sender.sendMessage("§aRegistered to: §fhttps://www.spigotmc.org/members/" + spigotUserId);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if (args[0].equalsIgnoreCase("toggleEnchant")) {
|
||||
|
||||
if (!sender.hasPermission(permission)) {
|
||||
sender.sendMessage(plugin.getLocale().getMessage("event.general.nopermission"));
|
||||
return true;
|
||||
}
|
||||
|
||||
boolean oldValue = Util.enchantGenbuckets();
|
||||
|
||||
plugin.getConfig().set("ENCHANT", !oldValue);
|
||||
|
||||
plugin.saveConfig();
|
||||
|
||||
toggleSetting(sender, "enchant", oldValue);
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
|
||||
} // END of args.length == 1
|
||||
|
||||
if (args.length == 2) {
|
||||
|
||||
String permission = "genbucketadmin.command." + args[0];
|
||||
|
||||
if (args[0].equalsIgnoreCase("setheight")) {
|
||||
|
||||
if (!sender.hasPermission(permission)) {
|
||||
sender.sendMessage(plugin.getLocale().getMessage("event.general.nopermission"));
|
||||
return true;
|
||||
}
|
||||
|
||||
int height;
|
||||
|
||||
try {
|
||||
height = Integer.parseInt(args[1]);
|
||||
} catch (NumberFormatException e) {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
plugin.getConfig().set("MAX-VERTICAL-HEIGHT", height);
|
||||
|
||||
toggleSetting(sender, "MAX-VERTICAL-HEIGHT", String.valueOf(height));
|
||||
|
||||
plugin.saveConfig();
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
if (args[0].equalsIgnoreCase("setlength")) {
|
||||
|
||||
if (!sender.hasPermission(permission)) {
|
||||
sender.sendMessage(plugin.getLocale().getMessage("event.general.nopermission"));
|
||||
return true;
|
||||
}
|
||||
|
||||
int height;
|
||||
|
||||
try {
|
||||
height = Integer.parseInt(args[1]);
|
||||
} catch (NumberFormatException e) {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
plugin.getConfig().set("MAX-HORIZONTAL-LENGTH", height);
|
||||
|
||||
plugin.saveConfig();
|
||||
|
||||
toggleSetting(sender, "MAX-HORIZONTAL-LENGTH", String.valueOf(height));
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (args.length == 5) {
|
||||
|
||||
String permission = "genbucketadmin.command." + args[0];
|
||||
|
||||
|
||||
if (args[0].equalsIgnoreCase("give")) {
|
||||
|
||||
if (!sender.hasPermission(permission)) {
|
||||
sender.sendMessage(plugin.getLocale().getMessage("event.general.nopermission"));
|
||||
return true;
|
||||
}
|
||||
|
||||
// /genbucketadmin give <player> <shop> <key> <amount>
|
||||
|
||||
OfflinePlayer player = Bukkit.getOfflinePlayer(args[1]);
|
||||
|
||||
if (!player.hasPlayedBefore()) {
|
||||
|
||||
sender.sendMessage("§cPlayer '" + args[1] + "' has never joined");
|
||||
|
||||
return true;
|
||||
} else if (!player.isOnline()) {
|
||||
|
||||
sender.sendMessage("§cPlayer '" + player.getName() + "' is not online!");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int amount;
|
||||
|
||||
try {
|
||||
amount = Integer.parseInt(args[4]);
|
||||
} catch (NumberFormatException e) {
|
||||
sender.sendMessage("§cPlease specify a number");
|
||||
return true;
|
||||
}
|
||||
|
||||
String shopName = args[2];
|
||||
String key = args[3];
|
||||
|
||||
try {
|
||||
GenbucketItem genbucketItem = new GenbucketItem(shopName, key);
|
||||
|
||||
genbucketItem.setAmount(amount);
|
||||
|
||||
player.getPlayer().getInventory().addItem(genbucketItem.getGenbucketItem());
|
||||
|
||||
sender.sendMessage("§7You sent §e" + genbucketItem.getAmount() + "x " + genbucketItem.getItemName() + "§7 genbucket(s) to §e" + player.getName());
|
||||
} catch (NullPointerException e) {
|
||||
sender.sendMessage("§cError while making the genbucket, are you sure you specified a valid shop name and a valid key (config section)?");
|
||||
}
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
private void toggleSetting(CommandSender sender, String setting, boolean oldValue) {
|
||||
sender.sendMessage(plugin.getLocale().getMessage("command.settings.modify", setting.toUpperCase(), String.valueOf(!oldValue)));
|
||||
}
|
||||
|
||||
private void toggleSetting(CommandSender sender, String setting, String oldValue) {
|
||||
sender.sendMessage(plugin.getLocale().getMessage("command.settings.modify", setting.toUpperCase(), String.valueOf(oldValue)));
|
||||
}
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
package com.songoda.epicbuckets.commands;
|
||||
|
||||
import com.songoda.epicbuckets.EpicBuckets;
|
||||
import com.songoda.epicbuckets.inventories.InventoryManager;
|
||||
import com.songoda.epicbuckets.util.ChatUtil;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
/**
|
||||
* GenbucketCommand created by: SoFocused
|
||||
* Date Created: oktober 02 2018
|
||||
* Time created: 23:20
|
||||
*/
|
||||
public class GenbucketCommand implements CommandExecutor {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
|
||||
|
||||
if (!(sender instanceof Player)) {
|
||||
sender.sendMessage(EpicBuckets.getInstance().getLocale().getMessage("event.general.playercommand"));
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!sender.hasPermission("genbucket.command")) {
|
||||
sender.sendMessage(EpicBuckets.getInstance().getLocale().getMessage("event.general.nopermission"));
|
||||
return true;
|
||||
}
|
||||
|
||||
Player player = (Player) sender;
|
||||
|
||||
InventoryManager inventoryManager = new InventoryManager();
|
||||
|
||||
inventoryManager.openMainInventory(player);
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
}
|
@ -1,74 +0,0 @@
|
||||
package com.songoda.epicbuckets.events;
|
||||
|
||||
import com.songoda.epicbuckets.genbuckets.GenbucketItem;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Cancellable;
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* GenbucketPlaceEvent created by: SoFocused
|
||||
* Date Created: oktober 05 2018
|
||||
* Time created: 22:15
|
||||
*/
|
||||
public class GenbucketPlaceEvent extends Event implements Cancellable {
|
||||
|
||||
private static final HandlerList HANDLERS = new HandlerList();
|
||||
private boolean isCancelled = false;
|
||||
|
||||
private Player player;
|
||||
private Location location;
|
||||
private BlockFace blockFace;
|
||||
private GenbucketItem genbucketItem;
|
||||
private UUID genbucketUUID;
|
||||
|
||||
public GenbucketPlaceEvent(Player player, Location location, BlockFace blockFace, GenbucketItem genbucketItem, UUID genbucketUUID) {
|
||||
this.player = player;
|
||||
this.location = location;
|
||||
this.blockFace = blockFace;
|
||||
this.genbucketItem = genbucketItem;
|
||||
this.genbucketUUID = genbucketUUID;
|
||||
}
|
||||
|
||||
public static HandlerList getHandlerList() {
|
||||
return HANDLERS;
|
||||
}
|
||||
|
||||
public Player getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
public Location getLocation() {
|
||||
return location;
|
||||
}
|
||||
|
||||
public BlockFace getBlockFace() {
|
||||
return blockFace;
|
||||
}
|
||||
|
||||
public GenbucketItem getGenbucketItem() {
|
||||
return genbucketItem;
|
||||
}
|
||||
|
||||
public UUID getGenbucketUUID() {
|
||||
return genbucketUUID;
|
||||
}
|
||||
|
||||
public HandlerList getHandlers() {
|
||||
return HANDLERS;
|
||||
}
|
||||
|
||||
public boolean isCancelled() {
|
||||
return this.isCancelled;
|
||||
}
|
||||
|
||||
public void setCancelled(boolean isCancelled) {
|
||||
this.isCancelled = isCancelled;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,51 +0,0 @@
|
||||
package com.songoda.epicbuckets.filehandler;
|
||||
|
||||
import com.songoda.epicbuckets.EpicBuckets;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* FileManager created by: SoFocused
|
||||
* Date Created: oktober 02 2018
|
||||
* Time created: 22:56
|
||||
*/
|
||||
public class FileManager {
|
||||
|
||||
public FileConfiguration config;
|
||||
private File file;
|
||||
|
||||
public FileManager(String filename) {
|
||||
|
||||
EpicBuckets main = EpicBuckets.getInstance();
|
||||
|
||||
this.file = new File(main.getDataFolder(), filename);
|
||||
if (!this.file.exists()) {
|
||||
try {
|
||||
boolean b = this.file.createNewFile();
|
||||
|
||||
if (b)
|
||||
main.getLogger().info(filename + " was successfully created");
|
||||
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
this.config = YamlConfiguration.loadConfiguration(this.file);
|
||||
}
|
||||
|
||||
public void save() {
|
||||
try {
|
||||
this.config.save(this.file);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void load() {
|
||||
this.config = YamlConfiguration.loadConfiguration(this.file);
|
||||
}
|
||||
|
||||
}
|
@ -1,16 +0,0 @@
|
||||
package com.songoda.epicbuckets.filehandler.files;
|
||||
|
||||
import com.songoda.epicbuckets.filehandler.FileManager;
|
||||
|
||||
/**
|
||||
* ShopFile created by: SoFocused
|
||||
* Date Created: oktober 02 2018
|
||||
* Time created: 23:58
|
||||
*/
|
||||
public class ShopFile extends FileManager {
|
||||
|
||||
public ShopFile() {
|
||||
super("shops.yml");
|
||||
}
|
||||
|
||||
}
|
34
src/main/java/com/songoda/epicbuckets/files/Config.java
Normal file
34
src/main/java/com/songoda/epicbuckets/files/Config.java
Normal file
@ -0,0 +1,34 @@
|
||||
package com.songoda.epicbuckets.files;
|
||||
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
public class Config {
|
||||
|
||||
private FileConfiguration handler;
|
||||
private File file;
|
||||
|
||||
public Config(File file) {
|
||||
initializeHandler(file);
|
||||
}
|
||||
|
||||
private void initializeHandler(File file) {
|
||||
if (!file.exists()) {
|
||||
try {
|
||||
file.createNewFile();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
this.file = file;
|
||||
handler = YamlConfiguration.loadConfiguration(this.file);
|
||||
}
|
||||
|
||||
public FileConfiguration getConfig() {
|
||||
return handler;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
package com.songoda.epicbuckets.files;
|
||||
|
||||
import com.songoda.epicbuckets.EpicBuckets;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.HashMap;
|
||||
|
||||
public class ConfigManager {
|
||||
|
||||
private EpicBuckets epicBuckets;
|
||||
private HashMap<String, Config> configDatabase;
|
||||
|
||||
public ConfigManager() {
|
||||
this.epicBuckets = EpicBuckets.getInstance();
|
||||
setup();
|
||||
}
|
||||
|
||||
private void setup() {
|
||||
epicBuckets.saveDefaultConfig();
|
||||
createConfig("shops");
|
||||
}
|
||||
|
||||
public void createConfig(String name) {
|
||||
File f = new File(epicBuckets.getDataFolder(), name + ".yml");
|
||||
configDatabase.put(name, new Config(f));
|
||||
}
|
||||
|
||||
public FileConfiguration getConfig() {
|
||||
return epicBuckets.getConfig();
|
||||
}
|
||||
|
||||
public FileConfiguration getConfig(String name) {
|
||||
if (!configDatabase.containsKey(name)) return null;
|
||||
return configDatabase.get(name).getConfig();
|
||||
}
|
||||
|
||||
}
|
@ -1,248 +0,0 @@
|
||||
package com.songoda.epicbuckets.genbuckets;
|
||||
|
||||
import com.songoda.epicbuckets.EpicBuckets;
|
||||
import com.songoda.epicbuckets.regionhandlers.*;
|
||||
import com.songoda.epicbuckets.util.ChatUtil;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* Genbucket created by: SoFocused
|
||||
* Date Created: oktober 02 2018
|
||||
* Time created: 21:51
|
||||
*/
|
||||
public abstract class Genbucket {
|
||||
|
||||
protected EpicBuckets plugin = EpicBuckets.getInstance();
|
||||
|
||||
private GenbucketType genbucketType;
|
||||
|
||||
public Genbucket(GenbucketType genbucketType) {
|
||||
|
||||
this.genbucketType = genbucketType;
|
||||
|
||||
}
|
||||
|
||||
public abstract void run();
|
||||
|
||||
public EpicBuckets getInstance() {
|
||||
return plugin;
|
||||
}
|
||||
|
||||
protected void genbucketFinished(Player player, UUID uuid) {
|
||||
|
||||
int a = GenbucketManager.getActiveGenBuckets(player);
|
||||
|
||||
if (a - 1 < 0)
|
||||
GenbucketManager.setActiveGenBuckets(player, 0);
|
||||
else
|
||||
GenbucketManager.setActiveGenBuckets(player, a - 1);
|
||||
|
||||
if (GenbucketManager.activeGenbucketItems.containsKey(uuid))
|
||||
GenbucketManager.activeGenbucketItems.remove(uuid);
|
||||
|
||||
if (GenbucketManager.activeGenbucketLocation.containsKey(uuid))
|
||||
GenbucketManager.activeGenbucketLocation.remove(uuid);
|
||||
|
||||
}
|
||||
|
||||
protected boolean canPlace(Player player, Location location) {
|
||||
|
||||
boolean factionsCheck = RegionFactions.canBuild(player, location);
|
||||
boolean factionsUUIDCheck = RegionFactions.canBuild(player, location);
|
||||
boolean griefPreventionCheck = RegionGriefPrevention.canBuild(player, location);
|
||||
boolean worldGuardCheck = RegionWorldGuard.canBuild(player, location);
|
||||
boolean worldBorderCheck = RegionWBorder.isOutsideOfBorder(location);
|
||||
|
||||
//ChatUtil.debugMSG(player, factionsCheck, factionsUUIDCheck, griefPreventionCheck, worldGuardCheck, worldBorderCheck);
|
||||
|
||||
if (!factionsCheck || !factionsUUIDCheck || !griefPreventionCheck || !worldGuardCheck || worldBorderCheck) {
|
||||
player.sendMessage(plugin.getLocale().getMessage("event.place.nothere"));
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
protected boolean canPlace(Player player, Location location, boolean sendMessage) {
|
||||
|
||||
boolean factionsCheck = RegionFactions.canBuild(player, location);
|
||||
boolean factionsUUIDCheck = RegionFactions.canBuild(player, location);
|
||||
boolean griefPreventionCheck = RegionGriefPrevention.canBuild(player, location);
|
||||
boolean worldGuardCheck = RegionWorldGuard.canBuild(player, location);
|
||||
boolean worldBorderCheck = RegionWBorder.isOutsideOfBorder(location);
|
||||
|
||||
|
||||
if (!factionsCheck || !factionsUUIDCheck || !griefPreventionCheck || !worldGuardCheck || worldBorderCheck) {
|
||||
|
||||
if (sendMessage)
|
||||
player.sendMessage(plugin.getLocale().getMessage("event.place.nothere"));
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void removeBucket(Player player, ItemStack item) {
|
||||
|
||||
int genBuckets = item.getAmount();
|
||||
|
||||
if (genBuckets > 1)
|
||||
item.setAmount(genBuckets - 1);
|
||||
else
|
||||
player.getInventory().clear(player.getInventory().getHeldItemSlot());
|
||||
|
||||
|
||||
player.updateInventory();
|
||||
}
|
||||
|
||||
protected boolean canPlayerPlaceAGenbucket(Player player) {
|
||||
|
||||
if (GenbucketManager.getActiveGenBuckets(player) >= maxActiveGenForPlayer(player) + 1) {
|
||||
|
||||
player.sendMessage(plugin.getLocale().getMessage("event.place.wait"));
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
protected void notifyAdmins(Player target) {
|
||||
|
||||
for (UUID uuid : GenbucketManager.adminList) {
|
||||
|
||||
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(uuid);
|
||||
|
||||
if (!offlinePlayer.isOnline())
|
||||
continue;
|
||||
|
||||
offlinePlayer.getPlayer().sendMessage(plugin.getLocale().getMessage("event.admin.playerplaced", target.getName(), genbucketType.toString().toLowerCase()));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected boolean withdrawMoney(Player player, GenbucketItem item) {
|
||||
|
||||
boolean useInfinityGens = plugin.getConfig().getBoolean("INFINITE-USE");
|
||||
|
||||
if (!useInfinityGens) {
|
||||
removeBucket(player, player.getInventory().getItem(player.getInventory().getHeldItemSlot()));
|
||||
return true;
|
||||
}
|
||||
|
||||
double playerBalance = plugin.getBalance(player);
|
||||
|
||||
if (playerBalance >= item.getPrice()) {
|
||||
|
||||
plugin.withdrawBalance(player, item.getPrice(), true);
|
||||
|
||||
return true;
|
||||
|
||||
} else {
|
||||
|
||||
player.sendMessage(plugin.getLocale().getMessage("interface.withdrawl.success", String.valueOf((playerBalance - item.getPrice()) * -1)));
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private int maxActiveGenForPlayer(Player player) {
|
||||
|
||||
int maxActiveGenForPlayer = 0;
|
||||
|
||||
boolean foundValue = false;
|
||||
|
||||
for (String maxAmountString : plugin.getConfig().getConfigurationSection("CUSTOM-ACTIVE-GEN-PER-PLAY").getKeys(false)) {
|
||||
|
||||
String value[] = plugin.getConfig().getString("CUSTOM-ACTIVE-GEN-PER-PLAY." + maxAmountString).split(":");
|
||||
|
||||
if (!player.hasPermission(value[1]))
|
||||
continue;
|
||||
|
||||
maxActiveGenForPlayer = Integer.valueOf(value[0]);
|
||||
foundValue = true;
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
if (!foundValue)
|
||||
maxActiveGenForPlayer = plugin.getConfig().getInt("MAX-ACTIVE-GEN-PER-PLAYER");
|
||||
|
||||
//ChatUtil.debugMSG(player, maxActiveGenForPlayer, foundValue);
|
||||
|
||||
return maxActiveGenForPlayer;
|
||||
|
||||
}
|
||||
|
||||
protected boolean foundSponge(Location loc) {
|
||||
|
||||
boolean useSponge = plugin.getConfig().getBoolean("USE-SPONGE-SUPPORT");
|
||||
|
||||
if (!useSponge)
|
||||
return false;
|
||||
|
||||
int radius = plugin.getConfig().getInt("SPONGE-RADIUS");
|
||||
|
||||
if (radius < 0)
|
||||
return false;
|
||||
|
||||
for (double x = loc.getX() - radius; x < loc.getX() + radius; x++) {
|
||||
for (double y = loc.getY() - radius; y < loc.getY() + radius; y++) {
|
||||
for (double z = loc.getZ() - radius; z < loc.getZ() + radius; z++) {
|
||||
|
||||
Material materialAt = new Location(loc.getWorld(), x, y, z).getBlock().getType();
|
||||
|
||||
if (materialAt.equals(Material.SPONGE))
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
protected Block moveBlock(Block b, BlockFace blockFace, int length) {
|
||||
|
||||
switch (blockFace) {
|
||||
case NORTH:
|
||||
return b.getRelative(0, 0, -length);
|
||||
case SOUTH:
|
||||
return b.getRelative(0, 0, length);
|
||||
case EAST:
|
||||
return b.getRelative(length, 0, 0);
|
||||
case WEST:
|
||||
return b.getRelative(-length, 0, 0);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
protected Block getLastBlockPlaced(Block b, BlockFace blockFace) {
|
||||
switch (blockFace) {
|
||||
case NORTH:
|
||||
return b.getRelative(0, 0, -1);
|
||||
case SOUTH:
|
||||
return b.getRelative(0, 0, 1);
|
||||
case EAST:
|
||||
return b.getRelative(1, 0, 0);
|
||||
case WEST:
|
||||
return b.getRelative(-1, 0, 0);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
@ -1,118 +0,0 @@
|
||||
package com.songoda.epicbuckets.genbuckets;
|
||||
|
||||
import com.songoda.epicbuckets.EpicBuckets;
|
||||
import com.songoda.epicbuckets.util.ChatUtil;
|
||||
import com.songoda.epicbuckets.util.ItemStackUtil;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* GenbucketItem created by: SoFocused
|
||||
* Date Created: oktober 05 2018
|
||||
* Time created: 12:00
|
||||
*/
|
||||
public class GenbucketItem {
|
||||
|
||||
private EpicBuckets main = EpicBuckets.getInstance();
|
||||
|
||||
private String itemName;
|
||||
private List<String> itemLore;
|
||||
private List<String> itemSecondLore;
|
||||
|
||||
private Material icon;
|
||||
private int typeDamage;
|
||||
private Material type;
|
||||
|
||||
private GenbucketType genbucketType;
|
||||
|
||||
private int amount;
|
||||
private int damage;
|
||||
private int price;
|
||||
|
||||
|
||||
public GenbucketItem(String shopName, String key) {
|
||||
//
|
||||
FileConfiguration config = EpicBuckets.getInstance().shopFile;
|
||||
this.itemName = ChatUtil.colorString(config.getString("shops." + shopName + "." + key + ".name"));
|
||||
|
||||
this.price = config.getInt("shops." + shopName + "." + key + ".price");
|
||||
|
||||
this.icon = Material.valueOf(config.getString("shops." + shopName + "." + key + ".icon").toUpperCase());
|
||||
|
||||
this.typeDamage = config.getInt("shops." + shopName + "." + key + ".type-damage");
|
||||
this.type = Material.valueOf(config.getString("shops." + shopName + "." + key + ".type").toUpperCase());
|
||||
|
||||
this.itemLore = ChatUtil.colorList(config.getStringList("shops." + shopName + "." + key + ".item-lore"));
|
||||
|
||||
this.itemSecondLore = ChatUtil.colorList(config.getStringList("shops." + shopName + "." + key + ".description"), type, price);
|
||||
|
||||
this.damage = config.getInt("shops." + shopName + "." + key + ".damage");
|
||||
|
||||
this.genbucketType = GenbucketType.valueOf(config.getString("shops." + shopName + ".trait").toUpperCase());
|
||||
|
||||
amount = 1;
|
||||
}
|
||||
|
||||
public String getItemName() {
|
||||
return itemName;
|
||||
}
|
||||
|
||||
public List<String> getItemLore() {
|
||||
return itemLore;
|
||||
}
|
||||
|
||||
public void setItemLore(List<String> itemLore) {
|
||||
this.itemLore = itemLore;
|
||||
}
|
||||
|
||||
public GenbucketType getGenbucketType() {
|
||||
return genbucketType;
|
||||
}
|
||||
|
||||
public List<String> getItemSecondLore() {
|
||||
return itemSecondLore;
|
||||
}
|
||||
|
||||
public Material getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public Material getIcon() {
|
||||
return icon;
|
||||
}
|
||||
|
||||
public int getDamage() {
|
||||
return damage;
|
||||
}
|
||||
|
||||
public int getPrice() {
|
||||
return price;
|
||||
}
|
||||
|
||||
public int getAmount() {
|
||||
return amount;
|
||||
}
|
||||
|
||||
public void setAmount(int amount) {
|
||||
this.amount = amount;
|
||||
}
|
||||
|
||||
public int getVerticalHeight() {
|
||||
return main.getConfig().getInt("MAX-VERTICAL-HEIGHT");
|
||||
}
|
||||
|
||||
public byte getTypeDamage() {
|
||||
return (byte) typeDamage;
|
||||
}
|
||||
|
||||
public int getHorizontalLength() {
|
||||
return main.getConfig().getInt("MAX-HORIZONTAL-LENGTH");
|
||||
}
|
||||
|
||||
public ItemStack getGenbucketItem() {
|
||||
return ItemStackUtil.createItemStack(getItemName(), getItemLore(), getIcon(), getAmount(), getDamage(), true);
|
||||
}
|
||||
}
|
@ -1,116 +0,0 @@
|
||||
package com.songoda.epicbuckets.genbuckets;
|
||||
|
||||
import com.songoda.epicbuckets.EpicBuckets;
|
||||
import com.songoda.epicbuckets.util.ChatUtil;
|
||||
import com.songoda.epicbuckets.util.InventoryUtil;
|
||||
import com.songoda.epicbuckets.util.ItemStackUtil;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* GenbucketManager created by: SoFocused
|
||||
* Date Created: oktober 05 2018
|
||||
* Time created: 12:41
|
||||
*/
|
||||
public class GenbucketManager {
|
||||
|
||||
public static HashMap<UUID, Integer> playerInteger = new HashMap<>();
|
||||
public static HashMap<UUID, Integer> activeGenBuckets = new HashMap<>();
|
||||
public static HashMap<UUID, ItemStack> activeGenbucketItems = new HashMap<>();
|
||||
public static HashMap<UUID, Location> activeGenbucketLocation = new HashMap<>();
|
||||
|
||||
public static List<UUID> adminList = new ArrayList<>();
|
||||
|
||||
public static int getPlayerInteger(Player player) {
|
||||
return playerInteger.getOrDefault(player.getUniqueId(), 1);
|
||||
}
|
||||
|
||||
public static void setPlayerInteger(Player player, int amount) {
|
||||
playerInteger.put(player.getUniqueId(), amount);
|
||||
}
|
||||
|
||||
public static int getActiveGenBuckets(Player player) {
|
||||
return activeGenBuckets.getOrDefault(player.getUniqueId(), 1);
|
||||
}
|
||||
|
||||
public static void setActiveGenBuckets(Player player, int amount) {
|
||||
activeGenBuckets.put(player.getUniqueId(), amount);
|
||||
}
|
||||
|
||||
public void openBulkShop(Player player, GenbucketItem genbucketItem) {
|
||||
|
||||
FileConfiguration config = EpicBuckets.getInstance().getConfig();
|
||||
|
||||
String inventoryName = ChatUtil.colorString(config.getString("BULK-SHOP-INVENTORY.inventory-name").replace("{player}", player.getName()));
|
||||
|
||||
int size = config.getInt("BULK-SHOP-INVENTORY.size");
|
||||
|
||||
Inventory inventory = Bukkit.createInventory(player, size, inventoryName);
|
||||
|
||||
int mainItemSlot = config.getInt("BULK-SHOP-INVENTORY.plugin-item-slot");
|
||||
|
||||
int itemAmount = getPlayerInteger(player);
|
||||
|
||||
genbucketItem.setAmount(itemAmount);
|
||||
|
||||
genbucketItem.setItemLore(genbucketItem.getItemSecondLore());
|
||||
|
||||
int returnBackItemSlot = config.getInt("BULK-SHOP-INVENTORY.return-back-slot");
|
||||
|
||||
String purchaseItemName = ChatUtil.colorString(config.getString("BULK-SHOP-INVENTORY.purchase-item.name"));
|
||||
Material purchaseItemMaterial = Material.valueOf(config.getString("BULK-SHOP-INVENTORY.purchase-item.material").toUpperCase());
|
||||
int purchaseItemDamage = config.getInt("BULK-SHOP-INVENTORY.purchase-item.damage");
|
||||
int purchaseItemSlot = config.getInt("BULK-SHOP-INVENTORY.purchase-item.slot");
|
||||
|
||||
InventoryUtil.fillInventory(inventory, config.getBoolean("BULK-SHOP-INVENTORY.fill"));
|
||||
|
||||
InventoryUtil.setBackButton(inventory, returnBackItemSlot, true);
|
||||
|
||||
inventory.setItem(purchaseItemSlot, ItemStackUtil.createItemStack(purchaseItemName, Arrays.asList("&f"), purchaseItemMaterial, 1, purchaseItemDamage, false));
|
||||
|
||||
inventory.setItem(mainItemSlot, genbucketItem.getGenbucketItem());
|
||||
|
||||
loadAmountModifiers(inventory, "increase");
|
||||
loadAmountModifiers(inventory, "decrease");
|
||||
|
||||
player.getOpenInventory().close();
|
||||
player.openInventory(inventory);
|
||||
|
||||
}
|
||||
|
||||
private void loadAmountModifiers(Inventory inventory, String key) {
|
||||
|
||||
FileConfiguration config = EpicBuckets.getInstance().getConfig();
|
||||
|
||||
int x = 1;
|
||||
|
||||
String operator = key.equalsIgnoreCase("increase") ? "§a§l+ " : "§c§l- ";
|
||||
|
||||
Material material = Material.valueOf(config.getString("BULK-SHOP-INVENTORY.increase-item.material").toUpperCase());
|
||||
|
||||
int damage = config.getInt("BULK-SHOP-INVENTORY." + key + "-item.damage");
|
||||
|
||||
for (String str : config.getString("BULK-SHOP-INVENTORY." + key + "-item.slots").split(",")) {
|
||||
|
||||
int slot = Integer.parseInt(str);
|
||||
|
||||
inventory.setItem(slot, ItemStackUtil.createItemStack(operator + x, Arrays.asList("&f"), material, 1, damage, false));
|
||||
|
||||
if (x == 1)
|
||||
x = 10;
|
||||
else
|
||||
x = 64;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
package com.songoda.epicbuckets.genbuckets;
|
||||
|
||||
/**
|
||||
* GenbucketType created by: SoFocused
|
||||
* Date Created: oktober 02 2018
|
||||
* Time created: 21:40
|
||||
*/
|
||||
public enum GenbucketType {
|
||||
|
||||
HORIZONTAL("HORIZONTAL"),
|
||||
INFUSED("INFUSED"),
|
||||
PSUEDO("PSUEDO"),
|
||||
VERTICAL("VERTICAL");
|
||||
|
||||
public final String name;
|
||||
|
||||
GenbucketType(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return name;
|
||||
}
|
||||
|
||||
}
|
@ -1,145 +0,0 @@
|
||||
package com.songoda.epicbuckets.genbuckets.types;
|
||||
|
||||
|
||||
import com.songoda.epicbuckets.events.GenbucketPlaceEvent;
|
||||
import com.songoda.epicbuckets.genbuckets.Genbucket;
|
||||
import com.songoda.epicbuckets.genbuckets.GenbucketItem;
|
||||
import com.songoda.epicbuckets.genbuckets.GenbucketManager;
|
||||
import com.songoda.epicbuckets.genbuckets.GenbucketType;
|
||||
import com.songoda.epicbuckets.regionhandlers.RegionWBorder;
|
||||
import com.songoda.epicbuckets.util.ChatUtil;
|
||||
import com.songoda.epicbuckets.util.ServerVersion;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* Horizontal created by: SoFocused
|
||||
* Date Created: oktober 02 2018
|
||||
* Time created: 21:40
|
||||
*/
|
||||
public class Horizontal extends Genbucket {
|
||||
|
||||
private Location genbucketLocation;
|
||||
private int movedBlocks = 1;
|
||||
private Player player;
|
||||
private BlockFace blockFace;
|
||||
private GenbucketItem genbucketItem;
|
||||
private UUID genbucketUUID;
|
||||
|
||||
public Horizontal(Player player, Location genbucketLocation, BlockFace blockFace, GenbucketItem genbucketItem) {
|
||||
super(GenbucketType.HORIZONTAL);
|
||||
|
||||
this.genbucketLocation = genbucketLocation;
|
||||
this.player = player;
|
||||
this.blockFace = blockFace;
|
||||
this.genbucketItem = genbucketItem;
|
||||
this.genbucketUUID = UUID.randomUUID();
|
||||
|
||||
run();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
if ("DOWN".equalsIgnoreCase(blockFace.name()) || "UP".equalsIgnoreCase(blockFace.name())) {
|
||||
player.sendMessage(ChatUtil.colorPrefix(plugin.getLocale().getMessage("event.genbucket.placedwrong", plugin.getLocale().getMessage("event.translate.directionside", ChatUtil.stripColor(genbucketItem.getItemName())))));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!canPlace(player, genbucketLocation))
|
||||
return;
|
||||
|
||||
if (!canPlayerPlaceAGenbucket(player))
|
||||
return;
|
||||
|
||||
if (!withdrawMoney(player, genbucketItem))
|
||||
return;
|
||||
|
||||
long delay = plugin.getConfig().getInt("DELAY");
|
||||
|
||||
// Now we can start spawning the blocks
|
||||
|
||||
notifyAdmins(player);
|
||||
|
||||
GenbucketPlaceEvent genbucketPlaceEvent = new GenbucketPlaceEvent(player, genbucketLocation, blockFace, genbucketItem, genbucketUUID);
|
||||
|
||||
Bukkit.getPluginManager().callEvent(genbucketPlaceEvent);
|
||||
|
||||
if (genbucketPlaceEvent.isCancelled())
|
||||
return;
|
||||
|
||||
new BukkitRunnable() {
|
||||
|
||||
public void run() {
|
||||
|
||||
final Block block = moveBlock(genbucketLocation.getBlock(), blockFace, movedBlocks);
|
||||
|
||||
if (foundSponge(block.getLocation())) {
|
||||
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
this.cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!GenbucketManager.activeGenbucketItems.containsKey(genbucketUUID)) {
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
this.cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
if (movedBlocks > genbucketItem.getHorizontalLength()) {
|
||||
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
|
||||
this.cancel();
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
if (!canPlace(player, block.getLocation())) {
|
||||
|
||||
//ChatUtil.debugMSG(player, "done from canPlace()");
|
||||
|
||||
if (RegionWBorder.isOutsideOfBorder(block.getLocation())) {
|
||||
|
||||
if (blockFace.name().equalsIgnoreCase("SOUTH") ||
|
||||
blockFace.name().equalsIgnoreCase("EAST"))
|
||||
moveBlock(genbucketLocation.getBlock(), blockFace, movedBlocks - 1).setType(Material.AIR);
|
||||
}
|
||||
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
|
||||
this.cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
boolean run = plugin.getConfig().getStringList("IGNORE-MATERIALS").contains(block.getType().name());
|
||||
|
||||
if (run) {
|
||||
|
||||
//ChatUtil.debugMSG(player, genbucketItem.getType(), genbucketItem.getTypeDamage(), movedBlocks);
|
||||
|
||||
block.setType(genbucketItem.getType());
|
||||
if (!plugin.isServerVersionAtLeast(ServerVersion.V1_13))
|
||||
block.setData(genbucketItem.getTypeDamage());
|
||||
movedBlocks++;
|
||||
|
||||
} else {
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
this.cancel();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}.runTaskTimer(plugin, 0L, delay);
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -1,227 +0,0 @@
|
||||
package com.songoda.epicbuckets.genbuckets.types;
|
||||
|
||||
import com.songoda.epicbuckets.events.GenbucketPlaceEvent;
|
||||
import com.songoda.epicbuckets.genbuckets.Genbucket;
|
||||
import com.songoda.epicbuckets.genbuckets.GenbucketItem;
|
||||
import com.songoda.epicbuckets.genbuckets.GenbucketManager;
|
||||
import com.songoda.epicbuckets.genbuckets.GenbucketType;
|
||||
import com.songoda.epicbuckets.util.ChatUtil;
|
||||
import com.songoda.epicbuckets.util.ServerVersion;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* Infused created by: SoFocused
|
||||
* Date Created: oktober 02 2018
|
||||
* Time created: 21:40
|
||||
*/
|
||||
public class Infused extends Genbucket {
|
||||
|
||||
private Location genbucketLocation;
|
||||
private int movedBlocks = 1;
|
||||
private Player player;
|
||||
private BlockFace blockFace;
|
||||
private GenbucketItem genbucketItem;
|
||||
private boolean runPillarOne = true;
|
||||
private boolean runPillarTwo = true;
|
||||
private UUID genbucketUUID;
|
||||
|
||||
/**
|
||||
* Creating the class constructor for a Infused genbucket
|
||||
*
|
||||
* @param player the player who placed the genbucket
|
||||
* @param genbucketLocation the location of where the genbucket was placed
|
||||
* @param blockFace the blockface received from the {GenbucketPlaceListener#onRightClickBlock}
|
||||
* @param genbucketItem the genbucket that was placed
|
||||
*/
|
||||
public Infused(Player player, Location genbucketLocation, BlockFace blockFace, GenbucketItem genbucketItem) {
|
||||
super(GenbucketType.INFUSED);
|
||||
|
||||
this.blockFace = blockFace;
|
||||
this.genbucketLocation = genbucketLocation;
|
||||
this.genbucketItem = genbucketItem;
|
||||
this.player = player;
|
||||
this.genbucketUUID = UUID.randomUUID();
|
||||
|
||||
// Call this to run the genbucket
|
||||
run();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
if (!"UP".equalsIgnoreCase(blockFace.name())) {
|
||||
player.sendMessage(ChatUtil.colorPrefix(plugin.getLocale().getMessage("event.genbucket.placedwrong", plugin.getLocale().getMessage("event.translate.directionup", "{genbucket}", ChatUtil.stripColor(genbucketItem.getItemName())))));
|
||||
return;
|
||||
}
|
||||
|
||||
final Block[] blocks = getBlocks(genbucketLocation.getBlock(), blockFace, player);
|
||||
|
||||
final Block blockL = blocks[0];
|
||||
final Block blockR = blocks[1];
|
||||
|
||||
if (!canPlace(player, blockL.getLocation()) || !canPlace(player, blockR.getLocation()))
|
||||
return;
|
||||
|
||||
if (!canPlayerPlaceAGenbucket(player))
|
||||
return;
|
||||
|
||||
if (!withdrawMoney(player, genbucketItem))
|
||||
return;
|
||||
|
||||
long delay = plugin.getConfig().getInt("DELAY");
|
||||
|
||||
// Now we can start spawning the blocks
|
||||
|
||||
notifyAdmins(player);
|
||||
|
||||
GenbucketPlaceEvent genbucketPlaceEvent = new GenbucketPlaceEvent(player, genbucketLocation, blockFace, genbucketItem, genbucketUUID);
|
||||
|
||||
Bukkit.getPluginManager().callEvent(genbucketPlaceEvent);
|
||||
|
||||
if (genbucketPlaceEvent.isCancelled())
|
||||
return;
|
||||
|
||||
new BukkitRunnable() {
|
||||
|
||||
public void run() {
|
||||
|
||||
Block blockOne = blocks[0].getLocation().subtract(0, movedBlocks - 1, 0).getBlock();
|
||||
Block blockTwo = blocks[1].getLocation().subtract(0, movedBlocks - 1, 0).getBlock();
|
||||
|
||||
if (foundSponge(blockOne.getLocation()))
|
||||
runPillarOne = false;
|
||||
|
||||
if (foundSponge(blockTwo.getLocation()))
|
||||
runPillarTwo = false;
|
||||
|
||||
if (!GenbucketManager.activeGenbucketItems.containsKey(genbucketUUID)) {
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
this.cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
if (movedBlocks > genbucketItem.getHorizontalLength()) {
|
||||
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
|
||||
this.cancel();
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
boolean runFirst = plugin.getConfig().getStringList("IGNORE-MATERIALS").contains(blockOne.getType().name());
|
||||
|
||||
if (runPillarOne && runFirst && canPlace(player, blockOne.getLocation(), false)) {
|
||||
|
||||
blockOne.setType(genbucketItem.getType());
|
||||
if (!plugin.isServerVersionAtLeast(ServerVersion.V1_13))
|
||||
blockOne.setData(genbucketItem.getTypeDamage());
|
||||
|
||||
} else
|
||||
runPillarOne = false;
|
||||
|
||||
boolean runSecond = plugin.getConfig().getStringList("IGNORE-MATERIALS").contains(blockTwo.getType().name());
|
||||
|
||||
if (runPillarTwo && runSecond && canPlace(player, blockTwo.getLocation(), false)) {
|
||||
|
||||
blockTwo.setType(genbucketItem.getType());
|
||||
if (!plugin.isServerVersionAtLeast(ServerVersion.V1_13))
|
||||
blockTwo.setData(genbucketItem.getTypeDamage());
|
||||
|
||||
} else
|
||||
runPillarTwo = false;
|
||||
|
||||
movedBlocks++;
|
||||
|
||||
if (!canPlace(player, blockOne.getLocation(), true) && !canPlace(player, blockTwo.getLocation(), false)) {
|
||||
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
|
||||
this.cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
Block nextBlockOne = blockOne.getLocation().clone().subtract(0, 1, 0).getBlock();
|
||||
Block nextBlockTwo = blockTwo.getLocation().clone().subtract(0, 1, 0).getBlock();
|
||||
|
||||
boolean checkNextBlock = plugin.getConfig().getStringList("IGNORE-MATERIALS").contains(nextBlockOne.getType().name());
|
||||
boolean checkNextBlock_ = plugin.getConfig().getStringList("IGNORE-MATERIALS").contains(nextBlockTwo.getType().name());
|
||||
|
||||
if (!checkNextBlock && !checkNextBlock_ || !runPillarOne && !runPillarTwo) {
|
||||
|
||||
//ChatUtil.debugMSG(player, nextBlockOne.getType().name(), nextBlockTwo.getType().name());
|
||||
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
this.cancel();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}.runTaskTimer(plugin, 0L, delay);
|
||||
|
||||
}
|
||||
|
||||
private Block[] getBlocks(Block block, BlockFace blockFace, Player player) {
|
||||
|
||||
if ("NORTH".equalsIgnoreCase(blockFace.name()) || "SOUTH".equalsIgnoreCase(blockFace.name())) {
|
||||
Block b1 = block.getRelative(blockFace, 1); // Left
|
||||
Block b2 = block.getRelative(blockFace, -1); // Right
|
||||
|
||||
return new Block[]{b1, b2};
|
||||
} else if ("EAST".equalsIgnoreCase(blockFace.name()) || "WEST".equalsIgnoreCase(blockFace.name())) {
|
||||
Location loc1 = block.getLocation();
|
||||
Location loc2 = block.getLocation();
|
||||
loc1.setX(loc1.getX() + 1);
|
||||
loc2.setX(loc1.getX() - 2);
|
||||
|
||||
Block b1 = loc1.getBlock();
|
||||
Block b2 = loc2.getBlock();
|
||||
|
||||
return new Block[]{b1, b2};
|
||||
}
|
||||
|
||||
if ("e".equalsIgnoreCase(getDirection(player)) || "w".equalsIgnoreCase(getDirection(player))) {
|
||||
Location getLeftSide = new Location(player.getWorld(), block.getX(), block.getY(), block.getZ() + 1);
|
||||
Location getRightSide = new Location(player.getWorld(), block.getX(), block.getY(), block.getZ() - 1);
|
||||
|
||||
return new Block[]{getLeftSide.getBlock(), getRightSide.getBlock()};
|
||||
} else if (!"e".equalsIgnoreCase(getDirection(player)) || !"w".equalsIgnoreCase(getDirection(player)) && getDirection(player) != null) {
|
||||
Location getLeftSide = new Location(player.getWorld(), block.getX() + 1, block.getY(), block.getZ());
|
||||
Location getRightSide = new Location(player.getWorld(), block.getX() - 1, block.getY(), block.getZ());
|
||||
|
||||
return new Block[]{getLeftSide.getBlock(), getRightSide.getBlock()};
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
private String getDirection(Player player) {
|
||||
double rot = (player.getLocation().getYaw() - 180) % 360;
|
||||
if (rot < 0) {
|
||||
rot += 360.0;
|
||||
}
|
||||
|
||||
if (0 <= rot && rot < 22.5) {
|
||||
return "N";
|
||||
} else if (67.5 <= rot && rot < 112.5) {
|
||||
return "E";
|
||||
} else if (157.5 <= rot && rot < 202.5) {
|
||||
return "S";
|
||||
} else if (247.5 <= rot && rot < 292.5) {
|
||||
return "W";
|
||||
} else if (337.5 <= rot && rot < 360.0) {
|
||||
return "N";
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,198 +0,0 @@
|
||||
package com.songoda.epicbuckets.genbuckets.types;
|
||||
|
||||
import com.songoda.epicbuckets.events.GenbucketPlaceEvent;
|
||||
import com.songoda.epicbuckets.genbuckets.Genbucket;
|
||||
import com.songoda.epicbuckets.genbuckets.GenbucketItem;
|
||||
import com.songoda.epicbuckets.genbuckets.GenbucketManager;
|
||||
import com.songoda.epicbuckets.genbuckets.GenbucketType;
|
||||
import com.songoda.epicbuckets.util.ChatUtil;
|
||||
import com.songoda.epicbuckets.util.ServerVersion;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* PsuedoVertical created by: SoFocused
|
||||
* Date Created: oktober 02 2018
|
||||
* Time created: 21:40
|
||||
*/
|
||||
public class PsuedoVertical extends Genbucket {
|
||||
|
||||
private Location genbucketLocation;
|
||||
private int movedBlocks = 1;
|
||||
private Player player;
|
||||
private BlockFace blockFace;
|
||||
private GenbucketItem genbucketItem;
|
||||
private UUID genbucketUUID;
|
||||
|
||||
/**
|
||||
* Creating the class constructor for a PsuedoVertical genbucket
|
||||
*
|
||||
* @param player the player who placed the genbucket
|
||||
* @param genbucketLocation the location of where the genbucket was placed
|
||||
* @param blockFace the blockface received from the {GenbucketPlaceListener#onRightClickBlock}
|
||||
* @param genbucketItem the genbucket that was placed
|
||||
*/
|
||||
public PsuedoVertical(Player player, Location genbucketLocation, BlockFace blockFace, GenbucketItem genbucketItem) {
|
||||
super(GenbucketType.PSUEDO);
|
||||
|
||||
this.genbucketLocation = genbucketLocation;
|
||||
this.player = player;
|
||||
this.blockFace = blockFace;
|
||||
this.genbucketItem = genbucketItem;
|
||||
this.genbucketUUID = UUID.randomUUID();
|
||||
|
||||
// Call this to run the genbucket
|
||||
run();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
// Get the material the player clicked the genbucket on
|
||||
final Material clickedMaterial = genbucketLocation.getBlock().getType();
|
||||
|
||||
boolean validMaterial = false;
|
||||
|
||||
// This is a list of allowed material from the config
|
||||
List<String> materialList = plugin.getConfig().getStringList("PSUEDO-MATERIALS");
|
||||
|
||||
// In the for loop we simply check if the material is
|
||||
// valid if it is then validMaterial is set to true
|
||||
for (String string : materialList) {
|
||||
|
||||
if (string.toUpperCase().equalsIgnoreCase(genbucketItem.getType().name().toUpperCase()))
|
||||
validMaterial = true;
|
||||
}
|
||||
|
||||
// If the material isn't valid we tell the player and stop the code
|
||||
if (!validMaterial || !clickedMaterial.equals(genbucketItem.getType())) {
|
||||
player.sendMessage(plugin.getLocale().getMessage("event.genbucket.wrongmaterialpsuedo"));
|
||||
return;
|
||||
}
|
||||
|
||||
// Region support
|
||||
if (!canPlace(player, genbucketLocation))
|
||||
return;
|
||||
|
||||
// This checks if the player can place more
|
||||
// genbuckets or if he has placed max
|
||||
if (!canPlayerPlaceAGenbucket(player))
|
||||
return;
|
||||
|
||||
// Tries to withdrawMoney, if successful then it
|
||||
// returns true
|
||||
if (!withdrawMoney(player, genbucketItem))
|
||||
return;
|
||||
|
||||
// Delay from config
|
||||
long delay = plugin.getConfig().getInt("DELAY");
|
||||
|
||||
// Now we can start spawning the blocks
|
||||
|
||||
// If any admins (or players with permission) has enabled the
|
||||
// admin mode we will notify them
|
||||
notifyAdmins(player);
|
||||
|
||||
// Call in the {@link GenbucketPlaceEvent}
|
||||
GenbucketPlaceEvent genbucketPlaceEvent = new GenbucketPlaceEvent(player, genbucketLocation, blockFace, genbucketItem, genbucketUUID);
|
||||
|
||||
Bukkit.getPluginManager().callEvent(genbucketPlaceEvent);
|
||||
|
||||
if (genbucketPlaceEvent.isCancelled())
|
||||
return;
|
||||
|
||||
new BukkitRunnable() {
|
||||
|
||||
public void run() {
|
||||
|
||||
final Block block = genbucketLocation.clone().subtract(0, movedBlocks, 0).getBlock();
|
||||
|
||||
if (foundSponge(block.getLocation())) {
|
||||
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
this.cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
if (foundSponge(block.getLocation())) {
|
||||
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
this.cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!GenbucketManager.activeGenbucketItems.containsKey(genbucketUUID)) {
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
this.cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
if (movedBlocks > genbucketItem.getVerticalHeight()) {
|
||||
|
||||
//if (block.getType().equals(Material.COBBLESTONE) && genbucketItem.getType().equals(Material.SAND) || block.getType().equals(Material.COBBLESTONE) && genbucketItem.getType().equals(Material.GRAVEL))
|
||||
//block.setType(Material.AIR);
|
||||
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
this.cancel();
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
if (!canPlace(player, block.getLocation())) {
|
||||
|
||||
//ChatUtil.debugMSG(player, "done from canPlace()");
|
||||
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
|
||||
this.cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (block.getType().equals(Material.AIR) || block.getType().equals(Material.WATER) || block.getType().equals(Material.STATIONARY_WATER)
|
||||
|| block.getType().equals(Material.LAVA) || block.getType().equals(Material.STATIONARY_LAVA)) {
|
||||
|
||||
block.setType(genbucketItem.getType());
|
||||
if (!plugin.isServerVersionAtLeast(ServerVersion.V1_13))
|
||||
block.setData(genbucketItem.getTypeDamage());
|
||||
|
||||
} else {
|
||||
|
||||
List<String> materialList = plugin.getConfig().getStringList("PSUEDO-MATERIALS");
|
||||
|
||||
boolean validMaterial = false;
|
||||
|
||||
for (String string : materialList) {
|
||||
|
||||
if (string.toUpperCase().equalsIgnoreCase(genbucketItem.getType().name().toUpperCase()))
|
||||
validMaterial = true;
|
||||
}
|
||||
|
||||
if (!validMaterial || !block.getType().equals(clickedMaterial)) {
|
||||
//ChatUtil.debugMSG(player, "Last block: " + block.getType(), "Material:" + genbucketItem.getType());
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
this.cancel();
|
||||
}
|
||||
|
||||
//ChatUtil.debugMSG(player, block.getType().name(), validMaterial, movedBlocks);
|
||||
|
||||
}
|
||||
|
||||
movedBlocks++;
|
||||
|
||||
}
|
||||
|
||||
}.runTaskTimer(plugin, 0L, delay);
|
||||
|
||||
|
||||
}
|
||||
}
|
@ -1,385 +0,0 @@
|
||||
package com.songoda.epicbuckets.genbuckets.types;
|
||||
|
||||
import com.songoda.epicbuckets.events.GenbucketPlaceEvent;
|
||||
import com.songoda.epicbuckets.genbuckets.Genbucket;
|
||||
import com.songoda.epicbuckets.genbuckets.GenbucketItem;
|
||||
import com.songoda.epicbuckets.genbuckets.GenbucketManager;
|
||||
import com.songoda.epicbuckets.genbuckets.GenbucketType;
|
||||
import com.songoda.epicbuckets.util.ServerVersion;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* Vertical created by: SoFocused
|
||||
* Date Created: oktober 02 2018
|
||||
* Time created: 21:39
|
||||
*/
|
||||
public class Vertical extends Genbucket {
|
||||
|
||||
private Location genbucketLocation;
|
||||
private int movedBlocks = 1;
|
||||
private Player player;
|
||||
private BlockFace blockFace;
|
||||
private GenbucketItem genbucketItem;
|
||||
private UUID genbucketUUID;
|
||||
private long delay = plugin.getConfig().getInt("DELAY");
|
||||
|
||||
/**
|
||||
* Creating the class constructor for a Vertical genbucket
|
||||
*
|
||||
* @param player the player who placed the genbucket
|
||||
* @param genbucketLocation the location of where the genbucket was placed
|
||||
* @param blockFace the blockface received from the {GenbucketPlaceListener#onRightClickBlock}
|
||||
* @param genbucketItem the genbucket that was placed
|
||||
*/
|
||||
public Vertical(Player player, Location genbucketLocation, BlockFace blockFace, GenbucketItem genbucketItem) {
|
||||
super(GenbucketType.VERTICAL);
|
||||
|
||||
this.genbucketLocation = genbucketLocation;
|
||||
this.player = player;
|
||||
this.blockFace = blockFace;
|
||||
this.genbucketItem = genbucketItem;
|
||||
this.genbucketUUID = UUID.randomUUID();
|
||||
|
||||
// Call this to run the genbucket
|
||||
run();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
if (!canPlace(player, genbucketLocation))
|
||||
return;
|
||||
|
||||
if (!canPlayerPlaceAGenbucket(player))
|
||||
return;
|
||||
|
||||
if (!withdrawMoney(player, genbucketItem))
|
||||
return;
|
||||
|
||||
// Now we can start spawning the blocks
|
||||
|
||||
notifyAdmins(player);
|
||||
|
||||
GenbucketPlaceEvent genbucketPlaceEvent = new GenbucketPlaceEvent(player, genbucketLocation, blockFace, genbucketItem, genbucketUUID);
|
||||
|
||||
Bukkit.getPluginManager().callEvent(genbucketPlaceEvent);
|
||||
|
||||
if (genbucketPlaceEvent.isCancelled())
|
||||
return;
|
||||
|
||||
/**
|
||||
* Compared to the other genbuckets the veritcal genbucket
|
||||
* can be placed in 3 different locations. Therefore, we cannot
|
||||
* use the same method as we've done with the other genbuckettypes.
|
||||
*/
|
||||
|
||||
switch (blockFace) {
|
||||
|
||||
case DOWN:
|
||||
directionDown();
|
||||
break;
|
||||
|
||||
case UP:
|
||||
directionUP();
|
||||
break;
|
||||
|
||||
default:
|
||||
directionSide();
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void directionSide() {
|
||||
|
||||
final Block firstBlock = getLastBlockPlaced(genbucketLocation.getBlock(), blockFace);
|
||||
|
||||
// This is needed to stop sand/gravel genbuckets
|
||||
// to destroy bedrock
|
||||
if (firstBlock.getLocation().getBlockY() <= 1)
|
||||
return;
|
||||
|
||||
new BukkitRunnable() {
|
||||
|
||||
public void run() {
|
||||
|
||||
final Block block = firstBlock.getLocation().clone().subtract(0, movedBlocks - 1, 0).getBlock();
|
||||
|
||||
if (foundSponge(block.getLocation())) {
|
||||
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
this.cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!GenbucketManager.activeGenbucketItems.containsKey(genbucketUUID)) {
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
this.cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
if (movedBlocks > genbucketItem.getVerticalHeight()) {
|
||||
|
||||
if (block.getType().equals(Material.COBBLESTONE) && genbucketItem.getType().equals(Material.SAND) || block.getType().equals(Material.COBBLESTONE) && genbucketItem.getType().equals(Material.GRAVEL))
|
||||
block.setType(Material.AIR);
|
||||
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
this.cancel();
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
if (!canPlace(player, block.getLocation())) {
|
||||
|
||||
//ChatUtil.debugMSG(player, "done from canPlace()");
|
||||
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
|
||||
this.cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
boolean run = plugin.getConfig().getStringList("IGNORE-MATERIALS").contains(block.getType().name());
|
||||
|
||||
if (!run && genbucketItem.getType().equals(Material.SAND) || !run && genbucketItem.getType().equals(Material.GRAVEL) || run) {
|
||||
|
||||
//ChatUtil.debugMSG(player, genbucketItem.getType(), genbucketItem.getTypeDamage(), movedBlocks);
|
||||
|
||||
if (genbucketItem.getType().equals(Material.SAND) || genbucketItem.getType().equals(Material.GRAVEL)) {
|
||||
|
||||
block.setType(genbucketItem.getType());
|
||||
|
||||
Block block_ = block.getLocation().clone().subtract(0, 1, 0).getBlock();
|
||||
block_.setType(Material.COBBLESTONE);
|
||||
|
||||
Block blockUnderCobbleStone = block.getLocation().clone().subtract(0, 2, 0).getBlock();
|
||||
boolean ignoreBlock = plugin.getConfig().getStringList("IGNORE-MATERIALS").contains(blockUnderCobbleStone.getType().name());
|
||||
|
||||
if (!ignoreBlock) {
|
||||
block_.setType(genbucketItem.getType());
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
this.cancel();
|
||||
return;
|
||||
} else {
|
||||
block.setType(genbucketItem.getType());
|
||||
if (!plugin.isServerVersionAtLeast(ServerVersion.V1_13))
|
||||
block.setData(genbucketItem.getTypeDamage());
|
||||
}
|
||||
|
||||
} else {
|
||||
block.setType(genbucketItem.getType());
|
||||
if (!plugin.isServerVersionAtLeast(ServerVersion.V1_13))
|
||||
block.setData(genbucketItem.getTypeDamage());
|
||||
}
|
||||
|
||||
movedBlocks++;
|
||||
|
||||
} else {
|
||||
|
||||
//ChatUtil.debugMSG(player, "Last block: " + block.getType(), "Material:" + genbucketItem.getType());
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
this.cancel();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}.runTaskTimer(plugin, 0L, delay);
|
||||
|
||||
}
|
||||
|
||||
private void directionUP() {
|
||||
|
||||
new BukkitRunnable() {
|
||||
|
||||
public void run() {
|
||||
|
||||
final Block block = genbucketLocation.clone().add(0, movedBlocks, 0).getBlock();
|
||||
|
||||
if (foundSponge(block.getLocation())) {
|
||||
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
this.cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!GenbucketManager.activeGenbucketItems.containsKey(genbucketUUID)) {
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
this.cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
if (movedBlocks > genbucketItem.getVerticalHeight() || block.getY() >= 257) {
|
||||
|
||||
if (block.getType().equals(Material.COBBLESTONE) && genbucketItem.getType().equals(Material.SAND) || block.getType().equals(Material.COBBLESTONE) && genbucketItem.getType().equals(Material.GRAVEL))
|
||||
block.setType(Material.AIR);
|
||||
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
this.cancel();
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
if (!canPlace(player, block.getLocation())) {
|
||||
|
||||
//ChatUtil.debugMSG(player, "done from canPlace()");
|
||||
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
|
||||
this.cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
boolean run = plugin.getConfig().getStringList("IGNORE-MATERIALS").contains(block.getType().name());
|
||||
|
||||
if (!run && genbucketItem.getType().equals(Material.SAND) || !run && genbucketItem.getType().equals(Material.GRAVEL) || run) {
|
||||
|
||||
//ChatUtil.debugMSG(player, genbucketItem.getType(), genbucketItem.getTypeDamage(), movedBlocks);
|
||||
|
||||
if (genbucketItem.getType().equals(Material.SAND) || genbucketItem.getType().equals(Material.GRAVEL)) {
|
||||
|
||||
block.setType(genbucketItem.getType());
|
||||
|
||||
Block block_ = block.getLocation().clone().add(0, 1, 0).getBlock();
|
||||
block_.setType(Material.COBBLESTONE);
|
||||
|
||||
Block blockUnderCobbleStone = block.getLocation().clone().add(0, 2, 0).getBlock();
|
||||
boolean ignoreBlock = plugin.getConfig().getStringList("IGNORE-MATERIALS").contains(blockUnderCobbleStone.getType().name());
|
||||
|
||||
if (!ignoreBlock) {
|
||||
block_.setType(genbucketItem.getType());
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
this.cancel();
|
||||
return;
|
||||
} else {
|
||||
block.setType(genbucketItem.getType());
|
||||
if (!plugin.isServerVersionAtLeast(ServerVersion.V1_13))
|
||||
block.setData(genbucketItem.getTypeDamage());
|
||||
}
|
||||
|
||||
} else {
|
||||
block.setType(genbucketItem.getType());
|
||||
if (!plugin.isServerVersionAtLeast(ServerVersion.V1_13))
|
||||
block.setData(genbucketItem.getTypeDamage());
|
||||
}
|
||||
|
||||
movedBlocks++;
|
||||
|
||||
} else {
|
||||
|
||||
//ChatUtil.debugMSG(player, "Last block: " + block.getType(), "Material:" + genbucketItem.getType());
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
this.cancel();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}.runTaskTimer(plugin, 0L, delay);
|
||||
}
|
||||
|
||||
private void directionDown() {
|
||||
|
||||
// This is needed to stop sand/gravel genbuckets
|
||||
// to destroy bedrock
|
||||
if (genbucketLocation.getBlockY() <= 3)
|
||||
return;
|
||||
|
||||
new BukkitRunnable() {
|
||||
|
||||
public void run() {
|
||||
|
||||
final Block block = genbucketLocation.clone().subtract(0, movedBlocks, 0).getBlock();
|
||||
|
||||
if (foundSponge(block.getLocation())) {
|
||||
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
this.cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!GenbucketManager.activeGenbucketItems.containsKey(genbucketUUID)) {
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
this.cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
if (movedBlocks > genbucketItem.getVerticalHeight()) {
|
||||
|
||||
if (block.getType().equals(Material.COBBLESTONE) && genbucketItem.getType().equals(Material.SAND) || block.getType().equals(Material.COBBLESTONE) && genbucketItem.getType().equals(Material.GRAVEL))
|
||||
block.setType(Material.AIR);
|
||||
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
this.cancel();
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
if (!canPlace(player, block.getLocation())) {
|
||||
|
||||
//ChatUtil.debugMSG(player, "done from canPlace()");
|
||||
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
|
||||
this.cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
boolean run = plugin.getConfig().getStringList("IGNORE-MATERIALS").contains(block.getType().name());
|
||||
|
||||
if (!run && genbucketItem.getType().equals(Material.SAND) || !run && genbucketItem.getType().equals(Material.GRAVEL) || run) {
|
||||
|
||||
//ChatUtil.debugMSG(player, genbucketItem.getType(), genbucketItem.getTypeDamage(), movedBlocks);
|
||||
|
||||
if (genbucketItem.getType().equals(Material.SAND) || genbucketItem.getType().equals(Material.GRAVEL)) {
|
||||
|
||||
block.setType(genbucketItem.getType());
|
||||
|
||||
Block block_ = block.getLocation().clone().subtract(0, 1, 0).getBlock();
|
||||
block_.setType(Material.COBBLESTONE);
|
||||
|
||||
Block blockUnderCobbleStone = block.getLocation().clone().subtract(0, 2, 0).getBlock();
|
||||
boolean ignoreBlock = plugin.getConfig().getStringList("IGNORE-MATERIALS").contains(blockUnderCobbleStone.getType().name());
|
||||
|
||||
if (!ignoreBlock) {
|
||||
block_.setType(genbucketItem.getType());
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
this.cancel();
|
||||
return;
|
||||
} else {
|
||||
block.setType(genbucketItem.getType());
|
||||
if (!plugin.isServerVersionAtLeast(ServerVersion.V1_13))
|
||||
block.setData(genbucketItem.getTypeDamage());
|
||||
}
|
||||
|
||||
} else {
|
||||
block.setType(genbucketItem.getType());
|
||||
if (!plugin.isServerVersionAtLeast(ServerVersion.V1_13))
|
||||
block.setData(genbucketItem.getTypeDamage());
|
||||
}
|
||||
|
||||
movedBlocks++;
|
||||
|
||||
} else {
|
||||
|
||||
//ChatUtil.debugMSG(player, "Last block: " + block.getType(), "Material:" + genbucketItem.getType());
|
||||
genbucketFinished(player, genbucketUUID);
|
||||
this.cancel();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}.runTaskTimer(plugin, 0L, delay);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,192 +0,0 @@
|
||||
package com.songoda.epicbuckets.inventories;
|
||||
|
||||
import com.songoda.epicbuckets.EpicBuckets;
|
||||
import com.songoda.epicbuckets.genbuckets.GenbucketManager;
|
||||
import com.songoda.epicbuckets.util.ChatUtil;
|
||||
import com.songoda.epicbuckets.util.InventoryUtil;
|
||||
import com.songoda.epicbuckets.util.ItemStackUtil;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* InventoryManager created by: SoFocused
|
||||
* Date Created: oktober 03 2018
|
||||
* Time created: 16:24
|
||||
*/
|
||||
public class InventoryManager {
|
||||
|
||||
public void openMainInventory(Player player) {
|
||||
|
||||
FileConfiguration config = EpicBuckets.getInstance().getConfig();
|
||||
|
||||
boolean fillInventory = config.getBoolean("MENU-ITEMS.fill");
|
||||
|
||||
int size = config.getInt("MENU-ITEMS.size");
|
||||
|
||||
String inventoryName = ChatUtil.colorString(config.getString("MENU-ITEMS.inventory-name"));
|
||||
|
||||
Inventory inventory = Bukkit.createInventory(null, size, inventoryName);
|
||||
|
||||
InventoryUtil.fillInventory(inventory, fillInventory);
|
||||
|
||||
for (String key : config.getConfigurationSection("MENU-ITEMS").getKeys(false)) {
|
||||
|
||||
// Check if the key has the item category if not just skip
|
||||
|
||||
if (!config.contains("MENU-ITEMS." + key + ".item"))
|
||||
continue;
|
||||
|
||||
// Now we know that we might have a possible item!
|
||||
|
||||
setBucketInMainGUI(inventory, "MENU-ITEMS.", key);
|
||||
|
||||
}
|
||||
|
||||
player.getOpenInventory().close();
|
||||
player.openInventory(inventory);
|
||||
|
||||
}
|
||||
|
||||
public void loadSubInventory(Player player, String shopName) {
|
||||
|
||||
FileConfiguration config = EpicBuckets.getInstance().shopFile;
|
||||
|
||||
String inventoryName = ChatUtil.colorString(config.getString("shops." + shopName + ".inventory-name"));
|
||||
|
||||
int inventorySize = config.getInt("shops." + shopName + ".size");
|
||||
|
||||
boolean fillInventory = config.getBoolean("shops." + shopName + ".fill");
|
||||
|
||||
boolean useBackButton = config.getBoolean("use-back-buttons");
|
||||
|
||||
int backButtonSlot = config.getInt("shops." + shopName + ".goBackButton");
|
||||
|
||||
Inventory inventory = Bukkit.createInventory(null, inventorySize, inventoryName);
|
||||
|
||||
InventoryUtil.fillInventory(inventory, fillInventory);
|
||||
|
||||
InventoryUtil.setBackButton(inventory, backButtonSlot, useBackButton);
|
||||
|
||||
// Load in the buckets
|
||||
|
||||
for (String key : config.getConfigurationSection("shops." + shopName).getKeys(false)) {
|
||||
|
||||
// Make sure our key / path has a type in it
|
||||
|
||||
if (!config.contains("shops." + shopName + "." + key + ".type"))
|
||||
continue;
|
||||
|
||||
// Now we can "safely" load in the genbucket
|
||||
|
||||
setBucketInSubGUI(inventory, shopName, key);
|
||||
|
||||
}
|
||||
|
||||
player.getOpenInventory().close();
|
||||
player.openInventory(inventory);
|
||||
|
||||
}
|
||||
|
||||
private void setBucketInSubGUI(Inventory inventory, String shopName, String key) {
|
||||
|
||||
FileConfiguration config = EpicBuckets.getInstance().shopFile;
|
||||
|
||||
String name = ChatUtil.colorString(config.getString("shops." + shopName + "." + key + ".name"));
|
||||
|
||||
int price = config.getInt("shops." + shopName + "." + key + ".price");
|
||||
|
||||
Material icon = Material.valueOf(config.getString("shops." + shopName + "." + key + ".icon").toUpperCase());
|
||||
Material type = Material.valueOf(config.getString("shops." + shopName + "." + key + ".type").toUpperCase());
|
||||
|
||||
List<String> lore = ChatUtil.colorList(config.getStringList("shops." + shopName + "." + key + ".description"), type, price);
|
||||
|
||||
int damage = config.getInt("shops." + shopName + "." + key + ".damage");
|
||||
|
||||
int slot = config.getInt("shops." + shopName + "." + key + ".slot");
|
||||
|
||||
inventory.setItem(slot, ItemStackUtil.createItemStack(name, lore, icon, 1, damage, true));
|
||||
|
||||
}
|
||||
|
||||
private void setBucketInMainGUI(Inventory inventory, String path, String key) {
|
||||
|
||||
FileConfiguration config = EpicBuckets.getInstance().getConfig();
|
||||
|
||||
String itemName = config.getString(path + key + ".item.name");
|
||||
|
||||
List<String> itemLore = config.getStringList(path + key + ".item.lore");
|
||||
|
||||
Material m = Material.valueOf(config.getString(path + key + ".item.material").toUpperCase());
|
||||
|
||||
int damage = config.getInt(path + key + ".item.damage");
|
||||
|
||||
int slot = config.getInt(path + key + ".slot");
|
||||
|
||||
ItemStack itemStack = ItemStackUtil.createItemStack(itemName, itemLore, m, 1, damage, true);
|
||||
|
||||
inventory.setItem(slot, itemStack);
|
||||
|
||||
}
|
||||
|
||||
public void openActiveGenbuckets(Player player) {
|
||||
|
||||
Inventory inventory = Bukkit.createInventory(null, 54, "Active genbuckets");
|
||||
|
||||
int i = 0;
|
||||
|
||||
for (UUID uuid : GenbucketManager.activeGenbucketItems.keySet()) {
|
||||
|
||||
inventory.setItem(i, GenbucketManager.activeGenbucketItems.get(uuid));
|
||||
i++;
|
||||
|
||||
if (i == 54)
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
inventory.setItem(53, ItemStackUtil.createItemStack("§a§lNext page", Arrays.asList("§7Current page 1"), Material.ARROW, 1, 0, true));
|
||||
|
||||
player.getOpenInventory().close();
|
||||
|
||||
player.openInventory(inventory);
|
||||
|
||||
}
|
||||
|
||||
public void loadNextInventory(Inventory inventory) {
|
||||
|
||||
int page = Integer.parseInt(ChatUtil.stripColor(inventory.getItem(53).getItemMeta().getLore().get(0).split(" ")[2])) + 1;
|
||||
|
||||
inventory.clear();
|
||||
|
||||
int i = 0;
|
||||
int slot = 0;
|
||||
|
||||
for (UUID uuid : GenbucketManager.activeGenbucketItems.keySet()) {
|
||||
|
||||
i++;
|
||||
|
||||
if (i < 53 * page)
|
||||
continue;
|
||||
|
||||
if (slot > 52)
|
||||
break;
|
||||
|
||||
inventory.setItem(slot, GenbucketManager.activeGenbucketItems.get(uuid));
|
||||
|
||||
slot++;
|
||||
|
||||
}
|
||||
|
||||
inventory.setItem(53, ItemStackUtil.createItemStack("§a§lNext page", Arrays.asList("§7Current page " + page), Material.ARROW, 1, 0, true));
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -1,201 +0,0 @@
|
||||
package com.songoda.epicbuckets.listeners;
|
||||
|
||||
import com.songoda.epicbuckets.EpicBuckets;
|
||||
import com.songoda.epicbuckets.events.GenbucketPlaceEvent;
|
||||
import com.songoda.epicbuckets.genbuckets.GenbucketItem;
|
||||
import com.songoda.epicbuckets.genbuckets.GenbucketManager;
|
||||
import com.songoda.epicbuckets.genbuckets.types.Horizontal;
|
||||
import com.songoda.epicbuckets.genbuckets.types.Infused;
|
||||
import com.songoda.epicbuckets.genbuckets.types.PsuedoVertical;
|
||||
import com.songoda.epicbuckets.genbuckets.types.Vertical;
|
||||
import com.songoda.epicbuckets.util.ChatUtil;
|
||||
import com.songoda.epicbuckets.util.ItemStackUtil;
|
||||
import com.songoda.epicbuckets.util.ServerVersion;
|
||||
import com.songoda.epicbuckets.util.Util;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.player.PlayerBucketEmptyEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* GenbucketPlaceListener created by: SoFocused
|
||||
* Date Created: oktober 05 2018
|
||||
* Time created: 16:06
|
||||
*/
|
||||
public class GenbucketPlaceListener implements Listener {
|
||||
|
||||
private EpicBuckets plugin = EpicBuckets.getInstance();
|
||||
|
||||
// We have to do a double for loop to find the genbucket
|
||||
// don't think this is going to be a big issue but eehhh
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerBucketEmptyEvent(PlayerBucketEmptyEvent event) {
|
||||
|
||||
FileConfiguration config = plugin.shopFile;
|
||||
|
||||
final Player player = event.getPlayer();
|
||||
|
||||
GenbucketItem genbucketItem;
|
||||
|
||||
ItemStack itemStack = player.getInventory().getItem(player.getInventory().getHeldItemSlot());
|
||||
|
||||
if (!itemStack.hasItemMeta())
|
||||
return;
|
||||
|
||||
for (String path : config.getConfigurationSection("shops").getKeys(false)) {
|
||||
|
||||
for (String key : config.getConfigurationSection("shops." + path).getKeys(false)) {
|
||||
|
||||
if (!config.contains("shops." + path + "." + key + ".icon"))
|
||||
continue;
|
||||
|
||||
genbucketItem = new GenbucketItem(path, key);
|
||||
|
||||
Material itemMaterial = itemStack.getType();
|
||||
String itemName = ChatUtil.stripColor(itemStack.getItemMeta().getDisplayName());
|
||||
List<String> itemLore = itemStack.getItemMeta().getLore();
|
||||
|
||||
if (!genbucketItem.getIcon().equals(itemMaterial))
|
||||
continue;
|
||||
|
||||
if (!ChatUtil.stripColor(genbucketItem.getItemName()).equalsIgnoreCase(itemName))
|
||||
continue;
|
||||
|
||||
if (!itemLore.equals(genbucketItem.getItemLore()))
|
||||
continue;
|
||||
|
||||
event.setCancelled(true);
|
||||
|
||||
player.updateInventory();
|
||||
event.getBlockClicked().getRelative(event.getBlockFace()).getState().update();
|
||||
event.getBlockClicked().getState().update();
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onRightClickBlock(PlayerInteractEvent event) {
|
||||
|
||||
if (event.getAction() != Action.RIGHT_CLICK_BLOCK || event.getItem() == null)
|
||||
return;
|
||||
|
||||
if (!event.getItem().hasItemMeta())
|
||||
return;
|
||||
|
||||
final Player player = event.getPlayer();
|
||||
|
||||
Block clickedBlock = event.getClickedBlock();
|
||||
|
||||
FileConfiguration config = plugin.shopFile;
|
||||
|
||||
boolean foundGenbucket = false;
|
||||
|
||||
GenbucketItem genbucketItem = null;
|
||||
|
||||
for (String path : config.getConfigurationSection("shops").getKeys(false)) {
|
||||
|
||||
if (foundGenbucket)
|
||||
break;
|
||||
|
||||
for (String key : config.getConfigurationSection("shops." + path).getKeys(false)) {
|
||||
|
||||
if (!config.contains("shops." + path + "." + key + ".icon"))
|
||||
continue;
|
||||
|
||||
genbucketItem = new GenbucketItem(path, key);
|
||||
|
||||
Material itemMaterial;
|
||||
String itemName;
|
||||
List<String> itemLore;
|
||||
|
||||
try {
|
||||
itemMaterial = event.getItem().getType();
|
||||
itemName = ChatUtil.stripColor(event.getItem().getItemMeta().getDisplayName());
|
||||
itemLore = event.getItem().getItemMeta().getLore();
|
||||
} catch (NullPointerException e) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!genbucketItem.getIcon().equals(itemMaterial))
|
||||
continue;
|
||||
|
||||
if (!ChatUtil.stripColor(genbucketItem.getItemName()).equalsIgnoreCase(itemName))
|
||||
continue;
|
||||
|
||||
if (!itemLore.equals(genbucketItem.getItemLore()))
|
||||
continue;
|
||||
|
||||
foundGenbucket = true;
|
||||
|
||||
event.setCancelled(true);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!foundGenbucket)
|
||||
return;
|
||||
|
||||
if (!player.hasPermission("genbucket.place")) {
|
||||
player.sendMessage(plugin.getLocale().getMessage("event.general.nopermission"));
|
||||
return;
|
||||
}
|
||||
|
||||
if (Util.disableGenbuckets()) {
|
||||
player.sendMessage(plugin.getLocale().getMessage("event.genbucket.disabled"));
|
||||
player.updateInventory();
|
||||
return;
|
||||
}
|
||||
|
||||
switch (genbucketItem.getGenbucketType()) {
|
||||
|
||||
case PSUEDO:
|
||||
new PsuedoVertical(player, clickedBlock.getLocation(), event.getBlockFace(), genbucketItem);
|
||||
break;
|
||||
|
||||
case INFUSED:
|
||||
new Infused(player, clickedBlock.getLocation(), event.getBlockFace(), genbucketItem);
|
||||
break;
|
||||
|
||||
case VERTICAL:
|
||||
new Vertical(player, clickedBlock.getLocation(), event.getBlockFace(), genbucketItem);
|
||||
break;
|
||||
|
||||
case HORIZONTAL:
|
||||
new Horizontal(player, clickedBlock.getLocation(), event.getBlockFace(), genbucketItem);
|
||||
break;
|
||||
|
||||
|
||||
}
|
||||
|
||||
player.updateInventory();
|
||||
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onGenbucketPlace(GenbucketPlaceEvent event) {
|
||||
|
||||
ItemStack item = ItemStackUtil.createItemStack("§7" + event.getGenbucketUUID().toString(), Arrays.asList("", "§7Information:", " §eLeft click: §6Teleport to location", " §eRight click: §6Stop genbucket", " §ePlaced by §6SoFocused", " §eCordinates: §6" + ChatUtil.getCoordinatesFromLocation(event.getLocation()), " §eMaterial: §6" + event.getGenbucketItem().getType(), " §eDamage: §6" + event.getGenbucketItem().getTypeDamage()), Material.valueOf(plugin.isServerVersionAtLeast(ServerVersion.V1_13) ? "GRAY_STAINED_GLASS_PANE" : "STAINED_GLASS_PANE"), 1, 13, true);
|
||||
|
||||
GenbucketManager.activeGenbucketItems.put(event.getGenbucketUUID(), item);
|
||||
GenbucketManager.activeGenbucketLocation.put(event.getGenbucketUUID(), event.getLocation());
|
||||
|
||||
if (!plugin.getConfig().getBoolean("PLACE-UNLIMTED-GENS"))
|
||||
GenbucketManager.setActiveGenBuckets(event.getPlayer(), GenbucketManager.getActiveGenBuckets(event.getPlayer()) + 1);
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -1,417 +0,0 @@
|
||||
package com.songoda.epicbuckets.listeners;
|
||||
|
||||
import com.songoda.epicbuckets.EpicBuckets;
|
||||
import com.songoda.epicbuckets.genbuckets.GenbucketItem;
|
||||
import com.songoda.epicbuckets.genbuckets.GenbucketManager;
|
||||
import com.songoda.epicbuckets.inventories.InventoryManager;
|
||||
import com.songoda.epicbuckets.util.ChatUtil;
|
||||
import org.apache.commons.lang.ArrayUtils;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.WeakHashMap;
|
||||
|
||||
/**
|
||||
* InventoryClickListener created by: SoFocused
|
||||
* Date Created: oktober 03 2018
|
||||
* Time created: 21:15
|
||||
*/
|
||||
public class InventoryClickListener implements Listener {
|
||||
|
||||
private EpicBuckets plugin = EpicBuckets.getInstance();
|
||||
|
||||
private Map<UUID, String> shopMap = new WeakHashMap<>();
|
||||
|
||||
// Main inventory
|
||||
|
||||
@EventHandler
|
||||
public void onClick(InventoryClickEvent event) {
|
||||
|
||||
String inventoryTitle = ChatUtil.stripColor(plugin.getConfig().getString("MENU-ITEMS.inventory-name"));
|
||||
String clickedInventoryTitle = ChatColor.stripColor(event.getInventory().getTitle());
|
||||
|
||||
if (!clickedInventoryTitle.equalsIgnoreCase(inventoryTitle))
|
||||
return;
|
||||
|
||||
if (event.getCurrentItem() == null || event.getCurrentItem().getType().equals(Material.AIR))
|
||||
return;
|
||||
|
||||
if (!event.getCurrentItem().hasItemMeta())
|
||||
return;
|
||||
|
||||
event.setCancelled(true);
|
||||
|
||||
// I'm guessing the fastest way to find it is to check if the
|
||||
// slot is in the config.yml itself?
|
||||
|
||||
int slot = event.getSlot();
|
||||
|
||||
FileConfiguration config = EpicBuckets.getInstance().getConfig();
|
||||
|
||||
Player player = (Player) event.getWhoClicked();
|
||||
|
||||
for (String key : config.getConfigurationSection("MENU-ITEMS").getKeys(false)) {
|
||||
|
||||
// Check if the key has the item category if not just skip
|
||||
|
||||
if (!config.contains("MENU-ITEMS." + key + ".slot"))
|
||||
continue;
|
||||
|
||||
int configSlot = config.getInt("MENU-ITEMS." + key + ".slot");
|
||||
|
||||
if (slot == configSlot) {
|
||||
|
||||
// Now we know that the slot they clicked
|
||||
// was found in the config!
|
||||
|
||||
String shopName = config.getString("MENU-ITEMS." + key + ".shop");
|
||||
|
||||
InventoryManager inventoryManager = new InventoryManager();
|
||||
|
||||
inventoryManager.loadSubInventory(player, shopName);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Sub inventories
|
||||
|
||||
@EventHandler
|
||||
public void onClickSubInventory(InventoryClickEvent event) {
|
||||
|
||||
FileConfiguration config = plugin.shopFile;
|
||||
|
||||
String clickedInventory = ChatUtil.stripColor(event.getInventory().getTitle());
|
||||
|
||||
boolean foundInventory = false;
|
||||
|
||||
String shopName = "";
|
||||
|
||||
ConfigurationSection cs = config.getConfigurationSection("shops");
|
||||
|
||||
if (cs != null) {
|
||||
for (String key : config.getConfigurationSection("shops").getKeys(false)) {
|
||||
|
||||
String inventoryName = ChatUtil.stripColor(config.getString("shops." + key + ".inventory-name"));
|
||||
|
||||
if (!clickedInventory.equalsIgnoreCase(inventoryName))
|
||||
continue;
|
||||
|
||||
foundInventory = true;
|
||||
|
||||
shopName = key;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!foundInventory || shopName.equalsIgnoreCase(""))
|
||||
return;
|
||||
|
||||
event.setCancelled(true);
|
||||
|
||||
Player player = (Player) event.getWhoClicked();
|
||||
|
||||
int slot = event.getSlot();
|
||||
|
||||
int goBackButton = config.getInt("shops." + shopName + ".goBackButton");
|
||||
|
||||
boolean useBackButton = config.getBoolean("use-back-buttons");
|
||||
|
||||
// Player clicked on the back button
|
||||
if (useBackButton && slot == goBackButton) {
|
||||
|
||||
player.getOpenInventory().close();
|
||||
|
||||
player.performCommand("genbucket");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// They did not click on the back button so we
|
||||
// have to check if they're trying to purchase
|
||||
// a genbucket
|
||||
|
||||
// Loop thru all slots in the shops config to see
|
||||
// if it equals with a genbucket
|
||||
|
||||
// Left click to buy or right click to open stacked shop
|
||||
|
||||
for (String key : config.getConfigurationSection("shops." + shopName).getKeys(false)) {
|
||||
|
||||
if (!config.contains("shops." + shopName + "." + key + ".slot"))
|
||||
continue;
|
||||
|
||||
int configSlot = config.getInt("shops." + shopName + "." + key + ".slot");
|
||||
|
||||
if (configSlot != slot)
|
||||
continue;
|
||||
|
||||
|
||||
// I can init & declare because I know I have the
|
||||
// necessary data
|
||||
|
||||
GenbucketItem genbucketItem = new GenbucketItem(shopName, key);
|
||||
|
||||
// Buy a singular genbucket
|
||||
if (event.getClick().equals(ClickType.LEFT)) {
|
||||
|
||||
purchaseGenbucket(player, 1, genbucketItem);
|
||||
|
||||
} else {
|
||||
|
||||
// Open the multiple gui shop
|
||||
|
||||
final boolean infinite_gens = plugin.getConfig().getBoolean("INFINITE-USE");
|
||||
|
||||
if (infinite_gens) {
|
||||
return;
|
||||
}
|
||||
|
||||
shopMap.put(player.getUniqueId(), shopName + ":" + key);
|
||||
|
||||
GenbucketManager genbucketManager = new GenbucketManager();
|
||||
|
||||
genbucketManager.openBulkShop(player, genbucketItem);
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onClickBulkShop(InventoryClickEvent event) {
|
||||
|
||||
FileConfiguration config = EpicBuckets.getInstance().getConfig();
|
||||
|
||||
String inventoryName = ChatUtil.stripColor(config.getString("BULK-SHOP-INVENTORY.inventory-name").replace("{player}", event.getWhoClicked().getName()));
|
||||
String clickedInventoryName = ChatUtil.stripColor(event.getInventory().getTitle());
|
||||
|
||||
if (!inventoryName.equalsIgnoreCase(clickedInventoryName))
|
||||
return;
|
||||
|
||||
if (event.getCurrentItem() == null || event.getCurrentItem().getType().equals(Material.AIR))
|
||||
return;
|
||||
|
||||
if (!event.getCurrentItem().hasItemMeta())
|
||||
return;
|
||||
|
||||
event.setCancelled(true);
|
||||
|
||||
// Lets first check if they're trying to increase/decrease the amount
|
||||
|
||||
Player player = (Player) event.getWhoClicked();
|
||||
|
||||
// We have to case this to avoid NPE
|
||||
|
||||
if (!shopMap.containsKey(player.getUniqueId())) {
|
||||
player.getOpenInventory().close();
|
||||
return;
|
||||
}
|
||||
|
||||
int clickedSlot = event.getSlot();
|
||||
|
||||
int returnBackItemSlot = config.getInt("BULK-SHOP-INVENTORY.return-back-slot");
|
||||
|
||||
int purchaseItemSlot = config.getInt("BULK-SHOP-INVENTORY.purchase-item.slot");
|
||||
|
||||
if (ArrayUtils.contains(modifySlotList(), clickedSlot)) {
|
||||
|
||||
modifyValue(event.getInventory(), player, event.getCurrentItem());
|
||||
|
||||
} else if (clickedSlot == returnBackItemSlot) {
|
||||
|
||||
player.getOpenInventory().close();
|
||||
|
||||
String[] genbucketDetails = shopMap.get(player.getUniqueId()).split(":");
|
||||
|
||||
InventoryManager inventoryManager = new InventoryManager();
|
||||
|
||||
inventoryManager.loadSubInventory(player, genbucketDetails[0]);
|
||||
|
||||
} else if (clickedSlot == purchaseItemSlot) {
|
||||
|
||||
String[] genbucketDetails = shopMap.get(player.getUniqueId()).split(":");
|
||||
|
||||
GenbucketItem genbucketItem = new GenbucketItem(genbucketDetails[0], genbucketDetails[1]);
|
||||
|
||||
purchaseGenbucket(player, GenbucketManager.getPlayerInteger(player), genbucketItem);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onClickActGbInventory(InventoryClickEvent event) {
|
||||
|
||||
|
||||
if (!event.getInventory().getTitle().equalsIgnoreCase("Active genbuckets"))
|
||||
return;
|
||||
|
||||
if (event.getCurrentItem() == null || event.getCurrentItem().getType().equals(Material.AIR))
|
||||
return;
|
||||
|
||||
if (!event.getCurrentItem().hasItemMeta())
|
||||
return;
|
||||
|
||||
event.setCancelled(true);
|
||||
|
||||
if (event.getSlot() == 53) {
|
||||
|
||||
InventoryManager inventoryManager = new InventoryManager();
|
||||
|
||||
inventoryManager.loadNextInventory(event.getInventory());
|
||||
return;
|
||||
}
|
||||
|
||||
UUID uuid = UUID.fromString(ChatColor.stripColor(event.getCurrentItem().getItemMeta().getDisplayName()));
|
||||
|
||||
Player player = (Player) event.getWhoClicked();
|
||||
|
||||
ClickType clickType = event.getClick();
|
||||
|
||||
if (clickType.equals(ClickType.LEFT)) {
|
||||
|
||||
// Teleport
|
||||
|
||||
player.teleport(GenbucketManager.activeGenbucketLocation.get(uuid).clone().add(0, 50, 0));
|
||||
player.sendMessage("§a§lTeleporting...");
|
||||
|
||||
} else {
|
||||
|
||||
GenbucketManager.activeGenbucketItems.remove(uuid);
|
||||
event.getInventory().clear(event.getSlot());
|
||||
player.sendMessage("§c§lStopping...");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void modifyValue(Inventory inventory, Player player, ItemStack itemStack) {
|
||||
|
||||
boolean addition = ChatUtil.stripColor(itemStack.getItemMeta().getDisplayName().split(" ")[0]).equalsIgnoreCase("+");
|
||||
|
||||
int value = Integer.parseInt(itemStack.getItemMeta().getDisplayName().split(" ")[1]);
|
||||
|
||||
int oldAmount = GenbucketManager.getPlayerInteger(player);
|
||||
|
||||
int newAmount;
|
||||
|
||||
if (addition) {
|
||||
|
||||
newAmount = oldAmount + value;
|
||||
|
||||
if (newAmount > 64)
|
||||
newAmount = newAmount - (newAmount - 64);
|
||||
|
||||
GenbucketManager.setPlayerInteger(player, newAmount);
|
||||
|
||||
} else {
|
||||
|
||||
newAmount = oldAmount - value;
|
||||
|
||||
if (newAmount == 0)
|
||||
newAmount = 1;
|
||||
else if (newAmount < 0)
|
||||
newAmount = oldAmount - (oldAmount - 1);
|
||||
|
||||
GenbucketManager.setPlayerInteger(player, newAmount);
|
||||
|
||||
}
|
||||
|
||||
FileConfiguration config = plugin.getConfig();
|
||||
|
||||
int mainItemSlot = config.getInt("BULK-SHOP-INVENTORY.plugin-item-slot");
|
||||
|
||||
inventory.getItem(mainItemSlot).setAmount(GenbucketManager.getPlayerInteger(player));
|
||||
|
||||
player.updateInventory();
|
||||
|
||||
}
|
||||
|
||||
private int[] modifySlotList() {
|
||||
|
||||
FileConfiguration config = plugin.getConfig();
|
||||
|
||||
int[] modifyValueSlots = new int[6];
|
||||
|
||||
for (int i = 0; i < config.getString("BULK-SHOP-INVENTORY.increase-item.slots").split(",").length; i++)
|
||||
modifyValueSlots[i] = Integer.parseInt(config.getString("BULK-SHOP-INVENTORY.increase-item.slots").split(",")[i]);
|
||||
|
||||
int x = 3;
|
||||
|
||||
for (int i = 0; i < config.getString("BULK-SHOP-INVENTORY.decrease-item.slots").split(",").length; i++) {
|
||||
|
||||
if (modifyValueSlots[x] == 0)
|
||||
modifyValueSlots[x] = Integer.parseInt(config.getString("BULK-SHOP-INVENTORY.decrease-item.slots").split(",")[i]);
|
||||
|
||||
x++;
|
||||
|
||||
}
|
||||
|
||||
return modifyValueSlots;
|
||||
|
||||
}
|
||||
|
||||
private void purchaseGenbucket(Player player, int amount, GenbucketItem genbucketItem) {
|
||||
|
||||
if (player.getInventory().firstEmpty() == -1) {
|
||||
|
||||
player.sendMessage(EpicBuckets.getInstance().getLocale().getMessage("event.purchase.inventoryfull"));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
int price = genbucketItem.getPrice() * amount;
|
||||
|
||||
double playerBalance = plugin.getBalance(player);
|
||||
|
||||
final boolean infinite_gens = plugin.getConfig().getBoolean("INFINITE-USE");
|
||||
|
||||
if (infinite_gens) {
|
||||
player.getInventory().addItem(genbucketItem.getGenbucketItem());
|
||||
return;
|
||||
}
|
||||
|
||||
if (playerBalance >= price) {
|
||||
|
||||
// they have enough money
|
||||
|
||||
plugin.withdrawBalance(player, price, true);
|
||||
|
||||
genbucketItem.setAmount(amount);
|
||||
|
||||
player.getInventory().addItem(genbucketItem.getGenbucketItem());
|
||||
|
||||
} else {
|
||||
|
||||
// they have less money
|
||||
|
||||
player.sendMessage(plugin.getLocale().getMessage("interface.withdrawl.success", String.valueOf((playerBalance - price) * -1)));
|
||||
|
||||
}
|
||||
|
||||
boolean closeGUI = plugin.getConfig().getBoolean("CLOSE-GUI-AFTER-PURCHASE");
|
||||
|
||||
if (closeGUI)
|
||||
player.getOpenInventory().close();
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,36 +0,0 @@
|
||||
package com.songoda.epicbuckets.regionhandlers;
|
||||
|
||||
import com.songoda.epicbuckets.EpicBuckets;
|
||||
import me.markeh.factionsframework.entities.FPlayers;
|
||||
import me.markeh.factionsframework.entities.Faction;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
/**
|
||||
* FactionsUUID created by: SoFocused
|
||||
* Date Created: oktober 05 2018
|
||||
* Time created: 18:00
|
||||
*/
|
||||
public class RegionFactions {
|
||||
|
||||
public static boolean canBuild(Player player, Location location) {
|
||||
|
||||
boolean isFactionsUUIDEnabled = EpicBuckets.getInstance().getConfig().getBoolean("FACTIONS-SUPPORT");
|
||||
|
||||
if (!isFactionsUUIDEnabled)
|
||||
return true;
|
||||
|
||||
|
||||
Faction factionAt = me.markeh.factionsframework.entities.Factions.getFactionAt(location);
|
||||
|
||||
boolean enableGensInWilderness = EpicBuckets.getInstance().getConfig().getBoolean("ENABLE-GENS-IN-WILDERNESS");
|
||||
|
||||
if (factionAt.isNone()) {
|
||||
return enableGensInWilderness;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
package com.songoda.epicbuckets.regionhandlers;
|
||||
|
||||
import com.songoda.epicbuckets.EpicBuckets;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
/**
|
||||
* GriefPrevention created by: SoFocused
|
||||
* Date Created: oktober 05 2018
|
||||
* Time created: 18:00
|
||||
*/
|
||||
public class RegionGriefPrevention {
|
||||
|
||||
public static me.ryanhamshire.GriefPrevention.GriefPrevention getGriefPrevention() {
|
||||
org.bukkit.plugin.Plugin pl = EpicBuckets.getInstance().getServer().getPluginManager().getPlugin("GriefPrevention");
|
||||
|
||||
if (pl == null) {
|
||||
EpicBuckets.getInstance().getLogger().warning("GriefPrevention support is enabled but cannot find the plugin");
|
||||
return null;
|
||||
}
|
||||
|
||||
return (me.ryanhamshire.GriefPrevention.GriefPrevention) pl;
|
||||
|
||||
}
|
||||
|
||||
public static boolean canBuild(Player player, Location location) {
|
||||
|
||||
boolean isGriefPreventionEnabled = EpicBuckets.getInstance().getConfig().getBoolean("griefprevention-support");
|
||||
|
||||
// If we don't check for griefprevention, just let them place
|
||||
if (!isGriefPreventionEnabled)
|
||||
return true;
|
||||
|
||||
return getGriefPrevention().allowBreak(player, location.getBlock(), location) != null;
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
package com.songoda.epicbuckets.regionhandlers;
|
||||
|
||||
import com.songoda.epicbuckets.EpicBuckets;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.WorldBorder;
|
||||
|
||||
/**
|
||||
* WBorder created by: SoFocused
|
||||
* Date Created: oktober 05 2018
|
||||
* Time created: 22:06
|
||||
*/
|
||||
public class RegionWBorder {
|
||||
|
||||
public static boolean isOutsideOfBorder(Location loc) {
|
||||
|
||||
if (EpicBuckets.getInstance().getServer().getVersion().contains("1.7"))
|
||||
return true;
|
||||
|
||||
WorldBorder border = loc.getWorld().getWorldBorder();
|
||||
double size = border.getSize() / 2;
|
||||
Location center = border.getCenter();
|
||||
double x = loc.getX() - center.getX(), z = loc.getZ() - center.getZ();
|
||||
return ((x > size || (-x) > size) || (z > size || (-z) > size));
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
package com.songoda.epicbuckets.regionhandlers;
|
||||
|
||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||
import com.sk89q.worldguard.protection.ApplicableRegionSet;
|
||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
||||
import com.songoda.epicbuckets.EpicBuckets;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
/**
|
||||
* WorldGuard created by: SoFocused
|
||||
* Date Created: oktober 05 2018
|
||||
* Time created: 18:00
|
||||
*/
|
||||
public class RegionWorldGuard {
|
||||
|
||||
public static WorldGuardPlugin getWorldGuard() {
|
||||
// WorldGuard may not be loaded
|
||||
Plugin plugin = EpicBuckets.getInstance().getServer().getPluginManager().getPlugin("WorldGuard");
|
||||
|
||||
if (plugin == null || !(plugin instanceof WorldGuardPlugin)) {
|
||||
return null; // Maybe you want throw an exception instead
|
||||
}
|
||||
return (WorldGuardPlugin) plugin;
|
||||
}
|
||||
|
||||
public static boolean canBuild(Player player, Location loc) {
|
||||
|
||||
boolean isWorldGuardEnabled = EpicBuckets.getInstance().getConfig().getBoolean("WORLDGUARD-SUPPORT");
|
||||
|
||||
if (!isWorldGuardEnabled)
|
||||
return true;
|
||||
|
||||
RegionManager regionManager = getWorldGuard().getRegionManager(player.getLocation().getWorld());
|
||||
|
||||
ApplicableRegionSet set = regionManager.getApplicableRegions(loc);
|
||||
|
||||
for (ProtectedRegion region : set) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
@ -1,93 +0,0 @@
|
||||
package com.songoda.epicbuckets.util;
|
||||
|
||||
import com.songoda.epicbuckets.EpicBuckets;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.StringJoiner;
|
||||
|
||||
/**
|
||||
* ChatUtil created by: SoFocused
|
||||
* Date Created: oktober 02 2018
|
||||
* Time created: 22:54
|
||||
*/
|
||||
public class ChatUtil {
|
||||
|
||||
public static String colorPrefix(String msg) {
|
||||
return ChatColor.translateAlternateColorCodes('&', getPrefix() + msg);
|
||||
}
|
||||
|
||||
public static String colorString(String msg) {
|
||||
return ChatColor.translateAlternateColorCodes('&', msg);
|
||||
|
||||
}
|
||||
|
||||
public static List<String> colorList(List<String> list) {
|
||||
|
||||
List<String> newList = new ArrayList<>();
|
||||
|
||||
list.forEach(string -> newList.add(colorString(string)));
|
||||
|
||||
return newList;
|
||||
|
||||
}
|
||||
|
||||
public static List<String> colorList(List<String> list, Material material, int price) {
|
||||
|
||||
List<String> newList = new ArrayList<>();
|
||||
|
||||
list.forEach(string -> newList.add(colorString(string.replace("{material}", properMaterialName(material).toLowerCase()).replace("{price}", String.valueOf(price)))));
|
||||
|
||||
return newList;
|
||||
|
||||
}
|
||||
|
||||
public static String stripColor(String input) {
|
||||
return ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', input));
|
||||
}
|
||||
|
||||
public static String getPrefix() {
|
||||
return EpicBuckets.getInstance().getLocale().getMessage("general.nametag.prefix").equals("none") ? "" : EpicBuckets.getInstance().getLocale().getMessage("general.nametag.prefix") + " ";
|
||||
}
|
||||
|
||||
public static void debugMSG(Player player, Object... args) {
|
||||
|
||||
StringJoiner stringBuilder = new StringJoiner("§8:");
|
||||
|
||||
for (int i = 0; i < args.length; i++)
|
||||
stringBuilder.add("§a" + args[i].toString());
|
||||
|
||||
|
||||
player.sendMessage(stringBuilder.toString());
|
||||
|
||||
}
|
||||
|
||||
public static String getCoordinatesFromLocation(Location l) {
|
||||
return "X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ();
|
||||
}
|
||||
|
||||
public static String properMaterialName(Material material) {
|
||||
|
||||
String materialName;
|
||||
|
||||
if (material.name().split("_").length > 1) {
|
||||
|
||||
StringJoiner stringJoiner = new StringJoiner(" ");
|
||||
|
||||
for (String str : material.name().split("_"))
|
||||
stringJoiner.add(str);
|
||||
|
||||
materialName = stringJoiner.toString();
|
||||
} else
|
||||
materialName = material.name();
|
||||
|
||||
return materialName;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,63 +0,0 @@
|
||||
package com.songoda.epicbuckets.util;
|
||||
|
||||
import com.songoda.epicbuckets.EpicBuckets;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* InventoryUtil created by: SoFocused
|
||||
* Date Created: oktober 03 2018
|
||||
* Time created: 16:25
|
||||
*/
|
||||
public class InventoryUtil {
|
||||
|
||||
public static EpicBuckets plugin = EpicBuckets.getInstance();
|
||||
|
||||
|
||||
public static ItemStack getFillItemStack() {
|
||||
|
||||
FileConfiguration config = plugin.getConfig();
|
||||
|
||||
Material m = Material.valueOf(config.getString("FILL-ITEM.material").toUpperCase());
|
||||
|
||||
int damage = config.getInt("FILL-ITEM.damage");
|
||||
|
||||
return ItemStackUtil.createItemStack(config.getString("FILL-ITEM.name"), Arrays.asList("&f"), m, 1, damage, false);
|
||||
|
||||
}
|
||||
|
||||
private static ItemStack getBackItemStack() {
|
||||
|
||||
FileConfiguration config = plugin.getConfig();
|
||||
|
||||
Material m = Material.valueOf(config.getString("BACK-BUTTON.material").toUpperCase());
|
||||
|
||||
int damage = config.getInt("BACK-BUTTON.damage");
|
||||
|
||||
return ItemStackUtil.createItemStack(config.getString("BACK-BUTTON.name"), Arrays.asList("&f"), m, 1, damage, false);
|
||||
|
||||
}
|
||||
|
||||
public static void fillInventory(Inventory inventory, boolean fillInventory) {
|
||||
|
||||
if (!fillInventory)
|
||||
return;
|
||||
|
||||
for (int i = 0; i < inventory.getSize(); i++)
|
||||
inventory.setItem(i, getFillItemStack());
|
||||
|
||||
}
|
||||
|
||||
public static void setBackButton(Inventory inventory, int slot, boolean setItem) {
|
||||
|
||||
if (setItem)
|
||||
inventory.setItem(slot, getBackItemStack());
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,43 +0,0 @@
|
||||
package com.songoda.epicbuckets.util;
|
||||
|
||||
import com.songoda.epicbuckets.EpicBuckets;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.inventory.ItemFlag;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* ItemStackUtil created by: SoFocused
|
||||
* Date Created: oktober 03 2018
|
||||
* Time created: 16:26
|
||||
*/
|
||||
public class ItemStackUtil {
|
||||
|
||||
public static ItemStack createItemStack(String name, List<String> lore, Material m, int amount, int i, boolean enchantItem) {
|
||||
ItemStack itemStack = new ItemStack(m, amount, (short) i);
|
||||
ItemMeta itemMeta = itemStack.getItemMeta();
|
||||
|
||||
if (name != null)
|
||||
itemMeta.setDisplayName(ChatUtil.colorString(name));
|
||||
if (lore != null)
|
||||
itemMeta.setLore(ChatUtil.colorList(lore));
|
||||
|
||||
if (enchantItem) {
|
||||
|
||||
itemMeta.addEnchant(Enchantment.DURABILITY, 1, false);
|
||||
|
||||
if (!EpicBuckets.getInstance().getServer().getVersion().contains("1.7"))
|
||||
itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
|
||||
|
||||
}
|
||||
|
||||
itemStack.setItemMeta(itemMeta);
|
||||
|
||||
return itemStack;
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
package com.songoda.epicbuckets.util;
|
||||
|
||||
public enum ServerVersion {
|
||||
|
||||
UNKNOWN("unknown_server_version"),
|
||||
V1_7("org.bukkit.craftbukkit.v1_7"),
|
||||
V1_8("org.bukkit.craftbukkit.v1_8"),
|
||||
V1_9("org.bukkit.craftbukkit.v1_9"),
|
||||
V1_10("org.bukkit.craftbukkit.v1_10"),
|
||||
V1_11("org.bukkit.craftbukkit.v1_11"),
|
||||
V1_12("org.bukkit.craftbukkit.v1_12"),
|
||||
V1_13("org.bukkit.craftbukkit.v1_13");
|
||||
|
||||
|
||||
private final String packagePrefix;
|
||||
|
||||
private ServerVersion(String packagePrefix) {
|
||||
this.packagePrefix = packagePrefix;
|
||||
}
|
||||
|
||||
public static ServerVersion fromPackageName(String packageName) {
|
||||
for (ServerVersion version : values())
|
||||
if (packageName.startsWith(version.packagePrefix)) return version;
|
||||
return ServerVersion.UNKNOWN;
|
||||
}
|
||||
}
|
@ -1,28 +0,0 @@
|
||||
package com.songoda.epicbuckets.util;
|
||||
|
||||
import com.songoda.epicbuckets.EpicBuckets;
|
||||
|
||||
/**
|
||||
* Util created by: SoFocused
|
||||
* Date Created: oktober 06 2018
|
||||
* Time created: 12:24
|
||||
*/
|
||||
public class Util {
|
||||
|
||||
public static boolean disableGenbuckets() {
|
||||
return EpicBuckets.getInstance().getConfig().getBoolean("DISABLE-GENBUCKETS");
|
||||
}
|
||||
|
||||
public static boolean useSpongeSupport() {
|
||||
return EpicBuckets.getInstance().getConfig().getBoolean("USE-SPONGE-SUPPORT");
|
||||
}
|
||||
|
||||
public static boolean enchantGenbuckets() {
|
||||
return EpicBuckets.getInstance().getConfig().getBoolean("ENCHANT");
|
||||
}
|
||||
|
||||
public static boolean infiniteGenbuckets() {
|
||||
return EpicBuckets.getInstance().getConfig().getBoolean("INFINITE-USE");
|
||||
}
|
||||
|
||||
}
|
@ -4,7 +4,7 @@
|
||||
###############################################
|
||||
|
||||
|
||||
# All config files can be found on
|
||||
# All files files can be found on
|
||||
# https://www.spigotmc.org/resources/ezbucket-1-7-1-12-region-support-gui-horizontal-vertical-and-infused-gens-genbucket.50944/
|
||||
|
||||
FACTIONS-SUPPORT: false # MassiveCore and Factions/FactionsUUID/SavageFactions is needed
|
||||
|
@ -4,7 +4,7 @@ shops:
|
||||
|
||||
vertical:
|
||||
|
||||
goBackButton: 31 # back button will display if enabled in config.yml
|
||||
goBackButton: 31 # back button will display if enabled in files.yml
|
||||
|
||||
trait: "VERTICAL" # Which genbucket type does this shop have?
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user