2016-04-14 16:24:03 +00:00
|
|
|
package me.mrCookieSlime.Slimefun;
|
|
|
|
|
2017-06-22 14:43:49 +00:00
|
|
|
import java.io.File;
|
|
|
|
|
2019-07-17 12:57:52 +00:00
|
|
|
import org.bstats.bukkit.Metrics;
|
2017-06-22 14:43:49 +00:00
|
|
|
import org.bukkit.Bukkit;
|
|
|
|
import org.bukkit.World;
|
|
|
|
import org.bukkit.entity.Player;
|
|
|
|
import org.bukkit.inventory.ItemStack;
|
|
|
|
import org.bukkit.plugin.java.JavaPlugin;
|
|
|
|
import org.bukkit.potion.PotionEffect;
|
|
|
|
import org.bukkit.potion.PotionEffectType;
|
|
|
|
|
2019-07-17 12:57:52 +00:00
|
|
|
import io.github.thebusybiscuit.cscorelib2.updater.BukkitUpdater;
|
|
|
|
import io.github.thebusybiscuit.cscorelib2.updater.GitHubBuildsUpdater;
|
|
|
|
import io.github.thebusybiscuit.cscorelib2.updater.Updater;
|
2016-04-14 16:24:03 +00:00
|
|
|
import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
|
2017-06-13 17:28:54 +00:00
|
|
|
import me.mrCookieSlime.CSCoreLibPlugin.PluginUtils;
|
2017-06-22 14:43:49 +00:00
|
|
|
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
|
2016-04-27 10:07:12 +00:00
|
|
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Reflection.ReflectionUtils;
|
2016-05-18 17:04:27 +00:00
|
|
|
import me.mrCookieSlime.Slimefun.GEO.OreGenSystem;
|
2016-12-05 18:51:39 +00:00
|
|
|
import me.mrCookieSlime.Slimefun.GEO.Resources.NetherIceResource;
|
|
|
|
import me.mrCookieSlime.Slimefun.GEO.Resources.OilResource;
|
2016-05-18 20:26:35 +00:00
|
|
|
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
2016-04-14 16:24:03 +00:00
|
|
|
import me.mrCookieSlime.Slimefun.Objects.MultiBlock;
|
|
|
|
import me.mrCookieSlime.Slimefun.Objects.Research;
|
|
|
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunArmorPiece;
|
|
|
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
|
|
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
|
2019-08-27 19:46:50 +00:00
|
|
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.OreWasher;
|
2019-08-27 11:28:07 +00:00
|
|
|
import me.mrCookieSlime.Slimefun.Setup.CSCoreLibLoader;
|
2017-06-22 14:43:49 +00:00
|
|
|
import me.mrCookieSlime.Slimefun.Setup.Files;
|
|
|
|
import me.mrCookieSlime.Slimefun.Setup.Messages;
|
|
|
|
import me.mrCookieSlime.Slimefun.Setup.MiscSetup;
|
|
|
|
import me.mrCookieSlime.Slimefun.Setup.ResearchSetup;
|
|
|
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
|
|
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunSetup;
|
2016-04-14 16:24:03 +00:00
|
|
|
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
2019-08-25 14:07:06 +00:00
|
|
|
import me.mrCookieSlime.Slimefun.api.PlayerProfile;
|
2016-04-14 16:24:03 +00:00
|
|
|
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
2017-03-31 12:47:43 +00:00
|
|
|
import me.mrCookieSlime.Slimefun.api.SlimefunBackup;
|
2016-04-14 16:24:03 +00:00
|
|
|
import me.mrCookieSlime.Slimefun.api.TickerTask;
|
|
|
|
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
|
|
|
|
import me.mrCookieSlime.Slimefun.api.energy.EnergyNet;
|
|
|
|
import me.mrCookieSlime.Slimefun.api.energy.ItemEnergy;
|
|
|
|
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
|
2019-08-22 19:37:09 +00:00
|
|
|
import me.mrCookieSlime.Slimefun.api.inventory.UniversalBlockMenu;
|
2016-04-14 16:24:03 +00:00
|
|
|
import me.mrCookieSlime.Slimefun.api.item_transport.CargoNet;
|
2019-08-25 14:07:06 +00:00
|
|
|
import me.mrCookieSlime.Slimefun.autosave.BlockAutoSaver;
|
|
|
|
import me.mrCookieSlime.Slimefun.autosave.PlayerAutoSaver;
|
2019-08-25 20:39:59 +00:00
|
|
|
import me.mrCookieSlime.Slimefun.commands.SlimefunCommand;
|
|
|
|
import me.mrCookieSlime.Slimefun.commands.SlimefunTabCompleter;
|
2019-08-25 19:41:47 +00:00
|
|
|
import me.mrCookieSlime.Slimefun.hooks.PlaceholderAPIHook;
|
2019-08-25 18:52:38 +00:00
|
|
|
import me.mrCookieSlime.Slimefun.hooks.WorldEditHook;
|
2019-08-26 07:07:02 +00:00
|
|
|
import me.mrCookieSlime.Slimefun.hooks.github.GitHubConnector;
|
|
|
|
import me.mrCookieSlime.Slimefun.hooks.github.GitHubSetup;
|
2019-06-20 07:50:59 +00:00
|
|
|
import me.mrCookieSlime.Slimefun.listeners.AncientAltarListener;
|
|
|
|
import me.mrCookieSlime.Slimefun.listeners.AndroidKillingListener;
|
|
|
|
import me.mrCookieSlime.Slimefun.listeners.ArmorListener;
|
|
|
|
import me.mrCookieSlime.Slimefun.listeners.AutonomousToolsListener;
|
|
|
|
import me.mrCookieSlime.Slimefun.listeners.BackpackListener;
|
|
|
|
import me.mrCookieSlime.Slimefun.listeners.BlockListener;
|
|
|
|
import me.mrCookieSlime.Slimefun.listeners.BowListener;
|
|
|
|
import me.mrCookieSlime.Slimefun.listeners.ClearLaggIntegration;
|
|
|
|
import me.mrCookieSlime.Slimefun.listeners.CoolerListener;
|
|
|
|
import me.mrCookieSlime.Slimefun.listeners.DamageListener;
|
|
|
|
import me.mrCookieSlime.Slimefun.listeners.FurnaceListener;
|
|
|
|
import me.mrCookieSlime.Slimefun.listeners.GearListener;
|
|
|
|
import me.mrCookieSlime.Slimefun.listeners.GuideOnJoinListener;
|
|
|
|
import me.mrCookieSlime.Slimefun.listeners.ItemListener;
|
|
|
|
import me.mrCookieSlime.Slimefun.listeners.ItemPickupListener;
|
|
|
|
import me.mrCookieSlime.Slimefun.listeners.NetworkListener;
|
|
|
|
import me.mrCookieSlime.Slimefun.listeners.PlayerQuitListener;
|
|
|
|
import me.mrCookieSlime.Slimefun.listeners.TalismanListener;
|
|
|
|
import me.mrCookieSlime.Slimefun.listeners.TeleporterListener;
|
|
|
|
import me.mrCookieSlime.Slimefun.listeners.ToolListener;
|
|
|
|
import me.mrCookieSlime.Slimefun.listeners.WorldListener;
|
2019-08-29 08:26:36 +00:00
|
|
|
import me.mrCookieSlime.Slimefun.utils.Settings;
|
|
|
|
import me.mrCookieSlime.Slimefun.utils.Utilities;
|
2017-03-24 13:04:38 +00:00
|
|
|
import net.coreprotect.CoreProtect;
|
|
|
|
import net.coreprotect.CoreProtectAPI;
|
2016-04-14 16:24:03 +00:00
|
|
|
|
2019-08-29 13:13:40 +00:00
|
|
|
public final class SlimefunStartup extends JavaPlugin {
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
public static SlimefunStartup instance;
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2019-08-29 13:13:40 +00:00
|
|
|
private static PluginUtils utils;
|
|
|
|
private static Config researches;
|
|
|
|
private static Config items;
|
|
|
|
private static Config whitelist;
|
|
|
|
private static Config config;
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
public static TickerTask ticker;
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2017-02-06 18:28:06 +00:00
|
|
|
private CoreProtectAPI coreProtectAPI;
|
2019-08-29 08:26:36 +00:00
|
|
|
|
2019-08-27 11:28:07 +00:00
|
|
|
private Utilities utilities = new Utilities();
|
2019-08-29 08:26:36 +00:00
|
|
|
private Settings settings;
|
2017-02-06 18:28:06 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
private boolean clearlag = false;
|
2016-11-19 23:23:37 +00:00
|
|
|
private boolean exoticGarden = false;
|
2017-02-06 18:28:06 +00:00
|
|
|
private boolean coreProtect = false;
|
2019-08-27 15:55:20 +00:00
|
|
|
|
2016-08-05 23:11:32 +00:00
|
|
|
// Supported Versions of Minecraft
|
2019-08-28 08:59:20 +00:00
|
|
|
private final String[] supported = {"v1_14_"};
|
2019-03-27 20:48:34 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
@Override
|
|
|
|
public void onEnable() {
|
|
|
|
CSCoreLibLoader loader = new CSCoreLibLoader(this);
|
|
|
|
if (loader.load()) {
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2017-06-14 10:35:25 +00:00
|
|
|
String currentVersion = ReflectionUtils.getVersion();
|
|
|
|
|
|
|
|
if (currentVersion.startsWith("v")) {
|
|
|
|
boolean compatibleVersion = false;
|
|
|
|
StringBuilder versions = new StringBuilder();
|
2019-03-27 20:48:34 +00:00
|
|
|
|
2017-06-14 10:35:25 +00:00
|
|
|
int i = 0;
|
|
|
|
for (String version: supported) {
|
|
|
|
if (currentVersion.startsWith(version)) {
|
|
|
|
compatibleVersion = true;
|
|
|
|
}
|
2019-03-27 20:48:34 +00:00
|
|
|
|
2017-06-14 10:35:25 +00:00
|
|
|
if (i == 0) versions.append(version.substring(1).replaceFirst("_", ".").replace("_", ".X"));
|
|
|
|
else if (i == supported.length - 1) versions.append(" or " + version.substring(1).replaceFirst("_", ".").replace("_", ".X"));
|
|
|
|
else versions.append(", " + version.substring(1).replaceFirst("_", ".").replace("_", ".X"));
|
2019-04-28 15:22:30 +00:00
|
|
|
|
2017-06-14 10:35:25 +00:00
|
|
|
i++;
|
|
|
|
}
|
2019-03-27 20:48:34 +00:00
|
|
|
|
2017-06-14 10:35:25 +00:00
|
|
|
// Looks like you are using an unsupported Minecraft Version
|
|
|
|
if (!compatibleVersion) {
|
|
|
|
System.err.println("### Slimefun failed to load!");
|
|
|
|
System.err.println("###");
|
|
|
|
System.err.println("### You are using the wrong Version of Minecraft!!!");
|
|
|
|
System.err.println("###");
|
|
|
|
System.err.println("### You are using Minecraft " + ReflectionUtils.getVersion());
|
|
|
|
System.err.println("### but Slimefun v" + getDescription().getVersion() + " requires you to be using");
|
|
|
|
System.err.println("### Minecraft " + versions.toString());
|
|
|
|
System.err.println("###");
|
|
|
|
System.err.println("### Please use an older Version of Slimefun and disable auto-updating");
|
|
|
|
System.err.println("### or consider updating your Server Software.");
|
|
|
|
getServer().getPluginManager().disablePlugin(this);
|
|
|
|
return;
|
2016-08-05 23:11:32 +00:00
|
|
|
}
|
2016-04-27 10:07:12 +00:00
|
|
|
}
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
instance = this;
|
|
|
|
System.out.println("[Slimefun] Loading Files...");
|
|
|
|
Files.cleanup();
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
System.out.println("[Slimefun] Loading Config...");
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
utils = new PluginUtils(this);
|
|
|
|
utils.setupConfig();
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2016-08-05 23:23:40 +00:00
|
|
|
// Loading all extra configs
|
2016-04-14 16:24:03 +00:00
|
|
|
researches = new Config(Files.RESEARCHES);
|
|
|
|
items = new Config(Files.ITEMS);
|
|
|
|
whitelist = new Config(Files.WHITELIST);
|
2019-08-22 19:37:09 +00:00
|
|
|
|
2019-07-17 12:57:52 +00:00
|
|
|
// Setup Config and messages.yml
|
2016-04-14 16:24:03 +00:00
|
|
|
utils.setupLocalization();
|
|
|
|
config = utils.getConfig();
|
|
|
|
Messages.local = utils.getLocalization();
|
|
|
|
Messages.setup();
|
2019-08-29 08:26:36 +00:00
|
|
|
|
|
|
|
settings = new Settings(config);
|
2019-08-29 13:13:40 +00:00
|
|
|
settings.RESEARCHES_ENABLED = getResearchCfg().getBoolean("enable-researching");
|
|
|
|
settings.SMELTERY_FIRE_BREAK_CHANCE = (Integer) Slimefun.getItemValue("SMELTERY", "chance.fireBreak");
|
2019-08-22 19:37:09 +00:00
|
|
|
|
2019-07-17 12:57:52 +00:00
|
|
|
// Setting up bStats
|
|
|
|
new Metrics(this);
|
2019-08-22 19:37:09 +00:00
|
|
|
|
2019-07-17 12:57:52 +00:00
|
|
|
// Setting up the Auto-Updater
|
|
|
|
Updater updater;
|
2019-08-22 19:37:09 +00:00
|
|
|
|
2019-07-17 12:57:52 +00:00
|
|
|
if (!getDescription().getVersion().startsWith("DEV - ")) {
|
|
|
|
// We are using an official build, use the BukkitDev Updater
|
|
|
|
updater = new BukkitUpdater(this, getFile(), 53485);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
// If we are using a development build, we want to switch to our custom
|
|
|
|
updater = new GitHubBuildsUpdater(this, getFile(), "TheBusyBiscuit/Slimefun4/master");
|
|
|
|
}
|
2019-08-22 19:37:09 +00:00
|
|
|
|
2019-07-17 12:57:52 +00:00
|
|
|
if (config.getBoolean("options.auto-update")) updater.start();
|
2016-04-14 16:24:03 +00:00
|
|
|
|
2016-08-05 23:23:40 +00:00
|
|
|
// Creating all necessary Folders
|
2019-03-27 20:46:04 +00:00
|
|
|
String[] storage = {"blocks", "stored-blocks", "stored-inventories", "stored-chunks", "universal-inventories", "waypoints", "block-backups"};
|
|
|
|
String[] general = {"scripts", "generators", "error-reports", "cache/github"};
|
|
|
|
for (String s : storage) createDir("data-storage/Slimefun/" + s);
|
|
|
|
for (String s : general) createDir("plugins/Slimefun/" + s);
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
SlimefunManager.plugin = this;
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
System.out.println("[Slimefun] Loading Items...");
|
|
|
|
MiscSetup.setupItemSettings();
|
2019-08-25 19:41:47 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
try {
|
|
|
|
SlimefunSetup.setupItems();
|
|
|
|
} catch (Exception e1) {
|
|
|
|
e1.printStackTrace();
|
|
|
|
}
|
|
|
|
MiscSetup.loadDescriptions();
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
System.out.println("[Slimefun] Loading Researches...");
|
|
|
|
ResearchSetup.setupResearches();
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
MiscSetup.setupMisc();
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
System.out.println("[Slimefun] Loading World Generators...");
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2016-08-05 23:23:40 +00:00
|
|
|
// Generating Oil as an OreGenResource (its a cool API)
|
2016-12-05 18:51:39 +00:00
|
|
|
OreGenSystem.registerResource(new OilResource());
|
|
|
|
OreGenSystem.registerResource(new NetherIceResource());
|
2019-03-27 20:48:34 +00:00
|
|
|
|
2017-01-18 11:44:12 +00:00
|
|
|
// Setting up GitHub Connectors...
|
2019-03-27 20:48:34 +00:00
|
|
|
|
2017-01-18 11:44:12 +00:00
|
|
|
GitHubSetup.setup();
|
2019-03-27 20:48:34 +00:00
|
|
|
|
2016-08-05 23:23:40 +00:00
|
|
|
// All Slimefun Listeners
|
2016-04-14 16:24:03 +00:00
|
|
|
new ArmorListener(this);
|
|
|
|
new ItemListener(this);
|
|
|
|
new BlockListener(this);
|
|
|
|
new GearListener(this);
|
|
|
|
new AutonomousToolsListener(this);
|
|
|
|
new DamageListener(this);
|
|
|
|
new BowListener(this);
|
|
|
|
new ToolListener(this);
|
|
|
|
new FurnaceListener(this);
|
|
|
|
new TeleporterListener(this);
|
|
|
|
new AndroidKillingListener(this);
|
2018-03-09 23:29:22 +00:00
|
|
|
new NetworkListener(this);
|
2018-09-04 09:33:57 +00:00
|
|
|
new ItemPickupListener(this);
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2016-08-05 23:23:40 +00:00
|
|
|
// Toggleable Listeners for performance
|
2016-04-14 16:24:03 +00:00
|
|
|
if (config.getBoolean("items.talismans")) new TalismanListener(this);
|
|
|
|
if (config.getBoolean("items.backpacks")) new BackpackListener(this);
|
|
|
|
if (config.getBoolean("items.coolers")) new CoolerListener(this);
|
2016-08-05 23:23:40 +00:00
|
|
|
|
|
|
|
// Handle Slimefun Guide being given on Join
|
2019-03-30 10:10:54 +00:00
|
|
|
if (config.getBoolean("options.give-guide-on-first-join")) new GuideOnJoinListener(this);
|
2016-08-05 23:23:40 +00:00
|
|
|
|
|
|
|
// Load/Unload Worlds in Slimefun
|
2019-03-30 10:10:54 +00:00
|
|
|
new WorldListener(this);
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2016-08-05 23:23:40 +00:00
|
|
|
// Clear the Slimefun Guide History upon Player Leaving
|
2019-03-30 10:10:54 +00:00
|
|
|
new PlayerQuitListener(this);
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2016-08-05 23:23:40 +00:00
|
|
|
// Initiating various Stuff and all Items with a slightly delay (0ms after the Server finished loading)
|
2018-07-15 06:02:45 +00:00
|
|
|
getServer().getScheduler().scheduleSyncDelayedTask(this, () -> {
|
|
|
|
Slimefun.emeraldenchants = getServer().getPluginManager().isPluginEnabled("EmeraldEnchants");
|
2019-08-29 08:26:36 +00:00
|
|
|
MiscSetup.loadItems(settings);
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2018-07-15 06:02:45 +00:00
|
|
|
for (World world: Bukkit.getWorlds()) {
|
|
|
|
new BlockStorage(world);
|
2016-04-14 16:24:03 +00:00
|
|
|
}
|
2018-07-15 06:02:45 +00:00
|
|
|
|
|
|
|
if (SlimefunItem.getByID("ANCIENT_ALTAR") != null) new AncientAltarListener((SlimefunStartup) instance);
|
2016-04-14 16:24:03 +00:00
|
|
|
}, 0);
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
getCommand("slimefun").setExecutor(new SlimefunCommand(this));
|
|
|
|
getCommand("slimefun").setTabCompleter(new SlimefunTabCompleter());
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2016-08-05 23:23:40 +00:00
|
|
|
// Armor Update Task
|
2016-04-14 16:24:03 +00:00
|
|
|
if (config.getBoolean("options.enable-armor-effects")) {
|
2018-07-15 06:02:45 +00:00
|
|
|
getServer().getScheduler().runTaskTimer(this, () -> {
|
|
|
|
for (Player p: Bukkit.getOnlinePlayers()) {
|
|
|
|
for (ItemStack armor: p.getInventory().getArmorContents()) {
|
|
|
|
if (armor != null) {
|
|
|
|
if (Slimefun.hasUnlocked(p, armor, true)) {
|
|
|
|
if (SlimefunItem.getByItem(armor) instanceof SlimefunArmorPiece) {
|
|
|
|
for (PotionEffect effect: ((SlimefunArmorPiece) SlimefunItem.getByItem(armor)).getEffects()) {
|
|
|
|
p.removePotionEffect(effect.getType());
|
|
|
|
p.addPotionEffect(effect);
|
2016-04-14 16:24:03 +00:00
|
|
|
}
|
2018-07-15 06:02:45 +00:00
|
|
|
}
|
|
|
|
if (SlimefunManager.isItemSimiliar(armor, SlimefunItem.getItem("SOLAR_HELMET"), false)) {
|
|
|
|
if (p.getWorld().getTime() < 12300 || p.getWorld().getTime() > 23850) {
|
|
|
|
if (p.getEyeLocation().getBlock().getLightFromSky() == 15) {
|
|
|
|
ItemEnergy.chargeInventory(p, Float.valueOf(String.valueOf(Slimefun.getItemValue("SOLAR_HELMET", "charge-amount"))));
|
2016-04-14 16:24:03 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2018-07-15 06:02:45 +00:00
|
|
|
}
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2018-07-15 06:02:45 +00:00
|
|
|
for (ItemStack radioactive: SlimefunItem.radioactive) {
|
|
|
|
if (p.getInventory().containsAtLeast(radioactive, 1) || SlimefunManager.isItemSimiliar(p.getInventory().getItemInOffHand(), radioactive, true)) {
|
|
|
|
// Check if player is wearing the hazmat suit
|
|
|
|
// If so, break the loop
|
|
|
|
if (SlimefunManager.isItemSimiliar(SlimefunItems.SCUBA_HELMET, p.getInventory().getHelmet(), true) &&
|
2019-08-22 19:37:09 +00:00
|
|
|
SlimefunManager.isItemSimiliar(SlimefunItems.HAZMATSUIT_CHESTPLATE, p.getInventory().getChestplate(), true) &&
|
|
|
|
SlimefunManager.isItemSimiliar(SlimefunItems.HAZMATSUIT_LEGGINGS, p.getInventory().getLeggings(), true) &&
|
|
|
|
SlimefunManager.isItemSimiliar(SlimefunItems.RUBBER_BOOTS, p.getInventory().getBoots(), true)) {
|
2018-07-15 06:02:45 +00:00
|
|
|
break;
|
|
|
|
}
|
2016-12-13 15:00:35 +00:00
|
|
|
|
2018-07-15 06:02:45 +00:00
|
|
|
// If the item is enabled in the world, then make radioactivity do its job
|
|
|
|
if (Slimefun.isEnabled(p, radioactive, false)) {
|
|
|
|
p.addPotionEffect(new PotionEffect(PotionEffectType.WITHER, 400, 3));
|
|
|
|
p.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 400, 3));
|
|
|
|
p.addPotionEffect(new PotionEffect(PotionEffectType.CONFUSION, 400, 3));
|
|
|
|
p.addPotionEffect(new PotionEffect(PotionEffectType.WEAKNESS, 400, 3));
|
|
|
|
p.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 400, 1));
|
|
|
|
p.addPotionEffect(new PotionEffect(PotionEffectType.SLOW_DIGGING, 400, 1));
|
|
|
|
p.setFireTicks(400);
|
|
|
|
break; // Break the loop to save some calculations
|
2016-04-14 16:24:03 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}, 0L, config.getInt("options.armor-update-interval") * 20L);
|
|
|
|
}
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
ticker = new TickerTask();
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2019-08-29 08:26:36 +00:00
|
|
|
getServer().getScheduler().runTaskTimer(this, new PlayerAutoSaver(), 2000L, settings.BLOCK_AUTO_SAVE_DELAY * 60L * 20L);
|
2019-08-25 14:07:06 +00:00
|
|
|
|
2016-08-05 23:23:40 +00:00
|
|
|
// Starting all ASYNC Tasks
|
2019-08-29 08:26:36 +00:00
|
|
|
getServer().getScheduler().runTaskTimerAsynchronously(this, new BlockAutoSaver(), 2000L, settings.BLOCK_AUTO_SAVE_DELAY * 60L * 20L);
|
2019-03-27 20:48:34 +00:00
|
|
|
getServer().getScheduler().runTaskTimerAsynchronously(this, ticker, 100L, config.getInt("URID.custom-ticker-delay"));
|
|
|
|
|
2019-08-27 12:08:09 +00:00
|
|
|
getServer().getScheduler().runTaskTimerAsynchronously(this, () -> utilities.connectors.forEach(GitHubConnector::pullFile), 80L, 60 * 60 * 20L);
|
2019-04-28 15:22:30 +00:00
|
|
|
|
2016-08-05 23:23:40 +00:00
|
|
|
// Hooray!
|
2016-04-14 16:24:03 +00:00
|
|
|
System.out.println("[Slimefun] Finished!");
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
clearlag = getServer().getPluginManager().isPluginEnabled("ClearLag");
|
2017-02-06 18:28:06 +00:00
|
|
|
coreProtect = getServer().getPluginManager().isPluginEnabled("CoreProtect");
|
|
|
|
|
2019-03-27 20:48:34 +00:00
|
|
|
getServer().getScheduler().runTaskLater(this, () -> {
|
|
|
|
exoticGarden = getServer().getPluginManager().isPluginEnabled("ExoticGarden"); // Had to do it this way, otherwise it seems disabled.
|
|
|
|
}, 0);
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
if (clearlag) new ClearLaggIntegration(this);
|
2019-03-27 20:48:34 +00:00
|
|
|
if (coreProtect) coreProtectAPI = ((CoreProtect) getServer().getPluginManager().getPlugin("CoreProtect")).getAPI();
|
2017-02-06 18:28:06 +00:00
|
|
|
|
2019-08-27 12:08:09 +00:00
|
|
|
|
|
|
|
// WorldEdit Hook to clear Slimefun Data upon //set 0 //cut or any other equivalent
|
|
|
|
if (getServer().getPluginManager().isPluginEnabled("WorldEdit")) {
|
|
|
|
try {
|
|
|
|
Class.forName("com.sk89q.worldedit.extent.Extent");
|
|
|
|
new WorldEditHook();
|
|
|
|
System.out.println("[Slimefun] Successfully hooked into WorldEdit!");
|
|
|
|
} catch (Exception x) {
|
|
|
|
System.err.println("[Slimefun] Failed to hook into WorldEdit!");
|
|
|
|
System.err.println("[Slimefun] Maybe consider updating WorldEdit or Slimefun?");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (getServer().getPluginManager().isPluginEnabled("PlaceholderAPI")) {
|
|
|
|
new PlaceholderAPIHook().register();
|
|
|
|
}
|
|
|
|
|
2019-08-27 19:46:50 +00:00
|
|
|
OreWasher.items = new ItemStack[] {SlimefunItems.IRON_DUST, SlimefunItems.GOLD_DUST, SlimefunItems.ALUMINUM_DUST, SlimefunItems.COPPER_DUST, SlimefunItems.ZINC_DUST, SlimefunItems.TIN_DUST, SlimefunItems.LEAD_DUST, SlimefunItems.SILVER_DUST, SlimefunItems.MAGNESIUM_DUST};
|
2018-04-29 00:13:37 +00:00
|
|
|
|
2016-08-05 23:23:40 +00:00
|
|
|
// Do not show /sf elevator command in our Log, it could get quite spammy
|
2016-04-14 22:37:23 +00:00
|
|
|
CSCoreLib.getLib().filterLog("([A-Za-z0-9_]{3,16}) issued server command: /sf elevator (.{0,})");
|
2016-04-14 16:24:03 +00:00
|
|
|
}
|
|
|
|
}
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
@Override
|
|
|
|
public void onDisable() {
|
|
|
|
Bukkit.getScheduler().cancelTasks(this);
|
2019-04-28 15:22:30 +00:00
|
|
|
|
|
|
|
if (ticker != null) {
|
|
|
|
// Finishes all started movements/removals of block data
|
|
|
|
ticker.HALTED = true;
|
|
|
|
ticker.run();
|
|
|
|
}
|
2019-08-22 19:37:09 +00:00
|
|
|
|
2019-08-29 13:13:40 +00:00
|
|
|
PlayerProfile.iterator().forEachRemaining(profile -> {
|
2019-08-25 14:07:06 +00:00
|
|
|
if (profile.isDirty()) profile.save();
|
|
|
|
});
|
|
|
|
|
2019-08-22 19:37:09 +00:00
|
|
|
for (World world: Bukkit.getWorlds()) {
|
|
|
|
try {
|
2016-06-10 16:39:40 +00:00
|
|
|
BlockStorage storage = BlockStorage.getStorage(world);
|
2019-08-22 19:37:09 +00:00
|
|
|
|
2017-03-31 12:47:43 +00:00
|
|
|
if (storage != null) {
|
|
|
|
storage.save(true);
|
2016-06-10 16:39:40 +00:00
|
|
|
}
|
2017-03-31 12:47:43 +00:00
|
|
|
else {
|
|
|
|
System.err.println("[Slimefun] Could not save Slimefun Blocks for World \"" + world.getName() + "\"");
|
2016-04-14 16:24:03 +00:00
|
|
|
}
|
2019-08-22 19:37:09 +00:00
|
|
|
} catch (Exception x) {
|
|
|
|
x.printStackTrace();
|
2016-04-14 16:24:03 +00:00
|
|
|
}
|
2019-08-22 19:37:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
for (UniversalBlockMenu menu: BlockStorage.universal_inventories.values()) {
|
|
|
|
menu.save();
|
|
|
|
}
|
|
|
|
|
|
|
|
SlimefunBackup.start();
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2017-06-22 14:43:49 +00:00
|
|
|
// Prevent Memory Leaks
|
2016-04-14 16:24:03 +00:00
|
|
|
config = null;
|
|
|
|
researches = null;
|
|
|
|
items = null;
|
|
|
|
whitelist = null;
|
|
|
|
instance = null;
|
|
|
|
Messages.local = null;
|
|
|
|
Files.CONFIG = null;
|
|
|
|
Files.DATABASE = null;
|
|
|
|
Files.ITEMS = null;
|
|
|
|
Files.RESEARCHES = null;
|
|
|
|
Files.WHITELIST = null;
|
|
|
|
MultiBlock.list = null;
|
|
|
|
Research.list = null;
|
|
|
|
SlimefunItem.all = null;
|
|
|
|
SlimefunItem.items = null;
|
2017-10-13 14:34:38 +00:00
|
|
|
SlimefunItem.map_id = null;
|
2016-04-14 16:24:03 +00:00
|
|
|
SlimefunItem.handlers = null;
|
|
|
|
SlimefunItem.radioactive = null;
|
|
|
|
SlimefunGuide.history = null;
|
|
|
|
SlimefunCommand.arguments = null;
|
|
|
|
SlimefunCommand.descriptions = null;
|
|
|
|
SlimefunCommand.tabs = null;
|
|
|
|
SlimefunItem.blockhandler = null;
|
|
|
|
BlockMenuPreset.presets = null;
|
|
|
|
BlockStorage.loaded_tickers = null;
|
|
|
|
BlockStorage.ticking_chunks = null;
|
|
|
|
BlockStorage.worlds = null;
|
|
|
|
ChargableBlock.capacitors = null;
|
|
|
|
ChargableBlock.max_charges = null;
|
|
|
|
AContainer.processing = null;
|
|
|
|
AContainer.progress = null;
|
|
|
|
Slimefun.guide_handlers = null;
|
|
|
|
EnergyNet.machines_input = null;
|
|
|
|
EnergyNet.machines_output = null;
|
|
|
|
EnergyNet.machines_storage = null;
|
|
|
|
CargoNet.faces = null;
|
|
|
|
BlockStorage.universal_inventories = null;
|
|
|
|
TickerTask.block_timings = null;
|
2019-08-25 14:07:06 +00:00
|
|
|
PlayerProfile.profiles = null;
|
2019-08-27 19:46:50 +00:00
|
|
|
OreWasher.items = null;
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
for (Player p: Bukkit.getOnlinePlayers()) {
|
|
|
|
p.closeInventory();
|
|
|
|
}
|
|
|
|
}
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2019-03-27 20:46:04 +00:00
|
|
|
private void createDir(String path) {
|
2019-03-27 22:31:32 +00:00
|
|
|
File file = new File(path);
|
2019-08-27 21:08:13 +00:00
|
|
|
if (!file.exists()) file.mkdirs();
|
2019-03-27 20:46:04 +00:00
|
|
|
}
|
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
public static Config getCfg() {
|
|
|
|
return config;
|
|
|
|
}
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
public static Config getResearchCfg() {
|
|
|
|
return researches;
|
|
|
|
}
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
public static Config getItemCfg() {
|
|
|
|
return items;
|
|
|
|
}
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
public static Config getWhitelist() {
|
|
|
|
return whitelist;
|
|
|
|
}
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2019-08-27 18:37:33 +00:00
|
|
|
@Deprecated
|
2016-04-14 16:24:03 +00:00
|
|
|
public static int randomize(int max) {
|
2017-08-12 11:24:16 +00:00
|
|
|
if (max < 1) return 0;
|
2016-04-14 16:24:03 +00:00
|
|
|
return CSCoreLib.randomizer().nextInt(max);
|
|
|
|
}
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2019-08-27 18:37:33 +00:00
|
|
|
@Deprecated
|
2016-04-14 16:24:03 +00:00
|
|
|
public static boolean chance(int max, int percentage) {
|
2017-08-12 13:21:29 +00:00
|
|
|
if (max < 1) return false;
|
2016-04-14 16:24:03 +00:00
|
|
|
return CSCoreLib.randomizer().nextInt(max) <= percentage;
|
|
|
|
}
|
2016-11-19 23:23:37 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
public boolean isClearLagInstalled() {
|
|
|
|
return clearlag;
|
|
|
|
}
|
|
|
|
|
2016-11-19 23:23:37 +00:00
|
|
|
public boolean isExoticGardenInstalled () {
|
|
|
|
return exoticGarden;
|
|
|
|
}
|
2017-02-06 18:28:06 +00:00
|
|
|
|
|
|
|
public boolean isCoreProtectInstalled() {
|
|
|
|
return coreProtect;
|
|
|
|
}
|
|
|
|
|
|
|
|
public CoreProtectAPI getCoreProtectAPI() {
|
|
|
|
return coreProtectAPI;
|
|
|
|
}
|
2019-08-27 11:28:07 +00:00
|
|
|
|
|
|
|
public Utilities getUtilities() {
|
|
|
|
return utilities;
|
|
|
|
}
|
2019-08-29 08:26:36 +00:00
|
|
|
|
|
|
|
public Settings getSettings() {
|
|
|
|
return settings;
|
|
|
|
}
|
2019-03-27 20:48:34 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
}
|