在Minecraft中实现自动出租马匹

简述

CKBPlugin是在Minecraft服务器(SpigotMC服务器)上实现自动租借马匹的插件。本篇文章主要对CKBPlugin的技术概述进行了解释,并附上了插件代码在GitHub上的信息。

希望的受众

    • Spigotプラグインの開発について理解を深めたい方

 

    馬好きの方(?)

插件开发的背景

之前,我在Minecraft中发布了以下内容关于火车的自动驾驶的文章。

这个插件是为了在游戏中补充除铁路之外的移动方式而开发的。可以用现在的说法称之为微移动吗(?)

插件的主要规格

    • 専用の馬(エンティティ)を右クリックすることで貸し出された馬に騎乗する

 

    貸し出された馬から降りると、自動的に当該の馬をデスポーンさせる

租借场地用马实体的规格与实施方案

不,就像铁路运输车一样,右键单击也可以使用专用标志牌吗?
但是觉得那样有点无聊,所以我们将下述规格的马作为专用马。

・马的名字是特定的(CKB Station)。
・没有设定AI,这个规格有点可怕。

以下是生成出租场所所用的马的实施方案。

// とりあえず馬をスポーンさせる
World world = player.getWorld();
Entity entity = world.spawnEntity(player.getLocation(), EntityType.HORSE);

// 馬がスポーンしたかチェックする (WorldGuradなどでスポーン禁止されている場合などを想定)
if (entity == null || !(entity instanceof Horse)) {
    player.sendMessage(ChatColor.RED + "[CKB] 馬の生成に失敗しました。");
    return;
}
Horse horse = (Horse)entity;

// 不死にする(デスポーン無効化含む)
horse.setInvulnerable(true);
horse.setRemoveWhenFarAway(false);

// AIを無効化する
horse.setAI(false);

// 飼いならした状態にする
horse.setTamed(true);

// 専用の名前をつける
horse.setCustomName("CKB Station");

// 成体でないと乗れないので、そうでなければ成体にする
if (!horse.isAdult()) {
    horse.setAdult();
}

// 鞍をつける
horse.getInventory().setSaddle(new ItemStack(Material.SADDLE, 1));

办理借贷手续

在处理上与生成出借场所的马时有一些相似之处,但会设定移动速度和体力参数,使其成为一匹好马。

// とりあえずプレイヤーの位置に馬をスポーンさせる
Location loc = player.getLocation();

// スポーンしたかチェックする
Entity se = player.getWorld().spawnEntity(loc, EntityType.HORSE);
if (se == null || !(se instanceof Horse)) {
    return;
}
Horse pHorse = (Horse)se;

// 貸出用の名前をつけておく
pHorse.setCustomName("CKB Rental");

// AI無効化
pHorse.setAI(false);

// 成体化
pHorse.setAdult();

// 鞍を装備させる
pHorse.getInventory().setSaddle(new ItemStack(Material.SADDLE, 1));

// 各種パラメータを調整する
pHorse.getAttribute(Attribute.GENERIC_MAX_HEALTH).setBaseValue(30.0);
pHorse.setHealth(30.0);
pHorse.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED).setBaseValue(0.45);

// 所有者をプレイヤーにする
pHorse.setOwner(player);

// 乗せ込み+個別チャットメッセージ送信
pHorse.addPassenger(player);
player.sendMessage(ChatColor.GREEN + "[CKB]" + ChatColor.WHITE + " ご利用ありがとうございます。どうぞご安全に!");

下车时的处理方法

一旦下車即表示租借結束。

// 降りたのがプレイヤーか確認
Entity e = event.getExited();
if (!(e instanceof Player)) {
    return;
}
Player player = (Player)e;

// プレイヤーが降りたのが馬からか確認
Vehicle v = event.getVehicle();
if (!(v instanceof Horse)) {
    return;
}
Horse horse = (Horse)v;

// レンタル用の馬でなければreturn
if (!EventListener.isRentalHorse(horse)) return;

// 馬のデスポーン、個別チャットメッセージ送信
horse.remove();
player.sendMessage(ChatColor.GREEN + "[CKB]" + ChatColor.WHITE + " ご利用ありがとうございました。この後もご安全に!");

其他功能

    • インベントリから鞍を盗まれないようにする対策

 

    貸出場所用馬の移動モード(権限者のみ変更コマンドを実行可)

插件源代码(GitHub)

闲聊

插件的灵感来自于《最终幻想14》中的陆行鸟驿站。
真正的陆行鸟拼写是“chocobo”,这是个秘密。

最后

享受愉快的騎馬生活吧!

广告
将在 10 秒后关闭
bannerAds