9
0
mirror of https://github.com/Auxilor/EcoMobs.git synced 2025-12-21 16:09:24 +00:00

Updated to use new eco version

This commit is contained in:
Auxilor
2021-01-17 16:00:15 +00:00
parent 3915c17773
commit ec2fce2fd2
14 changed files with 153 additions and 30 deletions

View File

@@ -11,6 +11,7 @@ import com.willfp.illusioner.illusioner.IllusionerManager;
import com.willfp.illusioner.illusioner.listeners.AttackListeners;
import com.willfp.illusioner.illusioner.listeners.DeathListeners;
import com.willfp.illusioner.illusioner.listeners.SpawnListeners;
import lombok.Getter;
import org.bukkit.event.Listener;
import java.util.ArrayList;
@@ -19,11 +20,18 @@ import java.util.List;
@SuppressWarnings("unused")
public class IllusionerPlugin extends AbstractEcoPlugin {
/**
* Instance of the plugin.
*/
@Getter
private static IllusionerPlugin instance;
/**
* Internal constructor called by bukkit on plugin load.
*/
public IllusionerPlugin() {
super("Illusioner", 86576, 9596, "com.willfp.illusioner.proxy", "&9");
instance = this;
}
/**

View File

@@ -1,6 +1,7 @@
package com.willfp.illusioner.commands;
import com.willfp.eco.util.command.AbstractCommand;
import com.willfp.eco.util.plugin.AbstractEcoPlugin;
import com.willfp.illusioner.IllusionerPlugin;
import com.willfp.illusioner.illusioner.IllusionerManager;
import org.bukkit.Bukkit;

View File

@@ -1,7 +1,6 @@
package com.willfp.illusioner.commands;
import com.willfp.eco.util.command.AbstractCommand;
import com.willfp.eco.util.config.Configs;
import com.willfp.illusioner.IllusionerPlugin;
import org.bukkit.command.CommandSender;
import org.jetbrains.annotations.NotNull;
@@ -22,6 +21,6 @@ public class CommandIlreload extends AbstractCommand {
public void onExecute(@NotNull final CommandSender sender,
@NotNull final List<String> args) {
this.getPlugin().reload();
sender.sendMessage(Configs.LANG.getMessage("reloaded"));
sender.sendMessage(this.getPlugin().getLangYml().getMessage("reloaded"));
}
}

View File

@@ -1,12 +1,14 @@
package com.willfp.illusioner.config.configs;
import com.willfp.eco.util.config.BaseConfig;
import com.willfp.eco.util.plugin.AbstractEcoPlugin;
import com.willfp.illusioner.IllusionerPlugin;
public class Attacks extends BaseConfig {
/**
* Instantiate attacks.yml.
*/
public Attacks() {
super("attacks", false);
super("attacks", false, IllusionerPlugin.getInstance());
}
}

View File

@@ -1,12 +1,14 @@
package com.willfp.illusioner.config.configs;
import com.willfp.eco.util.config.BaseConfig;
import com.willfp.eco.util.plugin.AbstractEcoPlugin;
import com.willfp.illusioner.IllusionerPlugin;
public class Drops extends BaseConfig {
/**
* Instantiate drops.yml.
*/
public Drops() {
super("drops", false);
super("drops", false, IllusionerPlugin.getInstance());
}
}

View File

@@ -1,12 +1,14 @@
package com.willfp.illusioner.config.configs;
import com.willfp.eco.util.config.BaseConfig;
import com.willfp.eco.util.plugin.AbstractEcoPlugin;
import com.willfp.illusioner.IllusionerPlugin;
public class Sounds extends BaseConfig {
/**
* Instantiate sounds.yml.
*/
public Sounds() {
super("sounds", false);
super("sounds", false, IllusionerPlugin.getInstance());
}
}

View File

@@ -1,10 +1,12 @@
package com.willfp.illusioner.illusioner;
import com.willfp.eco.util.plugin.AbstractEcoPlugin;
import com.willfp.illusioner.IllusionerPlugin;
import com.willfp.illusioner.illusioner.options.IllusionerOptions;
public class IllusionerManager {
/**
* The options related to the illusioner.
*/
public static final IllusionerOptions OPTIONS = new IllusionerOptions();
public static final IllusionerOptions OPTIONS = new IllusionerOptions(IllusionerPlugin.getInstance());
}

View File

@@ -1,12 +1,11 @@
package com.willfp.illusioner.illusioner.listeners;
import com.willfp.eco.util.ProxyUtils;
import com.willfp.eco.util.internal.PluginDependent;
import com.willfp.eco.util.plugin.AbstractEcoPlugin;
import com.willfp.illusioner.illusioner.BlockStructure;
import com.willfp.illusioner.illusioner.IllusionerManager;
import com.willfp.illusioner.proxy.proxies.EntityIllusionerProxy;
import com.willfp.illusioner.proxy.proxies.IllusionerHelperProxy;
import com.willfp.illusioner.util.ProxyUtils;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Illusioner;

View File

@@ -1,6 +1,7 @@
package com.willfp.illusioner.illusioner.options;
import com.willfp.eco.util.config.Configs;
import com.willfp.eco.util.internal.PluginDependent;
import com.willfp.eco.util.plugin.AbstractEcoPlugin;
import com.willfp.illusioner.config.IllusionerConfigs;
import com.willfp.illusioner.illusioner.OptionedSound;
import lombok.Getter;
@@ -14,7 +15,7 @@ import java.util.HashSet;
import java.util.Set;
@ToString
public class GameplayOptions {
public class GameplayOptions extends PluginDependent {
/**
* The sound played when the illusioner takes damage.
*/
@@ -57,6 +58,14 @@ public class GameplayOptions {
@Getter
private boolean ignoreExplosionDamage;
/**
* Gameplay options.
* @param plugin The plugin.
*/
public GameplayOptions(@NotNull final AbstractEcoPlugin plugin) {
super(plugin);
}
/**
* Reload the options.
*/
@@ -77,7 +86,7 @@ public class GameplayOptions {
shuffle = IllusionerConfigs.ATTACKS.getBool("shuffle.enabled");
shuffleChance = IllusionerConfigs.ATTACKS.getDouble("shuffle.chance");
ignoreExplosionDamage = Configs.CONFIG.getBool("ignore-explosion-damage");
ignoreExplosionDamage = this.getPlugin().getConfigYml().getBool("ignore-explosion-damage");
effectOptions.clear();
IllusionerConfigs.ATTACKS.getConfig().getConfigurationSection("effects").getKeys(false).forEach(key -> {

View File

@@ -1,7 +1,8 @@
package com.willfp.illusioner.illusioner.options;
import com.willfp.eco.util.NumberUtils;
import com.willfp.eco.util.config.Configs;
import com.willfp.eco.util.internal.PluginDependent;
import com.willfp.eco.util.plugin.AbstractEcoPlugin;
import com.willfp.eco.util.tuplets.Pair;
import com.willfp.illusioner.config.IllusionerConfigs;
import com.willfp.illusioner.illusioner.BlockStructure;
@@ -13,12 +14,13 @@ import org.bukkit.Sound;
import org.bukkit.boss.BarColor;
import org.bukkit.boss.BarStyle;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import java.util.HashSet;
import java.util.Set;
@ToString
public class IllusionerOptions {
public class IllusionerOptions extends PluginDependent {
/**
* The boss bar color.
*/
@@ -82,7 +84,7 @@ public class IllusionerOptions {
* The gameplay options.
*/
@Getter
private final GameplayOptions gameplayOptions = new GameplayOptions();
private final GameplayOptions gameplayOptions = new GameplayOptions(this.getPlugin());
/**
* If plugin-based illusioners should override vanilla illusioners.
@@ -92,8 +94,11 @@ public class IllusionerOptions {
/**
* Create new illusioner options.
*
* @param plugin The plugin.
*/
public IllusionerOptions() {
public IllusionerOptions(@NotNull final AbstractEcoPlugin plugin) {
super(plugin);
reload();
}
@@ -101,13 +106,13 @@ public class IllusionerOptions {
* Reload options from config.
*/
public void reload() {
color = BarColor.valueOf(Configs.CONFIG.getString("bossbar.color"));
style = BarStyle.valueOf(Configs.CONFIG.getString("bossbar.style"));
name = Configs.CONFIG.getString("name");
xpBounds = new Pair<>(Configs.CONFIG.getInt("xp.minimum"), Configs.CONFIG.getInt("xp.maximum"));
maxHealth = Configs.CONFIG.getDouble("max-health");
attackDamage = Configs.CONFIG.getDouble("attack-damage");
override = Configs.CONFIG.getBool("override");
color = BarColor.valueOf(this.getPlugin().getConfigYml().getString("bossbar.color"));
style = BarStyle.valueOf(this.getPlugin().getConfigYml().getString("bossbar.style"));
name = this.getPlugin().getConfigYml().getString("name");
xpBounds = new Pair<>(this.getPlugin().getConfigYml().getInt("xp.minimum"), this.getPlugin().getConfigYml().getInt("xp.maximum"));
maxHealth = this.getPlugin().getConfigYml().getDouble("max-health");
attackDamage = this.getPlugin().getConfigYml().getDouble("attack-damage");
override = this.getPlugin().getConfigYml().getBool("override");
spawnSounds = new HashSet<>();
IllusionerConfigs.SOUNDS.getConfig().getConfigurationSection("spawn").getKeys(false).forEach(key -> {
@@ -128,9 +133,9 @@ public class IllusionerOptions {
});
spawnStructure = new BlockStructure(
Material.valueOf(Configs.CONFIG.getString("spawn.bottom-block")),
Material.valueOf(Configs.CONFIG.getString("spawn.middle-block")),
Material.valueOf(Configs.CONFIG.getString("spawn.top-block"))
Material.valueOf(this.getPlugin().getConfigYml().getString("spawn.bottom-block")),
Material.valueOf(this.getPlugin().getConfigYml().getString("spawn.middle-block")),
Material.valueOf(this.getPlugin().getConfigYml().getString("spawn.top-block"))
);
gameplayOptions.reload();

View File

@@ -0,0 +1,21 @@
package com.willfp.illusioner.util;
import com.willfp.eco.util.proxy.AbstractProxy;
import com.willfp.illusioner.IllusionerPlugin;
import com.willfp.illusioner.proxy.util.ProxyFactory;
import lombok.experimental.UtilityClass;
import org.jetbrains.annotations.NotNull;
@UtilityClass
public class ProxyUtils {
/**
* Get the implementation of a specified proxy.
*
* @param proxyClass The proxy interface.
* @param <T> The type of the proxy.
* @return The proxy implementation.
*/
public @NotNull <T extends AbstractProxy> T getProxy(@NotNull final Class<T> proxyClass) {
return new ProxyFactory<>(IllusionerPlugin.getInstance(), proxyClass).getProxy();
}
}

View File

@@ -0,0 +1,75 @@
package com.willfp.illusioner.proxy.util;
import com.willfp.eco.util.internal.PluginDependent;
import com.willfp.eco.util.plugin.AbstractEcoPlugin;
import com.willfp.eco.util.proxy.AbstractProxy;
import com.willfp.eco.util.proxy.ProxyConstants;
import com.willfp.eco.util.proxy.UnsupportedVersionException;
import org.jetbrains.annotations.NotNull;
import java.util.IdentityHashMap;
import java.util.Map;
public class ProxyFactory<T extends AbstractProxy> extends PluginDependent {
/**
* Cached proxy implementations in order to not perform expensive reflective class-finding.
*/
private static final Map<Class<? extends AbstractProxy>, AbstractProxy> CACHE = new IdentityHashMap<>();
/**
* The class of the proxy interface.
*/
private final Class<T> proxyClass;
/**
* Create a new Proxy Factory for a specific type.
*
* @param plugin The plugin to create proxies for.
* @param proxyClass The class of the proxy interface.
*/
public ProxyFactory(@NotNull final AbstractEcoPlugin plugin,
@NotNull final Class<T> proxyClass) {
super(plugin);
this.proxyClass = proxyClass;
}
/**
* Get the implementation of a proxy.
*
* @return The proxy implementation.
*/
public @NotNull T getProxy() {
try {
T cachedProxy = attemptCache();
if (cachedProxy != null) {
return cachedProxy;
}
String className = this.getPlugin().getProxyPackage() + "." + ProxyConstants.NMS_VERSION + "." + proxyClass.getSimpleName().replace("Proxy", "");
final Class<?> class2 = Class.forName(className);
Object instance = class2.getConstructor().newInstance();
if (proxyClass.isAssignableFrom(class2) && proxyClass.isInstance(instance)) {
T proxy = proxyClass.cast(instance);
CACHE.put(proxyClass, proxy);
return proxy;
}
} catch (Exception e) {
// If not returned, then throw error
}
throw new UnsupportedVersionException("You're running an unsupported server version: " + ProxyConstants.NMS_VERSION);
}
private T attemptCache() {
Object proxy = CACHE.get(proxyClass);
if (proxy == null) {
return null;
}
if (proxyClass.isInstance(proxy)) {
return proxyClass.cast(proxy);
}
return null;
}
}