【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

Modding・サーバPlugin制作・ツール制作など、開発関連の質問があればこちらにお願い致します。
フォーラムルール
質問関連フォーラムで質問する時は、必ず次のトピックを一読/厳守お願い致します。
viewtopic.php?f=5&t=999
  • (PostNo.321028)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by amata1219 » 2018年10月12日(金) 19:06

spuash918 さんが書きました:
signal さんが書きました:
amata1219 さんが書きました:


そういえば下書きのままで止まっていました...
それで無事解決いたしました。ありがとうございます。
質問の答えに質問で返すのはなんだかな...と思いましたが、力不足でどうしようもないなと思ったのでお願いします。
演算子 >= は引数の型 Location, int で未定義です。
と出て出来ませんでした。
再度お願いします

Javaについてどれほど理解されていますか?
プラグインを開発されるのであれば基本的な部分、最低でもメソッドやインスタンスのようなオブジェクト指向までは抑えて置くべきです

ちなみに回答ですが、
コード: 全て選択
if(player.getLocation().distance(entity.getLocation() >= 8)

の「)」が不足しているため、変なところで比較しています
コード: 全て選択
if(player.getLocation().distance(entity.getLocation()) >= 8)

に変更すれば問題ありません


おっと、フォーラムで直接コード書いていたためかっこが抜けておりました。
spuash918さん訂正とご指摘ありがとうございます。該当部は修正しました。

ミスコードを提示した身で言わせて頂くのもアレですが、signalさん、Javaの理解は無くとも少しは試行錯誤する努力をなさって下さい…。
アバター
amata1219
ID:9b3a9c57
石掘り
 
記事: 83
登録日時: 2016年11月18日(金) 16:46
お住まい: Enabling World

  • (PostNo.321030)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by testusuke » 2018年10月12日(金) 20:29

:pun: 【SpigotPlugin開発・緊急】 :pun:
こんにちは
アイテムに不可解をつける方法がわかりません。APIなので調べたのですがsetUnbreakableの使い方がをよくわかりません
コード: 全て選択
                Player p = (Player)sender;
                ItemStack item = p.getInventory().getItemInMainHand();  //  アイテム
                ItemStack itemC = p.getInventory().getItemInMainHand().getItemMeta().setUnbreakable(true);

とすると赤線が出て不可解をつけれません。つける方法がわかる方教えてください。
testusuke
ID:04803fb2
木を殴ってる
 
記事: 11
登録日時: 2018年8月07日(火) 15:02

  • (PostNo.321031)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by amata1219 » 2018年10月12日(金) 21:22

testusuke さんが書きました::pun: 【SpigotPlugin開発・緊急】 :pun:
こんにちは
アイテムに不可解をつける方法がわかりません。APIなので調べたのですがsetUnbreakableの使い方がをよくわかりません
コード: 全て選択
                Player p = (Player)sender;
                ItemStack item = p.getInventory().getItemInMainHand();  //  アイテム
                ItemStack itemC = p.getInventory().getItemInMainHand().getItemMeta().setUnbreakable(true);

とすると赤線が出て不可解をつけれません。つける方法がわかる方教えてください。


testusukeさん、こんにちは。
書き換えたItemMetaをItemStack#setItemMeta()でセットする必要があります。
下記の様にしたところ、正常に不可壊を付与する事が出来ました。
コード: 全て選択
ItemStack item = p.getInventory().getItemInMainHand();
ItemMeta meta = item.getItemMeta();
meta.setUnbreakable(true);
item.setItemMeta(meta);
最後に編集したユーザー amata1219 [ 2018年10月13日(土) 11:56 ], 累計 1 回
アバター
amata1219
ID:9b3a9c57
石掘り
 
記事: 83
登録日時: 2016年11月18日(金) 16:46
お住まい: Enabling World

  • (PostNo.321035)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by ゲスト » 2018年10月12日(金) 22:39

>amata1219
>ItemStack itemC = p.getInventory().getItemInMainHand().getItemMeta().setUnbreakable(true);
setUnbreakableはvoidなのでItemStackは返しません、エディタは間違ってないです。
参考: https://hub.spigotmc.org/javadocs/spigo ... e-boolean-
ゲスト
ID:6e4e2454
 

  • (PostNo.321044)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by testusuke » 2018年10月13日(土) 09:47

amata1219さんゲストさん解決しましたありがとうございます
testusuke
ID:04803fb2
木を殴ってる
 
記事: 11
登録日時: 2018年8月07日(火) 15:02

  • (PostNo.321053)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by signal » 2018年10月13日(土) 12:58

spuash918 さんが書きました:
signal さんが書きました:
amata1219 さんが書きました:


そういえば下書きのままで止まっていました...
それで無事解決いたしました。ありがとうございます。
質問の答えに質問で返すのはなんだかな...と思いましたが、力不足でどうしようもないなと思ったのでお願いします。
演算子 >= は引数の型 Location, int で未定義です。
と出て出来ませんでした。
再度お願いします

Javaについてどれほど理解されていますか?
プラグインを開発されるのであれば基本的な部分、最低でもメソッドやインスタンスのようなオブジェクト指向までは抑えて置くべきです

ちなみに回答ですが、
コード: 全て選択
if(player.getLocation().distance(entity.getLocation() >= 8)

の「)」が不足しているため、変なところで比較しています
コード: 全て選択
if(player.getLocation().distance(entity.getLocation()) >= 8)

に変更すれば問題ありません


赤線なくなりました。ありがとうございます。
コード: 全て選択
if(player.getLocation().distance(entity.getLocation() >= 8)

僕は)一個足りないなと思い8のとなりにもう一個付け足してました...
これを気にもっとjavaについて勉強しようと思います
signal
ID:ad6fdda5
水から上がったとこ
 
記事: 8
登録日時: 2018年9月25日(火) 20:48

  • (PostNo.321121)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by 匿名希望さん(男) » 2018年10月15日(月) 21:06

質問です
https://mcmodding.jp/modding/index.php/Plugin_Tutorial
コマンドのパラメタ長をチェックする
の項目の
senderインスタンスは、妥当なパラメタを持っているとは限りません。パラメタ長をチェックして下さい。
という意味が分かりません。パラメタってなんなんでしょうか?
匿名希望さん(男)
ID:464f75a1
木を殴ってる
 
記事: 20
登録日時: 2018年9月18日(火) 18:40

  • (PostNo.321125)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by 匿名希望さん(男) » 2018年10月15日(月) 21:50

質問です
https://mcmodding.jp/modding/index.php/%E6%96%B0%E3%81%97%E3%81%84Configuration%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9
のデフォルト値の所なんですが
プラグインのデータフォルダ配下のconfig.ymlをデフォルト値で上書きしたい場合は、JavaPluginクラスのsaveDefaultConfig()メソッドを呼び出してください。
っていうのはconfig.ymlに書いてある内容をsaveDefaultConfig()したら上書きできるってことですか?
実際に追加する際のコード例も見てみたいです。
あと
コード: 全て選択
key: 'value'
one:
  two: 'value'
  three:
    - 1
    - 2
    - 3
  four:
    five: 'value'
  '*':
    six: 'value'
    seven: 'value'

ってあるけどこのoneとかtwoとかってのは自由に名付けできるんですか?
valueってのも自由なstringでいいんですか?
匿名希望さん(男)
ID:464f75a1
木を殴ってる
 
記事: 20
登録日時: 2018年9月18日(火) 18:40

  • (PostNo.321133)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by testusuke » 2018年10月16日(火) 07:17

:pun: 【SpigotPlugin開発】 :pun:
こんにちは
質問です。
senderのインベントリに指定したアイテムがるか調べる方法はありますか。あった場合指定した数だけアイテムを消すことはできますか?
やる方法があれば教えてください。簡単な質問ですみません
testusuke
ID:04803fb2
木を殴ってる
 
記事: 11
登録日時: 2018年8月07日(火) 15:02

  • (PostNo.321138)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by amata1219 » 2018年10月16日(火) 17:08

匿名希望さん(男) さんが書きました:質問です
https://mcmodding.jp/modding/index.php/Plugin_Tutorial
コマンドのパラメタ長をチェックする
の項目の
senderインスタンスは、妥当なパラメタを持っているとは限りません。パラメタ長をチェックして下さい。
という意味が分かりません。パラメタってなんなんでしょうか?


匿名希望さん(男)さん、こんにちは。
onCommand()でいうパラメタとは例を挙げますと、「/setblock 0 1 2 stone」の「0 1 2 stone」に当たる部分が空白を堺に一つのStringとして格納されている配列を指します。下記の記述ではargsが該当します。
コード: 全て選択
public boolean onCommand(CommandSender sender, Command command, String label, String[] args){

}

「/setblock」と単体で入力された場合、argsは0個のStringを格納しています。
この場合、下記コードが実行されるとコンソールには「Length: 0」と表示されます。
コード: 全て選択
System.out.println("Length: " + args.length);


また、「/setblock 0 1」と入力された場合は「Length: 2」と表示されます。
この状態で配列の3番目(args[3]、stoneに当たる部分)に格納されているStringは対応する入力が無いためnullです。

つまりは、パラメタ長は必ずしも一定と限らないため、長さを確認し適切な処理を行わないとバグやエラーの元になりますよ、という意味です。

匿名希望さん(男) さんが書きました:質問です
https://mcmodding.jp/modding/index.php/%E6%96%B0%E3%81%97%E3%81%84Configuration%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9
のデフォルト値の所なんですが
プラグインのデータフォルダ配下のconfig.ymlをデフォルト値で上書きしたい場合は、JavaPluginクラスのsaveDefaultConfig()メソッドを呼び出してください。
っていうのはconfig.ymlに書いてある内容をsaveDefaultConfig()したら上書きできるってことですか?
実際に追加する際のコード例も見てみたいです。
あと
コード: 全て選択
key: 'value'
one:
  two: 'value'
  three:
    - 1
    - 2
    - 3
  four:
    five: 'value'
  '*':
    six: 'value'
    seven: 'value'

ってあるけどこのoneとかtwoとかってのは自由に名付けできるんですか?
valueってのも自由なstringでいいんですか?


saveDefaultConifg()はconfig.ymlが存在しない場合に、プラグイン内にあるconfig.ymlをコピーして作成するメソッドになります。

下記コードはプラグイン内に何も記述のされていないconfig.ymlがあり、plugins/PluginNameにはconfig.ymlが存在しないものとして実行した場合です。
コード: 全て選択
@Override
public void onEnable(){
saveDefaultConfig();
//config.ymlが存在しなければプラグイン内にあるconfig.ymlをコピーして作成する。
getConfig().set("Test", "てすと");
//キーを「Test」、値をStringの「てすと」としてセットする。
getConfig().set("Settings.Enable", true);
//キーを「Settings」、「Enable」の2階層、値をbooleanの「true」としてセットする。
saveConfig();
//セーブする
reloadConfig();
//リロードする
}


実行結果
コード: 全て選択
Test: てすと
Settings:
  Enable: true


このように、one, two 等のキーは空白やアンパサンドの様な文字で無ければ基本自由に命名出来ます。
valueは値ですので勿論自由な値で大丈夫ですし、String以外にもintやboolean等他の型も使用出来ます。

testusuke さんが書きました::pun: 【SpigotPlugin開発】 :pun:
こんにちは
質問です。
senderのインベントリに指定したアイテムがるか調べる方法はありますか。あった場合指定した数だけアイテムを消すことはできますか?
やる方法があれば教えてください。簡単な質問ですみません


testusukeさん、こんにちは。
まずインベントリ操作の前にコマンド送信者がプレイヤーか確認する必要があります。
コード: 全て選択
if(!(sender instanceof Player)){
//sender(CommandSender)がPlayer型でない場合
sender.sendMessage(ChatColor.RED + "ゲーム内から実行して下さい。");
return true;
//処理を続行しない
}


そしてプレイヤーである事が確認出来たら、senderをPlayer型にキャストしてPlayerクラスのメソッドを使えるようにしましょう。
コード: 全て選択
Player player = (Player) sender;


後は自由にPlayerクラスのメソッドを扱えます。
インベントリ操作自体はお調べになれば簡単に出てくると思いますが、一応軽く紹介させて頂きます。
コード: 全て選択
Inventory inv = player.getInventory();
//プレイヤーのインベントリを取得する。
ItemStack diamond = new ItemStack(Material.DIAMOND);
//存在するか調べたいアイテム。名前や説明文も比較対象になるので必要に応じて設定する。
if(!inv.contains(diamond))
return;
//存在しない場合は処理を終了
for(ItemStack item : inv.getContents()){
//インベントリ内のアイテムをスロット毎に処理する
if(diamond.isSimilar(item)){
//個数を比較対象から外しアイテムが同様であるか確認する(equals()は使ってはいけない)

//--------------------------------

int amount = item.getAmount();
//アイテムの個数を取得
if(amount > 10)
//個数が10より大きい場合
amount -= 10;
//個数から10を引く(この時点では数値計算をしているだけであり、個数は書き換わっていない)
else
amount = 0;
//個数が10以下の場合は値がマイナスにならないよう減算せず0とする。
item.setAmount(amount);
//個数を指定した数に書き換える

//--------------------------------

(//--------------------------------の範囲は下記の様に簡潔に記述する事も可能です。)

item.setAmount(item.getAmount() > 10 ? item.getAmount() - 10 : 0);
}
アバター
amata1219
ID:ae14b95e
石掘り
 
記事: 83
登録日時: 2016年11月18日(金) 16:46
お住まい: Enabling World

  • (PostNo.321145)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by 匿名希望さん(男) » 2018年10月16日(火) 23:20

なるほど
わかりやすい解説ありがとうございます
匿名希望さん(男)
ID:464f75a1
木を殴ってる
 
記事: 20
登録日時: 2018年9月18日(火) 18:40

  • (PostNo.321153)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by testusuke » 2018年10月17日(水) 07:20

回答ありがとうございます
早速試してみます!ありがとうございました
testusuke
ID:04803fb2
木を殴ってる
 
記事: 11
登録日時: 2018年8月07日(火) 15:02

  • (PostNo.321169)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by 匿名希望さん(男) » 2018年10月18日(木) 00:50

とりあえず一通り勉強したつもりだったけど、いざ作ろうと思ったら全然何をすればいいのかわからない
プレイヤーが鯖で道に迷わないように運営が座標を登録(複数)してコンパスを使っていろんな場所に行けるようにするのが目標です
まず、座標を(複数)登録する方法がわからないです
それと登録した座標へコンパスがその方向に向くようにする方法もわからないです
なるべく自分で作りたいのであくまでヒントが欲しいです
tutorialpluginのページには載っていなかったので思ったのですが
これからほかのプラグインを作ったりするときはどうすればいいんでしょうか
中級者向けの勉強できるサイトとかあるんでしょうか
匿名希望さん(男)
ID:464f75a1
木を殴ってる
 
記事: 20
登録日時: 2018年9月18日(火) 18:40

  • (PostNo.321203)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by ゲスト » 2018年10月19日(金) 22:36

もしかしてここでMetadataってやつを使うんでしょうか
ゲスト
ID:464f75a1
 

  • (PostNo.321204)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by 匿名希望さん(男) » 2018年10月19日(金) 22:42

ゲスト さんが書きました:もしかしてここでMetadataってやつを使うんでしょうか

ゲストです
Metadataについての記事に飛ぼうとしても削除されています(https://jd.bukkit.org/doxygen/de/d59/interfaceorg_1_1bukkit_1_1metadata_1_1MetadataValue.html#ab49975fe013a0626dd29d3b85c63a82f)ってでているのですがどうすればいいでしょうか?
匿名希望さん(男)
ID:464f75a1
木を殴ってる
 
記事: 20
登録日時: 2018年9月18日(火) 18:40

  • (PostNo.321222)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by signal » 2018年10月20日(土) 19:32

自己解決しました。
そして、最後にあったクリックしたらイベントを起こすのをアイテム名で指定するにはどうしたらいいですか?
コード: 全て選択
if(e.getCurrentItem().getItemMeta().getDisplayName().equals("§r"+player.getPlayer().getDisplayName()+"の所持金"))
          {
             player.getPlayer().sendMessage("a");
          }

一応考えた結果こうなりましたが、これだと到達不能コードと出て出来ませんでした。
signal
ID:ad6fdda5
水から上がったとこ
 
記事: 8
登録日時: 2018年9月25日(火) 20:48

  • (PostNo.321225)

Re: 【総合】トピック立てるまでもない質問【Bukkit Plugin制作】

投稿記事by spuash918 » 2018年10月20日(土) 21:44

signal さんが書きました:自己解決しました。
そして、最後にあったクリックしたらイベントを起こすのをアイテム名で指定するにはどうしたらいいですか?
コード: 全て選択
if(e.getCurrentItem().getItemMeta().getDisplayName().equals("§r"+player.getPlayer().getDisplayName()+"の所持金"))
          {
             player.getPlayer().sendMessage("a");
          }

一応考えた結果こうなりましたが、これだと到達不能コードと出て出来ませんでした。

あなたの質問にはいくつかの問題があります
1.「自己解決しました。」=>何がですか

2.「最後にあった」=>どこのでしょうか

3.「e.getCurrentItem()(以下略)」=>eが何を示しているのかがわかりません(InventoryClickEvent?)

4.「到達不能コードと出て出来ませんでした」=>コピペして「e」や「player」を適当に割り当てた結果そのようなメッセージは出ませんでした そもそもifまでたどり着けていないのでは?

とりあえず1,2,3を明確にし、ソースを抜粋するのであればせめてメソッド単位で載せてください
プログラム無しでアイテムやブロックを追加できるMOD公開中です!
無機能ブロックから剣、斧に加えツールマテリアルにも対応!
詳しくはMOD配布ページまで!
Twitterやってます。→https://twitter.com/pokora_youtube
よろしければYoutubeもお願いします。
spuash918
ID:a74e6760
鉄鉱掘り
 
記事: 316
登録日時: 2014年11月03日(月) 11:17
お住まい: 東海のどこか

1つ前へ

Return to 質問:開発・制作関連

x