Backed up EpicBuckets + started recode

This commit is contained in:
Niels Vergucht 2018-11-30 00:04:47 +01:00
parent cb385f64c3
commit 29da1dee91
38 changed files with 273 additions and 3745 deletions

View 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>

View File

@ -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>

View 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>

View 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>

View 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
View 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>

View File

@ -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>

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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)));
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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);
}
}

View 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");
}
}

View 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;
}
}

View File

@ -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();
}
}

View File

@ -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;
}
}

View File

@ -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);
}
}

View File

@ -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;
}
}
}

View File

@ -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;
}
}

View File

@ -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);
}
}

View File

@ -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;
}
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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));
}
}

View File

@ -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);
}
}

View File

@ -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();
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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));
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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());
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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");
}
}

View File

@ -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

View File

@ -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?