Compare commits

..

12 Commits
6.5.1 ... 6.6.0

Author SHA1 Message Date
Auxilor
d028cf5bf3 Added ShopGuiPlus to softdepend 2021-08-29 16:35:16 +01:00
Auxilor
fdd1581ce3 Removed redundant code 2021-08-29 16:34:26 +01:00
Auxilor
3d07e10543 Fixed ItemFlag application 2021-08-29 16:33:31 +01:00
Auxilor
c851e35347 Added ItemFlags to FastItemStack 2021-08-29 16:32:42 +01:00
Auxilor
4cbb33b1fd More code cleanup 2021-08-29 16:03:14 +01:00
Auxilor
2ff1458772 Fixed config wrappers missing methods 2021-08-29 15:56:39 +01:00
Auxilor
e71ad9f034 Updated to 6.6.0 2021-08-29 15:51:49 +01:00
Auxilor
196a651ab3 Added ShopGuiPlus integration 2021-08-29 15:51:38 +01:00
Auxilor
253a8c24ad Improved kotlin codestyle conventions 2021-08-29 15:38:27 +01:00
Auxilor
ac265d0260 Added more formatting options 2021-08-29 15:30:25 +01:00
Auxilor
ad861b10bb Updated to 6.5.2 2021-08-23 17:14:41 +01:00
Auxilor
db5b7f89f6 Fixed null placeholder bug and improved config loading 2021-08-23 17:14:23 +01:00
41 changed files with 613 additions and 269 deletions

View File

@@ -1,5 +1,6 @@
package com.willfp.eco.core.config.interfaces; package com.willfp.eco.core.config.interfaces;
import com.willfp.eco.util.StringUtils;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@@ -165,7 +166,9 @@ public interface Config extends Cloneable {
* @return The found value, or an empty string if not found. * @return The found value, or an empty string if not found.
*/ */
@NotNull @NotNull
String getString(@NotNull String path); default String getString(@NotNull String path) {
return getString(path, true);
}
/** /**
* Get a string from config. * Get a string from config.
@@ -175,8 +178,36 @@ public interface Config extends Cloneable {
* @return The found value, or an empty string if not found. * @return The found value, or an empty string if not found.
*/ */
@NotNull @NotNull
default String getString(@NotNull String path,
boolean format) {
return this.getString(path, format, StringUtils.FormatOption.WITH_PLACEHOLDERS);
}
/**
* Get a string from config.
*
* @param path The key to fetch the value from.
* @param option The format option.
* @return The found value, or an empty string if not found.
*/
@NotNull
default String getString(@NotNull String path,
@NotNull final StringUtils.FormatOption option) {
return this.getString(path, true, option);
}
/**
* Get a string from config.
*
* @param path The key to fetch the value from.
* @param format If the string should be formatted.
* @param option The format option.
* @return The found value, or an empty string if not found.
*/
@NotNull
String getString(@NotNull String path, String getString(@NotNull String path,
boolean format); boolean format,
@NotNull StringUtils.FormatOption option);
/** /**
* Get a string from config. * Get a string from config.
@@ -185,7 +216,9 @@ public interface Config extends Cloneable {
* @return The found value, or null if not found. * @return The found value, or null if not found.
*/ */
@Nullable @Nullable
String getStringOrNull(@NotNull String path); default String getStringOrNull(@NotNull String path) {
return getStringOrNull(path, true);
}
/** /**
* Get a string from config. * Get a string from config.
@@ -195,8 +228,36 @@ public interface Config extends Cloneable {
* @return The found value, or null if not found. * @return The found value, or null if not found.
*/ */
@Nullable @Nullable
default String getStringOrNull(@NotNull String path,
boolean format) {
return this.getStringOrNull(path, format, StringUtils.FormatOption.WITH_PLACEHOLDERS);
}
/**
* Get a string from config.
*
* @param path The key to fetch the value from.
* @param option The format option.
* @return The found value, or null if not found.
*/
@Nullable
default String getStringOrNull(@NotNull String path,
@NotNull StringUtils.FormatOption option) {
return this.getStringOrNull(path, true, option);
}
/**
* Get a string from config.
*
* @param path The key to fetch the value from.
* @param format If the string should be formatted.
* @param option The format option.
* @return The found value, or null if not found.
*/
@Nullable
String getStringOrNull(@NotNull String path, String getStringOrNull(@NotNull String path,
boolean format); boolean format,
@NotNull StringUtils.FormatOption option);
/** /**
* Get a list of strings from config. * Get a list of strings from config.
@@ -207,7 +268,9 @@ public interface Config extends Cloneable {
* @return The found value, or a blank {@link java.util.ArrayList} if not found. * @return The found value, or a blank {@link java.util.ArrayList} if not found.
*/ */
@NotNull @NotNull
List<String> getStrings(@NotNull String path); default List<String> getStrings(@NotNull String path) {
return getStrings(path, true);
}
/** /**
* Get a list of strings from config. * Get a list of strings from config.
@@ -217,8 +280,36 @@ public interface Config extends Cloneable {
* @return The found value, or a blank {@link java.util.ArrayList} if not found. * @return The found value, or a blank {@link java.util.ArrayList} if not found.
*/ */
@NotNull @NotNull
default List<String> getStrings(@NotNull String path,
boolean format) {
return this.getStrings(path, format, StringUtils.FormatOption.WITH_PLACEHOLDERS);
}
/**
* Get a list of strings from config.
*
* @param path The key to fetch the value from.
* @param option The format option.
* @return The found value, or a blank {@link java.util.ArrayList} if not found.
*/
@Nullable
default List<String> getStrings(@NotNull String path,
@NotNull StringUtils.FormatOption option) {
return getStrings(path, true, option);
}
/**
* Get a list of strings from config.
*
* @param path The key to fetch the value from.
* @param format If the strings should be formatted.
* @param option The option.
* @return The found value, or a blank {@link java.util.ArrayList} if not found.
*/
@NotNull
List<String> getStrings(@NotNull String path, List<String> getStrings(@NotNull String path,
boolean format); boolean format,
@NotNull StringUtils.FormatOption option);
/** /**
* Get a list of strings from config. * Get a list of strings from config.
@@ -227,7 +318,9 @@ public interface Config extends Cloneable {
* @return The found value, or null if not found. * @return The found value, or null if not found.
*/ */
@Nullable @Nullable
List<String> getStringsOrNull(@NotNull String path); default List<String> getStringsOrNull(@NotNull String path) {
return getStringsOrNull(path, true);
}
/** /**
* Get a list of strings from config. * Get a list of strings from config.
@@ -237,8 +330,36 @@ public interface Config extends Cloneable {
* @return The found value, or null if not found. * @return The found value, or null if not found.
*/ */
@Nullable @Nullable
default List<String> getStringsOrNull(@NotNull String path,
boolean format) {
return getStringsOrNull(path, format, StringUtils.FormatOption.WITH_PLACEHOLDERS);
}
/**
* Get a list of strings from config.
*
* @param path The key to fetch the value from.
* @param option The format option.
* @return The found value, or null if not found.
*/
@Nullable
default List<String> getStringsOrNull(@NotNull String path,
@NotNull StringUtils.FormatOption option) {
return getStringsOrNull(path, true, option);
}
/**
* Get a list of strings from config.
*
* @param path The key to fetch the value from.
* @param format If the strings should be formatted.
* @param option The format option.
* @return The found value, or null if not found.
*/
@Nullable
List<String> getStringsOrNull(@NotNull String path, List<String> getStringsOrNull(@NotNull String path,
boolean format); boolean format,
@NotNull StringUtils.FormatOption option);
/** /**
* Get a decimal from config. * Get a decimal from config.

View File

@@ -1,6 +1,7 @@
package com.willfp.eco.core.config.wrapper; package com.willfp.eco.core.config.wrapper;
import com.willfp.eco.core.config.interfaces.Config; import com.willfp.eco.core.config.interfaces.Config;
import com.willfp.eco.util.StringUtils;
import lombok.Getter; import lombok.Getter;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@@ -125,48 +126,33 @@ public abstract class ConfigWrapper<T extends Config> implements Config {
return handle.getBoolsOrNull(path); return handle.getBoolsOrNull(path);
} }
@Override
public @NotNull String getString(@NotNull final String path) {
return handle.getString(path);
}
@Override @Override
public @NotNull String getString(@NotNull final String path, public @NotNull String getString(@NotNull final String path,
final boolean format) { final boolean format,
return handle.getString(path, format); @NotNull final StringUtils.FormatOption option) {
} return handle.getString(path, format, option);
@Override
public @Nullable String getStringOrNull(@NotNull final String path) {
return handle.getStringOrNull(path);
} }
@Override @Override
public @Nullable String getStringOrNull(@NotNull final String path, public @Nullable String getStringOrNull(@NotNull final String path,
final boolean format) { final boolean format,
return handle.getStringOrNull(path, format); @NotNull final StringUtils.FormatOption option) {
} return handle.getStringOrNull(path, format, option);
@Override
public @NotNull List<String> getStrings(@NotNull final String path) {
return handle.getStrings(path);
} }
@Override @Override
public @NotNull List<String> getStrings(@NotNull final String path, public @NotNull List<String> getStrings(@NotNull final String path,
final boolean format) { final boolean format,
return handle.getStrings(path, format); @NotNull final StringUtils.FormatOption option) {
} return handle.getStrings(path, format, option);
@Override
public @Nullable List<String> getStringsOrNull(@NotNull final String path) {
return handle.getStringsOrNull(path);
} }
@Override @Override
public @Nullable List<String> getStringsOrNull(@NotNull final String path, public @Nullable List<String> getStringsOrNull(@NotNull final String path,
final boolean format) { final boolean format,
return handle.getStringsOrNull(path, format); @NotNull final StringUtils.FormatOption option) {
return handle.getStringsOrNull(path, format, option);
} }
@Override @Override

View File

@@ -3,6 +3,7 @@ package com.willfp.eco.core.fast;
import com.willfp.eco.core.Eco; import com.willfp.eco.core.Eco;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment; import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@@ -10,6 +11,7 @@ import org.jetbrains.annotations.Nullable;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Set;
/** /**
* FastItemStack contains methods to modify and read items faster than in default bukkit. * FastItemStack contains methods to modify and read items faster than in default bukkit.
@@ -57,11 +59,41 @@ public interface FastItemStack {
/** /**
* Get the rework penalty. * Get the rework penalty.
*. * .
*
* @return The rework penalty found on the item. * @return The rework penalty found on the item.
*/ */
int getRepairCost(); int getRepairCost();
/**
* Add ItemFlags.
*
* @param hideFlags The flags.
*/
void addItemFlags(ItemFlag... hideFlags);
/**
* Remove ItemFlags.
*
* @param hideFlags The flags.
*/
void removeItemFlags(ItemFlag... hideFlags);
/**
* Get the ItemFlags.
*
* @return The flags.
*/
Set<ItemFlag> getItemFlags();
/**
* Test the item for a flag.
*
* @param flag The flag.
* @return If the flag is present.
*/
boolean hasItemFlag(ItemFlag flag);
/** /**
* Get the Bukkit ItemStack again. * Get the Bukkit ItemStack again.
* *

View File

@@ -16,7 +16,7 @@ public class McmmoManager {
/** /**
* A set of all registered integrations. * A set of all registered integrations.
*/ */
private final Set<McmmoWrapper> regsistered = new HashSet<>(); private final Set<McmmoWrapper> registered = new HashSet<>();
/** /**
* Register a new integration. * Register a new integration.
@@ -24,7 +24,7 @@ public class McmmoManager {
* @param integration The integration to register. * @param integration The integration to register.
*/ */
public void register(@NotNull final McmmoWrapper integration) { public void register(@NotNull final McmmoWrapper integration) {
regsistered.add(integration); registered.add(integration);
} }
/** /**
@@ -34,7 +34,7 @@ public class McmmoManager {
* @return The bonus drop count. * @return The bonus drop count.
*/ */
public int getBonusDropCount(@NotNull final Block block) { public int getBonusDropCount(@NotNull final Block block) {
for (McmmoWrapper mcmmoWrapper : regsistered) { for (McmmoWrapper mcmmoWrapper : registered) {
return mcmmoWrapper.getBonusDropCount(block); return mcmmoWrapper.getBonusDropCount(block);
} }
return 0; return 0;
@@ -47,7 +47,7 @@ public class McmmoManager {
* @return If the event is fake. * @return If the event is fake.
*/ */
public boolean isFake(@NotNull final Event event) { public boolean isFake(@NotNull final Event event) {
for (McmmoWrapper mcmmoWrapper : regsistered) { for (McmmoWrapper mcmmoWrapper : registered) {
return mcmmoWrapper.isFake(event); return mcmmoWrapper.isFake(event);
} }
return false; return false;

View File

@@ -56,7 +56,7 @@ public class PlaceholderManager {
@NotNull final String identifier) { @NotNull final String identifier) {
Optional<PlaceholderEntry> matching = REGISTERED_PLACEHOLDERS.stream().filter(expansion -> expansion.getIdentifier().equalsIgnoreCase(identifier)).findFirst(); Optional<PlaceholderEntry> matching = REGISTERED_PLACEHOLDERS.stream().filter(expansion -> expansion.getIdentifier().equalsIgnoreCase(identifier)).findFirst();
if (matching.isEmpty()) { if (matching.isEmpty()) {
return null; return "";
} }
PlaceholderEntry entry = matching.get(); PlaceholderEntry entry = matching.get();
if (player == null && entry.requiresPlayer()) { if (player == null && entry.requiresPlayer()) {

View File

@@ -0,0 +1,36 @@
package com.willfp.eco.core.integrations.shop;
import lombok.experimental.UtilityClass;
import org.jetbrains.annotations.NotNull;
import java.util.HashSet;
import java.util.Set;
/**
* Class to handle shop integrations.
*/
@UtilityClass
public class ShopManager {
/**
* A set of all registered integrations.
*/
private final Set<ShopWrapper> registered = new HashSet<>();
/**
* Register a new integration.
*
* @param integration The integration to register.
*/
public void register(@NotNull final ShopWrapper integration) {
registered.add(integration);
}
/**
* Register eco item provider for shop plugins.
*/
public void registerEcoProvider() {
for (ShopWrapper shopWrapper : registered) {
shopWrapper.registerEcoProvider();
}
}
}

View File

@@ -0,0 +1,11 @@
package com.willfp.eco.core.integrations.shop;
/**
* Wrapper class for shop integrations.
*/
public interface ShopWrapper {
/**
* Register eco item provider for shop plugins.
*/
void registerEcoProvider();
}

View File

@@ -1,8 +1,5 @@
package com.willfp.eco.core.items; package com.willfp.eco.core.items;
import com.willfp.eco.core.items.builder.EnchantedBookBuilder;
import com.willfp.eco.core.items.builder.ItemBuilder;
import com.willfp.eco.core.items.builder.ItemStackBuilder;
import com.willfp.eco.core.recipe.parts.EmptyTestableItem; import com.willfp.eco.core.recipe.parts.EmptyTestableItem;
import com.willfp.eco.core.recipe.parts.MaterialTestableItem; import com.willfp.eco.core.recipe.parts.MaterialTestableItem;
import com.willfp.eco.core.recipe.parts.ModifiedTestableItem; import com.willfp.eco.core.recipe.parts.ModifiedTestableItem;
@@ -16,6 +13,7 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.EnchantmentStorageMeta; import org.bukkit.inventory.meta.EnchantmentStorageMeta;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
@@ -195,6 +193,22 @@ public final class Items {
return false; return false;
} }
/**
* Get custom item from item.
*
* @param itemStack The item.
* @return The custom item, or null if not exists.
*/
@Nullable
public CustomItem getCustomItem(@NotNull final ItemStack itemStack) {
for (CustomItem item : REGISTRY.values()) {
if (item.matches(itemStack)) {
return item;
}
}
return null;
}
/** /**
* Get all registered custom items. * Get all registered custom items.
* *

View File

@@ -12,7 +12,7 @@ import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.awt.*; import java.awt.Color;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
@@ -57,7 +57,21 @@ public class StringUtils {
.build(); .build();
/** /**
* Format a list of strings - converts Placeholders and Color codes. * Format a list of strings.
* <p>
* Converts color codes and placeholders.
*
* @param list The messages to format.
* @return The message, formatted.
*/
public List<String> formatList(@NotNull final List<String> list) {
return formatList(list, (Player) null);
}
/**
* Format a list of strings.
* <p>
* Coverts color codes and placeholders for a player.
* *
* @param list The messages to format. * @param list The messages to format.
* @param player The player to translate placeholders with respect to. * @param player The player to translate placeholders with respect to.
@@ -65,26 +79,61 @@ public class StringUtils {
*/ */
public List<String> formatList(@NotNull final List<String> list, public List<String> formatList(@NotNull final List<String> list,
@Nullable final Player player) { @Nullable final Player player) {
return formatList(list, player, FormatOption.WITH_PLACEHOLDERS);
}
/**
* Format a list of strings.
* <p>
* Converts color codes and placeholders if specified.
*
* @param list The messages to format.
* @param option The format option.
* @return The message, formatted.
*/
public List<String> formatList(@NotNull final List<String> list,
@NotNull final FormatOption option) {
return formatList(list, null, option);
}
/**
* Format a list of strings.
* <p>
* Coverts color codes and placeholders for a player if specified.
*
* @param list The messages to format.
* @param player The player to translate placeholders with respect to.
* @param option The options.
* @return The message, format.
*/
public List<String> formatList(@NotNull final List<String> list,
@Nullable final Player player,
@NotNull final FormatOption option) {
List<String> translated = new ArrayList<>(); List<String> translated = new ArrayList<>();
for (String string : list) { for (String string : list) {
translated.add(format(string, player)); translated.add(format(string, player, option));
} }
return translated; return translated;
} }
/** /**
* Format a list of strings - converts Placeholders and Color codes. * Format a string.
* <p>
* Converts color codes and placeholders.
* *
* @param list The messages to format. * @param message The message to translate.
* @return The message, formatted. * @return The message, formatted.
* @see StringUtils#format(String, Player)
*/ */
public List<String> formatList(@NotNull final List<String> list) { public String format(@NotNull final String message) {
return formatList(list, null); return format(message, (Player) null);
} }
/** /**
* Format a string - converts Placeholders and Color codes. * Format a string.
* <p>
* Converts color codes and placeholders for a player.
* *
* @param message The message to format. * @param message The message to format.
* @param player The player to translate placeholders with respect to. * @param player The player to translate placeholders with respect to.
@@ -92,23 +141,45 @@ public class StringUtils {
*/ */
public String format(@NotNull final String message, public String format(@NotNull final String message,
@Nullable final Player player) { @Nullable final Player player) {
String processedMessage = message; return format(message, player, FormatOption.WITH_PLACEHOLDERS);
processedMessage = translateGradients(processedMessage);
processedMessage = PlaceholderManager.translatePlaceholders(processedMessage, player);
processedMessage = translateHexColorCodes(processedMessage);
processedMessage = ChatColor.translateAlternateColorCodes('&', processedMessage);
return processedMessage;
} }
/** /**
* Format a string without respect to a player. * Format a string.
* <p>
* Converts color codes and placeholders if specified.
* *
* @param message The message to translate. * @param message The message to translate.
* @param option The format option.
* @return The message, formatted. * @return The message, formatted.
* @see StringUtils#format(String, Player) * @see StringUtils#format(String, Player)
*/ */
public String format(@NotNull final String message) { public String format(@NotNull final String message,
return format(message, null); @NotNull final FormatOption option) {
return format(message, null, option);
}
/**
* Format a string.
* <p>
* Coverts color codes and placeholders for a player if specified.
*
* @param message The message to format.
* @param player The player to translate placeholders with respect to.
* @param option The format options.
* @return The message, formatted.
*/
public String format(@NotNull final String message,
@Nullable final Player player,
@NotNull final FormatOption option) {
String processedMessage = message;
processedMessage = translateGradients(processedMessage);
if (option == FormatOption.WITH_PLACEHOLDERS) {
processedMessage = PlaceholderManager.translatePlaceholders(processedMessage, player);
}
processedMessage = translateHexColorCodes(processedMessage);
processedMessage = ChatColor.translateAlternateColorCodes('&', processedMessage);
return processedMessage;
} }
private static String translateHexColorCodes(@NotNull final String message) { private static String translateHexColorCodes(@NotNull final String message) {
@@ -271,4 +342,19 @@ public class StringUtils {
GsonComponentSerializer.gson().deserialize(json) GsonComponentSerializer.gson().deserialize(json)
); );
} }
/**
* Options for formatting.
*/
public enum FormatOption {
/**
* Completely formatted.
*/
WITH_PLACEHOLDERS,
/**
* Completely formatted without placeholders.
*/
WITHOUT_PLACEHOLDERS
}
} }

View File

@@ -11,9 +11,9 @@ import java.util.*
open class EcoJSONConfigWrapper : JSONConfig { open class EcoJSONConfigWrapper : JSONConfig {
val handle: Gson = GsonBuilder().setPrettyPrinting().create() val handle: Gson = GsonBuilder().setPrettyPrinting().create()
val values: MutableMap<String, Any?> = HashMap() val values = mutableMapOf<String, Any?>()
private val cache: MutableMap<String, Any> = HashMap() private val cache = mutableMapOf<String, Any>()
fun init(values: Map<String, Any?>) { fun init(values: Map<String, Any?>) {
this.values.clear() this.values.clear()
@@ -138,17 +138,17 @@ open class EcoJSONConfigWrapper : JSONConfig {
override fun getSubsections(path: String): List<JSONConfig> { override fun getSubsections(path: String): List<JSONConfig> {
val subsections = getSubsectionsOrNull(path) val subsections = getSubsectionsOrNull(path)
return subsections ?: ArrayList() return subsections ?: mutableListOf()
} }
override fun getSubsectionsOrNull(path: String): List<JSONConfig>? { override fun getSubsectionsOrNull(path: String): List<JSONConfig>? {
val maps = getOfKnownType(path, Any::class.java) as List<Map<String, Any>>? val maps = getOfKnownType(path, Any::class.java) as List<Map<String, Any>>?
?: return null ?: return null
val configs: MutableList<JSONConfig> = ArrayList() val configs = mutableListOf<JSONConfig>()
for (map in maps) { for (map in maps) {
configs.add(EcoJSONConfigSection(map)) configs.add(EcoJSONConfigSection(map))
} }
return configs return configs.toMutableList()
} }
override fun getInt(path: String): Int { override fun getInt(path: String): Int {
@@ -170,11 +170,11 @@ open class EcoJSONConfigWrapper : JSONConfig {
return Objects.requireNonNullElse(getOfKnownType(path, Int::class.java), def) return Objects.requireNonNullElse(getOfKnownType(path, Int::class.java), def)
} }
override fun getInts(path: String): List<Int> { override fun getInts(path: String): MutableList<Int> {
return Objects.requireNonNullElse(getOfKnownType(path, Any::class.java), ArrayList<Any>()) as List<Int> return (Objects.requireNonNullElse(getOfKnownType(path, Any::class.java), emptyList<Int>()) as List<Int>).toMutableList()
} }
override fun getIntsOrNull(path: String): List<Int>? { override fun getIntsOrNull(path: String): MutableList<Int>? {
return if (has(path)) { return if (has(path)) {
getInts(path) getInts(path)
} else { } else {
@@ -194,11 +194,11 @@ open class EcoJSONConfigWrapper : JSONConfig {
} }
} }
override fun getBools(path: String): List<Boolean> { override fun getBools(path: String): MutableList<Boolean> {
return Objects.requireNonNullElse(getOfKnownType(path, Any::class.java), ArrayList<Any>()) as List<Boolean> return (Objects.requireNonNullElse(getOfKnownType(path, Any::class.java), emptyList<Boolean>()) as List<Boolean>).toMutableList()
} }
override fun getBoolsOrNull(path: String): List<Boolean>? { override fun getBoolsOrNull(path: String): MutableList<Boolean>? {
return if (has(path)) { return if (has(path)) {
getBools(path) getBools(path)
} else { } else {
@@ -206,64 +206,44 @@ open class EcoJSONConfigWrapper : JSONConfig {
} }
} }
override fun getString(path: String): String {
return getString(path, true)
}
override fun getString( override fun getString(
path: String, path: String,
format: Boolean format: Boolean,
option: StringUtils.FormatOption
): String { ): String {
val string = getOfKnownType(path, String::class.java) ?: "" val string = getOfKnownType(path, String::class.java) ?: ""
return if (format) StringUtils.format(string) else string return if (format) StringUtils.format(string, option) else string
}
override fun getStringOrNull(path: String): String? {
return if (has(path)) {
getString(path)
} else {
null
}
} }
override fun getStringOrNull( override fun getStringOrNull(
path: String, path: String,
format: Boolean format: Boolean,
option: StringUtils.FormatOption
): String? { ): String? {
return if (has(path)) { return if (has(path)) {
getString(path, format) getString(path, format, option)
} else { } else {
null null
} }
} }
override fun getStrings(path: String): List<String> {
return getStrings(path, true)
}
override fun getStrings( override fun getStrings(
path: String, path: String,
format: Boolean format: Boolean,
): List<String> { option: StringUtils.FormatOption
): MutableList<String> {
val strings = val strings =
Objects.requireNonNullElse(getOfKnownType(path, Any::class.java), ArrayList<Any>()) as List<String> (Objects.requireNonNullElse(getOfKnownType(path, Any::class.java), emptyList<String>()) as List<String>).toMutableList()
return if (format) StringUtils.formatList(strings) else strings return if (format) StringUtils.formatList(strings, option) else strings
}
override fun getStringsOrNull(path: String): List<String>? {
return if (has(path)) {
getStrings(path)
} else {
null
}
} }
override fun getStringsOrNull( override fun getStringsOrNull(
path: String, path: String,
format: Boolean format: Boolean,
): List<String>? { option: StringUtils.FormatOption
): MutableList<String>? {
return if (has(path)) { return if (has(path)) {
getStrings(path, format) getStrings(path, format, option)
} else { } else {
null null
} }
@@ -281,11 +261,11 @@ open class EcoJSONConfigWrapper : JSONConfig {
} }
} }
override fun getDoubles(path: String): List<Double> { override fun getDoubles(path: String): MutableList<Double> {
return Objects.requireNonNullElse(getOfKnownType(path, Any::class.java), ArrayList<Any>()) as List<Double> return (Objects.requireNonNullElse(getOfKnownType(path, Any::class.java), emptyList<Double>()) as List<Double>).toMutableList()
} }
override fun getDoublesOrNull(path: String): List<Double>? { override fun getDoublesOrNull(path: String): MutableList<Double>? {
return if (has(path)) { return if (has(path)) {
getDoubles(path) getDoubles(path)
} else { } else {

View File

@@ -27,7 +27,6 @@ class EcoLoadableJSONConfig(
} }
override fun createFile() { override fun createFile() {
val resourcePath = resourcePath
val inputStream = source.getResourceAsStream(resourcePath)!! val inputStream = source.getResourceAsStream(resourcePath)!!
val outFile = File(this.plugin.dataFolder, resourcePath) val outFile = File(this.plugin.dataFolder, resourcePath)
val lastIndex = resourcePath.lastIndexOf('/') val lastIndex = resourcePath.lastIndexOf('/')
@@ -37,11 +36,7 @@ class EcoLoadableJSONConfig(
} }
if (!outFile.exists()) { if (!outFile.exists()) {
val out: OutputStream = FileOutputStream(outFile) val out: OutputStream = FileOutputStream(outFile)
val buf = ByteArray(1024) inputStream.copyTo(out, 1024)
var len: Int
while (inputStream.read(buf).also { len = it } > 0) {
out.write(buf, 0, len)
}
out.close() out.close()
inputStream.close() inputStream.close()
} }

View File

@@ -1,7 +1,6 @@
package com.willfp.eco.internal.config.updating package com.willfp.eco.internal.config.updating
import com.willfp.eco.core.EcoPlugin import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.PluginDependent
import com.willfp.eco.core.config.interfaces.LoadableConfig import com.willfp.eco.core.config.interfaces.LoadableConfig
import com.willfp.eco.core.config.updating.ConfigHandler import com.willfp.eco.core.config.updating.ConfigHandler
import com.willfp.eco.core.config.updating.ConfigUpdater import com.willfp.eco.core.config.updating.ConfigUpdater
@@ -14,14 +13,14 @@ import org.reflections.scanners.MethodAnnotationsScanner
import java.lang.reflect.Modifier import java.lang.reflect.Modifier
class EcoConfigHandler( class EcoConfigHandler(
plugin: EcoPlugin private val plugin: EcoPlugin
) : PluginDependent<EcoPlugin>(plugin), ConfigHandler { ) : ConfigHandler {
private val reflections: Reflections = Reflections( private val reflections: Reflections = Reflections(
this.plugin::class.java.classLoader, this.plugin::class.java.classLoader,
MethodAnnotationsScanner() MethodAnnotationsScanner()
) )
private val configs: MutableList<LoadableConfig> = ArrayList() private val configs = mutableListOf<LoadableConfig>()
override fun callUpdate() { override fun callUpdate() {
for (method in reflections.getMethodsAnnotatedWith(ConfigUpdater::class.java)) { for (method in reflections.getMethodsAnnotatedWith(ConfigUpdater::class.java)) {

View File

@@ -31,7 +31,6 @@ open class EcoLoadableYamlConfig(
} }
final override fun createFile() { final override fun createFile() {
val resourcePath = resourcePath
val inputStream = source.getResourceAsStream(resourcePath)!! val inputStream = source.getResourceAsStream(resourcePath)!!
val outFile = File(this.plugin.dataFolder, resourcePath) val outFile = File(this.plugin.dataFolder, resourcePath)
val lastIndex = resourcePath.lastIndexOf('/') val lastIndex = resourcePath.lastIndexOf('/')
@@ -41,11 +40,7 @@ open class EcoLoadableYamlConfig(
} }
if (!outFile.exists()) { if (!outFile.exists()) {
val out: OutputStream = FileOutputStream(outFile) val out: OutputStream = FileOutputStream(outFile)
val buf = ByteArray(1024) inputStream.copyTo(out, 1024)
var len: Int
while (inputStream.read(buf).also { len = it } > 0) {
out.write(buf, 0, len)
}
out.close() out.close()
inputStream.close() inputStream.close()
} }

View File

@@ -10,7 +10,7 @@ import java.io.StringReader
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
open class EcoYamlConfigWrapper<T : ConfigurationSection> : Config { open class EcoYamlConfigWrapper<T : ConfigurationSection> : Config {
lateinit var handle: T lateinit var handle: T
private val cache: MutableMap<String, Any?> = HashMap() private val cache = mutableMapOf<String, Any?>()
protected fun init(config: T): Config { protected fun init(config: T): Config {
handle = config handle = config
@@ -98,16 +98,16 @@ open class EcoYamlConfigWrapper<T : ConfigurationSection> : Config {
} }
} }
override fun getInts(path: String): List<Int> { override fun getInts(path: String): MutableList<Int> {
return if (cache.containsKey(path)) { return if (cache.containsKey(path)) {
cache[path] as List<Int> (cache[path] as MutableList<Int>).toMutableList()
} else { } else {
cache[path] = if (has(path)) ArrayList(handle.getIntegerList(path)) else ArrayList<Any>() cache[path] = if (has(path)) ArrayList(handle.getIntegerList(path)) else mutableListOf<Int>()
getInts(path) getInts(path)
} }
} }
override fun getIntsOrNull(path: String): List<Int>? { override fun getIntsOrNull(path: String): MutableList<Int>? {
return if (has(path)) { return if (has(path)) {
getInts(path) getInts(path)
} else { } else {
@@ -132,17 +132,17 @@ open class EcoYamlConfigWrapper<T : ConfigurationSection> : Config {
} }
} }
override fun getBools(path: String): List<Boolean> { override fun getBools(path: String): MutableList<Boolean> {
return if (cache.containsKey(path)) { return if (cache.containsKey(path)) {
cache[path] as List<Boolean> (cache[path] as MutableList<Boolean>).toMutableList()
} else { } else {
cache[path] = cache[path] =
if (has(path)) ArrayList(handle.getBooleanList(path)) else ArrayList<Any>() if (has(path)) ArrayList(handle.getBooleanList(path)) else mutableListOf<Boolean>()
getBools(path) getBools(path)
} }
} }
override fun getBoolsOrNull(path: String): List<Boolean>? { override fun getBoolsOrNull(path: String): MutableList<Boolean>? {
return if (has(path)) { return if (has(path)) {
getBools(path) getBools(path)
} else { } else {
@@ -150,92 +150,80 @@ open class EcoYamlConfigWrapper<T : ConfigurationSection> : Config {
} }
} }
override fun getString(path: String): String {
return getString(path, true)
}
override fun getString( override fun getString(
path: String, path: String,
format: Boolean format: Boolean,
option: StringUtils.FormatOption
): String { ): String {
if (format) { if (format && option == StringUtils.FormatOption.WITHOUT_PLACEHOLDERS) {
return if (cache.containsKey("$path\$FMT")) { return if (cache.containsKey("$path\$FMT")) {
cache["$path\$FMT"] as String cache["$path\$FMT"] as String
} else { } else {
val string: String = handle.getString(path, "")!! val string: String = handle.getString(path, "")!!
cache["$path\$FMT"] = StringUtils.format(string) cache["$path\$FMT"] = StringUtils.format(string, option)
getString(path, format) getString(path, format, option)
} }
} else { } else {
return if (cache.containsKey(path)) { val string = if (cache.containsKey(path)) {
cache[path] as String cache[path] as String
} else { } else {
cache[path] = handle.getString(path, "")!! cache[path] = handle.getString(path, "")!!
getString(path) getString(path, format, option)
}
}
} }
override fun getStringOrNull(path: String): String? { return if (format) StringUtils.format(string) else string
return if (has(path)) {
getString(path)
} else {
null
} }
} }
override fun getStringOrNull( override fun getStringOrNull(
path: String, path: String,
format: Boolean format: Boolean,
option: StringUtils.FormatOption
): String? { ): String? {
return if (has(path)) { return if (has(path)) {
getString(path, format) getString(path, format, option)
} else { } else {
null null
} }
} }
override fun getStrings(path: String): List<String> {
return getStrings(path, true)
}
override fun getStrings( override fun getStrings(
path: String, path: String,
format: Boolean format: Boolean,
): List<String> { option: StringUtils.FormatOption
if (format) { ): MutableList<String> {
if (format && option == StringUtils.FormatOption.WITHOUT_PLACEHOLDERS) {
return if (cache.containsKey("$path\$FMT")) { return if (cache.containsKey("$path\$FMT")) {
cache["$path\$FMT"] as List<String> (cache["$path\$FMT"] as MutableList<String>).toMutableList()
} else { } else {
val list = if (has(path)) handle.getStringList(path) else ArrayList() val list = if (has(path)) handle.getStringList(path) else mutableListOf<String>()
cache["$path\$FMT"] = StringUtils.formatList(list); cache["$path\$FMT"] = StringUtils.formatList(list, option)
getStrings(path, true) getStrings(path, true, option)
} }
} else { } else {
return if (cache.containsKey(path)) { val strings = if (cache.containsKey(path)) {
cache[path] as List<String> (cache[path] as MutableList<String>).toMutableList()
} else { } else {
cache[path] = cache[path] =
if (has(path)) ArrayList(handle.getStringList(path)) else ArrayList<Any>() if (has(path)) ArrayList(handle.getStringList(path)) else mutableListOf<String>()
getStrings(path, false) getStrings(path, false, option)
}
}
} }
override fun getStringsOrNull(path: String): List<String>? { return if (format) {
return if (has(path)) { StringUtils.formatList(strings, StringUtils.FormatOption.WITH_PLACEHOLDERS)
getStrings(path)
} else { } else {
null strings
}
} }
} }
override fun getStringsOrNull( override fun getStringsOrNull(
path: String, path: String,
format: Boolean format: Boolean,
): List<String>? { option: StringUtils.FormatOption
): MutableList<String>? {
return if (has(path)) { return if (has(path)) {
getStrings(path, format) getStrings(path, format, option)
} else { } else {
null null
} }
@@ -258,16 +246,16 @@ open class EcoYamlConfigWrapper<T : ConfigurationSection> : Config {
} }
} }
override fun getDoubles(path: String): List<Double> { override fun getDoubles(path: String): MutableList<Double> {
return if (cache.containsKey(path)) { return if (cache.containsKey(path)) {
cache[path] as List<Double> (cache[path] as MutableList<Double>).toMutableList()
} else { } else {
cache[path] = if (has(path)) ArrayList(handle.getDoubleList(path)) else ArrayList<Any>() cache[path] = if (has(path)) ArrayList(handle.getDoubleList(path)) else emptyList<Double>()
getDoubles(path) getDoubles(path)
} }
} }
override fun getDoublesOrNull(path: String): List<Double>? { override fun getDoublesOrNull(path: String): MutableList<Double>? {
return if (has(path)) { return if (has(path)) {
getDoubles(path) getDoubles(path)
} else { } else {

View File

@@ -13,8 +13,8 @@ import org.bukkit.inventory.ItemStack
import org.bukkit.util.Vector import org.bukkit.util.Vector
open class EcoDropQueue(player: Player) : InternalDropQueue { open class EcoDropQueue(player: Player) : InternalDropQueue {
val items: MutableList<ItemStack> val items = mutableListOf<ItemStack>()
var xp: Int var xp: Int = 0
val player: Player val player: Player
var loc: Location var loc: Location
var hasTelekinesis = false var hasTelekinesis = false
@@ -79,8 +79,6 @@ open class EcoDropQueue(player: Player) : InternalDropQueue {
} }
init { init {
items = ArrayList()
xp = 0
this.player = player this.player = player
loc = player.location loc = player.location
} }

View File

@@ -1,13 +1,12 @@
package com.willfp.eco.internal.events package com.willfp.eco.internal.events
import com.willfp.eco.core.EcoPlugin import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.PluginDependent
import com.willfp.eco.core.events.EventManager import com.willfp.eco.core.events.EventManager
import org.bukkit.Bukkit import org.bukkit.Bukkit
import org.bukkit.event.HandlerList import org.bukkit.event.HandlerList
import org.bukkit.event.Listener import org.bukkit.event.Listener
class EcoEventManager constructor(plugin: EcoPlugin) : PluginDependent<EcoPlugin>(plugin), EventManager { class EcoEventManager constructor(private val plugin: EcoPlugin) : EventManager {
override fun registerListener(listener: Listener) { override fun registerListener(listener: Listener) {
Bukkit.getPluginManager().registerEvents(listener, plugin) Bukkit.getPluginManager().registerEvents(listener, plugin)
} }

View File

@@ -2,7 +2,6 @@ package com.willfp.eco.internal.extensions
import com.google.common.collect.ImmutableSet import com.google.common.collect.ImmutableSet
import com.willfp.eco.core.EcoPlugin import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.PluginDependent
import com.willfp.eco.core.config.yaml.YamlTransientConfig import com.willfp.eco.core.config.yaml.YamlTransientConfig
import com.willfp.eco.core.extensions.Extension import com.willfp.eco.core.extensions.Extension
import com.willfp.eco.core.extensions.ExtensionLoader import com.willfp.eco.core.extensions.ExtensionLoader
@@ -16,9 +15,9 @@ import java.net.URL
import java.net.URLClassLoader import java.net.URLClassLoader
class EcoExtensionLoader( class EcoExtensionLoader(
plugin: EcoPlugin private val plugin: EcoPlugin
) : PluginDependent<EcoPlugin>(plugin), ExtensionLoader { ) : ExtensionLoader {
private val extensions: MutableMap<Extension, URLClassLoader> = HashMap() private val extensions = mutableMapOf<Extension, URLClassLoader>()
override fun loadExtensions() { override fun loadExtensions() {
val dir = File(this.plugin.dataFolder, "/extensions") val dir = File(this.plugin.dataFolder, "/extensions")
@@ -43,7 +42,7 @@ class EcoExtensionLoader(
@Throws(MalformedExtensionException::class) @Throws(MalformedExtensionException::class)
private fun loadExtension(extensionJar: File) { private fun loadExtension(extensionJar: File) {
lateinit var url : URL lateinit var url: URL
try { try {
url = extensionJar.toURI().toURL() url = extensionJar.toURI().toURL()
@@ -53,7 +52,7 @@ class EcoExtensionLoader(
val classLoader = URLClassLoader(arrayOf(url), this.plugin::class.java.classLoader) val classLoader = URLClassLoader(arrayOf(url), this.plugin::class.java.classLoader)
val ymlIn = classLoader.getResourceAsStream("extension.yml") val ymlIn = classLoader.getResourceAsStream("extension.yml")
?: throw MalformedExtensionException ("No extension.yml found in " + extensionJar.name) ?: throw MalformedExtensionException("No extension.yml found in " + extensionJar.name)
val extensionYml = YamlTransientConfig(YamlConfiguration.loadConfiguration(InputStreamReader(ymlIn))) val extensionYml = YamlTransientConfig(YamlConfiguration.loadConfiguration(InputStreamReader(ymlIn)))
@@ -64,7 +63,7 @@ class EcoExtensionLoader(
if (mainClass == null) { if (mainClass == null) {
throw MalformedExtensionException ("Invalid extension.yml found in " + extensionJar.name) throw MalformedExtensionException("Invalid extension.yml found in " + extensionJar.name)
} }
if (name == null) { if (name == null) {

View File

@@ -1,11 +1,10 @@
package com.willfp.eco.internal.factory package com.willfp.eco.internal.factory
import com.willfp.eco.core.EcoPlugin import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.PluginDependent
import com.willfp.eco.core.factory.MetadataValueFactory import com.willfp.eco.core.factory.MetadataValueFactory
import org.bukkit.metadata.FixedMetadataValue import org.bukkit.metadata.FixedMetadataValue
class EcoMetadataValueFactory(plugin: EcoPlugin) : PluginDependent<EcoPlugin>(plugin), MetadataValueFactory { class EcoMetadataValueFactory(private val plugin: EcoPlugin) : MetadataValueFactory {
override fun create(value: Any): FixedMetadataValue { override fun create(value: Any): FixedMetadataValue {
return FixedMetadataValue(plugin, value) return FixedMetadataValue(plugin, value)
} }

View File

@@ -1,11 +1,10 @@
package com.willfp.eco.internal.factory package com.willfp.eco.internal.factory
import com.willfp.eco.core.EcoPlugin import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.PluginDependent
import com.willfp.eco.core.factory.NamespacedKeyFactory import com.willfp.eco.core.factory.NamespacedKeyFactory
import org.bukkit.NamespacedKey import org.bukkit.NamespacedKey
class EcoNamespacedKeyFactory(plugin: EcoPlugin) : PluginDependent<EcoPlugin>(plugin), NamespacedKeyFactory { class EcoNamespacedKeyFactory(private val plugin: EcoPlugin) : NamespacedKeyFactory {
override fun create(key: String): NamespacedKey { override fun create(key: String): NamespacedKey {
return NamespacedKey(plugin, key) return NamespacedKey(plugin, key)
} }

View File

@@ -1,13 +1,12 @@
package com.willfp.eco.internal.factory package com.willfp.eco.internal.factory
import com.willfp.eco.core.EcoPlugin import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.PluginDependent
import com.willfp.eco.core.factory.RunnableFactory import com.willfp.eco.core.factory.RunnableFactory
import com.willfp.eco.core.scheduling.RunnableTask import com.willfp.eco.core.scheduling.RunnableTask
import com.willfp.eco.internal.scheduling.EcoRunnableTask import com.willfp.eco.internal.scheduling.EcoRunnableTask
import java.util.function.Consumer import java.util.function.Consumer
class EcoRunnableFactory(plugin: EcoPlugin) : PluginDependent<EcoPlugin>(plugin), RunnableFactory { class EcoRunnableFactory(private val plugin: EcoPlugin) : RunnableFactory {
override fun create(consumer: Consumer<RunnableTask>): RunnableTask { override fun create(consumer: Consumer<RunnableTask>): RunnableTask {
return object : EcoRunnableTask(plugin) { return object : EcoRunnableTask(plugin) {
override fun run() { override fun run() {

View File

@@ -1,6 +1,7 @@
package com.willfp.eco.internal.fast package com.willfp.eco.internal.fast
import com.willfp.eco.core.fast.FastItemStack import com.willfp.eco.core.fast.FastItemStack
import org.bukkit.inventory.ItemFlag
import org.bukkit.inventory.ItemStack import org.bukkit.inventory.ItemStack
abstract class EcoFastItemStack<T: Any>( abstract class EcoFastItemStack<T: Any>(
@@ -10,4 +11,8 @@ abstract class EcoFastItemStack<T: Any>(
override fun unwrap(): ItemStack { override fun unwrap(): ItemStack {
return bukkit return bukkit
} }
fun getBitModifier(hideFlag: ItemFlag): Int {
return 1 shl hideFlag.ordinal
}
} }

View File

@@ -75,7 +75,7 @@ class EcoMenu(
override fun getCaptiveItems(player: Player): MutableList<ItemStack> { override fun getCaptiveItems(player: Player): MutableList<ItemStack> {
val inventory = MenuHandler.getExtendedInventory(player.openInventory.topInventory) val inventory = MenuHandler.getExtendedInventory(player.openInventory.topInventory)
inventory ?: return ArrayList() inventory ?: return mutableListOf()
return inventory.captiveItems return inventory.captiveItems
} }

View File

@@ -61,10 +61,10 @@ class EcoMenuBuilder(private val rows: Int) : MenuBuilder {
} }
} }
val finalSlots: MutableList<MutableList<EcoSlot>> = ArrayList() val finalSlots = mutableListOf<MutableList<EcoSlot>>()
for (row in tempSlots) { for (row in tempSlots) {
val tempRow = ArrayList<EcoSlot>() val tempRow = mutableListOf<EcoSlot>()
for (slot in row) { for (slot in row) {
var tempSlot = slot var tempSlot = slot
if (tempSlot is FillerSlot) { if (tempSlot is FillerSlot) {

View File

@@ -12,8 +12,8 @@ class ExtendedInventory(
val inventory: Inventory, val inventory: Inventory,
private val menu: EcoMenu private val menu: EcoMenu
) { ) {
val captiveItems: MutableList<ItemStack> = ArrayList() val captiveItems = mutableListOf<ItemStack>()
val data: MutableMap<NamespacedKey, Any> = HashMap() val data = mutableMapOf<NamespacedKey, Any>()
fun refresh(player: Player) { fun refresh(player: Player) {
captiveItems.clear() captiveItems.clear()

View File

@@ -4,28 +4,28 @@ import com.willfp.eco.core.gui.menu.Menu
import org.bukkit.inventory.Inventory import org.bukkit.inventory.Inventory
object MenuHandler { object MenuHandler {
private val MENUS: MutableMap<ExtendedInventory, EcoMenu> = HashMap() private val menus = mutableMapOf<ExtendedInventory, EcoMenu>()
private val INVS: MutableMap<Inventory, ExtendedInventory> = HashMap() private val inventories = mutableMapOf<Inventory, ExtendedInventory>()
fun registerMenu( fun registerMenu(
inventory: Inventory, inventory: Inventory,
menu: EcoMenu menu: EcoMenu
) { ) {
val extendedInventory = ExtendedInventory(inventory, menu) val extendedInventory = ExtendedInventory(inventory, menu)
INVS[inventory] = extendedInventory inventories[inventory] = extendedInventory
MENUS[extendedInventory] = menu menus[extendedInventory] = menu
} }
fun unregisterMenu(inventory: Inventory) { fun unregisterMenu(inventory: Inventory) {
MENUS.remove(INVS[inventory]) menus.remove(inventories[inventory])
INVS.remove(inventory) inventories.remove(inventory)
} }
fun getMenu(inventory: Inventory): Menu? { fun getMenu(inventory: Inventory): Menu? {
return MENUS[INVS[inventory]] return menus[inventories[inventory]]
} }
fun getExtendedInventory(inventory: Inventory): ExtendedInventory? { fun getExtendedInventory(inventory: Inventory): ExtendedInventory? {
return INVS[inventory] return inventories[inventory]
} }
} }

View File

@@ -8,7 +8,7 @@ import com.willfp.eco.core.gui.slot.functional.SlotProvider
class EcoSlotBuilder(private val provider: SlotProvider) : SlotBuilder { class EcoSlotBuilder(private val provider: SlotProvider) : SlotBuilder {
private var captive = false private var captive = false
var modifier: SlotModifier = SlotModifier{ player, menu, _ -> provider.provide(player, menu)} private var modifier: SlotModifier = SlotModifier{ player, menu, _ -> provider.provide(player, menu)}
private var onLeftClick = private var onLeftClick =
SlotHandler { _, _, _ -> run { } } SlotHandler { _, _, _ -> run { } }

View File

@@ -1,7 +1,6 @@
package com.willfp.eco.internal.proxy; package com.willfp.eco.internal.proxy
import com.willfp.eco.core.EcoPlugin import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.PluginDependent
import com.willfp.eco.core.proxy.AbstractProxy import com.willfp.eco.core.proxy.AbstractProxy
import com.willfp.eco.core.proxy.ProxyConstants import com.willfp.eco.core.proxy.ProxyConstants
import com.willfp.eco.core.proxy.ProxyFactory import com.willfp.eco.core.proxy.ProxyFactory
@@ -11,8 +10,8 @@ import java.net.URLClassLoader
import java.util.* import java.util.*
class EcoProxyFactory( class EcoProxyFactory(
plugin: EcoPlugin private val plugin: EcoPlugin
) : PluginDependent<EcoPlugin>(plugin), ProxyFactory { ) : ProxyFactory {
private val proxyClassLoader: ClassLoader = plugin::class.java.classLoader private val proxyClassLoader: ClassLoader = plugin::class.java.classLoader
private val cache: MutableMap<Class<out AbstractProxy>, AbstractProxy> = IdentityHashMap() private val cache: MutableMap<Class<out AbstractProxy>, AbstractProxy> = IdentityHashMap()

View File

@@ -1,12 +1,11 @@
package com.willfp.eco.internal.scheduling package com.willfp.eco.internal.scheduling
import com.willfp.eco.core.EcoPlugin import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.PluginDependent
import com.willfp.eco.core.scheduling.Scheduler import com.willfp.eco.core.scheduling.Scheduler
import org.bukkit.Bukkit import org.bukkit.Bukkit
import org.bukkit.scheduler.BukkitTask import org.bukkit.scheduler.BukkitTask
class EcoScheduler(plugin: EcoPlugin) : PluginDependent<EcoPlugin>(plugin), Scheduler { class EcoScheduler(private val plugin: EcoPlugin) : Scheduler {
override fun runLater( override fun runLater(
runnable: Runnable, runnable: Runnable,
ticksLater: Long ticksLater: Long

View File

@@ -8,7 +8,7 @@ import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftItemStack
import org.bukkit.craftbukkit.v1_16_R3.util.CraftMagicNumbers import org.bukkit.craftbukkit.v1_16_R3.util.CraftMagicNumbers
import org.bukkit.craftbukkit.v1_16_R3.util.CraftNamespacedKey import org.bukkit.craftbukkit.v1_16_R3.util.CraftNamespacedKey
import org.bukkit.enchantments.Enchantment import org.bukkit.enchantments.Enchantment
import java.lang.reflect.Field import org.bukkit.inventory.ItemFlag
import kotlin.experimental.and import kotlin.experimental.and
class NMSFastItemStack(itemStack: org.bukkit.inventory.ItemStack) : EcoFastItemStack<ItemStack>( class NMSFastItemStack(itemStack: org.bukkit.inventory.ItemStack) : EcoFastItemStack<ItemStack>(
@@ -96,12 +96,59 @@ class NMSFastItemStack(itemStack: org.bukkit.inventory.ItemStack) : EcoFastItemS
} }
} }
override fun addItemFlags(vararg hideFlags: ItemFlag) {
for (flag in hideFlags) {
this.flagBits = this.flagBits or getBitModifier(flag)
}
apply()
}
override fun removeItemFlags(vararg hideFlags: ItemFlag) {
for (flag in hideFlags) {
this.flagBits = this.flagBits and getBitModifier(flag)
}
apply()
}
override fun getItemFlags(): MutableSet<ItemFlag> {
val flags = mutableSetOf<ItemFlag>()
var flagArr: Array<ItemFlag>
val size = ItemFlag.values().also { flagArr = it }.size
for (i in 0 until size) {
val flag = flagArr[i]
if (this.hasItemFlag(flag)) {
flags.add(flag)
}
}
return flags
}
override fun hasItemFlag(flag: ItemFlag): Boolean {
val bitModifier = getBitModifier(flag)
return this.flagBits and bitModifier == bitModifier
}
private var flagBits: Int
get() =
if (handle.hasTag() && handle.tag!!.hasKeyOfType(
"HideFlags",
99
)
) handle.tag!!.getInt("HideFlags") else 0
set(value) =
handle.orCreateTag.setInt("HideFlags", value)
override fun getRepairCost(): Int { override fun getRepairCost(): Int {
return handle.repairCost; return handle.repairCost
} }
override fun setRepairCost(cost: Int) { override fun setRepairCost(cost: Int) {
handle.repairCost = cost; handle.repairCost = cost
} }
private fun apply() { private fun apply() {
@@ -109,28 +156,4 @@ class NMSFastItemStack(itemStack: org.bukkit.inventory.ItemStack) : EcoFastItemS
bukkit.itemMeta = CraftItemStack.asCraftMirror(handle).itemMeta bukkit.itemMeta = CraftItemStack.asCraftMirror(handle).itemMeta
} }
} }
companion object {
private var field: Field
init {
lateinit var temp: Field
try {
val handleField = CraftItemStack::class.java.getDeclaredField("handle")
handleField.isAccessible = true
temp = handleField
} catch (e: ReflectiveOperationException) {
e.printStackTrace()
}
field = temp
}
fun getNMSStack(itemStack: org.bukkit.inventory.ItemStack): ItemStack? {
return if (itemStack !is CraftItemStack) {
CraftItemStack.asNMSCopy(itemStack)
} else {
field.get(itemStack) as ItemStack
}
}
}
} }

View File

@@ -13,6 +13,7 @@ import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftItemStack
import org.bukkit.craftbukkit.v1_17_R1.util.CraftMagicNumbers import org.bukkit.craftbukkit.v1_17_R1.util.CraftMagicNumbers
import org.bukkit.craftbukkit.v1_17_R1.util.CraftNamespacedKey import org.bukkit.craftbukkit.v1_17_R1.util.CraftNamespacedKey
import org.bukkit.enchantments.Enchantment import org.bukkit.enchantments.Enchantment
import org.bukkit.inventory.ItemFlag
import kotlin.experimental.and import kotlin.experimental.and
class NMSFastItemStack(itemStack: org.bukkit.inventory.ItemStack) : EcoFastItemStack<ItemStack>( class NMSFastItemStack(itemStack: org.bukkit.inventory.ItemStack) : EcoFastItemStack<ItemStack>(
@@ -115,12 +116,59 @@ class NMSFastItemStack(itemStack: org.bukkit.inventory.ItemStack) : EcoFastItemS
} }
} }
override fun addItemFlags(vararg hideFlags: ItemFlag) {
for (flag in hideFlags) {
this.flagBits = this.flagBits or getBitModifier(flag)
}
apply()
}
override fun removeItemFlags(vararg hideFlags: ItemFlag) {
for (flag in hideFlags) {
this.flagBits = this.flagBits and getBitModifier(flag)
}
apply()
}
override fun getItemFlags(): MutableSet<ItemFlag> {
val flags = mutableSetOf<ItemFlag>()
var flagArr: Array<ItemFlag>
val size = ItemFlag.values().also { flagArr = it }.size
for (i in 0 until size) {
val flag = flagArr[i]
if (this.hasItemFlag(flag)) {
flags.add(flag)
}
}
return flags
}
override fun hasItemFlag(flag: ItemFlag): Boolean {
val bitModifier = getBitModifier(flag)
return this.flagBits and bitModifier == bitModifier
}
private var flagBits: Int
get() =
if (handle.hasTag() && handle.tag!!.contains(
"HideFlags",
99
)
) handle.tag!!.getInt("HideFlags") else 0
set(value) =
handle.orCreateTag.putInt("HideFlags", value)
override fun getRepairCost(): Int { override fun getRepairCost(): Int {
return handle.baseRepairCost; return handle.baseRepairCost
} }
override fun setRepairCost(cost: Int) { override fun setRepairCost(cost: Int) {
handle.setRepairCost(cost); handle.setRepairCost(cost)
} }
private fun apply() { private fun apply() {

View File

@@ -20,6 +20,7 @@ dependencies {
compileOnly 'com.gmail.nossr50.mcMMO:mcMMO:2.1.157' compileOnly 'com.gmail.nossr50.mcMMO:mcMMO:2.1.157'
compileOnly 'me.clip:placeholderapi:2.10.9' compileOnly 'me.clip:placeholderapi:2.10.9'
compileOnly 'com.willfp:Oraxen:e1f4003d8d' compileOnly 'com.willfp:Oraxen:e1f4003d8d'
compileOnly 'com.github.brcdev-minecraft:shopgui-api:2.2.0'
compileOnly 'com.github.LoneDev6:API-ItemsAdder:2.3.8' compileOnly 'com.github.LoneDev6:API-ItemsAdder:2.3.8'

View File

@@ -31,9 +31,9 @@ import com.willfp.eco.internal.integrations.PlaceholderIntegrationPAPI
import com.willfp.eco.internal.logging.EcoLogger import com.willfp.eco.internal.logging.EcoLogger
import com.willfp.eco.internal.proxy.EcoProxyFactory import com.willfp.eco.internal.proxy.EcoProxyFactory
import com.willfp.eco.internal.scheduling.EcoScheduler import com.willfp.eco.internal.scheduling.EcoScheduler
import com.willfp.eco.proxy.FastItemStackFactoryProxy
import com.willfp.eco.spigot.integrations.bstats.MetricHandler import com.willfp.eco.spigot.integrations.bstats.MetricHandler
import org.bukkit.inventory.ItemStack import org.bukkit.inventory.ItemStack
import com.willfp.eco.proxy.FastItemStackFactoryProxy
import java.util.logging.Logger import java.util.logging.Logger
@Suppress("UNUSED") @Suppress("UNUSED")
@@ -105,7 +105,7 @@ class EcoHandler : EcoSpigotPlugin(), Handler {
} }
override fun getLoadedPlugins(): List<String> { override fun getLoadedPlugins(): List<String> {
return ArrayList(Plugins.LOADED_ECO_PLUGINS.keys) return Plugins.LOADED_ECO_PLUGINS.keys.toMutableList()
} }
override fun getPluginByName(name: String): EcoPlugin? { override fun getPluginByName(name: String): EcoPlugin? {

View File

@@ -8,6 +8,7 @@ import com.willfp.eco.core.integrations.anticheat.AnticheatManager
import com.willfp.eco.core.integrations.antigrief.AntigriefManager import com.willfp.eco.core.integrations.antigrief.AntigriefManager
import com.willfp.eco.core.integrations.customitems.CustomItemsManager import com.willfp.eco.core.integrations.customitems.CustomItemsManager
import com.willfp.eco.core.integrations.mcmmo.McmmoManager import com.willfp.eco.core.integrations.mcmmo.McmmoManager
import com.willfp.eco.core.integrations.shop.ShopManager
import com.willfp.eco.internal.drops.DropManager import com.willfp.eco.internal.drops.DropManager
import com.willfp.eco.proxy.BlockBreakProxy import com.willfp.eco.proxy.BlockBreakProxy
import com.willfp.eco.proxy.FastItemStackFactoryProxy import com.willfp.eco.proxy.FastItemStackFactoryProxy
@@ -21,6 +22,7 @@ import com.willfp.eco.spigot.integrations.anticheat.*
import com.willfp.eco.spigot.integrations.antigrief.* import com.willfp.eco.spigot.integrations.antigrief.*
import com.willfp.eco.spigot.integrations.customitems.CustomItemsOraxen import com.willfp.eco.spigot.integrations.customitems.CustomItemsOraxen
import com.willfp.eco.spigot.integrations.mcmmo.McmmoIntegrationImpl import com.willfp.eco.spigot.integrations.mcmmo.McmmoIntegrationImpl
import com.willfp.eco.spigot.integrations.shop.ShopShopGuiPlus
import com.willfp.eco.spigot.recipes.ShapedRecipeListener import com.willfp.eco.spigot.recipes.ShapedRecipeListener
import com.willfp.eco.util.BlockUtils import com.willfp.eco.util.BlockUtils
import com.willfp.eco.util.SkullUtils import com.willfp.eco.util.SkullUtils
@@ -110,6 +112,9 @@ abstract class EcoSpigotPlugin : EcoPlugin(
// Custom Items // Custom Items
IntegrationLoader("Oraxen") { CustomItemsManager.register(CustomItemsOraxen()) }, IntegrationLoader("Oraxen") { CustomItemsManager.register(CustomItemsOraxen()) },
// Shop
IntegrationLoader("ShopGuiPlus") { ShopManager.register(ShopShopGuiPlus()) },
// Misc // Misc
IntegrationLoader("mcMMO") { McmmoManager.register(McmmoIntegrationImpl()) } IntegrationLoader("mcMMO") { McmmoManager.register(McmmoIntegrationImpl()) }
) )

View File

@@ -1,7 +1,6 @@
package com.willfp.eco.spigot.arrows package com.willfp.eco.spigot.arrows
import com.willfp.eco.core.EcoPlugin import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.PluginDependent
import org.bukkit.Material import org.bukkit.Material
import org.bukkit.entity.Arrow import org.bukkit.entity.Arrow
import org.bukkit.entity.LivingEntity import org.bukkit.entity.LivingEntity
@@ -11,8 +10,8 @@ import org.bukkit.event.Listener
import org.bukkit.event.entity.ProjectileLaunchEvent import org.bukkit.event.entity.ProjectileLaunchEvent
class ArrowDataListener( class ArrowDataListener(
plugin: EcoPlugin private val plugin: EcoPlugin
) : PluginDependent<EcoPlugin>(plugin), Listener { ) : Listener {
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
fun onLaunch(event:ProjectileLaunchEvent) { fun onLaunch(event:ProjectileLaunchEvent) {

View File

@@ -19,7 +19,7 @@ class PacketOpenWindowMerchant(plugin: EcoPlugin) :
player: Player, player: Player,
event: PacketEvent event: PacketEvent
) { ) {
val recipes: MutableList<MerchantRecipe> = ArrayList() val recipes = mutableListOf<MerchantRecipe>()
/* /*

View File

@@ -1,7 +1,6 @@
package com.willfp.eco.spigot.eventlisteners package com.willfp.eco.spigot.eventlisteners
import com.willfp.eco.core.EcoPlugin import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.PluginDependent
import org.bukkit.entity.LivingEntity import org.bukkit.entity.LivingEntity
import org.bukkit.event.EventHandler import org.bukkit.event.EventHandler
import org.bukkit.event.EventPriority import org.bukkit.event.EventPriority
@@ -11,8 +10,8 @@ import org.bukkit.event.entity.EntityDeathEvent
import java.util.concurrent.atomic.AtomicReference import java.util.concurrent.atomic.AtomicReference
class EntityDeathByEntityListeners( class EntityDeathByEntityListeners(
plugin: EcoPlugin private val plugin: EcoPlugin
) : PluginDependent<EcoPlugin>(plugin), Listener { ) : Listener {
private val events = HashSet<EntityDeathByEntityBuilder>() private val events = HashSet<EntityDeathByEntityBuilder>()
@EventHandler(priority = EventPriority.HIGH) @EventHandler(priority = EventPriority.HIGH)

View File

@@ -1,7 +1,6 @@
package com.willfp.eco.spigot.gui package com.willfp.eco.spigot.gui
import com.willfp.eco.core.EcoPlugin import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.PluginDependent
import com.willfp.eco.core.drops.DropQueue import com.willfp.eco.core.drops.DropQueue
import com.willfp.eco.internal.gui.menu.EcoMenu import com.willfp.eco.internal.gui.menu.EcoMenu
import com.willfp.eco.internal.gui.menu.MenuHandler import com.willfp.eco.internal.gui.menu.MenuHandler
@@ -16,7 +15,7 @@ import org.bukkit.event.inventory.ClickType
import org.bukkit.event.inventory.InventoryClickEvent import org.bukkit.event.inventory.InventoryClickEvent
import org.bukkit.event.inventory.InventoryCloseEvent import org.bukkit.event.inventory.InventoryCloseEvent
class GUIListener(plugin: EcoPlugin) : PluginDependent<EcoPlugin>(plugin), Listener { class GUIListener(private val plugin: EcoPlugin) : Listener {
@EventHandler @EventHandler
fun handleSlotClick(event: InventoryClickEvent) { fun handleSlotClick(event: InventoryClickEvent) {
val player = event.whoClicked val player = event.whoClicked
@@ -39,7 +38,7 @@ class GUIListener(plugin: EcoPlugin) : PluginDependent<EcoPlugin>(plugin), Liste
val extendedInventory = MenuHandler.getExtendedInventory(event.clickedInventory!!) ?: return val extendedInventory = MenuHandler.getExtendedInventory(event.clickedInventory!!) ?: return
plugin.scheduler.run{ extendedInventory.refresh(player) } plugin.scheduler.run { extendedInventory.refresh(player) }
} }
@EventHandler @EventHandler
@@ -52,7 +51,7 @@ class GUIListener(plugin: EcoPlugin) : PluginDependent<EcoPlugin>(plugin), Liste
MenuHandler.getMenu(player.openInventory.topInventory) ?: return MenuHandler.getMenu(player.openInventory.topInventory) ?: return
MenuHandler.getExtendedInventory(player.openInventory.topInventory) ?: return MenuHandler.getExtendedInventory(player.openInventory.topInventory) ?: return
plugin.scheduler.run{ MenuHandler.getExtendedInventory(player.openInventory.topInventory)?.refresh(player) } plugin.scheduler.run { MenuHandler.getExtendedInventory(player.openInventory.topInventory)?.refresh(player) }
} }
@EventHandler @EventHandler

View File

@@ -1,7 +1,6 @@
package com.willfp.eco.spigot.integrations.antigrief package com.willfp.eco.spigot.integrations.antigrief
import com.willfp.eco.core.EcoPlugin import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.PluginDependent
import com.willfp.eco.core.integrations.antigrief.AntigriefWrapper import com.willfp.eco.core.integrations.antigrief.AntigriefWrapper
import me.angeschossen.lands.api.integration.LandsIntegration import me.angeschossen.lands.api.integration.LandsIntegration
import me.angeschossen.lands.api.role.enums.RoleSetting import me.angeschossen.lands.api.role.enums.RoleSetting
@@ -10,8 +9,8 @@ import org.bukkit.block.Block
import org.bukkit.entity.LivingEntity import org.bukkit.entity.LivingEntity
import org.bukkit.entity.Player import org.bukkit.entity.Player
class AntigriefLands(plugin: EcoPlugin) : PluginDependent<EcoPlugin?>(plugin), AntigriefWrapper { class AntigriefLands(private val plugin: EcoPlugin) : AntigriefWrapper {
private val landsIntegration = LandsIntegration(this.plugin!!) private val landsIntegration = LandsIntegration(this.plugin)
override fun canBreakBlock( override fun canBreakBlock(
player: Player, player: Player,
block: Block block: Block

View File

@@ -0,0 +1,31 @@
package com.willfp.eco.spigot.integrations.shop
import com.willfp.eco.core.integrations.shop.ShopWrapper
import com.willfp.eco.core.items.Items
import net.brcdev.shopgui.ShopGuiPlusApi
import net.brcdev.shopgui.provider.item.ItemProvider
import org.bukkit.configuration.ConfigurationSection
import org.bukkit.inventory.ItemStack
class ShopShopGuiPlus : ShopWrapper {
override fun registerEcoProvider() {
ShopGuiPlusApi.registerItemProvider(EcoShopGuiPlusProvider())
}
class EcoShopGuiPlusProvider : ItemProvider("eco") {
override fun isValidItem(itemStack: ItemStack?): Boolean {
itemStack ?: return false
return Items.isCustomItem(itemStack)
}
override fun loadItem(configurationSection: ConfigurationSection): ItemStack? {
val id = configurationSection.getString("eco")
return if (id == null) null else Items.lookup(id)?.item
}
override fun compare(itemStack1: ItemStack, itemStack2: ItemStack): Boolean {
return Items.getCustomItem(itemStack1)?.key == Items.getCustomItem(itemStack2)?.key
}
}
}

View File

@@ -20,6 +20,7 @@ softdepend:
- PlaceholderAPI - PlaceholderAPI
- mcMMO - mcMMO
- CombatLogX - CombatLogX
- ShopGuiPlus
libraries: libraries:
- org.reflections:reflections:0.9.12 - org.reflections:reflections:0.9.12
- org.apache.maven:maven-artifact:3.0.3 - org.apache.maven:maven-artifact:3.0.3

View File

@@ -1,2 +1,2 @@
version = 6.5.1 version = 6.6.0
plugin-name = eco plugin-name = eco