Nukkit非公式日本語wiki - Nukkitプラグインサンプルコード集

注意事項

一部動作しない可能性があります
大変申し訳ありません。import文などほとんど間違っていました。

文のミス/掲載してほしいコード等ございましたらコメント欄にてお気軽にお申し付けください。


※NukkitにおけるPHPとの違い
※String , int , Object(3つは最低限覚えましょう)といった。String player = event.getPlayer().getName();などを取得するのに必要です

目次



Nukkitサンプルコード集

プレイヤー関連


以下のimport文が必要です。
import cn.nukkit.Player;

Playerオブジェクトの取得

プレイヤー名から取得
Player player = (Player)Server().getPlayer("プレイヤー名");
Playerイベントから取得(PlayerJoinEventなど)
(注) eventにはeventオブジェクトが入っている状態です。
Player player = event.getPlayer();
Entityイベントから取得(EntitySpawnEventなど)
(注) eventにはeventオブジェクトが入っている状態です。
Player player = event.getPlayer("プレイヤー名");

Entityオブジェクトから取得して、getNameなどをする場合は必ずPlayerオブジェクトか確認しないとクラッシュします。
if (player instanceof Player){
  ///プレイヤーだった場合の処理
}
コマンド処理から取得
コマンド処理の場合、すでにsenderに送信したプレイヤーのデータが入っています。
ただし、コンソールなどから実行した場合もありますので、必ずプレイヤーオブジェクトか確認してください。
送った人がプレイヤーか確認する
if (sender instanceof Player){
  /// プレイヤーだった場合
}else{
  /// プレイヤーオブジェクトではない場合
}
送った人がコンソールか確認する
以下のimport文が必要です
import cn.nukkit.command.ConsoleCommandSender;
if (sender instanceof ConsoleCommandSender){
  /// コンソールだった場合
}else{
  /// コンソールではない場合
}
プレーヤーオブジェクトかの確認
if (player instanceof Player) {  ///プレイヤーオブジェクトかの条件分岐
  ///プレイヤー
}else{
  ///プレイヤーではない
}

プレイヤーにメッセージを送る

チャット上(Message)
player.sendMessage("メッセージ");
アイテムスロットの上(Popup)
player.sendPopup("メッセージ");
Popupの上(Tip)
player.sendTip("メッセージ");

プレイヤー全員にメッセージを送る

チャット上(Message)
this.getServer().broadcastMessage("メッセージ");

this.getServer().broadcastPopup("メッセージ");
Popupの上(Tip)現在使えません
this.getServer().broadcastTip("メッセージ");

プレイヤーをBANする

NameBan
player.getServer().getNameBans().addBan(player, "理由", null, "BANした人の名前");   ///名前BAN
IPBan
player.getServer().getIPBans().addBan(IPアドレス, "理由", null, "BANした人の名前");  ///IPBAN
NameBan解除
player.getServer().getNameBans().remove(player);  ///名前BAN解除
IPBan解除
player.getServer().getIPBans().remove(player);  ///IPBAN解除

プレイヤーをKICKする

player.kick("理由", true);  ///trueをfalseにすることで"Kicked by admin."と表示されなくなります
player.close("", "理由");  ///kickの使用を推奨します。
(1番目の引数をplayer.getLeaveMessage()にすることで、プレイヤーの退出がブロードキャストされます)
リスポン地点の変更
import文
import cn.nukkit.math.Vector3;

Vector3 pos = new Vector3(int x座標, int y座標,int z座標); //intは整数のみ使用可能です
player.setSpawn(pos);

プレイヤーの情報を取得する

ユーザー名
String name = player.getName();
IPアドレス
String ip = player.getAddress();
クライアントID
player.getClientID();
ゲームモード
player gamemode = player.getGamemode();  /// 戻り値(int)0=サバイバル, 1=クリエイティブ, 2,アドベンチャー,3 スペクテイター
//プラスアルファ<数値からString型の名前を作る>
String gamemode;//名前が入る変数
switch(player.getGamemode()){
    case 0:
        gamemode = "サバイバル";
    case 1:
        gamemode = "クリエイティブ";
    case 2:
        gamemode = "アドベンチャー";
    case 3:
        gamemode = "スペクテイター";
}
プレイヤーのいるワールド(レベル)のオブジェクト
Level level = player.getLevel();
座標取得
int x = player.getX();  ///X座標、getXのXを変更すればY、Z座標も取得可能
player.getDirection();  ///方向 0=南,1=西,2=北,3=東
プレイヤーの体力
player.getHealth();  ///プレイヤーの現在の体力
player.getMaxHealth();  ///プレイヤーの最大体力
チャットをした時に表示される名前を取得
player.getDisplayName();
プレイヤーの上に表示される名前を取得
player.getNameTag();
プレイヤーが燃えているか取得
player.isOnFire();  ///燃えていればtrue
プレイヤーがスニークしているか取得
player.isSneaking();  ///スニーク中であればtrue
プレイヤーが走っているか取得
player.isSprinting();  ///走っていればtrue
プレイヤーがopかどうか取得
player.isOp();  ///opならtrue
//プラスアルファ<opかどうかで条件分岐>
if(player.isOp()){
    //opだったときの処理
}else{
    //opではなかったときの処理
}

プレイヤーの情報を変更する

ゲームモード変更
player.setGamemode(0);  /// 0=サバイバル, 1=クリエイティブ, 2,アドベンチャー,3 スペクテイター
プレイヤーの体力を変更
player.setHealth(10); ///プレイヤーの体力を変更
player.setMaxHealth(30);  ///最大体力を変更
プレイヤーを倒す
player.kill();
プレイヤーにダメージを与える
player.attack(1, event);  ///1番目の引数にダメージ数を、2番目にEntityDamageEventが必要です(EntityDamageEventについては省略)
player.setOnFire(10);  ///プレイヤーを燃やす(秒数)
権限を付与する
player.setOp(true);  ///引数をfalseにすることで剥奪できます
プレイヤーをホワイトリストに追加
player.setWhitelisted(true);  ///引数をfalseにすることで削除できます
クリエイティブモードのような飛行できるように
player.setAllowFlight(true);  ///引数をfalseでクリエイティブでも飛べなくなります
オートジャンプができるように
player.setAutoJump(true);  ///引数をfalseでオートジャンプができなくなります
プレイヤーの上に表示される名前を変更
player.setNameTag("名前");
チャットをした時に表示される名前を変更
player.setDisplayName("名前");
プレイヤー情報をセーブ
player.save();
プレイヤーにダメージを与える
以下のimport文が必要です。
import cn.nukkit.event.entity.EntityDamageEvent;
コード
ev = new EntityDamageEvent(entity, 1 , X);  ///Xを変えることでダメージの強さが変更できます
entity.attack(ev.getFinalDamage(), ev);

先頭へ戻る

プレイヤーへの設定

プレイヤーがドロップするアイテムを変更
以下のimport文が必要です。
import cn.nukkit.event.entity.EntityDeathEvent;
import cn.nukkit.item.Item;


以下のimport文が必要です。
import cn.nukkit.event.player.PlayerDeathEvent;
プレイヤーが死んでドロップ(持っていた)したアイテムを取得
event.getDrops();
プレイヤーが死んでドロップするアイテムを指定
以下のimport文が必要です。
import cn.nukkit.event.entity.EntityDeathEvent;
import cn.nukkit.item.Item;

itema = Item.get(アイテムID, メタデータ, 数);
itemb = Item.get(アイテムID, メタデータ, 数);
Item[] item = {itema, itemb};  ///指定したアイテムを配列に格納
event.setDrops(item);  ///指定アイテムをドロップ
プレイヤーの体力を回復
以下のimport文が必要です。
import Nukkit.event.entity.EntityRegainHealthEvent;

he = new EntityRegainHealthEvent(player, 回復量, EntityRegainHealthEvent::CAimport_EATING);
player.heal(回復量, he);
プレイヤーのインベントリを操作
以下のコードが必要です。
import cn.Nukkit.item.Item;

item = Item::get(アイテムid, メタデータ, 数);  ///itemオブジェクトの生成
player.getInventory().addItem(item);  ///アイテムを追加
player.getInventory().removeItem(item);  ///アイテムを消去

以下のimport文が必要です。
import cn.Nukkit.inventory.PlayerInventory;

player.getInventory().clearAll();  ///アイテムをすべて消去(装備されている防具も消されます)
プレイヤーに革装備をセット
以下のimport文が必要です。
import cn.Nukkit.item.Item;

player.getInventory().setArmorItem(0,Item::get(298,0,1));  ///ヘルメット
player.getInventory().setArmorItem(1,Item::get(299,0,1));  ///チェストプレート
player.getInventory().setArmorItem(2,Item::get(300,0,1));  ///レギンス
player.getInventory().setArmorItem(3,Item::get(301,0,1));  ///ブーツ
player.getInventory().sendArmorContents(player);  ///防具の変更を反映
プレイヤーのリスポーン地点を変更する
以下のimport文が必要です。
import cn.Nukkit.math.Vector3;
Vector3 or Player [稼働しない場合どちらかを使用してください] 稼働しない可能正あり vector = new Vector3(x座標, y座標, z座標);  ///座標を指定
player.setSpawn(vector);  ///スポーンをセット
プレイヤー全員に特定の処理をする
以下のimport文が必要です。

import cn.Nukkit.Server;

//修正しておきました itsu
Player players[] = Server.getInstance().getOnlinePlayers();
for(int i=0;players[].getlength;i++;) {
  ///処理
}
プレーヤーをテレポートさせる
以下のimport文が必要です
import cn.Nukkit.math.Vector3;

Vector3 vector = new Vector3(x座標, y座標, z座標);  ///座標を指定
player.teleport(vector);

//ワールド(Level)を指定したい場合は座標指定にPositionクラスを指定して下さい
//以下のimport文が必要です
import cn.Nukkit.level.Position;

Position pos = new Position(x座標, y座標, z座標, Levelオブジェクト);  ///座標を指定
player.teleport(pos);


以下のimport文が必要です。
import cn.Nukkit.entity.Effect;
エフェクトを付与する
Effect effect = Effect::getEffect(1);  ///effectID
effect.setDuration(30*20);  ///効果の時間*20
effect.setAmplifier(0);  ///効果の強さ
effect.setVisible(true);  ///パーティクルを表示するかどうか
player.addEffect(effect);

1行で書く場合
player.addEffect(Effect.getEffect(1).setDuration(30*20).setAmplifier(0).setVisible(true));
※EffectIDの指定はEffectクラスのオブジェクト定数で指定することを推奨します。(今後EffectIDが変わる可能性があるため)
例:
Effect.SPEED
エフェクトを除去する
player.removeEffect(1);  ///指定したEffectIDのエフェクトを除去
player.removeAllEffects();  ///すべてのエフェクトを除去
エフェクトが付与されているか
if(player.hasEffect(1)){
  ///付与されている場合
}else{
  ///されていない場合
}
プレイヤーを動かす
以下のimport文が必要です。
import Nukkit.math.Vector3;
ジャンプさせる
MotionJ = new Vector3(0,0,0);
jump = 0.8;  ///高さ
MotionJ.y = jump;
player.setMotion(MotionJ);  ///ジャンプ
前に動かす
MotionA = new Vector3(0,0,0);
dir=player.getDirection();  ///向いている方向
move = 3;  ///動かしたいブロック数
if(dir === 0){MotionA.x=move;}  ///南
if(dir === 1){MotionA.z=move;}  ///西
if(dir === 2){MotionA.x=-move;}  ///北
if(dir === 3){MotionA.z=-move;}  ///東
player.setMotion(MotionA);  ///動かす

以下のimport文が必要です。
import Nukkit.level.Level;
import Nukkit.block.Block;
import Nukkit.math.Vector3;
※level変数に必ずLevelオブジェクトを入れておいてください

オブジェクトの取得

Levelオブジェクトの取得
デフォルトで使用されているワールドのレベルオブジェクト取得
level = this.getServer().getDefaultLevel();  ///Levelオブジェクトの取得

Playerオブジェクトから取得
=JAVA|
level = player.getLevel(); ///Levelオブジェクトの取得
||=

ワールド名から取得
以下のimport文が必要です。
import Nukkit.import Nukkit.Server;

if(this.getServer().getInstance().isLevelLoaded("ワールド名")){  ///レベルオブジェクトかを条件分岐
level = Server::getInstance().getLevelByName("ワールド名");  ///Levelオブジェクトの取得
}

Level/ワールド関係

Levelの読み込み
this.getServer().loadLevel("ワールド名");
Levelのアンロード
this.getServer().unloadLevel(level);
※ワールド名ではなくレベルオブジェクトを渡してください。
 以前書かれていた情報ではmust be an instance of Nukkit.level.Level, string givenになってしまいます。
Levelの保存
level.save();
ワールドの生成
Server.getInstance().generateLevel("ワールド名");

ブロック/アイテム関係 +爆破

ブロックの情報を取得する
x = block.getX();  ///X座標
y = block.getY();  ///Y座標
z = block.getZ();  ///Z座標


x = block.x;  ///X座標
y = block.y;  ///Y座標
z = block.z;  ///Z座標
指定した座標のブロックの情報を取得する
block = level.getBlock(vector);   ///Blockオブジェクトの取得
block.getID();   ///ブロックID
block.getMetadata();   ///メタ値
block.getName();   ///ブロック名
ブロックを設置する
破壊したい際はブロックidを0にして空気ブロックと置き換えてください

block = Block.get(ブロックid,メタ値);  ///Blockオブジェクトの生成
vector = new Vector3(x座標, y座標, z座標);
level.setBlock(vector, block);

アイテムドロップ
以下のimport文が必要です。
import Nukkit.item.Item;

item = Item.get(アイテムid, メタデータ, 数);  ///itemオブジェクトの生成
vector = new Vector3(x座標, y座標, z座標);  ///座標を指定
level.dropItem(vector,item);  ///アイテムをドロップする

指定した地点を爆破する
以下のimport文が必要です。
import Nukkit.level.Explosion;
import Nukkit.level.Position;

explosion = new Explosion(new Position(x座標, y座標, z座標, level), 3);   ///Explosionオブジェクトの生成
explosion.explode();

看板関係

看板の文字を取得する
以下のimport文が必要です。
import Nukkit.tile.Sign;

pos = new Vector3(X座標, Y座標, Z座標);  ///座標をセット
sign = level.getTile(pos);  ///Tileオブジェクト取得
if(sign instanceof Sign){  ///Signオブジェクトかの判定
text = sign.getText();  ///テキストを取得
}
看板に文字をセットする
以下のimport文が必要です。
import Nukkit.tile.Sign;

pos = new Vector3(X座標, Y座標, Z座標);  ///座標をセット
sign = level.getTile(pos);  ///Tileオブジェクトを取得
if(sign instanceof Sign){  ///Signオブジェクトかの判定
sign.setText("Text1", "Text2", "Text3", "Text4");  ///文字をセット sign.saveNBT();  ///データ(NBT)を保存
}

その他(チェスト/サウンド等)

チェストのインベントリを操作する
以下のimport文が必要です。
import Nukkit.tile.Tile;
import Nukkit.tile.Chest as TileChest;

pos = new Vector3(X座標, Y座標, Z座標);  ///座標をセット
chest = level.getTile(pos);  ///Tileオブジェクトを取得

if(chest instanceof TileChest){  ///TileChestオブジェクトかの判定

chest.getInventory().getItem(1);  ///特定のスロットのアイテムを取得   ///itemにはitemオブジェクトを入れておいてください chest.getInventory().setItem(1, item);  ///特定のスロットにアイテムを入れる chest.getInventory().getContents();  ///すべてのアイテムを取得   ///itemにはitemオブジェクトを配列に入れたものを入れてください chest.getInventory().setContents(item);  ///アイテムを上書き chest.saveNBT();  ///データ(NBT)を保存
}
特定の座標にサウンド(効果音)を再生する

現在対応しているサウンド一覧
以下のimport文が必要です。
import Nukkit.level.sound.(サウンド名)Sound;

pos = new Vector3(X座標, Y座標, Z座標);  ///再生する座標
sound = new <サウンド名>Sound(pos);  ///サウンドオブジェクトの生成
level.addSound(sound);  ///サウンドを再生

パーティクル関係

特定の座標にパーティクルを表示する
以下のimport文が必要です。
import Nukkit.level.particle.(パーティクル名)Particle;

pos = new Vector3(X座標, Y座標, Z座標);  ///座標
particle = new <パーティクル名>Particle(pos);
count = 20;  ///回数
for(i = 0;i < count; ++i){
level.addParticle(particle);
}
特定の座標周辺にパーティクルを表示
以下のimport文が必要です。
import Nukkit.utils.Random;

particle = new <パーティクル名>Particle(new Vector3(X座標, Y座標, Z座標));
xd = 3 * 100;  ///調整
yd = 3 * 100;
zd = 3 * 100;
random = new Random*1;
count = 25;  ///回数
for(i = 0; i < count; ++i){
particle.setComponents( particle.x + random.nextSignedFloat() * xd, particle.y + random.nextSignedFloat() * yd, particle.z + random.nextSignedFloat() * zd ); level.addParticle(particle);
}

先頭へ戻る