Skip to content

Commit

Permalink
测试版
Browse files Browse the repository at this point in the history
  • Loading branch information
SmallasWater authored Nov 25, 2019
1 parent 397a30a commit 701e64f
Show file tree
Hide file tree
Showing 36 changed files with 2,764 additions and 0 deletions.
23 changes: 23 additions & 0 deletions resources/area.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
level: "world"
area.level: 1
pos:
startX: 0
startY: 0
startZ: 0
endX: 0
endY: 0
endZ: 0
price: 1000.0
resetTime(s): 300
transfer:
x: 0
y: 0
z: 0
transfer.money: 100.0
key: true
message: "§a新手矿区\n\n 一切发家致富的开始?\n\n 主要物资:\n\n>> 石头\n\n>> 木头"
subMessage: "一切的开始..."
buttonImage: ""
spawnBlock:
1: 20
17: 20
51 changes: 51 additions & 0 deletions resources/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# ___ _
# / _ \ _ __ ___ / \ _ __ ___ __ _
# | | | | '__/ _ \ / _ \ | '__/ _ \/ _` |
# | |_| | | | __// ___ \| | | __/ (_| |
# \___/|_| \___/_/ \_\_| \___|\__,_|
# 设置后 矿区只在 固定的时间刷新 否则不限制
刷新矿区时间段:
- "6:00 - 12:00"

# 玩家进入矿区后 的一个提示
进入矿区是否提示: true

# 玩家离开矿区后的提示
离开矿区是否提示: true

# 可以设置不同的提示类型
# title: 大标题
# tip: 底部显示 (tip类型)
# popup: 底部显示 (popup类型)
# action: 底部显示 (actionbar类型)
# boss boss血条显示
提示类型: title


# 开启后 玩家需要购买才可以传送至矿区
是否开启玩家购买解锁: true

# x秒后传送至矿区 (使用矿区GUI传送)
传送时间: 5

# 是否显示传送粒子
是否显示粒子: true

# 玩家传送矿区提示
玩家传送到矿区是否提示: true

玩家传送到矿区提示: title
# false 为只给玩家自身发消息
玩家传送矿区是否全服公告: false

# 玩家解锁矿区发送公告
玩家解锁矿区是否公告: true

附加:
回城:
传送时间: 5
是否显示粒子: true
debuff:
18: 5
15: 5

26 changes: 26 additions & 0 deletions resources/language.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# 如果显示格式为title 则 sub-title 显示在 title下方
# 不是则显示在内容后方
area.lock: "关闭"
area.unlock: "开启"
join.area.title: "您已进入矿区: {name}"
join.area.sub.title: "{sub}"
quit.area.title: "您已离开矿区: {name}"
quit.area.sub.title: "{sub}"
kick.area.message: "由于矿区关闭 或 矿区刷新 为了您的安全 已将您传送至主城."
tansfer.area.message: "正在传送至 {name} 矿区"
tansfer.area.sub.message: "请等待 {s} 秒 在此期间请不要移动"
transfer.area.cancel: "传送取消"
transaction.area.scauss: "{player} 传送到了 {name} 矿区"
buy.area.scauss: "{player} 解锁了 级别为 lv.{level} 的 {name}矿区"
gui.area.lock: "未解锁"
gui.area.unlock: "已解锁"
gui.menu.title: "矿区系统"
gui.menu.content: ""
gui.menu.button: "lv.{level} {name} ({lock})\n 点击查看详情"
gui.menu.sub.title: "矿区系统--{name} 矿区"
gui.menu.sub.content: "矿区等级: lv, {level}\n\n矿区价值: {money}\n\n 矿区状态: {key}\n\n矿区简介:\n{message}"
gui.menu.sub.buy: "花费 {money} 解锁"
gui.menu.sub.unbuy: "传送至矿区"
gui.menu.sub.back: "返回上一级"
player.buy.area.error: "抱歉,,您的金钱不足 需要 {money} 当前: {mymoney} 还差 {math}"
player.buy.area.success: "恭喜, 解锁矿区 {name} 成功"
1 change: 1 addition & 0 deletions resources/player.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
area: []
45 changes: 45 additions & 0 deletions resources/plugin.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: OreArea
main: ore.area.AreaMainClass
version: 1.0.0
api:
- 1.0.9
author: 若水
load: POSTWORLD

permissions:
ore.area.spawn:
description: "回城"
default: true
ore.area.kq:
description: "矿区主命令"
default: true
ore.area.kq.pos:
description: "选择坐标"
default: op
ore.area.kq.create:
description: "创建矿区"
default: op
ore.area.kq.open:
description: "开启矿区"
default: op
ore.area.kq.close:
description: "关闭矿区"
default: op
ore.area.kq.transfer:
description: "传送矿区"
default: true
ore.area.kq.setprice:
description: "设置传送到一个矿区价格"
default: op
ore.area.kq.settransfer:
description: "设置矿区传送点"
default: op
ore.area.kq.setmoney:
description: "设置矿区解锁价格"
default: op






243 changes: 243 additions & 0 deletions src/ore/area/AreaMainClass.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,243 @@
package ore.area;

import cn.nukkit.Player;
import cn.nukkit.Server;
import cn.nukkit.command.Command;
import cn.nukkit.command.CommandSender;
import cn.nukkit.level.Position;
import cn.nukkit.plugin.PluginBase;
import cn.nukkit.utils.Config;
import ore.area.commands.OreCommand;
import ore.area.commands.SpawnCommand;
import ore.area.utils.area.AreaClass;
import ore.area.utils.loadMoney;
import ore.area.utils.task.AreaLoadTask;
import ore.area.windows.ListenerWindow;

import java.io.File;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;

/**
* @author 若水
*/
public class AreaMainClass extends PluginBase {

private static final String PLAYER_NAME = "/Player";
private static final String AREA_NAME = "/Area";
private static final String LANGUAGE = "/language";
private static AreaMainClass instance;

private loadMoney money;

private LinkedHashMap<String,Config> playerConfig = new LinkedHashMap<>();

private static Config language;

public LinkedHashMap<String, AreaClass> areas = new LinkedHashMap<>();


public LinkedHashMap<Player,AreaClass> clickArea = new LinkedHashMap<>();

public LinkedHashMap<String,String> canJoin = new LinkedHashMap<>();


public LinkedList<String> transfer = new LinkedList<>();

private LinkedList<String> timeLoad = new LinkedList<>();



public static LinkedHashMap<String, Integer > timer = new LinkedHashMap<>();

public LinkedHashMap<Player,LinkedList< Position>> pos = new LinkedHashMap<>();



@Override
public void onEnable() {
instance = this;
saveDefaultConfig();
reloadConfig();
if(!new File(this.getDataFolder()+AREA_NAME).exists()){
if(!new File(this.getDataFolder()+AREA_NAME).mkdirs()){
this.getLogger().info("创建文件夹"+AREA_NAME+"失败....");
}
}
if(!new File(this.getDataFolder()+PLAYER_NAME).exists()){
if(!new File(this.getDataFolder()+PLAYER_NAME).mkdir()){
this.getLogger().info("创建文件夹"+PLAYER_NAME+"失败");
}
}
if(!new File(this.getDataFolder()+LANGUAGE).exists()){
this.saveResource("language.yml");
}


language = new Config(this.getDataFolder()+LANGUAGE+".yml",Config.YAML);

timeLoad.addAll(getConfig().getStringList("刷新矿区时间段"));

getServer().getCommandMap().register("OreArea", new OreCommand(this));
getServer().getCommandMap().register("OreArea", new SpawnCommand("spawn"));
this.getServer().getPluginManager().registerEvents(new ListenerWindow(),this);
this.getServer().getPluginManager().registerEvents(new ListenerEvents(),this);
money = new loadMoney();
readAllFiles();
readAllPlayer();
}


public LinkedList<String> getTimeLoad() {
return timeLoad;
}

public static String getLang(String lang) {
return language.getString(lang);
}

public File getAreaFile(String name){
return new File(this.getDataFolder()+AREA_NAME+"/"+name+".yml");
}

public loadMoney getMoney() {
return money;
}

private File getPlayerFile(String name){
return new File(this.getDataFolder()+PLAYER_NAME+"/"+name+".yml");
}

public static AreaMainClass getInstance() {
return instance;
}


public Config getPlayerConfig(String name){
if(!playerConfig.containsKey(name)){
if(!getPlayerFile(name).exists()){
this.saveResource("player.yml",PLAYER_NAME+"/"+name+".yml",false);
}
playerConfig.put(name,new Config(getPlayerFile(name),Config.YAML));
}
return playerConfig.get(name);
}

private void readAllPlayer(){
for(String name:getPlayerFiles()){
playerConfig.put(name, new Config(getPlayerFile(name),Config.YAML));
}
}

private void readAllFiles(){
for(String name:getAreaFiles()){
AreaClass areaClass = AreaClass.getClassByConfig(name,new Config(AreaMainClass.getInstance().getAreaFile(name),Config.YAML));
areas.put(name,areaClass);
this.getServer().getScheduler().scheduleRepeatingTask(new AreaLoadTask(name),20);
}
}

private String[] getPlayerFiles(){
return getDefaultFiles(PLAYER_NAME);
}

private String[] getDefaultFiles(String playerName) {
List<String> names = new ArrayList<>();
File files = new File(this.getDataFolder()+ playerName);
if(files.isDirectory()){
File[] filesArray = files.listFiles();
if(filesArray != null){
if(filesArray.length>0){
for(File file : filesArray){
names.add( file.getName().substring(0, file.getName().lastIndexOf(".")));
}
}
}
}
return names.toArray(new String[0]);
}

private String[] getAreaFiles(){
return getDefaultFiles(AREA_NAME);
}

/**
* 获取是否进入矿区提示
* */
boolean isSendJoinMessage(){
return getConfig().getBoolean("进入矿区是否提示");
}

/**
* 获取是否离开矿区提示
* */
boolean isSendQuitMessage(){
return getConfig().getBoolean("离开矿区是否提示");
}

/**
* 获取是否开启购买解锁
* */
public boolean isKeyCanOpen(){
return getConfig().getBoolean("是否开启玩家购买解锁");
}

/**
* 获取是否显示传送粒子
* */
boolean canShowTransfer(){
return getConfig().getBoolean("是否显示粒子");
}



/**
* 获取传送时间
* */
int getTransferTime(){
return getConfig().getInt("传送时间");
}

/**
* 获取玩家传送矿区是否提示
* */
public boolean canSendTransferMessage(){
return getConfig().getBoolean("玩家传送到矿区是否提示");
}

/**
* 获取玩家传送矿区是否全服公告
* */
public boolean canSendTransferBroadCastMessage(){
return getConfig().getBoolean("玩家传送矿区是否全服公告");
}


/**
* 获取解锁矿区是否公告
* */
boolean canSendkeyArea(){
return getConfig().getBoolean("玩家解锁矿区是否公告");
}




/**
* 获取显示类型
* */
String getMessageType(){
return getConfig().getString("提示类型").toLowerCase();
}

/**
* 获取显示类型
* */
public String getTransferMessageType(){
return getConfig().getString("玩家传送到矿区提示").toLowerCase();
}


}
Loading

0 comments on commit 701e64f

Please sign in to comment.