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

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

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

投稿記事by farnoie » 2016年11月11日(金) 19:01

ああ、CraftBukkitでしかできないのですね・・。CraftBukkitもSpigotもほぼ同じものと思っていたばかりに、bukkitを使うという風に書いてしまいましたが本当は使用予定はspigotでした。大人しくspigotでも出来るようになるのを待ちます。ご回答ありがとうございました。
farnoie
ID:8ae0d387
水から上がったとこ
 
記事: 3
登録日時: 2015年10月27日(火) 21:42

  • (PostNo.287538)

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

投稿記事by lili » 2016年11月11日(金) 19:08

ご丁寧にありがとうございます。
一連の流れを理解出来ました。
lili
ID:90a8c25c
 

  • (PostNo.287541)

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

投稿記事by Lemon18 » 2016年11月11日(金) 19:33

farnoie さんが書きました:ああ、CraftBukkitでしかできないのですね・・。CraftBukkitもSpigotもほぼ同じものと思っていたばかりに、bukkitを使うという風に書いてしまいましたが本当は使用予定はspigotでした。


えーっと...仰るとおりCraftBukkitとSpigotはほとんど同じです。(どちらもサーバー本体)
BukkitはAPIのみのものです。
つまり、私が言いたかったのは先ほどの内容はサーバー本体を使用するためバージョン互換が難しくなるということです。
なので、Spigotサーバー本体をビルドパスに入れれば出来ます。
(分かりにくくてすみません...)
:D
Lemon18
ID:b66be5f3
石掘り
 
記事: 85
登録日時: 2015年6月05日(金) 22:42

  • (PostNo.287552)

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

投稿記事by farnoie » 2016年11月11日(金) 22:12

何となく分かりました!bukkitとcraftbukkitの違いまで丁寧に教えてくださってありがとうございました!
farnoie
ID:8ae0d387
水から上がったとこ
 
記事: 3
登録日時: 2015年10月27日(火) 21:42

  • (PostNo.287566)

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

投稿記事by ゲスト » 2016年11月12日(土) 00:45

ログインした時に、二つの任意のメッセージを表示するというものを作ったのですが、その二つのメッセージをconfig.ymlでまとめて設定するのではなく、それぞれ別のファイルで設定できるようにしたいです。
例えば、メッセージA(一つ目のメッセージ)をmsgA.ymlから、メッセージB(二つ目のメッセージ)をmsgB.ymlから設定できるといった感じです。

String msgA = getConfig().getString("Message_A");
String msgB = getConfig().getString("Message_B");

@EventHandler
public void onJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
player.sendMessage(msgA);
player.sendMessage(msgB);
}
ゲスト
ID:9b12332a
 

  • (PostNo.287588)

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

投稿記事by Lemon18 » 2016年11月12日(土) 09:20

ゲスト さんが書きました:ログインした時に、二つの任意のメッセージを表示するというものを作ったのですが、その二つのメッセージをconfig.ymlでまとめて設定するのではなく、それぞれ別のファイルで設定できるようにしたいです。


viewtopic.php?f=21&t=30708
を見ればわかるかと。
:D
Lemon18
ID:b66be5f3
石掘り
 
記事: 85
登録日時: 2015年6月05日(金) 22:42

  • (PostNo.287592)

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

投稿記事by lili » 2016年11月12日(土) 11:53

度々すみません。
通常のパンを食べた場合に効果付与というものは出来たのですが、
名前・説明分の指定方法、確認方法の書き方が分からないです..。
hasItemMeta()やhasLore()など詳しく教えて頂きけませんか..。
lili
ID:90a8c25c
 

  • (PostNo.287618)

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

投稿記事by Lemon18 » 2016年11月12日(土) 16:42

lili さんが書きました:名前・説明分の指定方法、確認方法の書き方が分からないです..。
hasItemMeta()やhasLore()など詳しく教えて頂きけませんか..。


https://hub.spigotmc.org/javadocs/spigot/org/bukkit/inventory/ItemStack.html#hasItemMeta()
https://hub.spigotmc.org/javadocs/spigot/org/bukkit/inventory/meta/ItemMeta.html#hasDisplayName()
https://hub.spigotmc.org/javadocs/spigot/org/bukkit/inventory/meta/ItemMeta.html#hasLore()

has〜〜〜()はいわゆるnullチェックです。
Javadoc見ればわかると思います。(以前の回答にJavadocを貼るのを忘れていました。ごめんなさい。)
:D
Lemon18
ID:b66be5f3
石掘り
 
記事: 85
登録日時: 2015年6月05日(金) 22:42

  • (PostNo.287682)

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

投稿記事by lili » 2016年11月13日(日) 16:14

食べるとステータス効果付与されるプラグインが上手く動作しなくなったのですが
この書き方間違っていますかね..。
自分は正しく書いたつもりなのですが..。
プラグイン自体はしっかりと読み込まれています。

package food.plugin;

import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerItemConsumeEvent;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;

public class FoodPlugin extends JavaPlugin implements Listener{

@EventHandler
public void onEat(PlayerItemConsumeEvent e) {
Player p = e.getPlayer();
if(e.getItem().getType().equals(Material.BREAD)) {
p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 600, 1));
}
}


}
lili
ID:90a8c25c
 

  • (PostNo.287693)

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

投稿記事by オリゼリ » 2016年11月13日(日) 18:04

タイマー動かしているのですが別の処理でカウント指定で処理できるようにしたいのですが分かりません教えていただけますか?
bukkit1.8.8です
タイマーコマンドはこんな感じです
タイマーの処理は省きました
コード: 全て選択
   BukkitTask t;
   @Override
   public void onEnable() {
      getLogger().info("プラグインを有効にしました");
      getServer().getPluginManager().registerEvents(this, this);
        }
   @Override
   public boolean onCommand(CommandSender sender, final Command cmd, String commandLabel, String[] args) {
      final Player player = (Player) sender;
      if (cmd.getName().equalsIgnoreCase("timer")) {
         if (args.length == 1) {
            if (args[0].equalsIgnoreCase("start")) {
               t = new BukkitRunnable() {
                  int count = 50;
                  @Override
                  public void run() {
                     if (count > 50) {
                                                        //50カウントの間の処理
                     } else if (count == 0) {
                        t.cancel();
                     }
                     count--;
                  }
               }.runTaskTimer(this, 0, 20);
               return true;
            }

そして指定したブロックを右クリックしたときの処理があるのですが
例えば50からのカウントダウン方式なのですがカウントが25以下の時にしか処理しないようにしたいのです
一応クリック分
コード: 全て選択
   @EventHandler
   public void OnPlayerInteract(PlayerInteractEvent event) {
      String prefix = "[" + ChatColor.AQUA + "EscapeHospitalⅡ"+ ChatColor.RESET + "]";
      if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
         Block block = event.getClickedBlock();
         Player player = event.getPlayer();
         if (block.getType() == Material.stone) {
                       //アイテム入手処理
質問の仕方とか直したほうがいいよってことがあったら教えていただければ嬉しいです
オリゼリ
ID:2f889857
大工さん
 
記事: 45
登録日時: 2015年4月29日(水) 20:13

  • (PostNo.287704)

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

投稿記事by lili » 2016年11月13日(日) 19:57

申し訳ありません。
PlayerItemConsumeEventの件ですが弄った際に誤ってonEnable()を消去してしまっただけでした。
丁寧に答えて下さった方ありがとうございます。
lili
ID:90a8c25c
 

  • (PostNo.287769)

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

投稿記事by lili » 2016年11月14日(月) 18:58

if (e.getItem().getItemMeta().getDisplayName().getLore().equals(Material.BREAD)) {
と並べたところ、getLore() 型は String で未定義です となってしまいます。
解決方法教えて頂きたいです..。
lili
ID:90a8c25c
 

  • (PostNo.287780)

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

投稿記事by yuttyann44581 » 2016年11月14日(月) 20:25

lili さんが書きました:if (e.getItem().getItemMeta().getDisplayName().getLore().equals(Material.BREAD)) {
と並べたところ、getLore() 型は String で未定義です となってしまいます。
解決方法教えて頂きたいです..。

getLoreはStringじゃなくてList<String>を返します。

なので比較したいのであれば List<String> を用意したり contains などを使用するしかないです。
あとは for 文で回すとかでしょうね。

getDisplayName アイテム名 String
getLore アイテムの説明文 List<String>

追記
未定義でしたねすみません。
StringにgetLoreメソッドは定義されていないのでそのようなエラーが表示されたのだと思います。

一応使用例を
コード: 全て選択
Player player = event.getPlayer();
ItemStack item = player.getItemInHand();
ItemMeta meta = item.getItemMeta();

if (item != null && meta != null && meta.hasLore())
{
    for (String lore : meta.getLore())
    {
           player.sendMessage(lore);
     }
}
最後に編集したユーザー yuttyann44581 [ 2016年11月14日(月) 21:09 ], 累計 3 回
配布プラグイン一覧: https://file.yuttyann44581.net/
「Kuwaty Server」の運営をしております。
Java、C#で何かを作ってたり....
ScriptBlockPlus
画像
アバター
yuttyann44581
ID:ce21883a
鉄鉱掘り
 
記事: 330
登録日時: 2013年6月27日(木) 00:07

  • (PostNo.287781)

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

投稿記事by King(qpwakaba) » 2016年11月14日(月) 20:39

lili さんが書きました:if (e.getItem().getItemMeta().getDisplayName().getLore().equals(Material.BREAD)) {
と並べたところ、getLore() 型は String で未定義です となってしまいます。
解決方法教えて頂きたいです..。


getLoreメソッドはItemMetaクラスで定義されているもの。
getDisplayNameメソッドはString型を返し、これにgetLoreメソッドは定義されていない。
以下サイン
調べて見つからないことを質問して、「そのくらい調べろ」と言われたら それは調べが足りないとき。

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

  • (PostNo.287785)

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

投稿記事by lili » 2016年11月14日(月) 21:07

ありがとうございます。
そうだったのですね..。
自分で試行錯誤してみます。
lili
ID:90a8c25c
 

  • (PostNo.287877)

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

投稿記事by オリゼリ » 2016年11月16日(水) 00:40

オリゼリ さんが書きました:タイマー動かしているのですが別の処理でカウント指定で処理できるようにしたいのですが分かりません教えていただけますか?
[/code]

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

  • (PostNo.287921)

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

投稿記事by うましゅー » 2016年11月16日(水) 17:36

PVPPluginを作成しており、指定座標にあるブロックが破壊されたときに勝敗を決める処理
を実行する為以下のコードを書いてみましたが、どうやらif(block.getLocation() == config.redpoint)またはelse if(block.getLocation() == config.bluepoint)の分岐に入れないのか処理が行われず困っています。どのように変更すればいいのでしょうか…
}else if(player.getGameMode() == GameMode.CREATIVE){より下は指定コマンドを入力した際にCommand_setings.setingredかCommand_setings.setingblueに追加し、creativeの際のみ破壊したブロックの座標を登録するというものとなっています。こちらは正常に作動します。
コード: 全て選択
   @EventHandler
   public void Break(BlockBreakEvent event){
      Team team = null;
      Player player = event.getPlayer();
      String uuid = player.getUniqueId().toString();
      if(player.getGameMode() != GameMode.CREATIVE){
         Block block = event.getBlock();
         ConfigHandler config = Main.main.getConfigHandler();
         if(block.getLocation() == config.redpoint){
            if(Maincommand.game.contains(uuid)){
               if(Maincommand.red.contains(uuid)){
                  for(Player p : Bukkit.getOnlinePlayers()){
                     String u = p.getUniqueId().toString();
                     if(Maincommand.red.contains(u)){
                        team = Main.sb.getTeam("red");
                        String target = p.getName();
                        team.removeEntry(target);
                        p.setScoreboard(Main.sb);
                        p.setDisplayName(player.getName()+ChatColor.WHITE);
                        p.teleport(config.spawnloc);
                        p.setBedSpawnLocation(config.spawnloc);
                           p.sendMessage(ChatColor.GREEN+"[Defense]"+
                               ChatColor.RED+player.getName()+"さんによって赤チームは勝利しました");
                           Maincommand.red.remove(u);
                     }else if (Maincommand.blue.contains(u)) {
                        team = Main.sb.getTeam("blue");
                        String target = p.getName();
                        team.removeEntry(target);
                        p.setScoreboard(Main.sb);
                        p.setDisplayName(player.getName()+ChatColor.WHITE);
                        p.teleport(config.spawnloc);
                        p.setBedSpawnLocation(config.spawnloc);
                           p.sendMessage(ChatColor.GREEN+"[Defense]"+
                               ChatColor.BLUE+player.getName()+"さんによって青チームは敗北しました");
                           Maincommand.blue.remove(u);
                     }
                     Maincommand.game.remove(u);
                     p.getInventory().clear();
                     p.setBedSpawnLocation(config.spawnloc, true);
                     p.setLevel(0);
                     p.setHealth(20);
                  }
                   BukkitRunnable br = Main.getBukkitRunnable();
                   br.cancel();
                   Main.setTimer(null);
                  event.setCancelled(true);
                  return;

               }else if(Maincommand.blue.contains(uuid)){
                  player.sendMessage(ChatColor.GREEN+"[Defense]"+
                         ChatColor.DARK_RED+"自分チームの防衛物を壊さないでください");
                  event.setCancelled(true);
               }
            }else{
               event.setCancelled(true);
               return;
            }
         }else if(block.getLocation() == config.bluepoint){
            if(Maincommand.game.contains(uuid)){
               if(Maincommand.blue.contains(uuid)){
                  for(Player p : Bukkit.getOnlinePlayers()){
                     String u = p.getUniqueId().toString();
                     if(Maincommand.blue.contains(u)){
                        team = Main.sb.getTeam("blue");
                        String target = p.getName();
                        team.removeEntry(target);
                        p.setScoreboard(Main.sb);
                        p.setDisplayName(player.getName()+ChatColor.WHITE);
                        p.teleport(config.spawnloc);
                        p.setBedSpawnLocation(config.spawnloc);
                           p.sendMessage(ChatColor.GREEN+"[Defense]"+
                               ChatColor.BLUE+player.getName()+"さんによって青チームは勝利しました");
                           Maincommand.blue.remove(u);
                     }else if (Maincommand.red.contains(u)) {
                        team = Main.sb.getTeam("red");
                        String target = p.getName();
                        team.removeEntry(target);
                        p.setScoreboard(Main.sb);
                        p.setDisplayName(player.getName()+ChatColor.WHITE);
                        p.teleport(config.spawnloc);
                        p.setBedSpawnLocation(config.spawnloc);
                           p.sendMessage(ChatColor.GREEN+"[Defense]"+
                               ChatColor.RED+player.getName()+"さんによって赤チームは敗北しました");
                           Maincommand.red.remove(u);
                     }
                     Maincommand.game.remove(u);
                     p.getInventory().clear();
                     p.setBedSpawnLocation(config.spawnloc, true);
                     p.setLevel(0);
                     p.setHealth(20);
                  }
                   BukkitRunnable br = Main.getBukkitRunnable();
                   br.cancel();
                   Main.setTimer(null);
                  event.setCancelled(true);
                  return;

               }else if(Maincommand.red.contains(uuid)){
                  player.sendMessage(ChatColor.GREEN+"[Defense]"+
                         ChatColor.DARK_RED+"自分チームの防衛物を壊さないでください");
                  event.setCancelled(true);
               }
            }else{
               event.setCancelled(true);
               return;
            }
         }else{
            event.setCancelled(true);
         }
      }else if(player.getGameMode() == GameMode.CREATIVE){
         Block block = event.getBlock();
         ConfigHandler config = Main.main.getConfigHandler();
         if(Command_setings.setingred.contains(uuid)){
            if(player.getGameMode() != GameMode.CREATIVE){
               player.sendMessage(ChatColor.GREEN+"[Defense]"+
                     ChatColor.DARK_RED+"クリエイティブで行ってください");
               Command_setings.setingred.remove(uuid);
               event.setCancelled(true);
            }
            config.RedPoint(block.getLocation());
            player.sendMessage(ChatColor.GREEN+"[Defense]"+
                  ChatColor.WHITE+"赤チームのpointをセットしました");
            Command_setings.setingred.remove(uuid);
            event.setCancelled(true);
         }else if(Command_setings.setingblue.contains(uuid)){
            if(player.getGameMode() != GameMode.CREATIVE){
               player.sendMessage(ChatColor.GREEN+"[Defense]"+
                     ChatColor.DARK_RED+"クリエイティブで行ってください");
               Command_setings.setingblue.remove(uuid);
               event.setCancelled(true);
            }
            config.BluePoint(block.getLocation());
             player.sendMessage(ChatColor.GREEN+"[Defense]"+
                     ChatColor.WHITE+"青チームのpointをセットしました");
             Command_setings.setingblue.remove(uuid);
            event.setCancelled(true);
         }
      }
   }
ニコニコ生放送にて生主をしています。
ついでにPluginも作ってます(新米)
アバター
うましゅー
ID:50149204
大工さん
 
記事: 49
登録日時: 2013年3月30日(土) 09:23

  • (PostNo.287925)

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

投稿記事by Lemon18 » 2016年11月16日(水) 17:45

うましゅー さんが書きました:PVPPluginを作成しており、指定座標にあるブロックが破壊されたときに勝敗を決める処理
を実行する為以下のコードを書いてみましたが、どうやらif(block.getLocation() == config.redpoint)またはelse if(block.getLocation() == config.bluepoint)の分岐に入れないのか処理が行われず困っています。


比較の仕方が間違っています。==ではなくequals()です。
:D
Lemon18
ID:b66be5f3
石掘り
 
記事: 85
登録日時: 2015年6月05日(金) 22:42

  • (PostNo.287927)

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

投稿記事by うましゅー » 2016年11月16日(水) 17:58

Lemon18 さんが書きました:
うましゅー さんが書きました:PVPPluginを作成しており、指定座標にあるブロックが破壊されたときに勝敗を決める処理
を実行する為以下のコードを書いてみましたが、どうやらif(block.getLocation() == config.redpoint)またはelse if(block.getLocation() == config.bluepoint)の分岐に入れないのか処理が行われず困っています。


比較の仕方が間違っています。==ではなくequals()です。
なるほど…==ではだめだったのか…
解決しました!感謝です!!
ニコニコ生放送にて生主をしています。
ついでにPluginも作ってます(新米)
アバター
うましゅー
ID:50149204
大工さん
 
記事: 49
登録日時: 2013年3月30日(土) 09:23

  • (PostNo.288021)

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

投稿記事by オリゼリ » 2016年11月18日(金) 01:21

プレイヤーのインベントリからネザースターを10個以上持っていた場合に発動するようにしたいのですが
コード: 全て選択
ItemStack is = new ItemStack(Material.NETHER_STAR, 10);
if(player.getInventory().contains(is)){

で分けてるのですがこれだと10個持っているときじゃないと反応しなかったので
10以上にする方法を教えて下ださい
質問の仕方とか直したほうがいいよってことがあったら教えていただければ嬉しいです
オリゼリ
ID:2f889857
大工さん
 
記事: 45
登録日時: 2015年4月29日(水) 20:13

1つ前へ次へ

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

x