package com.mengcraft.protect;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.bukkit.Bukkit;
import org.bukkit.command.defaults.SaveOffCommand;
import org.bukkit.plugin.InvalidDescriptionException;
import org.bukkit.plugin.InvalidPluginException;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.UnknownDependencyException;
import org.bukkit.plugin.java.JavaPlugin;
import org.mcstats.Metrics;
import com.mengcraft.protect.listener.AntiBreakFarm;
import com.mengcraft.protect.listener.AntiCopyItem;
import com.mengcraft.protect.listener.AntiExplosion;
import com.mengcraft.protect.listener.AntiInfinityItem;
import com.mengcraft.protect.listener.AntiOverload;
import com.mengcraft.protect.listener.PlayerLogin;
import com.mengcraft.protect.manager.EntityManager;
import com.mengcraft.protect.manager.PlayerRecordManager;
import com.mengcraft.protect.manager.RedstoneManager;
import com.mengcraft.protect.manager.TickManager;
import com.mengcraft.protect.task.CheckUpdate;
import com.mengcraft.protect.task.ModifySpigot;
import com.mengcraft.protect.task.ReBirth;
import com.mengcraft.protect.task.Restart;
import com.mengcraft.protect.task.SaveWorld;
public class Protect extends JavaPlugin {
private final PluginKiller killer = PluginKiller.getKiller();
@Override
public void onLoad() {
saveDefaultConfig();
}
@Override
public void onEnable() {
if (getConfig().getBoolean("redclock.use", true)) {
int limit = getConfig().getInt("redclock.value", 30);
RedstoneManager manager = RedstoneManager.getManager();
Bukkit.getPluginManager().registerEvents(manager.getEvents(), this);
Bukkit.getScheduler().runTaskTimer(this, manager.getTask(limit), 20, 20);
getLogger().info("防止超高频电路已开启");
}
if (getConfig().getBoolean("restart.use", true)) {
long delay = getConfig().getLong("restart.value", 24) * 72000;
int limit = getConfig().getInt("restart.limit", 0);
Bukkit.getScheduler().runTaskTimer(this, new Restart(this.getServer(), limit), delay, 6000);
getLogger().info("智能重启服务器已开启");
}
if (getConfig().getBoolean("keepfarm.use", true)) {
Bukkit.getPluginManager().registerEvents(new AntiBreakFarm(), this);
getKiller().addName("FarmProtect");
getLogger().info("防止耕地被破坏已开启");
}
if (getConfig().getBoolean("saveworld.use", true)) {
long delay = getConfig().getLong("saveworld.value", 60) * 20;
new SaveOffCommand().execute(getServer().getConsoleSender(), null, null);
getServer().getScheduler().runTaskTimer(this, new SaveWorld(this), delay, delay);
getKiller().addName("AutoSaveWorld");
getKiller().addName("AutoSave");
getKiller().addName("NoSpawnChunks");
getLogger().info("流畅的保存地图已开启");
}
if (getConfig().getBoolean("spawnmob.use", true)) {
int value = getConfig().getInt("spawnmob.value", 16);
EntityManager manager = EntityManager.getManager();
Bukkit.getPluginManager().registerEvents(manager.getEvents(value), this);
getLogger().info("防止密集养殖场已开启");
}
if (getConfig().getBoolean("spigot.use", true)) {
int value = getConfig().getInt("spigot.value", 4);
Bukkit.getScheduler().runTask(this, new ModifySpigot(value));
getLogger().info("优化Spigot配置已开启");
}
if (getConfig().getBoolean("explosion.use", true)) {
Bukkit.getPluginManager().registerEvents(new AntiExplosion(), this);
getLogger().info("防止爆炸毁地图已开启");
}
if (getConfig().getBoolean("sendpacket.use", true)) {
enableAntiSendPacket();
}
getServer().getPluginManager().registerEvents(new AntiCopyItem(), this);
getServer().getPluginManager().registerEvents(new AntiInfinityItem(), this);
Bukkit.getPluginManager().registerEvents(new AntiOverload(this), this);
Bukkit.getPluginManager().registerEvents(getKiller().getEvents(), this);
getServer().getPluginManager().registerEvents(new PlayerLogin(), this);
Bukkit.getScheduler().runTaskTimer(this, TickManager.getManager().getTask(), 1200, 1200);
Bukkit.getScheduler().runTaskTimer(getServer().getPluginManager().getPlugins()[0], new ReBirth(), 100, 100);
getLogger().info("监控硬盘空间等已开启");
getLogger().info("梦梦家服务器官网地址");
getLogger().info("http://www.mengcraft.com");
getCommand("protect").setExecutor(new Commands(this));
try {
new Metrics(this).start();
new Thread(new CheckUpdate(getFile(), getResource("checkuuid"))).start();
} catch (IOException e) {
getLogger().warning("Cant link to mcstats.org!");
}
getKiller().runPluginKiller();
}
private void enableAntiSendPacket() {
String name = getServer().getClass().getName();
if (name.startsWith("org.bukkit.craftbukkit.v1_7_R1")) {
File file = getResourceFile("injector-1.7.2.module");
enablePlugin(file);
getLogger().info("防发包测压蹦服已开启");
} else if (name.startsWith("org.bukkit.craftbukkit.v1_7_R4")) {
File file = getResourceFile("injector-1.7.10.module");
enablePlugin(file);
getLogger().info("防发包测压蹦服已开启");
} else {
getLogger().info("没有适合版本的防发包");
}
}
private void enablePlugin(File file) {
try {
Plugin plugin = getServer().getPluginManager().loadPlugin(file);
getServer().getPluginManager().enablePlugin(plugin);
} catch (UnknownDependencyException e) {
e.printStackTrace();
} catch (InvalidPluginException e) {
e.printStackTrace();
} catch (InvalidDescriptionException e) {
e.printStackTrace();
}
}
private File getResourceFile(String name) {
File output = new File(getDataFolder(), "_temp_.jar");
InputStream in = getResource(name);
byte[] buffer = new byte[8192];
try {
FileOutputStream out = new FileOutputStream(output);
for (int i = in.read(buffer); i > 0; i = in.read(buffer)) {
out.write(buffer, 0, i);
}
out.close();
} catch (IOException e) {
e.printStackTrace();
}
output.deleteOnExit();
return output;
}
@Override
public void onDisable() {
PlayerRecordManager.getManager().saveRecords();
}
public PluginKiller getKiller() {
return killer;
}
}