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

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

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

投稿記事by clehsu » 2013年3月09日(土) 18:34

わからないことがあったので質問させてください。

キノコシチューを飲むことで、満腹度ではなく、体力を回復させたいのですが、ソースコードがわかりません。
どのように記入すればいいのでしょうか?
よければおしえてください。
clehsu
ID:e945111c
石掘り
 
記事: 73
登録日時: 2012年9月22日(土) 15:37

  • (PostNo.84874)

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

投稿記事by tsuttsu305 » 2013年3月09日(土) 18:46

clehsu さんが書きました:わからないことがあったので質問させてください。

キノコシチューを飲むことで、満腹度ではなく、体力を回復させたいのですが、ソースコードがわかりません。
どのように記入すればいいのでしょうか?
よければおしえてください。

食べ物だからFoodLevelChangeEventで処理走らせるようにして、持ってるアイテムがきのこシチューだったらFoodLevelChangeEvent自体はキャンセルしてPlayerの現在の体力を増加させるとか。

PlayerInteractEventでやるなら
アイテム持ってるか判定

右クリックかどうか判定

持ってるアイテムがきのこシチューか判定

Playerの現在の体力増加処理

手持ちのきのこシチューを消すorボウルに置き換え

Eventをキャンセルさせる

とかかな…(適当でスマヌ…)
アバター
tsuttsu305
ID:ca1aa070
ダイヤモンド掘り
 
記事: 751
登録日時: 2011年10月18日(火) 17:49
お住まい: CloudFormationで建てたスタック

  • (PostNo.84913)

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

投稿記事by clehsu » 2013年3月09日(土) 21:10

tsuttsu305 さんが書きました:食べ物だからFoodLevelChangeEventで処理走らせるようにして、持ってるアイテムがきのこシチューだったらFoodLevelChangeEvent自体はキャンセルしてPlayerの現在の体力を増加させるとか。

PlayerInteractEventでやるなら
アイテム持ってるか判定

右クリックかどうか判定

持ってるアイテムがきのこシチューか判定

Playerの現在の体力増加処理

手持ちのきのこシチューを消すorボウルに置き換え

Eventをキャンセルさせる

とかかな…(適当でスマヌ…)


速い回答ありがとうございます。
せっかく回答してもらったのですが、よくわかりません。
もうすこしわかりやすく説明してもらえないでしょうか?
clehsu
ID:e945111c
石掘り
 
記事: 73
登録日時: 2012年9月22日(土) 15:37

  • (PostNo.84943)

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

投稿記事by hinadamari » 2013年3月09日(土) 22:21

clehsu さんが書きました:
tsuttsu305 さんが書きました:食べ物だからFoodLevelChangeEventで処理走らせるようにして、持ってるアイテムがきのこシチューだったらFoodLevelChangeEvent自体はキャンセルしてPlayerの現在の体力を増加させるとか。

PlayerInteractEventでやるなら
アイテム持ってるか判定

右クリックかどうか判定

持ってるアイテムがきのこシチューか判定

Playerの現在の体力増加処理

手持ちのきのこシチューを消すorボウルに置き換え

Eventをキャンセルさせる

とかかな…(適当でスマヌ…)


速い回答ありがとうございます。
せっかく回答してもらったのですが、よくわかりません。
もうすこしわかりやすく説明してもらえないでしょうか?


残念ながら食べ物を食べたイベントを拾う処理はBukkitAPIにはないので代替で補う必要があります(同等のものが出来るかまではわかりませんが)
満腹度変更時を拾う(FoodLevelChangeEvent)か、プレイヤーが(食べ物を持って)マウスクリックした時を拾う(PlayerInteractEvent)か
でどう対処するかの例が上記内容です
バグに遭っても泣かない 起きたらその時考える
hinadamari
ID:acd8de3c
木を殴ってる
 
記事: 16
登録日時: 2012年11月24日(土) 13:57

  • (PostNo.85158)

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

投稿記事by clehsu » 2013年3月10日(日) 17:04

hinadamari さんが書きました:残念ながら食べ物を食べたイベントを拾う処理はBukkitAPIにはないので代替で補う必要があります(同等のものが出来るかまではわかりませんが)
満腹度変更時を拾う(FoodLevelChangeEvent)か、プレイヤーが(食べ物を持って)マウスクリックした時を拾う(PlayerInteractEvent)か
でどう対処するかの例が上記内容です


もう少し調べてみることにします。
回答ありがとうございました。
clehsu
ID:e945111c
石掘り
 
記事: 73
登録日時: 2012年9月22日(土) 15:37

  • (PostNo.87401)

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

投稿記事by tsuttsu305 » 2013年3月20日(水) 09:18

clehsu さんが書きました:
hinadamari さんが書きました:残念ながら食べ物を食べたイベントを拾う処理はBukkitAPIにはないので代替で補う必要があります(同等のものが出来るかまではわかりませんが)
満腹度変更時を拾う(FoodLevelChangeEvent)か、プレイヤーが(食べ物を持って)マウスクリックした時を拾う(PlayerInteractEvent)か
でどう対処するかの例が上記内容です


もう少し調べてみることにします。
回答ありがとうございました。

だいぶ前の質問ですが…
最近BukkitのGithub見ていたらPlayerItemConsumeEventが実装されていたみたいです。
試してみたら食べ終わった時・ポーションの飲み終わった時に呼び出されるようです。
http://jd.bukkit.org/dev/doxygen/d5/d91 ... Event.html
アバター
tsuttsu305
ID:ca1aa070
ダイヤモンド掘り
 
記事: 751
登録日時: 2011年10月18日(火) 17:49
お住まい: CloudFormationで建てたスタック

  • (PostNo.88617)

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

投稿記事by Killy » 2013年3月24日(日) 08:28

CrafftBukkitの「MOD」作成について質問させていただきます(Bukkitプラグインでも可)
具体例で言いますと、エンドにクリーパーをSpownさせるにはどうしたらいいかというものになります。
公式サーバーではMCPでBiomeGenEnd.javaあたりをいじっていたんですがCraftBukkitにはそれらしきものは見当たらず、
worldごとのMOB沸き種類設定のclassファイルも探して見つからず、
プラグイン方面からも少し探しましたが見当たらず、現状に至ります。
どうかお手のほどをお貸し頂けたらと思います。
Killy
ID:6c8acb99
水から上がったとこ
 
記事: 2
登録日時: 2013年2月10日(日) 14:39

  • (PostNo.88722)

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

投稿記事by King(qpwakaba) » 2013年3月24日(日) 16:49

①HPが0になった時の、死んでしまった の画面に移行させず、処理を行う方法ってありますか。

詳しく言うと、
HP0になる

死んでしまった!
リスポーン
タイトル画面に戻る
の画面に本来は移る。

リスポーンorタイトル。

を、
HP0になる

テレポートさせる など。



PlayerDeathEventを探してみましたが、それらしきものはありませんでした。
もし、プレイヤーがダメージを受けた時のイベントがアレば、それでできそうですが、
それっぽいイベントが見つからなくて・・・

②EntityDamageEventを使えばいいんでしょうか・・・
King(qpwakaba)
ID:11742360
 

  • (PostNo.88766)

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

投稿記事by tsuttsu305 » 2013年3月24日(日) 20:41

aspn さんが書きました:①HPが0になった時の、死んでしまった の画面に移行させず、処理を行う方法ってありますか。

詳しく言うと、
HP0になる

死んでしまった!
リスポーン
タイトル画面に戻る
の画面に本来は移る。

リスポーンorタイトル。

を、
HP0になる

テレポートさせる など。



PlayerDeathEventを探してみましたが、それらしきものはありませんでした。
もし、プレイヤーがダメージを受けた時のイベントがアレば、それでできそうですが、
それっぽいイベントが見つからなくて・・・

②EntityDamageEventを使えばいいんでしょうか・・・


PlayerもEntityの一種なのでEntityDeathEventで死亡を取得出来ますが、EntityDeathEventは「死んだ!!!」なのでキャンセルがなかったはず。
EntityDamageEventでダメージで減る体力の量を取得し、死亡する場合はevent.setCancelled(true)してキャンセルさせてテレポートなりの処理をするのがいいかなーとおもいます。
アバター
tsuttsu305
ID:ca1aa070
ダイヤモンド掘り
 
記事: 751
登録日時: 2011年10月18日(火) 17:49
お住まい: CloudFormationで建てたスタック

  • (PostNo.88767)

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

投稿記事by tsuttsu305 » 2013年3月24日(日) 20:44

Killy さんが書きました:CrafftBukkitの「MOD」作成について質問させていただきます(Bukkitプラグインでも可)
具体例で言いますと、エンドにクリーパーをSpownさせるにはどうしたらいいかというものになります。
公式サーバーではMCPでBiomeGenEnd.javaあたりをいじっていたんですがCraftBukkitにはそれらしきものは見当たらず、
worldごとのMOB沸き種類設定のclassファイルも探して見つからず、
プラグイン方面からも少し探しましたが見当たらず、現状に至ります。
どうかお手のほどをお貸し頂けたらと思います。

エンダーマンがスポーンした時にクリーパーにすり替えるor追加ですぽーんさせるとかではダメですかね?

ちなみにCraftBukkitには公式鯖のクラスが入っている(ただ、いじられてますが)のでMODも可能だとは思いますが…
アバター
tsuttsu305
ID:ca1aa070
ダイヤモンド掘り
 
記事: 751
登録日時: 2011年10月18日(火) 17:49
お住まい: CloudFormationで建てたスタック

  • (PostNo.88773)

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

投稿記事by King(qpwakaba) » 2013年3月24日(日) 20:57

死亡キャンセルについて。
ダメージのキャンセルはなんとかできそうですが、
どうやってそのダメージで死ぬかどうかを判定する方法がわかりません。

多分、現在のHP(これがわからない)から、ダメージ量(コッチはgetDamage()で取得できる)を引いて判定すればいいいと思うんですが、
現在のHPを取得する方法、もしくはそのダメージで死ぬかどうかを判定する方法を教えていただけませんか。
King(qpwakaba)
ID:11742360
 

  • (PostNo.88833)

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

投稿記事by ゲスト » 2013年3月24日(日) 23:57

解決出来ました。

@EventHandler
public void onEntityDamageEvent(EntityDamageEvent event){
if(event.getEntity() instanceof org.bukkit.entity.Player){
if((((org.bukkit.entity.Player)event.getEntity()).getHealth() - event.getDamage()) <= 0){
getServer().broadcastMessage("死んだからキャンセルを試みる。");
event.setCancelled(true);
}
}
}

Player.getHealth()で現在のHPを取得することができました。

しかしevent.getentity()はEntity型なので
Player型にキャストしてからおこないました。

ありがとうございました
ゲスト
ID:11742360
 

  • (PostNo.88835)

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

投稿記事by King(qpwakaba) » 2013年3月25日(月) 00:07

また名前いれるの忘れた・・・
連投すみません・・・
King(qpwakaba)
ID:11742360
 

  • (PostNo.89082)

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

投稿記事by takuyan020 » 2013年3月25日(月) 20:16

>Killyさん
プラグインで作成するなら、tsuttsu305 さんの書いたやり方が良いです

Mod化するならば、
ためしに作ってみましたが、
CraftBukkitのModとして作成する場合は、
Maven依存関係の方にある”net.minecraft.server/BiomeTheEnd.java”

"src/main/java/net.minecraft.server/"
にコピーして以下のように改変してビルド
おそらく希望通りの動作になるでしょう

公開するModファイルは BiomeTheEnd.class のみにするとよいでしょう
コード: 全て選択
        J.add(new BiomeMeta(EntityEnderman.class, 10, 4, 4));
        J.add(new BiomeMeta(EntityCreeper.class, 10, 4, 4));
}
《 主な生息場所 》 ※社畜業が忙しく思うように動けませんが、細々と活動してまいります
非公式フォーラム内記事:〈自作建築系 plugin 集 / 影mod 関連 / Sponge 情報※さぼり中〉
外部:ニコ動コミュ〈co2291695〉 / Sponge ローカライズ〈Crowdin : Sponge Docs〉 ※復帰したい翻訳者増えてくれー
アバター
takuyan020
ID:053696b7
石掘り
 
記事: 132
登録日時: 2012年3月02日(金) 19:49

  • (PostNo.89141)

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

投稿記事by King(qpwakaba) » 2013年3月25日(月) 21:16

またまた質問します・・・

牛乳を飲んだ時みたいに、
毒などの状態をすべて回復する方法はありませんか。

牛乳を飲んだことにする、もしくは Playerの状態異常をすべてなくせばいいと思うのですが・・・

どうすればいいのでしょうか。Playerや、Entityを調べてみましたが全くわかりませんでした。
King(qpwakaba)
ID:11742360
 

  • (PostNo.89242)

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

投稿記事by King(qpwakaba) » 2013年3月26日(火) 10:33

aspnです。状態異常の回復について解決出来ました。

コード: 全て選択
for(int pot = 1; pot <= 20; pot++){
   getServer().getPlayer("qpwakaba").removePotionEffect(PotionEffectType.getById(pot));
   Message(PotionEffectType.getById(pot).getName());
}


とりあえず、forループで1つずつポーションの効果を削除していく方法でできました。

しかし、なんかプログラムとして気に入らない・・・
1 と 20 というマジックナンバーが気に入らない・・・

何とかならないかな・・・
てことで、今for(PotionEffectType pot: ○○){} のようにできないか探してます^^;;;
PotionEffectType.values()で取得出来ました
以下サイン
調べて見つからないことを質問して、「そのくらい調べろ」と言われたら それは調べが足りないとき。

投稿画面のBBコード挿入ボタン を追加するユーザースクリプト作りました。良かったらどうぞ。
https://greasyfork.org/ja/scripts/18657
最大描画距離を64チャンクまで伸ばすMod作ってます。
viewtopic.php?t=30697
アバター
King(qpwakaba)
ID:11742360
ダイヤモンド掘り
 
記事: 831
登録日時: 2013年3月26日(火) 10:25

  • (PostNo.89274)

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

投稿記事by tsuttsu305 » 2013年3月26日(火) 14:12

aspn さんが書きました:aspnです。状態異常の回復について解決出来ました。

コード: 全て選択
for(int pot = 1; pot <= 20; pot++){
   getServer().getPlayer("qpwakaba").removePotionEffect(PotionEffectType.getById(pot));
   Message(PotionEffectType.getById(pot).getName());
}


とりあえず、forループで1つずつポーションの効果を削除していく方法でできました。

しかし、なんかプログラムとして気に入らない・・・
1 と 20 というマジックナンバーが気に入らない・・・

何とかならないかな・・・
てことで、今for(PotionEffectType pot: ○○){} のようにできないか探してます^^;;;
PotionEffectType.values()で取得出来ました


Collection< PotionEffect > playerActiveEffects = player.getActivePotionEffects();
でActiveなPotionEffectsだけ入りません?
アバター
tsuttsu305
ID:ca1aa070
ダイヤモンド掘り
 
記事: 751
登録日時: 2011年10月18日(火) 17:49
お住まい: CloudFormationで建てたスタック

  • (PostNo.89478)

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

投稿記事by King(qpwakaba) » 2013年3月27日(水) 06:35

tsuttsu305 さんが書きました:
aspn さんが書きました:aspnです。状態異常の回復について解決出来ました。

コード: 全て選択
for(int pot = 1; pot <= 20; pot++){
   getServer().getPlayer("qpwakaba").removePotionEffect(PotionEffectType.getById(pot));
   Message(PotionEffectType.getById(pot).getName());
}


とりあえず、forループで1つずつポーションの効果を削除していく方法でできました。

しかし、なんかプログラムとして気に入らない・・・
1 と 20 というマジックナンバーが気に入らない・・・

何とかならないかな・・・
てことで、今for(PotionEffectType pot: ○○){} のようにできないか探してます^^;;;
PotionEffectType.values()で取得出来ました


Collection< PotionEffect > playerActiveEffects = player.getActivePotionEffects();
でActiveなPotionEffectsだけ入りません?


む~、NullPointerExceptionが発生しちゃうなぁ・・・
コード: 全て選択
for(Player p: getServer().getOnlinePlayers()){
   for(PotionEffectType pot: PotionEffectType.values()){
   p.removePotionEffect(pot);//この行で発生しているようです。
   getServer().broadcastMessage(pot.getName());
}
          }

まぁ、とりあえず今のままでもまぁいいか!ww
以下サイン
調べて見つからないことを質問して、「そのくらい調べろ」と言われたら それは調べが足りないとき。

投稿画面のBBコード挿入ボタン を追加するユーザースクリプト作りました。良かったらどうぞ。
https://greasyfork.org/ja/scripts/18657
最大描画距離を64チャンクまで伸ばすMod作ってます。
viewtopic.php?t=30697
アバター
King(qpwakaba)
ID:11742360
ダイヤモンド掘り
 
記事: 831
登録日時: 2013年3月26日(火) 10:25

  • (PostNo.89486)

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

投稿記事by tsuttsu305 » 2013年3月27日(水) 07:56

aspn さんが書きました:む~、NullPointerExceptionが発生しちゃうなぁ・・・
コード: 全て選択
for(Player p: getServer().getOnlinePlayers()){
   for(PotionEffectType pot: PotionEffectType.values()){
   p.removePotionEffect(pot);//この行で発生しているようです。
   getServer().broadcastMessage(pot.getName());
}
          }

まぁ、とりあえず今のままでもまぁいいか!ww


んー…なんか何やってんのか理解できないのだが…これじゃダメなんですかね?
コード: 全て選択
Collection< PotionEffect > playerActiveEffects = player.getActivePotionEffects();

for (PotionEffect potionEffect : playerActiveEffects) {
    player.removePotionEffect(potionEffect.getType());
}
アバター
tsuttsu305
ID:ca1aa070
ダイヤモンド掘り
 
記事: 751
登録日時: 2011年10月18日(火) 17:49
お住まい: CloudFormationで建てたスタック

  • (PostNo.89488)

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

投稿記事by King(qpwakaba) » 2013年3月27日(水) 08:25

tsuttsu305 さんが書きました:
aspn さんが書きました:む~、NullPointerExceptionが発生しちゃうなぁ・・・
コード: 全て選択
for(Player p: getServer().getOnlinePlayers()){
   for(PotionEffectType pot: PotionEffectType.values()){
   p.removePotionEffect(pot);//この行で発生しているようです。
   getServer().broadcastMessage(pot.getName());
}
          }

まぁ、とりあえず今のままでもまぁいいか!ww


んー…なんか何やってんのか理解できないのだが…これじゃダメなんですかね?
コード: 全て選択
Collection< PotionEffect > playerActiveEffects = player.getActivePotionEffects();

for (PotionEffect potionEffect : playerActiveEffects) {
    player.removePotionEffect(potionEffect.getType());
}

あれ?俺何やってたんだろww

えーっと・・・・

何がやりたかったんだ・・・

tsuttsu305 さんのコードで出来ました。


・・・本当に自分でも何やってんのか理解できないw


修正:

tsuttsu305さんありがとうございました。
最後に編集したユーザー King(qpwakaba) [ 2016年9月29日(木) 21:47 ], 累計 1 回
以下サイン
調べて見つからないことを質問して、「そのくらい調べろ」と言われたら それは調べが足りないとき。

投稿画面のBBコード挿入ボタン を追加するユーザースクリプト作りました。良かったらどうぞ。
https://greasyfork.org/ja/scripts/18657
最大描画距離を64チャンクまで伸ばすMod作ってます。
viewtopic.php?t=30697
アバター
King(qpwakaba)
ID:11742360
ダイヤモンド掘り
 
記事: 831
登録日時: 2013年3月26日(火) 10:25

1つ前へ次へ

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

x