Advertisement
DeadFinder

My snowy plugin

Aug 8th, 2022
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.22 KB | None | 0 0
  1. package me.deadfinder.deadsnowy.main;
  2.  
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.util.ArrayList;
  6. import java.util.Arrays;
  7. import java.util.Collection;
  8. import java.util.logging.Level;
  9. import java.util.stream.Stream;
  10.  
  11. import org.bukkit.Bukkit;
  12. import org.bukkit.ChatColor;
  13. import org.bukkit.Location;
  14. import org.bukkit.Material;
  15. import org.bukkit.World;
  16. import org.bukkit.block.Biome;
  17. import org.bukkit.block.Block;
  18. import org.bukkit.entity.Entity;
  19. import org.bukkit.entity.EntityType;
  20. import org.bukkit.entity.Player;
  21. import org.bukkit.event.EventHandler;
  22. import org.bukkit.event.HandlerList;
  23. import org.bukkit.event.Listener;
  24. import org.bukkit.event.block.BlockBreakEvent;
  25. import org.bukkit.event.block.BlockPlaceEvent;
  26. import org.bukkit.plugin.Plugin;
  27. import org.bukkit.plugin.java.JavaPlugin;
  28. import org.bukkit.potion.PotionEffect;
  29. import org.bukkit.potion.PotionEffectType;
  30.  
  31. import me.deadfinder.deadsnowy.database.Database;
  32. import me.deadfinder.deadsnowy.database.SQLite;
  33.  
  34. public class Main extends JavaPlugin implements Listener {
  35. private Database db;
  36. ArrayList<Biome> SnowyBiomes = new ArrayList<Biome>();
  37. ArrayList<Biome> RainyBiomes = new ArrayList<Biome>();
  38. ArrayList<Material> RainyBiomesBlocks = new ArrayList<Material>();
  39. int FirstTask;
  40. int SecondTask;
  41.  
  42. @Override
  43. public void onEnable() {
  44. File pl_dir = new File(this.getDataFolder() + "");
  45. if (!pl_dir.exists()) {
  46. pl_dir.setReadable(true, false);
  47. pl_dir.setWritable(true, false);
  48. pl_dir.setExecutable(true, false);
  49.  
  50. pl_dir.mkdirs();
  51.  
  52. pl_dir.setReadable(true, false);
  53. pl_dir.setWritable(true, false);
  54. pl_dir.setExecutable(true, false);
  55. }
  56. File dataFolder = new File(this.getDataFolder(), Database.table + ".db");
  57. if (!dataFolder.exists()) {
  58. try {
  59. dataFolder.setReadable(true, false);
  60. dataFolder.setWritable(true, false);
  61. dataFolder.setExecutable(true, false);
  62.  
  63. dataFolder.createNewFile();
  64.  
  65. dataFolder.setReadable(true, false);
  66. dataFolder.setWritable(true, false);
  67. dataFolder.setExecutable(true, false);
  68. } catch (IOException e) {
  69. this.getLogger().log(Level.SEVERE, "File write error: " + Database.table + ".db");
  70. }
  71. }
  72. this.db = new SQLite(this);
  73. SnowyBiomes.addAll(Arrays.asList(Biome.FROZEN_PEAKS, Biome.JAGGED_PEAKS, Biome.SNOWY_SLOPES, Biome.GROVE,
  74. Biome.SNOWY_BEACH, Biome.FROZEN_RIVER, Biome.SNOWY_TAIGA, Biome.ICE_SPIKES, Biome.SNOWY_PLAINS,
  75. Biome.DEEP_FROZEN_OCEAN));
  76. RainyBiomes.addAll(Arrays.asList(Biome.STONY_PEAKS, Biome.JUNGLE, Biome.BAMBOO_JUNGLE, Biome.SPARSE_JUNGLE,
  77. Biome.MUSHROOM_FIELDS, Biome.PLAINS, Biome.SUNFLOWER_PLAINS, Biome.BEACH, Biome.SWAMP,
  78. Biome.DARK_FOREST, Biome.FOREST, Biome.FLOWER_FOREST, Biome.OLD_GROWTH_BIRCH_FOREST, Biome.BIRCH_FOREST,
  79. Biome.LUSH_CAVES, Biome.COLD_OCEAN, Biome.DEEP_COLD_OCEAN, Biome.DEEP_FROZEN_OCEAN,
  80. Biome.DEEP_LUKEWARM_OCEAN, Biome.OCEAN, Biome.RIVER, Biome.WARM_OCEAN, Biome.MEADOW));
  81. RainyBiomesBlocks.addAll(Arrays.asList(Material.GRASS_BLOCK, Material.DIRT, Material.COARSE_DIRT,
  82. Material.PODZOL, Material.ROOTED_DIRT, Material.SAND, Material.MYCELIUM));
  83.  
  84. EnableTasks();
  85. getServer().getPluginManager().registerEvents(this, this);
  86. Bukkit.getConsoleSender()
  87. .sendMessage(ChatColor.GREEN + "[Success]" + ChatColor.WHITE + " DeadSnowy plugin is enabled!");
  88. }
  89.  
  90. @Override
  91. public void onDisable() {
  92. Bukkit.getServer().getScheduler().cancelTask(FirstTask);
  93. Bukkit.getServer().getScheduler().cancelTask(SecondTask);
  94. HandlerList.unregisterAll((Plugin) this);
  95. Bukkit.getConsoleSender()
  96. .sendMessage(ChatColor.RED + "[Warning]" + ChatColor.WHITE + " DeadSnowy plugin is disabled!");
  97. }
  98.  
  99. @EventHandler
  100. public void onPlaceCampfire(final BlockPlaceEvent e) {
  101. if (e.getBlock() != null && e.getBlock().getType().equals(Material.CAMPFIRE)) {
  102. db.load();
  103. db.setCampfire(e.getBlock().getWorld().getName() + ":" + (int) e.getBlock().getLocation().getX() + ":"
  104. + (int) e.getBlock().getLocation().getY() + ":" + (int) e.getBlock().getLocation().getZ());
  105. }
  106. return;
  107. }
  108.  
  109. @EventHandler
  110. public void onRemoveCampfire(final BlockBreakEvent e) {
  111. if (e.getBlock() != null && e.getBlock().getType().equals(Material.CAMPFIRE)) {
  112. db.load();
  113. if (db.getCampfire(e.getBlock().getWorld().getName() + ":" + (int) e.getBlock().getLocation().getX() + ":"
  114. + (int) e.getBlock().getLocation().getY() + ":" + (int) e.getBlock().getLocation().getZ()))
  115. db.remCampfire(e.getBlock().getWorld().getName() + ":" + (int) e.getBlock().getLocation().getX() + ":"
  116. + (int) e.getBlock().getLocation().getY() + ":" + (int) e.getBlock().getLocation().getZ());
  117. }
  118. return;
  119. }
  120.  
  121. public void EnableTasks() {
  122. FirstTask = Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
  123. @Override
  124. public void run() {
  125. for (Player pl : Bukkit.getServer().getOnlinePlayers()) {
  126. Biome pl_bm = pl.getLocation().getBlock().getBiome();
  127. if (SnowyBiomes.contains(pl_bm)
  128. && !pl.getLocation().getBlock().getType().equals(Material.POWDER_SNOW)) {
  129. if (pl.getFreezeTicks() <= 190) {
  130. db.load();
  131. if (db.getAllCampfires() != null) {
  132. for (String s : db.getAllCampfires()) {
  133. Location campf_loc = getLocationString(s);
  134. Collection<Entity> col = pl.getWorld().getNearbyEntities(campf_loc, 6D, 3D, 6D,
  135. (e) -> e.getType() == EntityType.PLAYER);
  136. if (!col.contains(pl)) {
  137. if (Stream.of(pl.getEquipment().getBoots(), pl.getEquipment().getLeggings(),
  138. pl.getEquipment().getChestplate(), pl.getEquipment().getHelmet())
  139. .allMatch(x -> x != null)) {
  140. if (pl.getEquipment().getBoots().getType().equals(Material.LEATHER_BOOTS)
  141. && pl.getEquipment().getLeggings().getType()
  142. .equals(Material.LEATHER_LEGGINGS)
  143. && pl.getEquipment().getChestplate().getType()
  144. .equals(Material.LEATHER_CHESTPLATE)
  145. && pl.getEquipment().getHelmet().getType()
  146. .equals(Material.LEATHER_HELMET)) {
  147. if (pl.getName().equals("DeadFinder")) {
  148. pl.sendMessage("Рядом с костром");
  149. pl.sendMessage(Integer.toString(pl.getFreezeTicks()));
  150. }
  151. return;
  152. } else {
  153. pl.setFreezeTicks(pl.getFreezeTicks() + 40);
  154. pl.addPotionEffect(
  155. new PotionEffect(PotionEffectType.SLOW_DIGGING, 3 * 20, 0));
  156. }
  157. } else {
  158. pl.setFreezeTicks(pl.getFreezeTicks() + 40);
  159. pl.addPotionEffect(
  160. new PotionEffect(PotionEffectType.SLOW_DIGGING, 3 * 20, 0));
  161. }
  162. }
  163. }
  164. } else {
  165. if (Stream
  166. .of(pl.getEquipment().getBoots(), pl.getEquipment().getLeggings(),
  167. pl.getEquipment().getChestplate(), pl.getEquipment().getHelmet())
  168. .allMatch(x -> x != null)) {
  169. if (pl.getEquipment().getBoots().getType().equals(Material.LEATHER_BOOTS)
  170. && pl.getEquipment().getLeggings().getType()
  171. .equals(Material.LEATHER_LEGGINGS)
  172. && pl.getEquipment().getChestplate().getType()
  173. .equals(Material.LEATHER_CHESTPLATE)
  174. && pl.getEquipment().getHelmet().getType()
  175. .equals(Material.LEATHER_HELMET)) {
  176. if (pl.getName().equals("DeadFinder")) {
  177. pl.sendMessage("Не рядом с костром");
  178. pl.sendMessage(Integer.toString(pl.getFreezeTicks()));
  179. }
  180. } else {
  181. pl.setFreezeTicks(pl.getFreezeTicks() + 40);
  182. pl.addPotionEffect(new PotionEffect(PotionEffectType.SLOW_DIGGING, 3 * 20, 0));
  183. }
  184. } else {
  185. pl.setFreezeTicks(pl.getFreezeTicks() + 40);
  186. pl.addPotionEffect(new PotionEffect(PotionEffectType.SLOW_DIGGING, 3 * 20, 0));
  187. }
  188. }
  189. }
  190. }
  191. }
  192. return;
  193. }
  194. }, 0L, 10L);
  195. // SNOW
  196.  
  197. // RAIN
  198. SecondTask = Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
  199. @Override
  200. public void run() {
  201. for (Player pl : Bukkit.getServer().getOnlinePlayers()) {
  202. Biome pl_bm = pl.getLocation().getBlock().getBiome();
  203. int high_bl = pl.getWorld().getHighestBlockAt(pl.getLocation()).getY();
  204. Block under_pl = pl.getWorld().getBlockAt(pl.getLocation().add(0, -1, 0));
  205. int pl_pos = pl.getLocation().getBlockY();
  206. if (RainyBiomes.contains(pl_bm) && pl.getWorld().hasStorm() && pl.getVehicle() == null) {
  207. if (pl_pos > high_bl) {
  208. if (RainyBiomesBlocks.contains(under_pl.getType())) {
  209. pl.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 3 * 20, 0));
  210. pl.addPotionEffect(new PotionEffect(PotionEffectType.SLOW_DIGGING, 3 * 20, 0));
  211. }
  212. }
  213. }
  214. }
  215. return;
  216. }
  217. }, 0L, 10L);
  218. }
  219.  
  220. static public Location getLocationString(final String s) {
  221. if (s == null || s.trim() == "") {
  222. return null;
  223. }
  224. final String[] parts = s.split(":");
  225. if (parts.length == 4) {
  226. final World w = Bukkit.getServer().getWorld(parts[0]);
  227. final int x = Integer.parseInt(parts[1]);
  228. final int y = Integer.parseInt(parts[2]);
  229. final int z = Integer.parseInt(parts[3]);
  230. return new Location(w, x, y, z);
  231. }
  232. return null;
  233. }
  234. }
  235.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement