测试版

This commit is contained in:
tianyu 2024-07-24 06:17:46 +08:00
commit c17e938b58
25 changed files with 1058 additions and 0 deletions

41
.gitignore vendored Normal file
View File

@ -0,0 +1,41 @@
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### IntelliJ IDEA ###
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
*.iws
*.iml
*.ipr
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store
/.idea/
/libs/
/out/

32
pom.xml Normal file
View File

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>DemonNeverLag</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repositories>
<repository>
<id>public-rpg</id>
<url>https://repo.aurora-pixels.com/repository/public-rpg/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.12.2</version>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,54 @@
package me.Demon.DemonNeverLag.ClearEntity;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.entity.Chicken;
import org.bukkit.entity.Egg;
import org.bukkit.entity.Entity;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.ItemMergeEvent;
import org.bukkit.event.entity.ItemSpawnEvent;
import org.bukkit.inventory.ItemStack;
public class AntiChicken implements Listener {
@EventHandler
public void onEntityDropItem(ItemSpawnEvent e) {
ItemStack items = e.getEntity().getItemStack();
if(items.getType() == Material.EGG) {
Location centerLocation = e.getEntity().getLocation();
World world = centerLocation.getWorld();
int radius = 3;
int maxChickenCount = 20;
// 统计在该区域内的鸡的数量
int chickenCount = 0;
for (Entity entity : world.getNearbyEntities(centerLocation, radius, radius, radius)) {
if (entity instanceof Chicken) {
chickenCount++;
}
}
// 如果鸡的数量超过10只将多余的鸡清理掉
if (chickenCount > maxChickenCount) {
int amount = 0;
int chickensToRemove = chickenCount - maxChickenCount;
for (Entity entity : world.getEntities()) {
if (entity instanceof Chicken) {
entity.remove();
amount++;
chickensToRemove--;
if (chickensToRemove <= 0) {
break;
}
}
}
int x = (int) centerLocation.getX();
int y = (int) centerLocation.getY();
int z = (int) centerLocation.getZ();
Bukkit.getConsoleSender().sendMessage("[日志-刷蛋鸡] 检测到密集刷蛋鸡 "+x+","+y+","+z+" 已清理多余鸡["+amount+"只].");
}
}
}
}

View File

@ -0,0 +1,64 @@
package me.Demon.DemonNeverLag.ClearEntity;
import me.Demon.DemonNeverLag.Main;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.entity.*;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.ItemSpawnEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.inventory.ItemStack;
import java.util.ArrayList;
import java.util.List;
public class AntiCow implements Listener {
@EventHandler
public void onBucket_Cow(PlayerInteractEntityEvent e) {
Player p = e.getPlayer();
ItemStack item = p.getItemInHand();
if (!Main.itemIsNull(item) && item.getType() == Material.BUCKET) {
short item_data = item.getData().getData();
if (item_data == 0 && e.getRightClicked().getType() == EntityType.COW) {
if (e.getRightClicked().getType() == EntityType.COW) {
Location centerLocation = e.getRightClicked().getLocation();
World world = centerLocation.getWorld();
int radius = 10;
int maxChickenCount = 20;
// 统计在该区域内的鸡的数量
int chickenCount = 0;
for (Entity entity : world.getNearbyEntities(centerLocation, radius, radius, radius)) {
if (entity instanceof Cow) {
chickenCount++;
}
}
// 如果鸡的数量超过10只将多余的鸡清理掉
if (chickenCount > maxChickenCount) {
int amount = 0;
int chickensToRemove = chickenCount - maxChickenCount;
for (Entity entity : world.getEntities()) {
if (entity instanceof Cow) {
//entity.remove();
((Cow) entity).damage(10);
amount++;
chickensToRemove--;
if (chickensToRemove <= 0) {
break;
}
}
}
int x = (int) centerLocation.getX();
int y = (int) centerLocation.getY();
int z = (int) centerLocation.getZ();
Bukkit.getConsoleSender().sendMessage("[日志-刷奶牛] 检测到密集牛群 "+x+","+y+","+z+" 已清理多余牛["+amount+"只].");
p.sendMessage(Main.prefix+"区块检测到存在密集牛群,已清理§a"+amount+"");
}
}
}
}
}
}

View File

@ -0,0 +1,48 @@
package me.Demon.DemonNeverLag.ClearEntity;
import me.Demon.DemonNeverLag.Main;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.entity.Cow;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntitySpawnEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.inventory.ItemStack;
public class AntiEntity_Nether implements Listener {
@EventHandler
public void onEntitySpawn(EntitySpawnEvent event) {
EntityType entityType = event.getEntityType();
if (entityType.isSpawnable() && entityType != EntityType.PLAYER) {
if (entityType == EntityType.PIG_ZOMBIE || entityType == EntityType.BLAZE || entityType == EntityType.MAGMA_CUBE) {
Location spawnLocation = event.getEntity().getLocation();
if (spawnLocation.getWorld().getName().equalsIgnoreCase("ASkyBlock_nether")) {
int nearbyMonsterCount = countNearbyMonsters(spawnLocation);
if (nearbyMonsterCount >= 40) {
event.setCancelled(true);
}
}
}
}
}
private int countNearbyMonsters(Location location) {
int monsterCount = 0;
for (Entity entity : location.getWorld().getEntities()) {
if (entity.getType().isSpawnable() && entity.getType() != EntityType.PLAYER) {
double distanceSquared = entity.getLocation().distanceSquared(location);
if (distanceSquared <= 150) {
monsterCount++;
}
}
}
return monsterCount;
}
}

View File

@ -0,0 +1,57 @@
package me.Demon.DemonNeverLag.ClearEntity;
import me.Demon.DemonNeverLag.Main;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.entity.*;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.event.player.PlayerShearEntityEvent;
import org.bukkit.inventory.ItemStack;
public class AntiSheep implements Listener {
@EventHandler
public void onShear(PlayerShearEntityEvent e){
Player player = e.getPlayer();
if(e.getEntity().getType() == EntityType.SHEEP){
Sheep sheep = (Sheep) e.getEntity();
if(sheep.isSheared()){
return;
}
Location centerLocation = sheep.getLocation();
World world = centerLocation.getWorld();
int radius = 10;
int maxChickenCount = 20;
int chickenCount = 0;
for (Entity entity : world.getNearbyEntities(centerLocation, radius, radius, radius)) {
if (entity instanceof Sheep) {
chickenCount++;
}
}
if (chickenCount > maxChickenCount) {
int amount = 0;
int chickensToRemove = chickenCount - maxChickenCount;
for (Entity entity : world.getEntities()) {
if (entity instanceof Sheep) {
//entity.remove();
((Sheep) entity).damage(8);
amount++;
chickensToRemove--;
if (chickensToRemove <= 0) {
break;
}
}
}
int x = (int) centerLocation.getX();
int y = (int) centerLocation.getY();
int z = (int) centerLocation.getZ();
Bukkit.getConsoleSender().sendMessage("[日志-刷喜羊羊] 检测到密集羊群 "+x+","+y+","+z+" 已清理多余羊["+amount+"只].");
player.sendMessage(Main.prefix+"区块检测到存在密集羊群,已清理§a"+amount+"");
}
}
}
}

View File

@ -0,0 +1,98 @@
package me.Demon.DemonNeverLag;
import me.Demon.DemonNeverLag.ClearEntity.AntiChicken;
import me.Demon.DemonNeverLag.ClearEntity.AntiCow;
import me.Demon.DemonNeverLag.ClearEntity.AntiEntity_Nether;
import me.Demon.DemonNeverLag.ClearEntity.AntiSheep;
import me.Demon.DemonNeverLag.listener.*;
import me.Demon.DemonNeverLag.task.ClearItem;
import me.Demon.DemonNeverLag.util.Config;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
public class Main extends JavaPlugin {
public static Main plugin;
public static String prefix = "§7[§6战争领域§7] §f";
@Override
public void onEnable() {
plugin = this;
Config.init(loadConfig());
Bukkit.getServer().getPluginManager().registerEvents(new AntiEntity_Nether(), plugin);
Bukkit.getServer().getPluginManager().registerEvents(new AntiSheep(), plugin);
Bukkit.getServer().getPluginManager().registerEvents(new AntiCow(), plugin);
Bukkit.getServer().getPluginManager().registerEvents(new AntiChicken(), plugin);
Bukkit.getServer().getPluginManager().registerEvents(new AntiShuaDongXi(), plugin);
Bukkit.getServer().getPluginManager().registerEvents(new FluidLimit(), plugin);
Bukkit.getServer().getPluginManager().registerEvents(new ArrowRemover(), plugin);
Bukkit.getServer().getPluginManager().registerEvents(new AntiEnderPearl(), plugin);
Bukkit.getServer().getPluginManager().registerEvents(new ProtectFarm(), plugin);
Bukkit.getServer().getPluginManager().registerEvents(new AntiExplode(), plugin);
Bukkit.getServer().getPluginManager().registerEvents(new AntiCrashSign(), plugin);
Bukkit.getServer().getPluginManager().registerEvents(new AntiChatLimit(), plugin);
Bukkit.getServer().getPluginManager().registerEvents(new AntiNoRain(), plugin);
Bukkit.getServer().getPluginManager().registerEvents(new NoSpawnChunk(), plugin);
// Bukkit.getServer().getPluginManager().registerEvents(new SpawnRate(), plugin);
Bukkit.getServer().getPluginManager().registerEvents(new VoidTp(), plugin);
Bukkit.getServer().getPluginManager().registerEvents(new AntiItemMerge(), plugin);
if(Config.ClearItem_butt) {
int clear_time = Config.ClearItem_Delay;
getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
public void run() {
ClearItem.clean_run();
}
}, clear_time * 20L, clear_time * 20L);
getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
public void run() {
ClearItem.domessage();
}
}, 20L, 20L);
}
}
@Override
public void onDisable() {
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String Command, String[] args) {
if (Command.equalsIgnoreCase("neverlag") && sender.isOp()) {
if(args.length == 1 && args[0].equalsIgnoreCase("clearitem")){
ClearItem.clean_run();
sender.sendMessage(prefix+"垃圾清理启动成功.");
}
}
return false;
}
public static boolean itemIsNull(ItemStack item){
return item == null || item.getType() == Material.AIR;
}
public static boolean itemIsLore(ItemStack item){
return item.getItemMeta().getLore() == null;
}
public YamlConfiguration loadConfig() {
saveDefaultConfig();
YamlConfiguration config = new YamlConfiguration();
try {
config.load(new InputStreamReader(new FileInputStream(new File(getDataFolder(), "config.yml")), StandardCharsets.UTF_8));
} catch (IOException | InvalidConfigurationException e) {
e.printStackTrace();
}
return config;
}
}

View File

@ -0,0 +1,22 @@
package me.Demon.DemonNeverLag.listener;
import me.Demon.DemonNeverLag.Main;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
public class AntiChatLimit implements Listener {
@EventHandler
public void chat(AsyncPlayerChatEvent e) {
Player p = e.getPlayer();
if(ChatColor.stripColor(e.getMessage()).length() > 95) {
e.setCancelled(true);
p.sendMessage(Main.prefix+"发送的聊天消息过长,请修改后重新发送。");
}
}
}

View File

@ -0,0 +1,27 @@
package me.Demon.DemonNeverLag.listener;
import me.Demon.DemonNeverLag.Main;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.SignChangeEvent;
public class AntiCrashSign implements Listener {
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onSignChange(SignChangeEvent e) {
Player p = e.getPlayer();
for (int i = 0; i < 4; i++) {
if (e.getLine(i).matches("^[a-zA-Z0-9_]*$")) {
if (e.getLine(i).length() > 20) {
e.setCancelled(true);
p.sendMessage(Main.prefix+"木牌写不下这么长的字符.");
}
} else if (e.getLine(i).length() > 50) {
e.setCancelled(true);
p.sendMessage(Main.prefix+"木牌写不下这么长的字符.");
}
}
}
}

View File

@ -0,0 +1,25 @@
package me.Demon.DemonNeverLag.listener;
import me.Demon.DemonNeverLag.Main;
import me.Demon.DemonNeverLag.util.Config;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
public class AntiEnderPearl implements Listener {
@EventHandler
public void onEnderPa(PlayerInteractEvent e){
Player p = e.getPlayer();
if (Config.NoEnderPearl) {
ItemStack item = p.getItemInHand();
if (!Main.itemIsNull(item) && item.getType() == Material.ENDER_PEARL) {
e.setCancelled(true);
p.sendMessage(Main.prefix+"当前世界禁止了末影珍珠传送。");
}
}
}
}

View File

@ -0,0 +1,40 @@
package me.Demon.DemonNeverLag.listener;
import me.Demon.DemonNeverLag.Main;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityExplodeEvent;
public class AntiExplode implements Listener {
@EventHandler
public void onHIGHESTExplosion(EntityExplodeEvent e){
if (e.isCancelled()){
return;
}
String worldName = e.getLocation().getWorld().getName();
if(AntiWorldName(worldName)) {
e.blockList().clear();
}
}
@EventHandler
public void onMONITORExplosion(EntityExplodeEvent e){
if (e.isCancelled()){
return;
}
String worldName = e.getLocation().getWorld().getName();
if(AntiWorldName(worldName)) {
e.blockList().clear();
}
}
public boolean AntiWorldName(String worldName){
/*if(worldName.equalsIgnoreCase("ASkyBlock_nether")){
return false;
}else if(worldName.equalsIgnoreCase("ASkyBlock")){
return false;
}*/
return true;
}
}

View File

@ -0,0 +1,41 @@
package me.Demon.DemonNeverLag.listener;
import me.Demon.DemonNeverLag.Main;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Item;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.ItemMergeEvent;
import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.metadata.FixedMetadataValue;
public class AntiItemMerge implements Listener {
@EventHandler
public void onpick(PlayerDropItemEvent e) {
Item item = e.getItemDrop();
item.setMetadata("drop",new FixedMetadataValue(Main.plugin,"true"));
}
@EventHandler
public void onItemMerge(ItemMergeEvent e) {
Item item_en = e.getEntity();
Item item = e.getTarget();
if(!item.hasMetadata("drop") && !item_en.hasMetadata("drop")) {
Bukkit.getScheduler().runTaskLater(Main.plugin, new Runnable() {
@Override
public void run() {
ItemStack item = e.getTarget().getItemStack();
if(item.getType() == Material.CACTUS) {
if (item.getAmount() >= 12) {
item.setAmount(12);
}
}
}
}, 2);
}
}
}

View File

@ -0,0 +1,7 @@
package me.Demon.DemonNeverLag.listener;
import org.bukkit.event.Listener;
public class AntiNoPlugin implements Listener {
}

View File

@ -0,0 +1,16 @@
package me.Demon.DemonNeverLag.listener;
import me.Demon.DemonNeverLag.util.Config;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.weather.WeatherChangeEvent;
public class AntiNoRain implements Listener {
@EventHandler
public void onwe(WeatherChangeEvent e) {
if (Config.NoRain) {
e.setCancelled(true);
}
}
}

View File

@ -0,0 +1,67 @@
package me.Demon.DemonNeverLag.listener;
import me.Demon.DemonNeverLag.Main;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
public class AntiShuaDongXi implements Listener {
@EventHandler
public void chat(BlockPlaceEvent e) {
Player p = e.getPlayer();
Location loc = e.getBlock().getLocation();
if(loc.getBlockY() > 250){
e.setCancelled(true);
p.sendMessage(Main.prefix+"您没有在此高空进行建筑的权限.");
}else if(loc.getBlockY() < 2){
e.setCancelled(true);
p.sendMessage(Main.prefix+"您没有在此低空进行建筑的权限.");
}
}
@EventHandler
public void onAnitBook(InventoryClickEvent e){
Player p = (Player) e.getWhoClicked();
if(e.getInventory() != null) {
if(!e.getInventory().getType().name().equalsIgnoreCase("CRAFTING")) {
ItemStack item = e.getCurrentItem();
if (!Main.itemIsNull(item) && item.getType() == Material.BOOK_AND_QUILL) {
e.setCancelled(true);
p.sendMessage(Main.prefix+"此物品因版本限制,无法在背包外其他地方使用.");
return;
}
if (!Main.itemIsNull(item) && item.getType() == Material.WRITTEN_BOOK) {
e.setCancelled(true);
p.sendMessage(Main.prefix+"此物品因版本限制,无法在背包外其他地方使用.");
return;
}
}
}
}
@EventHandler
public void onAnitBookDrop(PlayerDropItemEvent e){
ItemStack item = e.getItemDrop().getItemStack();
if (!Main.itemIsNull(item) && item.getType() == Material.BOOK_AND_QUILL) {
e.setCancelled(true);
return;
}
if (!Main.itemIsNull(item) && item.getType() == Material.WRITTEN_BOOK) {
e.setCancelled(true);
return;
}
}
}

View File

@ -0,0 +1,32 @@
package me.Demon.DemonNeverLag.listener;
import me.Demon.DemonNeverLag.Main;
import me.Demon.DemonNeverLag.util.Config;
import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.scheduler.BukkitRunnable;
public class ArrowRemover implements Listener {
@EventHandler
public void onDamage(EntityDamageByEntityEvent e) {
if (Config.RemoveArrow) {
if (e.getEntity() instanceof Player && e.getDamager() instanceof org.bukkit.entity.Arrow) {
(new BukkitRunnable() {
public void run() {
Player p = (Player) e.getEntity();
try {
((CraftPlayer) p).getHandle().getDataWatcher().wait(9L, (byte) 0);
} catch (InterruptedException ex) {
throw new RuntimeException(ex);
}
}
}).runTaskLater(Main.plugin, 2L);
}
}
}
}

View File

@ -0,0 +1,40 @@
package me.Demon.DemonNeverLag.listener;
import me.Demon.DemonNeverLag.util.Config;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockFromToEvent;
public class FluidLimit implements Listener {
// 最多可流动多远
private final int water_flow = 8;
private final int lava_flow = 3;
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onBlockFromToEvent(BlockFromToEvent e) {
if (Config.FluidLimit) {
Material material = e.getBlock().getType();
Location loc = e.getToBlock().getLocation();
// 检测流方块是否是水
if (material == Material.WATER || material == Material.STATIONARY_WATER) {
// 若水从135格以上的位置出现 并来到了Y135将拦截
if (loc.getY() >= 0 && loc.getY() <= 135) {
if (e.getBlock().getData() >= this.water_flow) {
e.setCancelled(true);
}
}
} else if (material == Material.LAVA || material == Material.STATIONARY_LAVA) {
if (loc.getY() >= 0 && loc.getY() <= 135) {
if (e.getBlock().getData() >= this.lava_flow) {
e.setCancelled(true);
}
}
}
}
}
}

View File

@ -0,0 +1,15 @@
package me.Demon.DemonNeverLag.listener;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.world.WorldInitEvent;
public class NoSpawnChunk implements Listener {
@EventHandler(priority = EventPriority.LOWEST)
public void onWorldLoad(WorldInitEvent e) {
e.getWorld().setKeepSpawnInMemory(false);
}
}

View File

@ -0,0 +1,40 @@
package me.Demon.DemonNeverLag.listener;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.entity.EntityInteractEvent;
import org.bukkit.event.player.PlayerInteractEvent;
public class ProtectFarm implements Listener {
@EventHandler
public void onJump(PlayerInteractEvent e){
if(e.isCancelled()){
return;
}
if(e.getAction() == Action.PHYSICAL) {
if (e.getClickedBlock().getType() == Material.SOIL) {
e.setCancelled(true);
}
}
}
@EventHandler
public void onMobJump(EntityInteractEvent e) {
if (e.isCancelled()) {
return;
}
if (e.getEntityType() == EntityType.PLAYER) {
return;
}
if(e.getBlock().getType() == Material.SOIL){
e.setCancelled(true);
}
}
}

View File

@ -0,0 +1,65 @@
package me.Demon.DemonNeverLag.listener;
import me.Demon.DemonNeverLag.util.Config;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.CreatureSpawnEvent;
import java.util.Locale;
import java.util.Random;
public class SpawnRate implements Listener {
@EventHandler
public void AntiRate(CreatureSpawnEvent e){
if (e.isCancelled()) {
return;
}
String Reason = e.getSpawnReason().toString().toUpperCase();
Random r = new Random();
int rand = r.nextInt(100);
String str1;
switch ((str1 = Reason).hashCode()) {
case -1848073207:
if(!str1.equals("NATURAL")){
break;
}
if(Config.SpawnRate_CommonRate <= 0 || rand > Config.SpawnRate_CommonRate){
e.setCancelled(true);
return;
}
case -1293575864:
if (!str1.equals("SPAWNER")){
break;
}
if(Config.SpawnRate_SpawnerRate <= 0 || rand > Config.SpawnRate_SpawnerRate){
e.setCancelled(true);
return;
}
case -1182414285:
if (!str1.equals("NETHER_PORTAL")){
break;
}
if(Config.SpawnRate_PortalRate <= 0 || rand > Config.SpawnRate_PortalRate){
e.setCancelled(true);
return;
}
case 521567806:
if (!str1.equals("CHUNK_GEN")){
break;
}
if(Config.SpawnRate_ChunkRate <= 0 || rand > Config.SpawnRate_ChunkRate){
e.setCancelled(true);
return;
}
case 1206494573:
if (!str1.equals("VILLAGE_DEFENSE")){
break;
}
if(Config.SpawnRate_IronRate <= 0 || rand > Config.SpawnRate_IronRate){
e.setCancelled(true);
return;
}
}
}
}

View File

@ -0,0 +1,47 @@
package me.Demon.DemonNeverLag.listener;
import com.google.common.collect.Lists;
import javafx.fxml.LoadException;
import me.Demon.DemonNeverLag.util.Config;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
public class VoidTp implements Listener {
private final List<String> isVoidFalling = new ArrayList<>();
@EventHandler
public void onvoidTp(PlayerMoveEvent e){
if (Config.AntiVidTp) {
Player p = e.getPlayer();
if (e.getTo().getBlockY() <= -10) {
if (!isVoidFalling.contains(p.getName())) {
isVoidFalling.add(p.getName());
}
Location spawn = p.getWorld().getSpawnLocation();
p.teleport(spawn.add(0.5, 1, 0.5));
}
}
}
@EventHandler
public void onFall(EntityDamageEvent e){
if(String.valueOf(e.getCause()).equals("FALL") && e.getEntity() instanceof Player){
Player p = (Player) e.getEntity();
if(isVoidFalling.contains(p.getName())){
isVoidFalling.remove(p.getName());
e.setCancelled(true);
}
}
}
}

View File

@ -0,0 +1,77 @@
package me.Demon.DemonNeverLag.task;
import me.Demon.DemonNeverLag.Main;
import me.Demon.DemonNeverLag.util.Config;
import me.Demon.DemonTrash.TrashAPI;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Item;
import org.bukkit.inventory.ItemStack;
public class ClearItem {
public static int nowtime = 0;
public static void domessage(){
nowtime++;
// 每次清理的时间周期 建议900秒
int clear_time = Config.ClearItem_Delay;
int time = clear_time - nowtime;
String PreMessage = Main.prefix+"地面物品将在%TIME%秒后清除";
if(clear_time - nowtime == 60){
Bukkit.broadcastMessage(PreMessage.replace("%TIME%",String.valueOf(time)));
}else if(clear_time - nowtime == 30){
Bukkit.broadcastMessage(PreMessage.replace("%TIME%",String.valueOf(time)));
}else if(clear_time - nowtime == 10){
Bukkit.broadcastMessage(PreMessage.replace("%TIME%",String.valueOf(time)));
}else if(clear_time - nowtime == 5){
Bukkit.broadcastMessage(PreMessage.replace("%TIME%",String.valueOf(time)));
}else if(clear_time - nowtime == 4){
Bukkit.broadcastMessage(PreMessage.replace("%TIME%",String.valueOf(time)));
}else if(clear_time - nowtime == 3){
Bukkit.broadcastMessage(PreMessage.replace("%TIME%",String.valueOf(time)));
}else if(clear_time - nowtime == 2){
Bukkit.broadcastMessage(PreMessage.replace("%TIME%",String.valueOf(time)));
}else if(clear_time - nowtime == 1){
Bukkit.broadcastMessage(PreMessage.replace("%TIME%",String.valueOf(time)));
}else if(clear_time - nowtime <= 0){
nowtime = 0;
}
}
public static void clean_run() {
int count = 0;
String Message = Main.prefix+"清理了%COUNT%物品";
for (World world : Bukkit.getWorlds()) {
String world_Name = world.getName();
// 不清理该List中的世界
if(!Config.ClearItem_NoClearItemWorld.contains(world_Name)) {
for (Entity ent : world.getEntities()) {
if (ent instanceof Item) {
Item item = (Item) ent;
ItemStack items = item.getItemStack();
String name = items.getType().name();
// 不清理该List中的物品
if (!Config.ClearItem_NoClearItemIDList.contains(name)) {
if(!Main.itemIsNull(items)) {
if(!Main.itemIsLore(items)){
TrashAPI.addItemsTrash(ent.getWorld().getName(),items);
}
count++;
ent.remove();
continue;
}
}
}
if(ent instanceof Arrow){
count++;
ent.remove();
continue;
}
}
}
}
Bukkit.broadcastMessage(Message.replace("%COUNT%",String.valueOf(count)));
count = 0;
}
}

View File

@ -0,0 +1,46 @@
package me.Demon.DemonNeverLag.util;
import org.bukkit.configuration.file.YamlConfiguration;
import java.util.ArrayList;
import java.util.List;
public class Config {
private static YamlConfiguration config;
public static boolean NoRain = false;
public static boolean NoEnderPearl = false;
public static boolean RemoveArrow = false;
public static boolean AntiVidTp = false;
public static boolean FluidLimit = false;
public static int ClearItem_Delay = 300;
public static boolean ClearItem_butt = false;
public static List<String> ClearItem_NoClearItemIDList = new ArrayList<>();
public static List<String> ClearItem_NoClearItemWorld = new ArrayList<>();
public static List<String> BlockCommand = new ArrayList<>();
public static int SpawnRate_ChunkRate = 50;
public static int SpawnRate_SpawnerRate = 100;
public static int SpawnRate_IronRate = 40;
public static int SpawnRate_CommonRate = 50;
public static int SpawnRate_PortalRate = 0;
public static void init(YamlConfiguration cfg) {
config = cfg;
AntiVidTp = config.getBoolean("NoVidTp");
FluidLimit = config.getBoolean("FluidLimit");
NoEnderPearl = config.getBoolean("NoEnderPearl");
NoRain = config.getBoolean("NoRain");
ClearItem_Delay = config.getInt("ClearItem.Delay");
ClearItem_butt = config.getBoolean("ClearItem.Butt");
RemoveArrow = config.getBoolean("RemoveArrow");
ClearItem_NoClearItemIDList = config.getStringList("ClearItem.NoClearItemIDList");
ClearItem_NoClearItemWorld = config.getStringList("ClearItem.NoClearItemWorld");
BlockCommand = config.getStringList("BlockCommand");
SpawnRate_ChunkRate = config.getInt("SpawnRate.ChunkRate");
SpawnRate_SpawnerRate = config.getInt("SpawnRate.SpawnerRate");
SpawnRate_IronRate = config.getInt("SpawnRate.IronRate");
SpawnRate_CommonRate = config.getInt("SpawnRate.CommonRate");
SpawnRate_PortalRate = config.getInt("SpawnRate.PortalRate");
}
}

View File

@ -0,0 +1,52 @@
# 是否锁定天气
NoRain: true
# 是否禁止高空流水
FluidLimit: true
# 是否清理地面弓箭
RemoveArrow: true
# 是否禁止末影珍珠传送
NoEnderPearl: true
# 是否开启虚空回传
NoVidTp: false
# 禁止的命令
BlockCommand:
- pve
# 垃圾清理系统
ClearItem:
# 是否开启清理
Butt: true
# 清理周期 单位: 秒
Delay: 900
# 不清理的世界
NoClearItemWorld:
- hub
- wudeng
- kuangqu
# 不清理的物品ID
NoClearItemIDList:
- 276
SpawnRate:
Enable: true
#设置特殊区块(女巫、史莱姆)的刷怪速度,单位为百分比
ChunkRate: 50
#刷怪笼生成怪物速度
SpawnerRate: 100
#村庄生成铁傀儡的速度设置为0可以禁止刷铁塔等不平衡的自动化建筑
IronRate: 40
#普通、自然条件的生成速度
CommonRate: 50
#传送门的生成速度设置为0可以禁止猪人通过传送门防止建造刷金塔
PortalRate: 0
# ###################
# 功能介绍:
# 聊天字符过多bug
# 木牌字符过多bug
# 玩家命令禁止
# 自然天气锁定
# NeverLag的Chunk 区块检测
# NeverLag的刷怪控制
# 防爆炸破坏建筑
# 防止践踏农作物
# 垃圾定时清理系统
#
######################

View File

@ -0,0 +1,5 @@
name: DemonNeverLag
main: me.Demon.DemonNeverLag.Main
version: 1.0.5
commands:
neverlag: