测试版
This commit is contained in:
commit
c17e938b58
41
.gitignore
vendored
Normal file
41
.gitignore
vendored
Normal 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
32
pom.xml
Normal 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>
|
|
@ -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+"只].");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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+"只");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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+"只");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
98
src/main/java/me/Demon/DemonNeverLag/Main.java
Normal file
98
src/main/java/me/Demon/DemonNeverLag/Main.java
Normal 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;
|
||||
}
|
||||
}
|
|
@ -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+"发送的聊天消息过长,请修改后重新发送。");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -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+"木牌写不下这么长的字符.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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+"当前世界禁止了末影珍珠传送。");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
package me.Demon.DemonNeverLag.listener;
|
||||
|
||||
import org.bukkit.event.Listener;
|
||||
|
||||
public class AntiNoPlugin implements Listener {
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
65
src/main/java/me/Demon/DemonNeverLag/listener/SpawnRate.java
Normal file
65
src/main/java/me/Demon/DemonNeverLag/listener/SpawnRate.java
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
47
src/main/java/me/Demon/DemonNeverLag/listener/VoidTp.java
Normal file
47
src/main/java/me/Demon/DemonNeverLag/listener/VoidTp.java
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
77
src/main/java/me/Demon/DemonNeverLag/task/ClearItem.java
Normal file
77
src/main/java/me/Demon/DemonNeverLag/task/ClearItem.java
Normal 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;
|
||||
}
|
||||
}
|
46
src/main/java/me/Demon/DemonNeverLag/util/Config.java
Normal file
46
src/main/java/me/Demon/DemonNeverLag/util/Config.java
Normal 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");
|
||||
}
|
||||
}
|
52
src/main/resources/config.yml
Normal file
52
src/main/resources/config.yml
Normal 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的刷怪控制
|
||||
# 防爆炸破坏建筑
|
||||
# 防止践踏农作物
|
||||
# 垃圾定时清理系统
|
||||
#
|
||||
######################
|
5
src/main/resources/plugin.yml
Normal file
5
src/main/resources/plugin.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
name: DemonNeverLag
|
||||
main: me.Demon.DemonNeverLag.Main
|
||||
version: 1.0.5
|
||||
commands:
|
||||
neverlag:
|
Loading…
Reference in New Issue
Block a user