mirror of
https://github.com/TheDeus-Group/TFM-4.3-Reloaded.git
synced 2024-05-15 13:11:17 +00:00
267 lines
9.9 KiB
Java
267 lines
9.9 KiB
Java
package me.StevenLawson.TotalFreedomMod;
|
|
|
|
import com.google.common.base.Function;
|
|
import me.StevenLawson.TotalFreedomMod.admin.AdminList;
|
|
import me.StevenLawson.TotalFreedomMod.announcer.Announcer;
|
|
import me.StevenLawson.TotalFreedomMod.ban.BanManager;
|
|
import me.StevenLawson.TotalFreedomMod.ban.PermbanList;
|
|
import me.StevenLawson.TotalFreedomMod.commands.Commands;
|
|
import me.StevenLawson.TotalFreedomMod.discord.bridge.DiscordBridge;
|
|
import me.StevenLawson.TotalFreedomMod.command.CommandBlocker;
|
|
import me.StevenLawson.TotalFreedomMod.commands.FreedomCommand;
|
|
import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry;
|
|
import me.StevenLawson.TotalFreedomMod.deprecated.bridge.BukkitTelnetBridge;
|
|
import me.StevenLawson.TotalFreedomMod.gamerule.GameRuleHandler;
|
|
import me.StevenLawson.TotalFreedomMod.httpd.HTTPDManager;
|
|
import me.StevenLawson.TotalFreedomMod.listener.*;
|
|
import me.StevenLawson.TotalFreedomMod.player.HeartBeat;
|
|
import me.StevenLawson.TotalFreedomMod.player.PlayerList;
|
|
import me.StevenLawson.TotalFreedomMod.manager.UUIDManager;
|
|
import me.StevenLawson.TotalFreedomMod.util.Utilities;
|
|
import me.StevenLawson.TotalFreedomMod.world.AdminWorld;
|
|
import me.StevenLawson.TotalFreedomMod.world.FlatlandsWorld;
|
|
import me.StevenLawson.TotalFreedomMod.world.ProtectedArea;
|
|
import org.bukkit.World;
|
|
import org.bukkit.configuration.InvalidConfigurationException;
|
|
import org.bukkit.configuration.file.FileConfiguration;
|
|
import org.bukkit.configuration.file.YamlConfiguration;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.plugin.PluginManager;
|
|
import org.bukkit.plugin.ServicePriority;
|
|
import org.bukkit.plugin.java.JavaPlugin;
|
|
import org.bukkit.scheduler.BukkitRunnable;
|
|
|
|
import java.io.File;
|
|
import java.io.IOException;
|
|
import java.util.Date;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
import java.util.Properties;
|
|
import java.util.logging.Logger;
|
|
|
|
public class TotalFreedomMod extends JavaPlugin {
|
|
public static final long HEARTBEAT_RATE = 5L; // Seconds
|
|
public static final long SERVICE_CHECKER_RATE = 120L;
|
|
public static final int MAX_USERNAME_LENGTH = 20;
|
|
//
|
|
public static final String CONFIG_FILENAME = "config.yml";
|
|
public static final String SUPERADMIN_FILENAME = "superadmin.yml";
|
|
public static final String PERMBAN_FILENAME = "permban.yml";
|
|
public static final String PLAYERTAGS_FILENAME = "playerTags.yml";
|
|
public static final String UUID_FILENAME = "uuids.db";
|
|
public static final String PROTECTED_AREA_FILENAME = "protectedareas.dat";
|
|
public static final String SAVED_FLAGS_FILENAME = "savedflags.dat";
|
|
//
|
|
@Deprecated
|
|
public static final String YOU_ARE_NOT_OP = FreedomCommand.YOU_ARE_NOT_OP;
|
|
//
|
|
public static String buildNumber = "1";
|
|
public static String buildDate = Utilities.dateToString(new Date());
|
|
public static String buildCreator = "Unknown";
|
|
//
|
|
public static org.bukkit.Server server;
|
|
public static TotalFreedomMod plugin;
|
|
public static String pluginName;
|
|
public static String pluginVersion;
|
|
//
|
|
public static boolean lockdownEnabled = false;
|
|
public static Map<Player, Double> fuckoffEnabledFor = new HashMap<>();
|
|
public static Logger logger;
|
|
|
|
private FileConfiguration customConfig; // Custom configuration implementation by Eva
|
|
|
|
@Override
|
|
public void onLoad() {
|
|
TotalFreedomMod.plugin = this;
|
|
TotalFreedomMod.logger = this.getLogger();
|
|
TotalFreedomMod.server = plugin.getServer();
|
|
TotalFreedomMod.pluginName = plugin.getDescription().getName();
|
|
TotalFreedomMod.pluginVersion = plugin.getDescription().getVersion();
|
|
|
|
Log.setPluginLogger(plugin.getLogger());
|
|
Log.setServerLogger(server.getLogger());
|
|
|
|
setAppProperties();
|
|
}
|
|
|
|
@Override
|
|
public void onEnable()
|
|
{
|
|
getConfig().options().copyDefaults(true);
|
|
|
|
Log.info("Made by Madgeek1450 and Prozza");
|
|
Log.info("Compiled " + buildDate + " by " + buildCreator);
|
|
|
|
final Utilities.MethodTimer timer = new Utilities.MethodTimer();
|
|
timer.start();
|
|
|
|
if (!Server.COMPILE_NMS_VERSION.equals(Utilities.getNmsVersion()))
|
|
{
|
|
Log.warning(pluginName + " is compiled for " + Server.COMPILE_NMS_VERSION + " but the server is running "
|
|
+ "version " + Utilities.getNmsVersion() + "!");
|
|
Log.warning("This might result in unexpected behaviour!");
|
|
}
|
|
|
|
Utilities.deleteCoreDumps();
|
|
Utilities.deleteFolder(new File("./_deleteme"));
|
|
|
|
// Create backups
|
|
Utilities.createBackups(CONFIG_FILENAME, true);
|
|
Utilities.createBackups(SUPERADMIN_FILENAME);
|
|
Utilities.createBackups(PERMBAN_FILENAME);
|
|
Utilities.createBackups(PLAYERTAGS_FILENAME);
|
|
this.createCustomConfig();
|
|
// Load services
|
|
UUIDManager.load();
|
|
AdminList.load();
|
|
PermbanList.load();
|
|
PlayerList.load();
|
|
BanManager.load();
|
|
Announcer.load();
|
|
ProtectedArea.load();
|
|
DiscordBridge.load();
|
|
|
|
// Start SuperAdmin service
|
|
server.getServicesManager().register(Function.class, AdminList.SUPERADMIN_SERVICE, plugin, ServicePriority.Normal);
|
|
|
|
final PluginManager pm = server.getPluginManager();
|
|
pm.registerEvents(new EntityListener(), plugin);
|
|
pm.registerEvents(new BlockListener(), plugin);
|
|
pm.registerEvents(new PlayerListener(), plugin);
|
|
pm.registerEvents(new WeatherListener(), plugin);
|
|
pm.registerEvents(new ServerListener(), plugin);
|
|
|
|
// Bridge
|
|
pm.registerEvents(new BukkitTelnetBridge(), plugin);
|
|
pm.registerEvents(new WorldEditListener(), plugin);
|
|
|
|
try {
|
|
FlatlandsWorld.getInstance().getWorld();
|
|
} catch (Exception ex) {
|
|
Log.warning("Could not load world: Flatlands");
|
|
}
|
|
|
|
try {
|
|
AdminWorld.getInstance().getWorld();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.warning("Could not load world: AdminWorld");
|
|
}
|
|
|
|
// Initialize game rules
|
|
GameRuleHandler.setGameRule(GameRuleHandler.TFM_GameRule.DO_DAYLIGHT_CYCLE, !ConfigurationEntry.DISABLE_NIGHT.getBoolean(), false);
|
|
GameRuleHandler.setGameRule(GameRuleHandler.TFM_GameRule.DO_FIRE_TICK, ConfigurationEntry.ALLOW_FIRE_SPREAD.getBoolean(), false);
|
|
GameRuleHandler.setGameRule(GameRuleHandler.TFM_GameRule.DO_MOB_LOOT, false, false);
|
|
GameRuleHandler.setGameRule(GameRuleHandler.TFM_GameRule.DO_MOB_SPAWNING, !ConfigurationEntry.MOB_LIMITER_ENABLED.getBoolean(), false);
|
|
GameRuleHandler.setGameRule(GameRuleHandler.TFM_GameRule.DO_TILE_DROPS, false, false);
|
|
GameRuleHandler.setGameRule(GameRuleHandler.TFM_GameRule.MOB_GRIEFING, false, false);
|
|
GameRuleHandler.setGameRule(GameRuleHandler.TFM_GameRule.NATURAL_REGENERATION, true, false);
|
|
GameRuleHandler.commitGameRules();
|
|
|
|
// Disable weather
|
|
if (ConfigurationEntry.DISABLE_WEATHER.getBoolean())
|
|
{
|
|
for (World world : server.getWorlds())
|
|
{
|
|
world.setThundering(false);
|
|
world.setStorm(false);
|
|
world.setThunderDuration(0);
|
|
world.setWeatherDuration(0);
|
|
}
|
|
}
|
|
|
|
// Heartbeat
|
|
new HeartBeat(plugin).runTaskTimer(plugin, HEARTBEAT_RATE * 20L, HEARTBEAT_RATE * 20L);
|
|
|
|
Commands.registerCommands(this);
|
|
|
|
// Start services
|
|
HTTPDManager.start();
|
|
|
|
timer.update();
|
|
|
|
Log.info("Version " + pluginVersion + " for " + Server.COMPILE_NMS_VERSION + " enabled in " + timer.getTotal() + "ms");
|
|
|
|
// Metrics @ http://mcstats.org/plugin/TotalFreedomMod
|
|
// No longer exist!
|
|
/*try
|
|
{
|
|
final Metrics metrics = new Metrics(plugin);
|
|
metrics.start();
|
|
}
|
|
catch (IOException ex)
|
|
{
|
|
Log.warning("Failed to submit metrics data: " + ex.getMessage());
|
|
}*/
|
|
|
|
new BukkitRunnable()
|
|
{
|
|
@Override
|
|
public void run()
|
|
{
|
|
CommandBlocker.load();
|
|
|
|
// Add spawnpoints later - https://github.com/TotalFreedom/TotalFreedomMod/issues/438
|
|
ProtectedArea.autoAddSpawnpoints();
|
|
}
|
|
}.runTaskLater(plugin, 20L);
|
|
}
|
|
|
|
@Override
|
|
public void onDisable()
|
|
{
|
|
HTTPDManager.stop();
|
|
BanManager.save();
|
|
UUIDManager.close();
|
|
DiscordBridge.stop();
|
|
|
|
server.getScheduler().cancelTasks(plugin);
|
|
|
|
Log.info("Plugin disabled");
|
|
}
|
|
|
|
public FileConfiguration getCustomConfig() {
|
|
return this.customConfig;
|
|
}
|
|
//CustomConfig implementation by Eva
|
|
private void createCustomConfig() {
|
|
File customConfigFile = new File(getDataFolder(), "playerTags.yml");
|
|
if (!customConfigFile.exists()) {
|
|
customConfigFile.getParentFile().mkdirs();
|
|
saveResource("playerTags.yml", false);
|
|
}
|
|
|
|
customConfig= new YamlConfiguration();
|
|
try {
|
|
customConfig.load(customConfigFile);
|
|
} catch (IOException | InvalidConfigurationException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
private static void setAppProperties()
|
|
{
|
|
try
|
|
{
|
|
//final InputStream in = plugin.getResource("appinfo.properties");
|
|
Properties props = new Properties();
|
|
|
|
// in = plugin.getClass().getResourceAsStream("/appinfo.properties");
|
|
//props.load(in);
|
|
//in.close();
|
|
|
|
//TotalFreedomMod.buildNumber = props.getProperty("program.buildnumber");
|
|
//TotalFreedomMod.buildDate = props.getProperty("program.builddate");
|
|
//TotalFreedomMod.buildCreator = props.getProperty("program.buildcreator");
|
|
TotalFreedomMod.buildNumber = "1337";
|
|
TotalFreedomMod.buildCreator = "You!";
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.severe("Could not load App properties!");
|
|
Log.severe(ex);
|
|
}
|
|
}
|
|
}
|