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

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

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

投稿記事by amata1219 » 2018年5月20日(日) 09:23

ごぼたん さんが書きました:誠に恐縮ながら質問させていただきます。

現在、自分以外のプレイヤーを見えなくするというプラグインを作っているのですが、エラーが発生してしまいどうしていいか分からず困っております。
spigot 1.12.2 でpluginを起動させています。

コード: 全て選択
   public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args ) {
      if(cmd.getName().equalsIgnoreCase("hide")) {

         if (!(sender instanceof Player)) {
            sender.sendMessage("このコマンドはゲーム内で実行してね!");
            return true;
         }

         Player a = (Player) sender;
         Player b = (Player) getServer().getOnlinePlayers();

         a.hidePlayer(b);
         sender.sendMessage("周りのみんなを透明化したよ!");
         
         return true;


状況としましては、minecraft内で/hideを実行。その次に、コンソールにエラーが現れ、"Player b = (Player) getServer().getOnlinePlayers();"からエラーが出ると表示されてしまいます。
自分以外のプレイヤーを指定するにはどうしたらいけますでしょうか?
よろしくお願いいたします。


こぼたんさん、こんにちは。
まず、エラー発生が発生する原因は変数の型とデータ自体の型が不適合だからです。
例えば、下記コードも同じ理由でエラーが発生します。
コード: 全て選択
int i = (int) "1";

文字列が暗黙的に数値に変換される事は無く、キャストしようとも同じです。
getOnlinePlayers()はPlayer型ではなく、Collection<? extends Player>という型になります。
また、Playerは単数、getOnlinePlayers()は複数なので纏めての処理は出来ません。
この場合ですと、わざわざ変数を作らずfor文やforEachメソッドを用いて処理するのが良いでしょう。

for文:
コード: 全て選択
Player a = (Player) sender;
for(Player p : getServer().getOnlinePlayers())p.hidePlayer(a);
//複数を単数pに分解し、一人単位で処理を実行

forEachメソッド:
コード: 全て選択
Player a = (Player) sender;
getServer().getOnlinePlayers().forEach(p -> p.hidePlayer(a));
//複数を単数pに分解し、一人単位で処理を実行

これで正常に処理する事が出来ます。
アバター
amata1219
ID:bbba07ad
大工さん
 
記事: 52
登録日時: 2016年11月18日(金) 16:46
お住まい: 愛知県

  • (PostNo.316761)

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

投稿記事by ごぼたん » 2018年5月20日(日) 13:51

>>amata1219さん
ありがとうございます。for文で実行してみたところ周りのプレイヤーが表示されなくなりました。
本当にありがとうございました!
ごぼたん
ID:80e1e3c8
木を殴ってる
 
記事: 20
登録日時: 2016年9月09日(金) 20:59

  • (PostNo.317492)

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

投稿記事by オリゼリ » 2018年6月19日(火) 21:00

configの2段目に複数登録してる場合そこから1つを消す場合どうしたらよいでしょう?
コード: 全て選択
//これから
  w:
    a:
      name: test
    b:
      name: test2
//こうしたい
 w:
     b:
       name: test2
質問の仕方とか直したほうがいいよってことがあったら教えていただければ嬉しいです
オリゼリ
ID:fc835bc3
大工さん
 
記事: 46
登録日時: 2015年4月29日(水) 20:13

  • (PostNo.317512)

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

投稿記事by amata1219 » 2018年6月20日(水) 18:05

オリゼリ さんが書きました:configの2段目に複数登録してる場合そこから1つを消す場合どうしたらよいでしょう?
コード: 全て選択
//これから
  w:
    a:
      name: test
    b:
      name: test2
//こうしたい
 w:
     b:
       name: test2


オリゼリさん、こんにちは。
下記コードの様にすると削除されます。
コード: 全て選択
getConfig().set("w.a.name", null);
アバター
amata1219
ID:a22dea35
大工さん
 
記事: 52
登録日時: 2016年11月18日(金) 16:46
お住まい: 愛知県

  • (PostNo.317625)

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

投稿記事by wasaru816 » 2018年6月24日(日) 11:50

自作bukkitpluginを作って、サーバーにいれてサーバーを開こうとするとコマンドプロンプトに
[11:50:00 ERROR]: Could not load 'plugins\TutorialPlugin.jar' in folder 'plugins'
org.bukkit.plugin.InvalidPluginException: Cannot find main class `tutorial.plugin.TutorialPlugin'
at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:56) ~[craftbukkit.jar:git-Bukkit-fbe3046]
at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:127) ~[craftbukkit.jar:git-Bukkit-fbe3046]
at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:326) ~[craftbukkit.jar:git-Bukkit-fbe3046]
at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:248) [craftbukkit.jar:git-Bukkit-fbe3046]
at org.bukkit.craftbukkit.v1_12_R1.CraftServer.loadPlugins(CraftServer.java:303) [craftbukkit.jar:git-Bukkit-fbe3046]
at net.minecraft.server.v1_12_R1.DedicatedServer.init(DedicatedServer.java:188) [craftbukkit.jar:git-Bukkit-fbe3046]
at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:522) [craftbukkit.jar:git-Bukkit-fbe3046]
at java.lang.Thread.run(Unknown Source) [?:?]
Caused by: java.lang.ClassNotFoundException: tutorial.plugin.TutorialPlugin
at java.net.URLClassLoader.findClass(Unknown Source) ~[?:?]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:128) ~[craftbukkit.jar:git-Bukkit-fbe3046]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:76) ~[craftbukkit.jar:git-Bukkit-fbe3046]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:?]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:?]
at java.lang.Class.forName0(Native Method) ~[?:?]
at java.lang.Class.forName(Unknown Source) ~[?:?]
at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:54) ~[craftbukkit.jar:git-Bukkit-fbe3046]
と出るのですが、原因わかる方いますか?

pluginのcodeは
package tutorial.plugin;

import org.bukkit.plugin.java.JavaPlugin;

public class TutorialPlugin extends JavaPlugin {

@Override
public void onDisable() {
// TODO 自動生成されたメソッド・スタブ
super.onDisable();
}

@Override
public void onEnable() {
// TODO 自動生成されたメソッド・スタブ
super.onEnable();
}

}

です
wasaru816
ID:7f5bd7c7
水から上がったとこ
 
記事: 2
登録日時: 2018年6月24日(日) 11:47

  • (PostNo.317646)

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

投稿記事by amata1219 » 2018年6月25日(月) 03:13

wasaru816 さんが書きました:自作bukkitpluginを作って、サーバーにいれてサーバーを開こうとするとコマンドプロンプトに
[11:50:00 ERROR]: Could not load 'plugins\TutorialPlugin.jar' in folder 'plugins'
org.bukkit.plugin.InvalidPluginException: Cannot find main class `tutorial.plugin.TutorialPlugin'
at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:56) ~[craftbukkit.jar:git-Bukkit-fbe3046]
at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:127) ~[craftbukkit.jar:git-Bukkit-fbe3046]
at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:326) ~[craftbukkit.jar:git-Bukkit-fbe3046]
at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:248) [craftbukkit.jar:git-Bukkit-fbe3046]
at org.bukkit.craftbukkit.v1_12_R1.CraftServer.loadPlugins(CraftServer.java:303) [craftbukkit.jar:git-Bukkit-fbe3046]
at net.minecraft.server.v1_12_R1.DedicatedServer.init(DedicatedServer.java:188) [craftbukkit.jar:git-Bukkit-fbe3046]
at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:522) [craftbukkit.jar:git-Bukkit-fbe3046]
at java.lang.Thread.run(Unknown Source) [?:?]
Caused by: java.lang.ClassNotFoundException: tutorial.plugin.TutorialPlugin
at java.net.URLClassLoader.findClass(Unknown Source) ~[?:?]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:128) ~[craftbukkit.jar:git-Bukkit-fbe3046]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:76) ~[craftbukkit.jar:git-Bukkit-fbe3046]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:?]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:?]
at java.lang.Class.forName0(Native Method) ~[?:?]
at java.lang.Class.forName(Unknown Source) ~[?:?]
at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:54) ~[craftbukkit.jar:git-Bukkit-fbe3046]
と出るのですが、原因わかる方いますか?

pluginのcodeは
package tutorial.plugin;

import org.bukkit.plugin.java.JavaPlugin;

public class TutorialPlugin extends JavaPlugin {

@Override
public void onDisable() {
// TODO 自動生成されたメソッド・スタブ
super.onDisable();
}

@Override
public void onEnable() {
// TODO 自動生成されたメソッド・スタブ
super.onEnable();
}

}

です


wasaru816さん、こんにちは。
エラーはTutorialPluginクラスの定義が見つからなかったため発生しています。
下記はエラーログの抜粋になります。大体の場合はCaused by: の後に大まかな原因が提示されています。
コード: 全て選択
Caused by: java.lang.ClassNotFoundException: tutorial.plugin.TutorialPlugin

今回の場合は「原因:ClassNotFoundException(クラスが見つからない)、詳細:tutorial.pluginパッケージのTutorialPluginクラス」と訳す事が出来ます。
ご提示頂いたコードを拝見しますと、パッケージ、クラスともに問題は無い様に見受けられますので、恐らくplugin.ymlの記述が不正であると思われます。
下記がTutorialPlugin用のplugin.ymlのサンプルになりますので、main: に不備が無いかご確認下さい。
コード: 全て選択
name: TutorialPlugin
main: tutorial.plugin.TutorialPlugin
version: 1.0.0

私が公開している講座になりますが、plugin.ymlに関して何も存知ませんでしたら是非こちらもご参考にして頂ければと思います。
【Minecraft】プログラミング初心者対応!Spigotプラグイン開発講座
アバター
amata1219
ID:41ade57a
大工さん
 
記事: 52
登録日時: 2016年11月18日(金) 16:46
お住まい: 愛知県

  • (PostNo.317688)

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

投稿記事by wasaru816 » 2018年6月27日(水) 16:38

amata1219 さんが書きました:
wasaru816 さんが書きました:自作bukkitpluginを作って、サーバーにいれてサーバーを開こうとするとコマンドプロンプトに
[11:50:00 ERROR]: Could not load 'plugins\TutorialPlugin.jar' in folder 'plugins'
org.bukkit.plugin.InvalidPluginException: Cannot find main class `tutorial.plugin.TutorialPlugin'
at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:56) ~[craftbukkit.jar:git-Bukkit-fbe3046]
at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:127) ~[craftbukkit.jar:git-Bukkit-fbe3046]
at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:326) ~[craftbukkit.jar:git-Bukkit-fbe3046]
at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:248) [craftbukkit.jar:git-Bukkit-fbe3046]
at org.bukkit.craftbukkit.v1_12_R1.CraftServer.loadPlugins(CraftServer.java:303) [craftbukkit.jar:git-Bukkit-fbe3046]
at net.minecraft.server.v1_12_R1.DedicatedServer.init(DedicatedServer.java:188) [craftbukkit.jar:git-Bukkit-fbe3046]
at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:522) [craftbukkit.jar:git-Bukkit-fbe3046]
at java.lang.Thread.run(Unknown Source) [?:?]
Caused by: java.lang.ClassNotFoundException: tutorial.plugin.TutorialPlugin
at java.net.URLClassLoader.findClass(Unknown Source) ~[?:?]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:128) ~[craftbukkit.jar:git-Bukkit-fbe3046]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:76) ~[craftbukkit.jar:git-Bukkit-fbe3046]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:?]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:?]
at java.lang.Class.forName0(Native Method) ~[?:?]
at java.lang.Class.forName(Unknown Source) ~[?:?]
at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:54) ~[craftbukkit.jar:git-Bukkit-fbe3046]
と出るのですが、原因わかる方いますか?

pluginのcodeは
package tutorial.plugin;

import org.bukkit.plugin.java.JavaPlugin;

public class TutorialPlugin extends JavaPlugin {

@Override
public void onDisable() {
// TODO 自動生成されたメソッド・スタブ
super.onDisable();
}

@Override
public void onEnable() {
// TODO 自動生成されたメソッド・スタブ
super.onEnable();
}

}

です


wasaru816さん、こんにちは。
エラーはTutorialPluginクラスの定義が見つからなかったため発生しています。
下記はエラーログの抜粋になります。大体の場合はCaused by: の後に大まかな原因が提示されています。
コード: 全て選択
Caused by: java.lang.ClassNotFoundException: tutorial.plugin.TutorialPlugin

今回の場合は「原因:ClassNotFoundException(クラスが見つからない)、詳細:tutorial.pluginパッケージのTutorialPluginクラス」と訳す事が出来ます。
ご提示頂いたコードを拝見しますと、パッケージ、クラスともに問題は無い様に見受けられますので、恐らくplugin.ymlの記述が不正であると思われます。
下記がTutorialPlugin用のplugin.ymlのサンプルになりますので、main: に不備が無いかご確認下さい。
コード: 全て選択
name: TutorialPlugin
main: tutorial.plugin.TutorialPlugin
version: 1.0.0

私が公開している講座になりますが、plugin.ymlに関して何も存知ませんでしたら是非こちらもご参考にして頂ければと思います。
【Minecraft】プログラミング初心者対応!Spigotプラグイン開発講座


返信ありがとうございます。
おかげで解決することができました。
ありがとうございました。
wasaru816
ID:7f5bd7c7
水から上がったとこ
 
記事: 2
登録日時: 2018年6月24日(日) 11:47

  • (PostNo.317781)

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

投稿記事by オリゼリ » 2018年7月01日(日) 22:12

天気を固定してコマンドでの変更は可能にしたいのですがどうしたらいいですか?
現在のコードです
コード: 全て選択
    @EventHandler
    public void onWeatherChange(WeatherChangeEvent event) {
        event.setCancelled(true);
    }
質問の仕方とか直したほうがいいよってことがあったら教えていただければ嬉しいです
オリゼリ
ID:fc835bc3
大工さん
 
記事: 46
登録日時: 2015年4月29日(水) 20:13

  • (PostNo.317849)

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

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

オリゼリ さんが書きました:天気を固定してコマンドでの変更は可能にしたいのですがどうしたらいいですか?
現在のコードです
コード: 全て選択
    @EventHandler
    public void onWeatherChange(WeatherChangeEvent event) {
        event.setCancelled(true);
    }


オリゼリさん、こんにちは。
それでしたらプラグインに頼らずとも既存コマンドで出来ます。
gameruleのdoWeatherCycleをfalseに設定するだけです。
天候操作コマンドには何ら影響ありません。

gameruleを変更したくない場合

方法はパッ思いついたもので2つあります。

1:WeatherChangEventは常にキャンセル、プラグイン側で天候操作コマンドを追加する。
2(※出来るか未検証):どこかにboolean型のフィールド(flagとする)を用意し、既存の天候操作コマンド実行時にPlayerCommandPreprocessEventでflag=true、WeatherChangeEventはflag=falseならキャンセルする。
アバター
amata1219
ID:46427322
大工さん
 
記事: 52
登録日時: 2016年11月18日(金) 16:46
お住まい: 愛知県

  • (PostNo.317864)

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

投稿記事by まーぼう » 2018年7月07日(土) 14:03

Switch版のBEで自分の頭をだそうとしても

構文エラー:゙

とエラーが出て入手出来ません。どうしたらよいですか?
このように打ちました

/give @p skull 1 3 {skullowner:プレイヤー名}

プレイヤー名の所は、ちゃんと自分のSwitchのユーザー名を打ちました。
まーぼう
ID:c0c23c8e
 

  • (PostNo.317865)

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

投稿記事by spuash918 » 2018年7月07日(土) 14:13

まーぼう さんが書きました:Switch版のBEで自分の頭をだそうとしても

構文エラー:゙

とエラーが出て入手出来ません。どうしたらよいですか?
このように打ちました

/give @p skull 1 3 {skullowner:プレイヤー名}

プレイヤー名の所は、ちゃんと自分のSwitchのユーザー名を打ちました。

ここは「Bukkit Plugin制作」に関する質問をする場所です
適切な場所で質問してください
プログラム無しでアイテムやブロックを追加できるMOD公開中です!
無機能ブロックから剣、斧に加えツールマテリアルにも対応!
詳しくはMOD配布ページまで!
Twitterやってます。→https://twitter.com/pokora_youtube
よろしければYoutubeもお願いします。
spuash918
ID:a74e6760
鉄鉱掘り
 
記事: 301
登録日時: 2014年11月03日(月) 11:17
お住まい: 東海のどこか

  • (PostNo.317992)

防具立てにプレイヤーが触れた時に発生するイベント

投稿記事by Gattino » 2018年7月12日(木) 20:31

防具立て(透明・重力の影響を受けない)にプレイヤーが触れた時に発生するイベントは、EntityInteractEventでいいのですか?
でも防具立て動いてないしなぁって悩んでます。
Gattino
ID:2b57efbf
水から上がったとこ
 
記事: 6
登録日時: 2018年7月12日(木) 02:41

  • (PostNo.317994)

小さなシダのMaterial

投稿記事by Gattino » 2018年7月12日(木) 23:13

(小さな)シダというアイテムがありますが、小さなシダはMaterialだと何に当たるのですか?
調べたんですけどよく分かりませんでした…
Gattino
ID:2b57efbf
水から上がったとこ
 
記事: 6
登録日時: 2018年7月12日(木) 02:41

  • (PostNo.318006)

Re: 防具立てにプレイヤーが触れた時に発生するイベント

投稿記事by amata1219 » 2018年7月13日(金) 19:56

Gattinoさん、こんにちは。

Gattino さんが書きました:防具立て(透明・重力の影響を受けない)にプレイヤーが触れた時に発生するイベントは、EntityInteractEventでいいのですか?
でも防具立て動いてないしなぁって悩んでます。


防具立ては少々特殊なエンティティですので、EntityInteractEventは発生せず代わりにPlayerArmorStandManipulateEventが発生します。

Gattino さんが書きました:(小さな)シダというアイテムがありますが、小さなシダはMaterialだと何に当たるのですか?
調べたんですけどよく分かりませんでした…


小さなシダは、Material.LONG_GRASSのデータ値2に該当します。
コード: 全て選択
block.setType(Material.LONG_GRASS);
block.setData((byte) 2);

Materialやデータ値等が不明な場合はPlayerInteractEventなんかを利用して表示させると簡単に分かると思います。
コード: 全て選択
@EventHandler
public void onPlayerInteractEvent(PlayerInteractEvent e){
if(e.getAction().toString().matches(".*BLOCK.*")){
System.out.println(e.getClickedBlock().getType());
}
}
最後に編集したユーザー amata1219 [ 2018年7月13日(金) 20:19 ], 累計 1 回
アバター
amata1219
ID:34b902fb
大工さん
 
記事: 52
登録日時: 2016年11月18日(金) 16:46
お住まい: 愛知県

  • (PostNo.318040)

Re: 防具立てにプレイヤーが触れた時に発生するイベント

投稿記事by Gattino » 2018年7月14日(土) 15:52

amata1219 さんが書きました:Gattinoさん、こんにちは。

Gattino さんが書きました:防具立て(透明・重力の影響を受けない)にプレイヤーが触れた時に発生するイベントは、EntityInteractEventでいいのですか?
でも防具立て動いてないしなぁって悩んでます。


防具立ては少々特殊なエンティティですので、EntityInteractEventは発生せず代わりにPlayerArmorStandManipulateEventが発生します。

Gattino さんが書きました:(小さな)シダというアイテムがありますが、小さなシダはMaterialだと何に当たるのですか?
調べたんですけどよく分かりませんでした…


小さなシダは、Material.LONG_GRASSのデータ値2に該当します。
コード: 全て選択
block.setType(Material.LONG_GRASS);
block.setData((byte) 2);

Materialやデータ値等が不明な場合はPlayerInteractEventなんかを利用して表示させると簡単に分かると思います。
コード: 全て選択
@EventHandler
public void onPlayerInteractEvent(PlayerInteractEvent e){
if(e.getAction().toString().matches(".*BLOCK.*")){
System.out.println(e.getClickedBlock().getType());
}
}

ありがとうございましたm(_ _)m
Gattino
ID:2b57efbf
水から上がったとこ
 
記事: 6
登録日時: 2018年7月12日(木) 02:41

  • (PostNo.318041)

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

投稿記事by Gattino » 2018年7月14日(土) 16:43

任意の残留ポーションのItemStack型変数はどうやって作ればいいですか?
Gattino
ID:2b57efbf
水から上がったとこ
 
記事: 6
登録日時: 2018年7月12日(木) 02:41

  • (PostNo.318044)

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

投稿記事by amata1219 » 2018年7月14日(土) 18:03

Gattino さんが書きました:任意の残留ポーションのItemStack型変数はどうやって作ればいいですか?


Gattinoさん、こんにちは。
アイテム自体は他と同じくMaterial指定でItemStackを生成し、効果はPotionMetaを使って編集します。
コード: 全て選択
ItemStack item = new ItemStack(Material.LINGERING_POTION);

PotionMeta pm = (PotionMeta) item.getItemMeta();

pm.addCustomEffect(new PotionEffect(PotionEffectType.SPEED, 1000, 2), true);
//new PotionEffect(PotionEffectType-効果の指定, int-効果時間の指定(tick単位[1s=20tick]), int-レベルの指定(レベル1は0)), boolean-パーティクルの有無);

pm.addCustomEffect(new PotionEffect(PotionEffectType.JUMP, 1000, 2), true);
//メソッド名にaddとある通り複数追加可能。

pm.setColor(Color.fromRGB(255, 255, 255));
//RGBでポーションカラーを指定

pm.setDisplayName(ChatColor.WHITE + "俊敏+");
//PotionMetaはItemMetaを継承しているので名前設定等も出来ます。

item.setItemMeta(pm);

エリアエフェクトクラウドの滞在時間等はエンティティでのみ設定可能ですので、アイテム側から設定することは出来ません。
それらの処理はLingeringPotionSplashEventを利用するといいと思います。
アバター
amata1219
ID:22fa1a83
大工さん
 
記事: 52
登録日時: 2016年11月18日(金) 16:46
お住まい: 愛知県

  • (PostNo.318077)

Re: 防具立てにプレイヤーが触れた時に発生するイベント

投稿記事by Gattino » 2018年7月15日(日) 23:11

MaterialDateが最新版だと非推奨になっているのですが、最新版でも有効なもので、if文の条件式で判定に使えるようなやりかたってありますか?

amata1219 さんが書きました:Gattinoさん、こんにちは。

Gattino さんが書きました:防具立て(透明・重力の影響を受けない)にプレイヤーが触れた時に発生するイベントは、EntityInteractEventでいいのですか?
でも防具立て動いてないしなぁって悩んでます。


防具立ては少々特殊なエンティティですので、EntityInteractEventは発生せず代わりにPlayerArmorStandManipulateEventが発生します。

Gattino さんが書きました:(小さな)シダというアイテムがありますが、小さなシダはMaterialだと何に当たるのですか?
調べたんですけどよく分かりませんでした…


小さなシダは、Material.LONG_GRASSのデータ値2に該当します。
コード: 全て選択
block.setType(Material.LONG_GRASS);
block.setData((byte) 2);

Materialやデータ値等が不明な場合はPlayerInteractEventなんかを利用して表示させると簡単に分かると思います。
コード: 全て選択
@EventHandler
public void onPlayerInteractEvent(PlayerInteractEvent e){
if(e.getAction().toString().matches(".*BLOCK.*")){
System.out.println(e.getClickedBlock().getType());
}
}
Gattino
ID:2b57efbf
水から上がったとこ
 
記事: 6
登録日時: 2018年7月12日(木) 02:41

  • (PostNo.318109)

Re: 防具立てにプレイヤーが触れた時に発生するイベント

投稿記事by amata1219 » 2018年7月17日(火) 01:34

Gattino さんが書きました:MaterialDateが最新版だと非推奨になっているのですが、最新版でも有効なもので、if文の条件式で判定に使えるようなやりかたってありますか?

amata1219 さんが書きました:Gattinoさん、こんにちは。

Gattino さんが書きました:防具立て(透明・重力の影響を受けない)にプレイヤーが触れた時に発生するイベントは、EntityInteractEventでいいのですか?
でも防具立て動いてないしなぁって悩んでます。


防具立ては少々特殊なエンティティですので、EntityInteractEventは発生せず代わりにPlayerArmorStandManipulateEventが発生します。

Gattino さんが書きました:(小さな)シダというアイテムがありますが、小さなシダはMaterialだと何に当たるのですか?
調べたんですけどよく分かりませんでした…


小さなシダは、Material.LONG_GRASSのデータ値2に該当します。
コード: 全て選択
block.setType(Material.LONG_GRASS);
block.setData((byte) 2);

Materialやデータ値等が不明な場合はPlayerInteractEventなんかを利用して表示させると簡単に分かると思います。
コード: 全て選択
@EventHandler
public void onPlayerInteractEvent(PlayerInteractEvent e){
if(e.getAction().toString().matches(".*BLOCK.*")){
System.out.println(e.getClickedBlock().getType());
}
}


block.setData(byte)は、見ての通りMaterialDataでなくbyte型の引数を必要とします。
また、非推奨であろうとBukkit/Spigotのメソッドでは代替出来るものがありませんので、@SuppressWarnings("deprecation")を記述しそのまま使用して下さい。

提示コード中に非推奨処理が一つだけ含まれていましたので回答しましたが、質問内容が非常に曖昧ですので、今後質問する際は具体的に何がどうなっているのか明記した上でお願いしますね。
アバター
amata1219
ID:1841d01a
大工さん
 
記事: 52
登録日時: 2016年11月18日(金) 16:46
お住まい: 愛知県

  • (PostNo.318115)

Re: 防具立てにプレイヤーが触れた時に発生するイベント

投稿記事by Gattino » 2018年7月17日(火) 12:31

わかりにくくてすみません
if文の中で、手に持っているアイテムのデータ値を取得しようとして、getDate()を使おうとしたころ非推奨と出たので、返信させて頂きました
気をつけます

amata1219 さんが書きました:
Gattino さんが書きました:MaterialDateが最新版だと非推奨になっているのですが、最新版でも有効なもので、if文の条件式で判定に使えるようなやりかたってありますか?

amata1219 さんが書きました:Gattinoさん、こんにちは。

Gattino さんが書きました:防具立て(透明・重力の影響を受けない)にプレイヤーが触れた時に発生するイベントは、EntityInteractEventでいいのですか?
でも防具立て動いてないしなぁって悩んでます。


防具立ては少々特殊なエンティティですので、EntityInteractEventは発生せず代わりにPlayerArmorStandManipulateEventが発生します。

Gattino さんが書きました:(小さな)シダというアイテムがありますが、小さなシダはMaterialだと何に当たるのですか?
調べたんですけどよく分かりませんでした…


小さなシダは、Material.LONG_GRASSのデータ値2に該当します。
コード: 全て選択
block.setType(Material.LONG_GRASS);
block.setData((byte) 2);

Materialやデータ値等が不明な場合はPlayerInteractEventなんかを利用して表示させると簡単に分かると思います。
コード: 全て選択
@EventHandler
public void onPlayerInteractEvent(PlayerInteractEvent e){
if(e.getAction().toString().matches(".*BLOCK.*")){
System.out.println(e.getClickedBlock().getType());
}
}


block.setData(byte)は、見ての通りMaterialDataでなくbyte型の引数を必要とします。
また、非推奨であろうとBukkit/Spigotのメソッドでは代替出来るものがありませんので、@SuppressWarnings("deprecation")を記述しそのまま使用して下さい。

提示コード中に非推奨処理が一つだけ含まれていましたので回答しましたが、質問内容が非常に曖昧ですので、今後質問する際は具体的に何がどうなっているのか明記した上でお願いしますね。
Gattino
ID:4aa23d23
水から上がったとこ
 
記事: 6
登録日時: 2018年7月12日(木) 02:41

1つ前へ次へ

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

x