PageRenderTime 59ms CodeModel.GetById 29ms RepoModel.GetById 1ms app.codeStats 0ms

/src/net/edoxile/bettermechanics/utils/MechanicsConfig.java

https://github.com/GuntherDW/BetterMechanics
Java | 377 lines | 320 code | 53 blank | 4 comment | 54 complexity | 2ebf781337556219386a46384fcae4d9 MD5 | raw file
  1. package net.edoxile.bettermechanics.utils;
  2. import net.edoxile.bettermechanics.BetterMechanics;
  3. import net.edoxile.bettermechanics.exceptions.ConfigWriteException;
  4. import com.nijiko.permissions.PermissionHandler;
  5. import com.nijikokun.bukkit.Permissions.Permissions;
  6. import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
  7. import com.zones.Zones;
  8. import com.zones.model.ZoneBase;
  9. import org.bukkit.ChatColor;
  10. import org.bukkit.Location;
  11. import org.bukkit.Material;
  12. import org.bukkit.block.Block;
  13. import org.bukkit.entity.Player;
  14. import org.bukkit.plugin.Plugin;
  15. import org.bukkit.util.config.Configuration;
  16. import java.io.File;
  17. import java.io.FileOutputStream;
  18. import java.io.InputStream;
  19. import java.util.*;
  20. import java.util.jar.JarEntry;
  21. import java.util.jar.JarFile;
  22. import java.util.logging.Logger;
  23. /**
  24. * Created by IntelliJ IDEA.
  25. * User: Edoxile
  26. */
  27. public class MechanicsConfig {
  28. private static final Logger log = Logger.getLogger("Minecraft");
  29. private static BetterMechanics plugin;
  30. private static Configuration config;
  31. public BridgeConfig bridgeConfig;
  32. public GateConfig gateConfig;
  33. public DoorConfig doorConfig;
  34. public LiftConfig liftConfig;
  35. public TeleLiftConfig teleLiftConfig;
  36. public HiddenSwitchConfig hiddenSwitchConfig;
  37. public AmmeterConfig ammeterConfig;
  38. public CauldronConfig cauldronConfig;
  39. public PermissionConfig permissionConfig;
  40. public PenConfig penConfig;
  41. public boolean useTweakcraftUtils;
  42. public MechanicsConfig(BetterMechanics p) throws ConfigWriteException {
  43. plugin = p;
  44. config = plugin.getConfiguration();
  45. config.load();
  46. if (config == null) {
  47. createConfig();
  48. } else {
  49. createConfig();
  50. }
  51. bridgeConfig = new BridgeConfig();
  52. gateConfig = new GateConfig();
  53. doorConfig = new DoorConfig();
  54. liftConfig = new LiftConfig();
  55. teleLiftConfig = new TeleLiftConfig();
  56. hiddenSwitchConfig = new HiddenSwitchConfig();
  57. ammeterConfig = new AmmeterConfig();
  58. cauldronConfig = new CauldronConfig();
  59. permissionConfig = new PermissionConfig();
  60. penConfig = new PenConfig();
  61. useTweakcraftUtils = config.getBoolean("use-tweakcraftutils", false);
  62. }
  63. public void addTeleportHistoryLine(Player player, Location loc) {
  64. if (useTweakcraftUtils && plugin.getTweakcraftUtils() != null) {
  65. if (plugin.getTweakcraftUtils().getConfigHandler().enableTPBack)
  66. plugin.getTweakcraftUtils().getTelehistory().addHistory(player.getName(), loc);
  67. }
  68. }
  69. public void reloadCauldronConfig() {
  70. cauldronConfig = new CauldronConfig();
  71. }
  72. public static class BridgeConfig {
  73. public final boolean enabled;
  74. public final Set<Material> materials;
  75. public final int maxLength;
  76. public BridgeConfig() {
  77. enabled = config.getBoolean("bridge.enabled", true);
  78. maxLength = config.getInt("bridge.max-length", 32);
  79. List<Integer> list = config.getIntList("bridge.allowed-materials", Arrays.asList(3, 4, 5, 22, 35, 41, 42, 45, 47, 57, 87, 88, 89, 91));
  80. Set<Material> hashSet = new HashSet<Material>();
  81. for (int m : list)
  82. hashSet.add(Material.getMaterial(m));
  83. materials = Collections.unmodifiableSet(hashSet);
  84. }
  85. public boolean canUseBlock(Material b) {
  86. return materials.contains(b);
  87. }
  88. }
  89. public class GateConfig {
  90. public final boolean enabled;
  91. public final int maxLength;
  92. public final int maxWidth;
  93. public final int maxHeight;
  94. public GateConfig() {
  95. enabled = config.getBoolean("door.enabled", true);
  96. maxHeight = config.getInt("door.max-height", 32);
  97. maxLength = config.getInt("door.max-length", 32);
  98. maxWidth = config.getInt("door.max-width", 3);
  99. }
  100. }
  101. public class PenConfig {
  102. public final boolean enabled;
  103. public final Material penMaterial;
  104. public PenConfig() {
  105. enabled = config.getBoolean("pen.enabled", true);
  106. penMaterial = Material.getMaterial(config.getInt("pen.material", 280));
  107. }
  108. }
  109. public class DoorConfig {
  110. public final boolean enabled;
  111. public final int maxHeight;
  112. public final Set<Material> materials;
  113. public DoorConfig() {
  114. enabled = config.getBoolean("door.enabled", true);
  115. maxHeight = config.getInt("door.max-height", 32);
  116. List<Integer> list = config.getIntList("door.allowed-materials", Arrays.asList(3, 4, 5, 22, 35, 41, 42, 45, 47, 57, 87, 88, 89, 91));
  117. Set<Material> hashSet = new HashSet<Material>();
  118. for (int m : list)
  119. hashSet.add(Material.getMaterial(m));
  120. materials = Collections.unmodifiableSet(hashSet);
  121. }
  122. public boolean canUseBlock(Material b) {
  123. return materials.contains(b);
  124. }
  125. }
  126. public class LiftConfig {
  127. public final boolean enabled;
  128. public final int maxSearchHeight;
  129. public LiftConfig() {
  130. enabled = config.getBoolean("lift.enabled", true);
  131. maxSearchHeight = config.getInt("lift.max-search-height", 32);
  132. }
  133. }
  134. public class TeleLiftConfig {
  135. public final boolean enabled;
  136. public TeleLiftConfig() {
  137. enabled = config.getBoolean("telelift.enabled", true);
  138. }
  139. }
  140. public class HiddenSwitchConfig {
  141. public final boolean enabled;
  142. public HiddenSwitchConfig() {
  143. enabled = config.getBoolean("hidden-switch.enabled", true);
  144. }
  145. }
  146. public class CauldronConfig {
  147. public final boolean enabled;
  148. public final CauldronCookbook cauldronCookbook;
  149. public CauldronConfig() {
  150. if (config.getBoolean("cauldron.enabled", true)) {
  151. cauldronCookbook = new CauldronCookbook(plugin);
  152. if (cauldronCookbook.size() > 0) {
  153. enabled = true;
  154. } else {
  155. log.warning("[BetterMechanics] Disabled cauldron because there were no recipes found in the config.");
  156. enabled = false;
  157. }
  158. } else {
  159. cauldronCookbook = null;
  160. enabled = false;
  161. }
  162. }
  163. }
  164. public class AmmeterConfig {
  165. public final boolean enabled;
  166. public AmmeterConfig() {
  167. enabled = config.getBoolean("ammeter.enabled", true);
  168. }
  169. }
  170. public class PermissionConfig {
  171. public final boolean usePermissions;
  172. public final boolean useWorldGuard;
  173. public final boolean useZones;
  174. private WorldGuardPlugin worldGuard = null;
  175. private PermissionHandler permissionHandler = null;
  176. private Zones zones = null;
  177. public PermissionConfig() {
  178. usePermissions = config.getBoolean("use-permissions", true);
  179. useWorldGuard = config.getBoolean("use-worldguard", true);
  180. useZones = config.getBoolean("use-zones", true);
  181. if (usePermissions) {
  182. this.setupPermissions();
  183. log.info("[BetterMechanics] Using Permissions");
  184. }
  185. if (useWorldGuard) {
  186. this.setupWorldGuard();
  187. log.info("[BetterMechanics] Using WorldGuard");
  188. }
  189. if (useZones) {
  190. this.setupZones();
  191. log.info("[BetterMechanics] Using Zones");
  192. }
  193. }
  194. private void setupWorldGuard() {
  195. Plugin wg = plugin.getServer().getPluginManager().getPlugin("WorldGuard");
  196. if (worldGuard == null) {
  197. if (wg != null) {
  198. worldGuard = (WorldGuardPlugin) wg;
  199. }
  200. }
  201. }
  202. private void setupPermissions() {
  203. Plugin permissionsPlugin = plugin.getServer().getPluginManager().getPlugin("Permissions");
  204. if (this.permissionHandler == null) {
  205. if (permissionsPlugin != null) {
  206. this.permissionHandler = ((Permissions) permissionsPlugin).getHandler();
  207. } else {
  208. log.info("[BetterMechanics] Permission system not detected, defaulting to OP");
  209. }
  210. }
  211. }
  212. private void setupZones() {
  213. Plugin z = plugin.getServer().getPluginManager().getPlugin("Zones");
  214. if (zones == null) {
  215. if (z != null) {
  216. zones = (Zones) z;
  217. }
  218. }
  219. }
  220. public boolean checkZonesCreate(Player player, Block clickedBlock) {
  221. if (zones == null) {
  222. return true;
  223. } else {
  224. boolean canbuild = true;
  225. ZoneBase zb = zones.getWorldManager(clickedBlock.getWorld()).getActiveZone(clickedBlock);
  226. if (zb != null) {
  227. canbuild = zb.getAccess(player).canBuild();
  228. }
  229. return canbuild;
  230. }
  231. }
  232. public boolean checkZonesHit(Player player, Block clickedBlock) {
  233. if (zones == null) {
  234. return true;
  235. } else {
  236. boolean canhit = true;
  237. ZoneBase zb = zones.getWorldManager(clickedBlock.getWorld()).getActiveZone(clickedBlock);
  238. if (zb != null) {
  239. canhit = zb.getAccess(player).canHit();
  240. }
  241. return canhit;
  242. }
  243. }
  244. public boolean checkPermissions(Player player, String permission) {
  245. if (permissionHandler == null) {
  246. return true;
  247. } else {
  248. return player.isOp() || permissionHandler.permission(player, "bettermechanics." + permission);
  249. }
  250. }
  251. public boolean checkWorldGuard(Player player, Block clickedBlock) {
  252. if (worldGuard == null) {
  253. return true;
  254. } else {
  255. return player.isOp() || worldGuard.canBuild(player, clickedBlock);
  256. }
  257. }
  258. public boolean check(Player player, String type, Block clickedBlock, boolean skipCreateZones, boolean skipHitZones) {
  259. boolean allowed = false;
  260. if (checkPermissions(player, type)) {
  261. if (checkWorldGuard(player, clickedBlock)) {
  262. if (skipCreateZones || checkZonesCreate(player, clickedBlock))
  263. allowed = skipHitZones || checkZonesHit(player, clickedBlock);
  264. }
  265. }
  266. if (!allowed) {
  267. player.sendMessage(ChatColor.RED + "O oh! Seems like you don't have permissions for this!");
  268. }
  269. return allowed;
  270. }
  271. public boolean check(Player player, String type, Block clickedBlock, boolean skipZones) {
  272. return check(player, type, clickedBlock, skipZones, true);
  273. }
  274. }
  275. public PermissionConfig getPermissionConfig() {
  276. return this.permissionConfig;
  277. }
  278. public BridgeConfig getBridgeConfig() {
  279. return this.bridgeConfig;
  280. }
  281. public GateConfig getGateConfig() {
  282. return this.gateConfig;
  283. }
  284. public DoorConfig getDoorConfig() {
  285. return this.doorConfig;
  286. }
  287. public HiddenSwitchConfig getHiddenSwitchConfig() {
  288. return this.hiddenSwitchConfig;
  289. }
  290. public LiftConfig getLiftConfig() {
  291. return this.liftConfig;
  292. }
  293. public TeleLiftConfig getTeleLiftConfig() {
  294. return this.teleLiftConfig;
  295. }
  296. public AmmeterConfig getAmmeterConfig() {
  297. return this.ammeterConfig;
  298. }
  299. public CauldronConfig getCauldronConfig() {
  300. return this.cauldronConfig;
  301. }
  302. public PenConfig getPenConfig() {
  303. return this.penConfig;
  304. }
  305. private void createConfig() throws ConfigWriteException {
  306. File configFile = new File(plugin.getDataFolder(), "config.yml");
  307. if (!configFile.canRead()) {
  308. try {
  309. configFile.getParentFile().mkdirs();
  310. JarFile jar = new JarFile(plugin.getConfigFile());
  311. JarEntry entry = jar.getJarEntry("config.yml");
  312. InputStream is = jar.getInputStream(entry);
  313. FileOutputStream os = new FileOutputStream(configFile);
  314. byte[] buf = new byte[(int) entry.getSize()];
  315. is.read(buf, 0, (int) entry.getSize());
  316. os.write(buf);
  317. os.close();
  318. plugin.getConfiguration().load();
  319. } catch (Exception e) {
  320. throw new ConfigWriteException();
  321. }
  322. }
  323. }
  324. }