小天吖~
发表于 2022-2-24 19:12:01
开发者-入门
如果你想要把此插件作为前置,请确保你的插件在 BedWars1058之后被载入!
1. 在plugin.yml里面将BedWar1058设置为softdepend(注意大小写!): softdepend:
2. 通过以下代码确认 BedWars1058 是否在这个服务器上:
@Override
public void onEnable() {
//如果没有,就卸载你的插件。
if (Bukkit.getPluginManager().getPlugin("BedWars1058") == null) {
getLogger().severe("BedWars1058 was not found. Disabling...");
Bukkit.getPluginManager().disablePlugin(this);
return;
}
}
获取API的方法
初始化API:
BedWars bedwarsAPI = Bukkit.getServicesManager().getRegistration(BedWars .class).getProvider();
配置文件:如果你想为你的拓展生成配置文件,请将其生成在plugins/BedWars1058/Addons/AddonName/config.yml
小天吖~
发表于 2022-2-24 19:14:25
开发者-maven
导入库
<repositories>
<repository>
<id>andrei1058-repo</id>
<url><a href="http://repo.andrei1058.com/releases/</url>" target="_blank">http://repo.andrei1058.com/releases/</url></a>
</repository>
</repositories>
作为依赖
<!--BedWars1058插件API-->
<dependency>
<groupId>com.andrei1058.bedwars</groupId>
<artifactId>bedwars-api</artifactId>
<version>VERSION-HERE</version>
</dependency>
小天吖~
发表于 2022-2-24 19:16:21
开发者-Events
事件
BedWars1058提供了众多的事件供开发者监听,更多事件参见: JavaDocs
@EventHandler
public void onEnemyEnter(EnemyBaseEnterEvent e) {
//代码
}
@EventHandler
public void onTeamAssign(TeamAssignEvent e) {
//代码
}
@EventHandler
public void onArenaJoin(PlayerJoinArenaEvent e) {
//代码
}
小天吖~
发表于 2022-2-24 20:01:27
开发者-注册指令
创建你的命令
如果你想要给你的addon添加插件指令,比如: /bw mycmd ,请继续阅读本章:
1. 新建一个继承了:com.andrei1058.bedwars.command.SubCommand的类:
public class TutorialCommand extends SubCommand {
//提供你的命令的有关信息
public TutorialCommand(ParentCommand parent, String name) {
super(parent, name);
}
@Override
//执行你的命令:(和Bukkit一样,这也是一个boolean方法)
public boolean execute(String[] args, CommandSender s) {
return false;
}
}
2. 接下来你就需要提供一些你的指令的信息:
public TutorialCommand(ParentCommand parent, String name) {
super(parent, name);
// 如果你的指令是提供给op使用的,下面项请开启:
setOpCommand(true); //否则所有玩家都能使用
//你想让它在/bw列表里面被看见吗?
//只有op可以看见指令列表
//因为玩家收到的是从信息文件里面获取的一段静态的
//如果你把这个设置成true,你需要同时填写:setDisplayInfo()
showInList(true);
//这是在指令 /bw里面的介绍
//它需要你提供一个文本的元件(其实就是hovertext),如果你不知道怎么使用
//你可以用这个方法: com.andrei1058.bedwars.arena.Misc.msgHoverClick()
setDisplayInfo(Misc.msgHoverClick("description", "hover description","run this on click", ClickEvent.Action.RUN_COMMAND));
//这个值决定了指令在 /bw列表里面的顺序
//最高为20
//越小,则在列表的越上面,反之亦然
setPriority(14);
//如果这个指令是用于地图生成的,保持开启
setArenaSetupCommand(false);
}
3. 在你处理你的代码之前加上:
@Override
public boolean execute(String[] args, CommandSender s) {
//this will send "cmd not found" msg to the console
if (!(s instanceof Player)) return false;
Player p = (Player) s;
if (args.equalsIgnoreCase("apple")){
p.getInventory().addItem(new ItemStack(Material.APPLE));
}
//如果这个指令成功执行了,return值应为true(和Bukkit一样!)
//重申一遍,如果return为false,将会返回一个“未知命令”的标识
return true;
}
4. 注册你的指令!
你只需要初始化这个类
@Override
public void onEnable() {
//如果插件(BedWar1058)不存在,就卸载你的插件
if (Bukkit.getPluginManager().isPluginEnabled("BedWars1058")) {
getLogger().severe("BedWars1058 was not found. Disabling...");//其实这个你也可以改成别的= =
setEnabled(false);
return;
}
//你的指令是: /bw tutorial apple
//com.andrei1058.bedwars.commands.main.MainCommand
BedWars bedwarsAPI = Bukkit.getServicesManager().getRegistration(BedWars.class).getProvider();
new TutorialCommand(bedwarsAPI.getBedWarsCommand(), "tutorial");
}
小天吖~
发表于 2022-2-24 20:02:47
开发者-自定义等级
定义等级:
开发者可以通过实现com.andrei1058.bedwars.api.levels.Level 接口来创建他们自己的“玩家等级管理器”。这些方法是插件用来在比如计分板等地方显示玩家等级的。
如何创建:
public class CustomLevelsManager implements Level {
@Override
public String getLevel(Player p) {
return PlayerLevel.getLevelByPlayer(p.getUniqueId()).getLevelName();
}
@Override
public int getPlayerLevel(Player p) {
return PlayerLevel.getLevelByPlayer(p.getUniqueId()).getPlayerLevel();
}
@Override
public String getRequiredXpFormatted(Player p) {
return PlayerLevel.getLevelByPlayer(p.getUniqueId()).getFormattedRequiredXp();
}
@Override
public String getProgressBar(Player p) {
return PlayerLevel.getLevelByPlayer(p.getUniqueId()).getProgress();
}
@Override
public int getCurrentXp(Player p) {
return PlayerLevel.getLevelByPlayer(p.getUniqueId()).getCurrentXp();
}
@Override
public String getCurrentXpFormatted(Player p) {
return PlayerLevel.getLevelByPlayer(p.getUniqueId()).getFormattedCurrentXp();
}
@Override
public int getRequiredXp(Player p) {
return PlayerLevel.getLevelByPlayer(p.getUniqueId()).getNextLevelCost();
}
}
如何注册:
这个方法将会安全地移除BedWar1058本身的等级系统并替换成你的
BedWars bedwarsAPI = Bukkit.getServicesManager().getRegistration(BedWars .class).getProvider();
bedwarsAPI.setLevelAdapter(new CustomLevelsManager());
饭团团
发表于 2022-2-24 20:43:41
天铄厉害qwq
(摸鱼去了
小天吖~
发表于 2022-2-24 20:53:46
开发者-创建新资源/资源点
共计: 623 个字数 3851 个字符
包含: 613 个汉字 31 个标点(全角) 2553 个字母 10 个数字
创建一个资源刷新点
如何创建一个自定义的资源刷新点
public class ExampleGenerator implements IGenerator {
@Override
public void setHologram(@Nullable Hologram hologram) {
// 在你的资源刷新点上方增加一个全息字符
}
@Override
public @Nullable Hologram getHologram() {
//获取你资源刷新点上方的全息字符
return hologram;
}
@Override
public void disable() {
// 移除你的资源刷新点
// 这将会在一局游戏结束,下一局开始之前被启用
}
@Override
public void upgrade() {
// this is called when the arena decides to upgrade a generator based on Arena#updateNextEvent()
//但如果你想把它作为一个规律性任务的话
// 把它当作一个地图组注册: arena.getOreGenerators().add(myCustomGenerator)
// 如果你的刷新点有upgrade,请加上这个:
// Bukkit.getPluginManager().callEvent(new GeneratorUpgradeEvent(this));
}
@Override
public void spawnTry() {
// 这个将会设定每秒掉落的物品
// 需要的方法: #getSpawnDelay, #getSpawnAtOnce
// 决定你的生成逻辑和生成表现后,使用: #dropItem(loc)
// 这需要你的刷新点是一个队伍的刷新点或者一个地图内的刷新点
// 否则你需要自己处理它
// 示范代码: <a href="https://pastebin.com/VAsVH6MM" target="_blank">https://pastebin.com/VAsVH6MM</a>
}
@Override
public void dropItem(Location location) {
// 请对以下内容保持关注:getGeneratorsCfg().getBoolean(ConfigPath.GENERATOR_STACK_ITEMS)
// 所以如果你给刷新物取名为诸如:
// myItem.setCustomName("custom" + id); 的自定义id,以至于同一物品的刷新物因为名称不同无法堆叠
// 如果上面那个参数是开启的话,你的自定义物品id会在玩家捡起的一瞬间,被自动清除
// 如果它是以“custom”为开头的话
//示例代码: <a href="https://pastebin.com/64vKUiCr" target="_blank">https://pastebin.com/64vKUiCr</a>
}
@Override
public void setSpawnOre(ItemStack spawnOre) {
//设置刷新物品
}
@Override
public IArena getArena() {
// 获取刷新点所在地图
return arena;
}
@Override
public void rotate() {
// rotate the generator preview-item if it is the case
// 这需要你的刷新点是一个队伍的刷新点或者一个地图内的刷新点
// 否则你需要自己处理它
}
@Override
public void setSpawnDelay(int spawnDelay) {
// 改变刷新的间隔
}
@Override
public void setSpawnAtOnce(int spawnAtOnce) {
// 设置每次刷新的数量
}
@Override
public void enableRotation() {
// 当一局游戏启动的时候被调用,这需要你的刷新点已经被注册过
}
@Override
public void setSpawnLimit(int value) {
// 设置在刷新物被领取走之前,最多刷新多少个
}
@Override
public ITeam getOwnerTeam() {
//如果这是一个队伍的刷新点,返回他所属的队伍
// 如果它不属于队伍,返回null
return team;
}
@Override
public ArmorStand getHologramHolder() {
return null;
}
@Override
public void setNextSpawn(int nextSpawn) {
// 设置 #dropItems
}
@Override
public void setStackDroppedItems(boolean stackDroppedItems) {
//改变刷新点(是否继续刷新)
}
@Override
public void setType(GeneratorType type) {
// 改变刷新点种类
}
@Override
public void destroyData() {
// 清除所有残留的刷新点数据(当新的一局游戏开始时)
}
@Override
public void setTier(int tier) {
// 改变刷新点的级别
}
}
如何注册:
如果你把刷新点的种类设置成EMERALD或者DIAMOND,并且不属于任何队伍,同时你还想要设置成一个规律性刷新的emerald/ diamond刷新点,把它添加到这个列表: IArena#getOreGenerators().或者说如果你想做一个队伍刷新点,并且由BedWar1058进行刷新(使用#spawnTry),请把它加入者了列表: ITeam#getGenerators(). 如果是其他种类的,你需要自己处理
gayctrp
发表于 2022-9-27 21:08:18
支持支持支持支持支持支持支持
七一班张诚俊
发表于 2022-11-28 18:28:50
x谢谢
只能我空调骄傲回来
HunZiShiNian
发表于 2022-12-20 09:18:32
Nice! I just got a Minecraft gift code for FREE! :D https://freeminecraft***