小天吖~ 发表于 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***
页: 123[4]5
查看完整版本: [2022.2.24][CPS]BedWars1058 —— 实用流行的起床战争插件 维基帮助