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

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

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

投稿記事by Lemon18 » 2016年8月22日(月) 14:15

Eyth さんが書きました:コンフィグに書かれた内容を取得するにはどうしたらいいでしょうか
名前をリストに登録して保存したいのですが
getString()では指定したものしか取得することができず
書いてあるものを取得する方法がわかりません。


getKeys(boolean)を使えばできるかと。
:D
Lemon18
ID:b66be5f3
石掘り
 
記事: 85
登録日時: 2015年6月05日(金) 22:42

  • (PostNo.281239)

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

投稿記事by Eyth » 2016年8月23日(火) 08:15

回答ありがとうございます。
getKeysは今まで使ったことがなかったんですが
どういう風に使えばいいのでしょうか?
Eyth
ID:f86fe74b
 

  • (PostNo.281387)

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

投稿記事by zigzagcrafty » 2016年8月24日(水) 21:04

Eyth さんが書きました:回答ありがとうございます。
getKeysは今まで使ったことがなかったんですが
どういう風に使えばいいのでしょうか?


これからは最初にAPI見るようにしてね。
https://hub.spigotmc.org/javadocs/spigo ... ction.html

getKeyというキーワードを知れたなら、まず検索することから始めればいいよ。
「spigot getkeys」[検索]

基本的にはこう使う

コード: 全て選択
FileConfiguration confing= MYPLUGIN.getConfig();

ConfigurationSection cs = config.getConfigurationSection("");

for(String key:cs.getKeys(false)){
    // キーをとれる
}
for(String key:cs.getKeys(false)){
    // 値をとれる
}


下のようなconfigの値で、


コード: 全て選択
playernames:
  player1:
    lv: 100
  player2
    ln: 200
locations:
  no1:
    x: 100
    y: 63
    z: -291
    world: world
  no2:
    x: 100
    y: 63
    z: -291
    world: world
  no3:
    x: 100
    y: 63
    z: -291
    world: world



コード: 全て選択
//playernames,locations...を取得したいなら
ConfigurationSection cs = config.getConfigurationSection("");
//no1,no2,no3....を取得したいなら
ConfigurationSection cs = config.getConfigurationSection("locations");
zigzagcrafty
ID:0661ff2b
水から上がったとこ
 
記事: 8
登録日時: 2015年5月10日(日) 14:03

  • (PostNo.282195)

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

投稿記事by オリゼリ » 2016年9月03日(土) 02:32

tabキーを押したときにプレイヤー欄の上下に文字を出すプラグインを作っているのですが、エラーが吐いて困ってます。
どこが間違っているのでしょうか?
エラーはプレイヤーがログインしたときです。
制作環境はbukkit1.8.8
サーバ環境はspigot1.8.8です
結構スペースを取ったのでspoilerで隠します
ビルドパスはこうなってます
キャプチャ.PNG

コード
コード: 全て選択
    public static void setPlayerListHeader(Player player, String header) {
        CraftPlayer cplayer = (CraftPlayer) player;
        PlayerConnection connection = cplayer.getHandle().playerConnection;
       
        IChatBaseComponent top = ChatSerializer.a("{text; '" + header + "'}");
       
        PacketPlayOutPlayerListHeaderFooter packet = new PacketPlayOutPlayerListHeaderFooter();
       
        try {
           Field hederField = packet.getClass().getDeclaredField("a");
           hederField.setAccessible(true);
           hederField.set(packet, top);
           hederField.setAccessible(!hederField.isAccessible());
        } catch (Exception e) {
           e.printStackTrace();
        }
       
        connection.sendPacket(packet);
    }
   
    public static void setPlayerListFooter(Player player, String footer) {
       
        CraftPlayer cplayer = (CraftPlayer) player;
        PlayerConnection connection = cplayer.getHandle().playerConnection;
       
        IChatBaseComponent bottom = ChatSerializer.a("{'text': '" + footer + "'}");
       
        PacketPlayOutPlayerListHeaderFooter packet = new PacketPlayOutPlayerListHeaderFooter();
       
        try{
           Field footerField = packet.getClass().getDeclaredField("d");
           footerField.setAccessible(true);
           footerField.set(packet, bottom);
           footerField.setAccessible(!footerField.isAccessible());
        } catch (Exception e) {
           e.printStackTrace();
        }
       
        connection.sendPacket(packet);
    }
   
   @EventHandler
   public void onPlayerConnect(PlayerJoinEvent e){
      Player player = e.getPlayer();
      setPlayerListHeader(player, ChatColor.RED + "HEADER");
      setPlayerListFooter(player, ChatColor.BLUE + "FOOTER");
   }

エラー
コード: 全て選択
[02:13:36 ERROR]: Could not pass event PlayerJoinEvent to Test v0.0.1-SNAPSHOT
org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:310) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.PlayerList.onPlayerJoin(PlayerList.java:298) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.PlayerList.a(PlayerList.java:157) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.LoginListener.b(LoginListener.java:144) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.LoginListener.c(LoginListener.java:54) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.NetworkManager.a(NetworkManager.java:231) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.ServerConnection.c(ServerConnection.java:148) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:813) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:653) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:556) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_77]
Caused by: com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 7
        at com.google.gson.internal.Streams.parse(Streams.java:56) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.TreeTypeAdapter.read(TreeTypeAdapter.java:54) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.Gson.fromJson(Gson.java:803) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.Gson.fromJson(Gson.java:768) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.Gson.fromJson(Gson.java:717) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.Gson.fromJson(Gson.java:689) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.IChatBaseComponent$ChatSerializer.a(SourceFile:199) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.oriserver.test.Main.setPlayerListHeader(Main.java:38) ~[?:?]
        at net.oriserver.test.Main.onPlayerConnect(Main.java:78) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_77]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_77]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_77]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_77]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        ... 14 more
Caused by: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 7
        at com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1505) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:519) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.stream.JsonReader.peek(JsonReader.java:414) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:644) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:667) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:642) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.internal.Streams.parse(Streams.java:44) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.TreeTypeAdapter.read(TreeTypeAdapter.java:54) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.Gson.fromJson(Gson.java:803) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.Gson.fromJson(Gson.java:768) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.Gson.fromJson(Gson.java:717) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.Gson.fromJson(Gson.java:689) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.IChatBaseComponent$ChatSerializer.a(SourceFile:199) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.oriserver.test.Main.setPlayerListHeader(Main.java:38) ~[?:?]
        at net.oriserver.test.Main.onPlayerConnect(Main.java:78) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_77]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_77]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_77]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_77]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        ... 14 more
質問の仕方とか直したほうがいいよってことがあったら教えていただければ嬉しいです
オリゼリ
ID:2f889857
大工さん
 
記事: 45
登録日時: 2015年4月29日(水) 20:13

  • (PostNo.282199)

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

投稿記事by mozow470 » 2016年9月03日(土) 06:19

オリゼリ さんが書きました:tabキーを押したときにプレイヤー欄の上下に文字を出すプラグインを作っているのですが、エラーが吐いて困ってます。
どこが間違っているのでしょうか?
エラーはプレイヤーがログインしたときです。
制作環境はbukkit1.8.8
サーバ環境はspigot1.8.8です
結構スペースを取ったのでspoilerで隠します
ビルドパスはこうなってます
キャプチャ.PNG

コード
コード: 全て選択
    public static void setPlayerListHeader(Player player, String header) {
        CraftPlayer cplayer = (CraftPlayer) player;
        PlayerConnection connection = cplayer.getHandle().playerConnection;
       
        IChatBaseComponent top = ChatSerializer.a("{text; '" + header + "'}");
       
        PacketPlayOutPlayerListHeaderFooter packet = new PacketPlayOutPlayerListHeaderFooter();
       
        try {
           Field hederField = packet.getClass().getDeclaredField("a");
           hederField.setAccessible(true);
           hederField.set(packet, top);
           hederField.setAccessible(!hederField.isAccessible());
        } catch (Exception e) {
           e.printStackTrace();
        }
       
        connection.sendPacket(packet);
    }
   
    public static void setPlayerListFooter(Player player, String footer) {
       
        CraftPlayer cplayer = (CraftPlayer) player;
        PlayerConnection connection = cplayer.getHandle().playerConnection;
       
        IChatBaseComponent bottom = ChatSerializer.a("{'text': '" + footer + "'}");
       
        PacketPlayOutPlayerListHeaderFooter packet = new PacketPlayOutPlayerListHeaderFooter();
       
        try{
           Field footerField = packet.getClass().getDeclaredField("d");
           footerField.setAccessible(true);
           footerField.set(packet, bottom);
           footerField.setAccessible(!footerField.isAccessible());
        } catch (Exception e) {
           e.printStackTrace();
        }
       
        connection.sendPacket(packet);
    }
   
   @EventHandler
   public void onPlayerConnect(PlayerJoinEvent e){
      Player player = e.getPlayer();
      setPlayerListHeader(player, ChatColor.RED + "HEADER");
      setPlayerListFooter(player, ChatColor.BLUE + "FOOTER");
   }

エラー
コード: 全て選択
[02:13:36 ERROR]: Could not pass event PlayerJoinEvent to Test v0.0.1-SNAPSHOT
org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:310) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.PlayerList.onPlayerJoin(PlayerList.java:298) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.PlayerList.a(PlayerList.java:157) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.LoginListener.b(LoginListener.java:144) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.LoginListener.c(LoginListener.java:54) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.NetworkManager.a(NetworkManager.java:231) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.ServerConnection.c(ServerConnection.java:148) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:813) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:653) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:556) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_77]
Caused by: com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 7
        at com.google.gson.internal.Streams.parse(Streams.java:56) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.TreeTypeAdapter.read(TreeTypeAdapter.java:54) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.Gson.fromJson(Gson.java:803) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.Gson.fromJson(Gson.java:768) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.Gson.fromJson(Gson.java:717) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.Gson.fromJson(Gson.java:689) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.IChatBaseComponent$ChatSerializer.a(SourceFile:199) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.oriserver.test.Main.setPlayerListHeader(Main.java:38) ~[?:?]
        at net.oriserver.test.Main.onPlayerConnect(Main.java:78) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_77]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_77]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_77]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_77]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        ... 14 more
Caused by: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 7
        at com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1505) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:519) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.stream.JsonReader.peek(JsonReader.java:414) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:644) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:667) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:642) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.internal.Streams.parse(Streams.java:44) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.TreeTypeAdapter.read(TreeTypeAdapter.java:54) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.Gson.fromJson(Gson.java:803) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.Gson.fromJson(Gson.java:768) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.Gson.fromJson(Gson.java:717) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.Gson.fromJson(Gson.java:689) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.IChatBaseComponent$ChatSerializer.a(SourceFile:199) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.oriserver.test.Main.setPlayerListHeader(Main.java:38) ~[?:?]
        at net.oriserver.test.Main.onPlayerConnect(Main.java:78) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_77]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_77]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_77]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_77]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        ... 14 more


修正箇所
コード: 全て選択
IChatBaseComponent top = ChatSerializer.a("{text; '" + header + "'}");

jsonの記述方法が間違っていると思われます...
textの後のセミコロンをコロンに直してみてください.

修正
コード: 全て選択
IChatBaseComponent top = ChatSerializer.a("{text: '" + header + "'}");
アバター
mozow470
ID:e61ed3bf
木を殴ってる
 
記事: 13
登録日時: 2015年6月28日(日) 14:30

  • (PostNo.282423)

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

投稿記事by ゲスト » 2016年9月05日(月) 23:24

矢の着弾地点で音を鳴らすというプラグインを作りたいのですが、その音を特定の範囲内のプレイヤー全員に聞こえるようにするにはどうしたらいいでしょうか?

@EventHandler
public void onProjectile(ProjectileHitEvent event) {
Projectile projectile = event.getEntity();
if (projectile instanceof Arrow) {

//着弾地点
Location l = projectile.getLocation();

//ここに音を流す処理を入れたい

}
}
ゲスト
ID:9b12332a
 

  • (PostNo.282425)

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

投稿記事by ucchy » 2016年9月05日(月) 23:43

ゲストさん、

ゲスト さんが書きました:矢の着弾地点で音を鳴らすというプラグインを作りたいのですが、その音を特定の範囲内のプレイヤー全員に聞こえるようにするにはどうしたらいいでしょうか?


まず、WorldクラスのgetNearbyEntitiesメソッドを使って、特定の地点周辺のエンティティを取得します。
取得したエンティティがプレイヤーなら、Playerにキャストして、playSoundメソッドでそのプレイヤーに音を流します。

例:
コード: 全て選択
    @EventHandler
    public void onProjectile(ProjectileHitEvent event) {
        Projectile projectile = event.getEntity();
        if (projectile instanceof Arrow) {
   
            //着弾地点
            Location l = projectile.getLocation();
   
            // 特定の範囲のエンティティを取得
            for ( Entity entity : l.getWorld().getNearbyEntities(l, 5, 5, 5) ) {
               
                // もしエンティティがプレイヤーなら、そのプレイヤーに音を流す
                if ( entity instanceof Player ) {
                    Player player = (Player)entity;
                    player.playSound(l, Sound.BLOCK_PISTON_EXTEND, 1.0f, 1.0f);
                }
            }
        }
    }


Javadocに書いてあるので、上のリンクから読んでみてくださいね。
――お知らせ――
パソコンが壊れたため、買い替えるまで、プラグイン開発作業はお休みしています。簡単な質問程度ならお答えいたします。
――お知らせ――
アバター
ucchy
ID:66dbff26
ラピスラズリ収集家
 
記事: 1171
登録日時: 2012年11月07日(水) 00:08

  • (PostNo.282547)

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

投稿記事by ゲスト » 2016年9月07日(水) 22:04

ucchyさん、返信ありがとうございます。おかげさまでできました。


そして、もう一つわからないことがあったので、質問させていただきます。
ProjectileHitEventで、「矢が命中したエンティティ」の取得はできますか?
もしできるのならば、どのようにすれば良いか教えてください。
EntityDamageByEntityEventではできたのですが、矢の着弾地点の取得が厳しそうだったので、ProjectileHitEventを使いたいです。

@EventHandler
public void onProjectile(ProjectileHitEvent event) {
Projectile projectile = event.getEntity();
if (projectile instanceof Arrow) {

//着弾地点
Location l = projectile.getLocation();

// 特定の範囲のエンティティを取得
for ( Entity entity : l.getWorld().getNearbyEntities(l, 10, 10, 10) ) {

// もしエンティティがプレイヤーなら、そのプレイヤーに音を流す
if (( entity instanceof Player ) && (!( /*矢が命中したエンティティ*/ instanceof LivingEntity ))){
Player player = (Player)entity;
player.playSound(l, Sound.BLOCK_GLASS_BREAK, 3.0f, 1.0f);
}
}
}
}
ゲスト
ID:9b12332a
 

  • (PostNo.282574)

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

投稿記事by Lemon18 » 2016年9月08日(木) 10:20

ゲスト さんが書きました:ProjectileHitEventで、「矢が命中したエンティティ」の取得はできますか?
EntityDamageByEntityEventではできたのですが、矢の着弾地点の取得が厳しそうだったので、ProjectileHitEventを使いたいです。


Entityに矢が命中した時はEntityDamageByEntityEventしか発生しなかったと思います。
なので、外した時の処理はそのままProjectileHitEventで、命中した時の処理はEntityDamageByEntityEventでEntityを取得するしかないかと思います。

追記
最終目標が "矢の着弾地点で音を鳴らし、その音を特定の範囲内のプレイヤー全員に聞こえるようにする" という事ならば、EntityDamageByEntityEventで取得したEntityからEntity#getNearbyEntities(double x, double y, double z) を使用して範囲内のEntityを取得し、ProjectileHitEventの時と同じ処理をすればいいと思います。

https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/entity/Entity.html#getNearbyEntities(double,%20double,%20double)
:D
Lemon18
ID:b66be5f3
石掘り
 
記事: 85
登録日時: 2015年6月05日(金) 22:42

  • (PostNo.282616)

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

投稿記事by ゲスト » 2016年9月08日(木) 22:23

>EntityDamageByEntityEventではできたのですが、矢の着弾地点の取得が厳しそうだったので、ProjectileHitEventを使いたいです。
素朴な疑問なんだけど、被弾したエンティティの位置が矢の着弾地点なのでは?
あと、やったことないけど着弾後でも(矢が消えない限りは)矢の位置を取得できそうにも思える
ゲスト
ID:f08d11ec
 

  • (PostNo.282760)

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

投稿記事by KAISEEEEI217 » 2016年9月10日(土) 18:12

ふと気になったので質問します。
ver1.8で、右クリックで作業台のGUIを開くことは可能でしょうか。
もしできるならサンプルコードを張ってくれるとうれしいです。
KAISEEEEI217
ID:2922a5f7
木を殴ってる
 
記事: 27
登録日時: 2014年6月22日(日) 13:27

  • (PostNo.282794)

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

投稿記事by Hinyari_Gohan » 2016年9月10日(土) 20:40

KAISEEEEI217 さんが書きました:ふと気になったので質問します。
ver1.8で、右クリックで作業台のGUIを開くことは可能でしょうか。
もしできるならサンプルコードを張ってくれるとうれしいです。


クリック時に発生するイベントは PlayerInteractEvent です。
作業台のGUIを開くには、Bukkit#createInventoryから作ったインベントリをPlayer#openInventoryの引数に渡せば開くことが出来るでしょう。

空中に向かって何も無いところに右クリックをしたのか、あるいはアイテムを持ちながら、どこかのブロックを見ながらなどの情報が無いためコードを書くことすら出来ません。
Hinyari_Gohanで主に活動しております。
見かけた際はどうぞよろしく。
アバター
Hinyari_Gohan
ID:fb4990da
石掘り
 
記事: 92
登録日時: 2014年4月19日(土) 09:00

  • (PostNo.282807)

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

投稿記事by KAISEEEEI217 » 2016年9月10日(土) 23:00

syunsyungoto さんが書きました:
KAISEEEEI217 さんが書きました:ふと気になったので質問します。
ver1.8で、右クリックで作業台のGUIを開くことは可能でしょうか。
もしできるならサンプルコードを張ってくれるとうれしいです。


クリック時に発生するイベントは PlayerInteractEvent です。
作業台のGUIを開くには、Bukkit#createInventoryから作ったインベントリをPlayer#openInventoryの引数に渡せば開くことが出来るでしょう。

空中に向かって何も無いところに右クリックをしたのか、あるいはアイテムを持ちながら、どこかのブロックを見ながらなどの情報が無いためコードを書くことすら出来ません。

返信ありがとうございます。
情報がたりませんでした・・・。すいません。次から気をつけます。

金の斧を持っている状態で空中もしくはブロックにむかって右クリックをしたら
作業台のGUIを開く というコードを教えて下さい。
KAISEEEEI217
ID:2922a5f7
木を殴ってる
 
記事: 27
登録日時: 2014年6月22日(日) 13:27

  • (PostNo.282811)

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

投稿記事by オリゼリ » 2016年9月10日(土) 23:21

mozow470 さんが書きました:
オリゼリ さんが書きました:tabキーを押したときにプレイヤー欄の上下に文字を出すプラグインを作っているのですが、エラーが吐いて困ってます。
どこが間違っているのでしょうか?
エラーはプレイヤーがログインしたときです。
制作環境はbukkit1.8.8
サーバ環境はspigot1.8.8です
結構スペースを取ったのでspoilerで隠します
ビルドパスはこうなってます
キャプチャ.PNG

コード
コード: 全て選択
    public static void setPlayerListHeader(Player player, String header) {
        CraftPlayer cplayer = (CraftPlayer) player;
        PlayerConnection connection = cplayer.getHandle().playerConnection;
       
        IChatBaseComponent top = ChatSerializer.a("{text; '" + header + "'}");
       
        PacketPlayOutPlayerListHeaderFooter packet = new PacketPlayOutPlayerListHeaderFooter();
       
        try {
           Field hederField = packet.getClass().getDeclaredField("a");
           hederField.setAccessible(true);
           hederField.set(packet, top);
           hederField.setAccessible(!hederField.isAccessible());
        } catch (Exception e) {
           e.printStackTrace();
        }
       
        connection.sendPacket(packet);
    }
   
    public static void setPlayerListFooter(Player player, String footer) {
       
        CraftPlayer cplayer = (CraftPlayer) player;
        PlayerConnection connection = cplayer.getHandle().playerConnection;
       
        IChatBaseComponent bottom = ChatSerializer.a("{'text': '" + footer + "'}");
       
        PacketPlayOutPlayerListHeaderFooter packet = new PacketPlayOutPlayerListHeaderFooter();
       
        try{
           Field footerField = packet.getClass().getDeclaredField("d");
           footerField.setAccessible(true);
           footerField.set(packet, bottom);
           footerField.setAccessible(!footerField.isAccessible());
        } catch (Exception e) {
           e.printStackTrace();
        }
       
        connection.sendPacket(packet);
    }
   
   @EventHandler
   public void onPlayerConnect(PlayerJoinEvent e){
      Player player = e.getPlayer();
      setPlayerListHeader(player, ChatColor.RED + "HEADER");
      setPlayerListFooter(player, ChatColor.BLUE + "FOOTER");
   }

エラー
コード: 全て選択
[02:13:36 ERROR]: Could not pass event PlayerJoinEvent to Test v0.0.1-SNAPSHOT
org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:310) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.PlayerList.onPlayerJoin(PlayerList.java:298) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.PlayerList.a(PlayerList.java:157) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.LoginListener.b(LoginListener.java:144) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.LoginListener.c(LoginListener.java:54) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.NetworkManager.a(NetworkManager.java:231) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.ServerConnection.c(ServerConnection.java:148) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:813) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:653) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:556) [spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_77]
Caused by: com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 7
        at com.google.gson.internal.Streams.parse(Streams.java:56) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.TreeTypeAdapter.read(TreeTypeAdapter.java:54) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.Gson.fromJson(Gson.java:803) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.Gson.fromJson(Gson.java:768) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.Gson.fromJson(Gson.java:717) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.Gson.fromJson(Gson.java:689) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.IChatBaseComponent$ChatSerializer.a(SourceFile:199) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.oriserver.test.Main.setPlayerListHeader(Main.java:38) ~[?:?]
        at net.oriserver.test.Main.onPlayerConnect(Main.java:78) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_77]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_77]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_77]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_77]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        ... 14 more
Caused by: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 7
        at com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1505) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:519) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.stream.JsonReader.peek(JsonReader.java:414) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:644) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:667) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:642) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.internal.Streams.parse(Streams.java:44) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.TreeTypeAdapter.read(TreeTypeAdapter.java:54) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.Gson.fromJson(Gson.java:803) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.Gson.fromJson(Gson.java:768) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.Gson.fromJson(Gson.java:717) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at com.google.gson.Gson.fromJson(Gson.java:689) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.minecraft.server.v1_8_R3.IChatBaseComponent$ChatSerializer.a(SourceFile:199) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        at net.oriserver.test.Main.setPlayerListHeader(Main.java:38) ~[?:?]
        at net.oriserver.test.Main.onPlayerConnect(Main.java:78) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_77]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_77]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_77]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_77]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.8.8.jar:git-Spigot-fdc1440-53fac9f]
        ... 14 more


修正箇所
コード: 全て選択
IChatBaseComponent top = ChatSerializer.a("{text; '" + header + "'}");

jsonの記述方法が間違っていると思われます...
textの後のセミコロンをコロンに直してみてください.

修正
コード: 全て選択
IChatBaseComponent top = ChatSerializer.a("{text: '" + header + "'}");

ありがとうございます。
指摘していただいた箇所を直したら、また別のエラーが出たのでこれの直し方を教えてください。
ログイン時
コード: 全て選択
[23:14:56 INFO]: UUID of player orizeri is 7850e729-903c-4d8b-8824-ddf1fc3a200f
[23:14:56 WARN]: java.io.IOException: 確立された接続がホスト コンピューターのソウトウェアによって中止されました。
[23:14:56 WARN]:        at sun.nio.ch.SocketDispatcher.write0(Native Method)
[23:14:56 WARN]:        at sun.nio.ch.SocketDispatcher.write(Unknown Source)
[23:14:56 WARN]:        at sun.nio.ch.IOUtil.writeFromNativeBuffer(Unknown Source)
[23:14:56 WARN]:        at sun.nio.ch.IOUtil.write(Unknown Source)
[23:14:56 WARN]:        at sun.nio.ch.SocketChannelImpl.write(Unknown Source)
[23:14:56 WARN]:        at io.netty.channel.socket.nio.NioSocketChannel.doWrite(NioSocketChannel.java:270)
[23:14:56 WARN]:        at io.netty.channel.AbstractChannel$AbstractUnsafe.flush0(AbstractChannel.java:707)
[23:14:56 WARN]:        at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.flush0(AbstractNioChannel.java:315)
[23:14:56 WARN]:        at io.netty.channel.AbstractChannel$AbstractUnsafe.flush(AbstractChannel.java:676)
[23:14:56 WARN]:        at io.netty.channel.DefaultChannelPipeline$HeadContext.flush(DefaultChannelPipeline.java:1059)
[23:14:56 WARN]:        at io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:688)
[23:14:56 WARN]:        at io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:669)
[23:14:56 WARN]:        at io.netty.channel.ChannelOutboundHandlerAdapter.flush(ChannelOutboundHandlerAdapter.java:115)
[23:14:56 WARN]:        at io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:688)
[23:14:56 WARN]:        at io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:669)
[23:14:56 WARN]:        at io.netty.channel.ChannelOutboundHandlerAdapter.flush(ChannelOutboundHandlerAdapter.java:115)
[23:14:56 WARN]:        at io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:688)
[23:14:56 WARN]:        at io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:669)
[23:14:56 WARN]:        at io.netty.channel.ChannelOutboundHandlerAdapter.flush(ChannelOutboundHandlerAdapter.java:115)
[23:14:56 WARN]:        at io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:688)
[23:14:56 WARN]:        at io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:669)
[23:14:56 WARN]:        at io.netty.channel.ChannelOutboundHandlerAdapter.flush(ChannelOutboundHandlerAdapter.java:115)
[23:14:56 WARN]:        at io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:688)
[23:14:56 WARN]:        at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:718)
[23:14:56 WARN]:        at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:706)
[23:14:56 WARN]:        at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:741)
[23:14:56 WARN]:        at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:895)
[23:14:56 WARN]:        at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:240)
[23:14:56 WARN]:        at net.minecraft.server.v1_8_R3.NetworkManager$4.run(NetworkManager.java:198)
[23:14:56 WARN]:        at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:380)
[23:14:56 WARN]:        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:357)
[23:14:56 WARN]:        at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)
[23:14:56 WARN]:        at java.lang.Thread.run(Unknown Source)
[23:14:56 INFO]: orizeri[/192.168.2.1:50691] logged in with entity id 76 at ([world]453.19550062820343, 23.279281469206005, -1304.1487465148384)
[23:14:56 INFO]: orizeri lost connection: Internal Exception: java.io.IOException: 確立された接続がホスト コンピューターのソウトウェアによって中止されました。
[23:14:57 INFO]: orizeri left the game.

というエラーが出ます
またゲーム上では
Minecraft 1.8.8 2016_09_10 23_19_22.png

と出ます
質問の仕方とか直したほうがいいよってことがあったら教えていただければ嬉しいです
オリゼリ
ID:2f889857
大工さん
 
記事: 45
登録日時: 2015年4月29日(水) 20:13

  • (PostNo.282836)

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

投稿記事by King(qpwakaba) » 2016年9月11日(日) 09:11

KAISEEEEI217 さんが書きました:
syunsyungoto さんが書きました:
KAISEEEEI217 さんが書きました:ふと気になったので質問します。
ver1.8で、右クリックで作業台のGUIを開くことは可能でしょうか。
もしできるならサンプルコードを張ってくれるとうれしいです。


クリック時に発生するイベントは PlayerInteractEvent です。
作業台のGUIを開くには、Bukkit#createInventoryから作ったインベントリをPlayer#openInventoryの引数に渡せば開くことが出来るでしょう。

空中に向かって何も無いところに右クリックをしたのか、あるいはアイテムを持ちながら、どこかのブロックを見ながらなどの情報が無いためコードを書くことすら出来ません。

返信ありがとうございます。
情報がたりませんでした・・・。すいません。次から気をつけます。

金の斧を持っている状態で空中もしくはブロックにむかって右クリックをしたら
作業台のGUIを開く というコードを教えて下さい。


引用部に8割以上答えがあるんで探してみてください。 またJavadocも貼っておくのでこちらも参照すること。
https://hub.spigotmc.org/javadocs/bukkit/

過去にコードを教えてくれ教えてくれと言って追放食らった方がいるのでその警告も含めて。
以下サイン
調べて見つからないことを質問して、「そのくらい調べろ」と言われたら それは調べが足りないとき。

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

  • (PostNo.282890)

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

投稿記事by KAISEEEEI217 » 2016年9月11日(日) 16:40

King(qpwakaba) さんが書きました:
KAISEEEEI217 さんが書きました:
syunsyungoto さんが書きました:
KAISEEEEI217 さんが書きました:ふと気になったので質問します。
ver1.8で、右クリックで作業台のGUIを開くことは可能でしょうか。
もしできるならサンプルコードを張ってくれるとうれしいです。


クリック時に発生するイベントは PlayerInteractEvent です。
作業台のGUIを開くには、Bukkit#createInventoryから作ったインベントリをPlayer#openInventoryの引数に渡せば開くことが出来るでしょう。

空中に向かって何も無いところに右クリックをしたのか、あるいはアイテムを持ちながら、どこかのブロックを見ながらなどの情報が無いためコードを書くことすら出来ません。

返信ありがとうございます。
情報がたりませんでした・・・。すいません。次から気をつけます。

金の斧を持っている状態で空中もしくはブロックにむかって右クリックをしたら
作業台のGUIを開く というコードを教えて下さい。


引用部に8割以上答えがあるんで探してみてください。 またJavadocも貼っておくのでこちらも参照すること。
https://hub.spigotmc.org/javadocs/bukkit/

過去にコードを教えてくれ教えてくれと言って追放食らった方がいるのでその警告も含めて。


返信ありがとうございます。
Javadocなどを参考に作業台のGUIを開くことができたのですが、
レシピ通りにアイテムを置いて、完成品を取ろうとすると、なぜかキャンセルされて、アイテムが取れません。

現在のコードを貼っておきます。よろしく御願いします。
コード: 全て選択
package kaisei.craftguiitem;

import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;

public class CraftGuiItemMain extends JavaPlugin implements Listener {

   public void onEnable() {
      getServer().getPluginManager().registerEvents(this, this);
   }

   @EventHandler
   public void Interact(PlayerInteractEvent e){//クリックイベントの取得
    Player player = e.getPlayer();//クリックしたプレイヤーを取得
    if(e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK){//ブロックか空気を右クリックしたか比較
     if(e.getItem() != null){//手にアイテムを持っているか比較
      ItemStack item = e.getItem();//クリックに使ったアイテムを取得
      if(item.getType().equals(Material.GOLD_PICKAXE)){//取得したアイテムが金斧か比較
       Inventory inv = Bukkit.createInventory(player, InventoryType.WORKBENCH); //作業台GUI作成

       player.openInventory(inv); //プレイヤーにGUIを開かせる
      }
     }
    }
   }
}
KAISEEEEI217
ID:2922a5f7
木を殴ってる
 
記事: 27
登録日時: 2014年6月22日(日) 13:27

  • (PostNo.282938)

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

投稿記事by ucchy » 2016年9月12日(月) 03:03

KAISEEEEI217さん、
どうやら、createInventory で WORKBENCHのインベントリを作成して開くと、レシピがからっぽの状態で開くみたいですね。このレシピの無いインベントリは、どのように使うのかはわかりませんが・・・。


単純に今の問題を解決するには、
コード: 全て選択
       Inventory inv = Bukkit.createInventory(player, InventoryType.WORKBENCH); //作業台GUI作成
       player.openInventory(inv); //プレイヤーにGUIを開かせる

ここを、
コード: 全て選択
player.openWorkbench(null, true); //プレイヤーにワークベンチのGUIを開かせる

に変更してください。これで期待通りの動作になるはずです。


ちょっと脱線しますが、
コード: 全て選択
      if(item.getType().equals(Material.GOLD_PICKAXE)){//取得したアイテムが金斧か比較

ここが、コメントと実装が合っていないですね。
GOLD_PICKAXE は金のつるはしで、GOLD_AXE が金の斧です。
――お知らせ――
パソコンが壊れたため、買い替えるまで、プラグイン開発作業はお休みしています。簡単な質問程度ならお答えいたします。
――お知らせ――
アバター
ucchy
ID:66dbff26
ラピスラズリ収集家
 
記事: 1171
登録日時: 2012年11月07日(水) 00:08

  • (PostNo.282954)

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

投稿記事by KAISEEEEI217 » 2016年9月12日(月) 14:29

ucchy さんが書きました:KAISEEEEI217さん、
どうやら、createInventory で WORKBENCHのインベントリを作成して開くと、レシピがからっぽの状態で開くみたいですね。このレシピの無いインベントリは、どのように使うのかはわかりませんが・・・。


返信ありがとうございます。
期待通りの動作になりました!ありがとうございます。
コメントの指摘ありがとうございます。
あとで見返して混乱してもいけないので
これから気をつけます。
KAISEEEEI217
ID:2922a5f7
木を殴ってる
 
記事: 27
登録日時: 2014年6月22日(日) 13:27

  • (PostNo.283888)

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

投稿記事by Sea of trees » 2016年9月24日(土) 00:16

Plugin作成初心者です。
ログイン時、プレイヤーにチャットを打たせたいのですがどうすればいいでしょうか?

内容がかなーーり特殊ですが、クライアントの処理として打たせたいのです。
PlayerJoinEventで、 e.getPlayer().chat("チャット打ちました!"); のような文を書くと、鯖側で処理され
クライアントが打っていることにならないのです。
クライアントが手打ちでチャットを打った時と同じ効果を得るにはどうすればよいのでしょうか?
ご教授願います。

尚、In率が低めなので返信が遅れると思われます。返信が遅い場合ごめんなさい。
なんか、最近多忙な気がするなぁ....
アバター
Sea of trees
ID:f39b019e
木を殴ってる
 
記事: 32
登録日時: 2015年3月01日(日) 15:27

  • (PostNo.283889)

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

投稿記事by Hinyari_Gohan » 2016年9月24日(土) 00:47

Sea of trees さんが書きました:Plugin作成初心者です。
ログイン時、プレイヤーにチャットを打たせたいのですがどうすればいいでしょうか?

内容がかなーーり特殊ですが、クライアントの処理として打たせたいのです。
PlayerJoinEventで、 e.getPlayer().chat("チャット打ちました!"); のような文を書くと、鯖側で処理され
クライアントが打っていることにならないのです。
クライアントが手打ちでチャットを打った時と同じ効果を得るにはどうすればよいのでしょうか?
ご教授願います。

尚、In率が低めなので返信が遅れると思われます。返信が遅い場合ごめんなさい。


Player#chat()メソッドを使用すれば、プレイヤー側からチャットを打ったことと同じ効果を得られるはずです。
クライアントから打った場合とプラグイン側でチャットを打った場合の差がわかりません。そこを教えてください。

憶測ですが、厳密にチャットをクライアントから打たせるという動作をするには NMSの PacketPlayOutChat、IChatBaseComponent などを使えば行けるはずです…
Hinyari_Gohanで主に活動しております。
見かけた際はどうぞよろしく。
アバター
Hinyari_Gohan
ID:24300143
石掘り
 
記事: 92
登録日時: 2014年4月19日(土) 09:00

1つ前へ次へ

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

x