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

Modding・サーバPlugin制作・ツール制作など、開発関連の質問があればこちらにお願い致します。
フォーラムルール
質問関連フォーラムで質問する時は、必ず次のトピックを一読/厳守お願い致します。
viewtopic.php?f=5&t=999
  • (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
ダイヤモンド掘り
 
記事: 829
登録日時: 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
大工さん
 
記事: 46
登録日時: 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
石掘り
 
記事: 86
登録日時: 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
大工さん
 
記事: 46
登録日時: 2015年4月29日(水) 20:13

  • (PostNo.288024)

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

投稿記事by yuttyann44581 » 2016年11月18日(金) 02:40

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

で分けてるのですがこれだと10個持っているときじゃないと反応しなかったので
10以上にする方法を教えて下ださい

インベントリ内に10個以上のネザースターが含まれていた場合にメッセージを表示します。
いらない部分も回すことになるので特に必要ないなら回すごとにamountが10以上か確認してbreakなどで終了させるといいかもです。
コード: 全て選択
      int amount = 0;
      for (ItemStack item : player.getInventory().getContents()) {
         if (item != null && item.getType().equals(Material.NETHER_STAR)) {
            amount += item.getAmount();
         }
      }
      if (amount >= 10) {
         player.sendMessage("ネザースターがインベントリに10個以上あります。個数: " + amount);
      }


こっちはネザースターが10個以上まとまってるときにメッセージを表示します。
コード: 全て選択
      boolean is = false;
      for (ItemStack item : player.getInventory().getContents()) {
         if (item != null && item.getType().equals(Material.NETHER_STAR) && item.getAmount() >= 10) {
            is = true;
            break;
         }
      }
      if (is) {
         player.sendMessage("ネザースターがインベントリに10個以上あります。");
      }

これで出来ると思います。

そこまで知識が無いのとちゃんと動くか確認していない(確認できないので)動かなかったらすみません。
forの外に書いていますがfor内に書いても問題ないです。
最後に編集したユーザー yuttyann44581 [ 2016年12月07日(水) 06:13 ], 累計 1 回
配布プラグイン一覧: https://file.yuttyann44581.net/
「Kuwaty Server」の運営をしております。
Java、C#で何かを作ってたり....
ScriptBlockPlus
画像
アバター
yuttyann44581
ID:ce21883a
鉄鉱掘り
 
記事: 335
登録日時: 2013年6月27日(木) 00:07
お住まい: 茨城県のどこか

  • (PostNo.288155)

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

投稿記事by オリゼリ » 2016年11月19日(土) 22:55

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

で分けてるのですがこれだと10個持っているときじゃないと反応しなかったので
10以上にする方法を教えて下ださい

インベントリ内に10個以上のネザースターが含まれていた場合にメッセージを表示します。
いらない部分も回すことになるので特に必要ないなら回すごとにamountが10以上か確認してbreakなどで終了させるといいかもです。
コード: 全て選択
      int amount = 0;
      for (ItemStack item : player.getInventory().getContents()) {
         if (item != null && item.getType().equals(Material.NETHER_STAR)) {
            amount += item.getAmount();
         }
      }
      if (amount >= 10) {
         player.sendMessage("ネザースターがインベントリに10個以上あります。個数: " + amount);
      }


こっちはネザースターが10個以上まとまってるときにメッセージを表示します。
コード: 全て選択
      boolean is = false;
      for (ItemStack item : player.getInventory().getContents()) {
         if (item != null && item.getType().equals(Material.NETHER_STAR) && item.getAmount() >= 10) {
            is = true;
            break;
         }
      }
      if (is) {
         player.sendMessage("ネザースターがインベントリに10個以上あります。");
      }

これで出来ると思います。

そこまで知識が無いのとちゃんと動くか確認していない(確認できないので)動かなかったらすみません。

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

  • (PostNo.288422)

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

投稿記事by minikan » 2016年11月23日(水) 11:01

こんにちは。
現在、指定した秒数経過後に同じく指定されたコマンドを実行出来るようにするコマンド追加を含めたプラグインを作っているのですが、
プレイヤーの入力したメッセージを取得する方法がイマイチ分からないです..。
試行錯誤したのですが解決出来ませんでした。
どなたかご教授お願いします。
minikan
ID:90a8c25c
 

  • (PostNo.288455)

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

投稿記事by Sea of trees » 2016年11月23日(水) 15:54

minikan さんが書きました:こんにちは。
現在、指定した秒数経過後に同じく指定されたコマンドを実行出来るようにするコマンド追加を含めたプラグインを作っているのですが、
プレイヤーの入力したメッセージを取得する方法がイマイチ分からないです..。
試行錯誤したのですが解決出来ませんでした。
どなたかご教授お願いします。


Javaド素人の私なのであまり参考にならないかもですが、
Listenerにて、AsyncPlayerChatEventというものがあり、これがプレイヤーがメッセージを送信するEventHandlerとなります。
例えば、
コード: 全て選択
@EventHandler
public void Test(AsyncPlayerChatEvent e){
  String msg = e.getMessage();
}

とすれば、msgの中にプレイヤーが送ったメッセージがString形式で入力されると思います。

ただ、質問を読んだ限りだとおそらくコマンドを入力したときのEventがほしいのかな?という感じですのでその場合は
コード: 全て選択
@EventHandler
public void Test(PlayerCommandPreprocessEvent e){
  String msg = e.getMessage();
}

になるかなと。
ただ、コマンドを取得するならListenerでなくてもCommandExecutorにて、取得したほうがいいような気がします。
/command 0 1 というようなコマンドの場合
cmd.getName()は、commandとなり、
args[0]は0、args[1]は1のような感じで取得できます。
予想できるコードを書くと以下の通りになるかなと思います。
※コマンド登録とかを行った前提で、
/delaycommand <遅延時間> <コマンド(スラッシュを除く)>
というコマンドを考えるとき
コード: 全て選択
public boolean onCommand(CommandSender sender, Command cmd, String comanndLabel, String[]args){
  if(cmd.getName().equalsIgnoreCase("delaycommand")){
    int delaytime;
    boolean success = false;
    try {
      delaytime = Integer.parseInt(args[0]);//文字列を数字に変換。
      delaytime = delaytime * 20;//Tickに直す
      success = true;
    } catch (NumberFormatException e){
      success = false;
    }
    //遅延処理
    if(success){
      Plugin plugin = メインクラス名.getInstance();
      new BukkitRunnable(){
        @Override
        public void run(){
          /* ここにコマンド実行処理を書く。 */
        }
      }.runTaskLater(plugin, ((delaytime)L);
    }else{
      e.sendMessage(ChatColor.RED + "遅延は、整数で入力してください。(単位は秒)");
    }
  return true;
  }else{
    e.sendMessage("コマンドの構文が間違えています。");
    e.sendMessage("usage: /delaycommand <秒数> <コマンド>");
  }
  return false;
}

かなり汚いコードですみません。
コマンドは、String形式では
コード: 全て選択
String command = "/";
for(int i=0; i<args.length; i++){
  command = " " + command + args[i];
}

とすれば/aaa bb ccという形式の文を出力できると思います。
ほぼ憶測で書いたので間違っているところがあったらごめんなさい。

参考にしていただければ幸いです。
また、私はよく使うのですが、http://www.jias.jp/blog/?85
このようなサイトもあるので使ってみてください。
なんか、最近多忙な気がするなぁ....
アバター
Sea of trees
ID:0c79ab5a
木を殴ってる
 
記事: 34
登録日時: 2015年3月01日(日) 15:27
お住まい: 日本

  • (PostNo.288467)

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

投稿記事by minikan » 2016年11月23日(水) 17:00

ご丁寧にありがとうございます。
AsyncPlayerChatEventから取得出来たのですね..。
自分の知識不足で申し訳無かったです。
minikan
ID:90a8c25c
 

  • (PostNo.288653)

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

投稿記事by minikan » 2016年11月25日(金) 21:11

こんにちは。
無事にコマンド遅延実行プラグインを制作出来たのですが、
遅延実行コマンドを入力したプレイヤーがログアウトした場合、そのプレイヤーが入力したコマンドの実行をキャンセルすることは出来るのでしょうか..?
PlayerCommandPreprocessEventで遅延実行コマンドを実行したプレイヤー名を取得、PlayerQuitEventでログアウトしたプレイヤー名を取得までは出来るのですが、プレイヤー名が一致した場合、スケジューラーの実行をキャンセルするという流れがあれこれ試してみましたが出来ませんでした..。
minikan
ID:90a8c25c
 

  • (PostNo.288679)

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

投稿記事by ゲスト » 2016年11月26日(土) 01:04

サイドバーのTEST_1という部分をブロックを破壊したときに、TEST_2に置き換えるという処理の方法を教えてください。

public void ScoreboardSet() {
sb = Bukkit.getScoreboardManager().getNewScoreboard();
Objective objective = sb.registerNewObjective("objective", "dummy");
objective.setDisplayName(ChatColor.BOLD + "Info-Board");
objective.setDisplaySlot(DisplaySlot.SIDEBAR);
}

@EventHandler
public void onJoin(PlayerJoinEvent e) {
e.getPlayer().setScoreboard(getScoreboard());
getScoreboard().getObjective(DisplaySlot.SIDEBAR).getScore("TEST_1").setScore(0);
}

@EventHandler
public void onBreak(BlockBreakEvent e) {
//サイドバーのTEST_1をTEST_2に置き換える処理
}

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

public Scoreboard getScoreboard() {
return this.sb;
}
ゲスト
ID:9b12332a
 

  • (PostNo.288727)

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

投稿記事by Sea of trees » 2016年11月26日(土) 17:07

minikan さんが書きました:こんにちは。
無事にコマンド遅延実行プラグインを制作出来たのですが、
遅延実行コマンドを入力したプレイヤーがログアウトした場合、そのプレイヤーが入力したコマンドの実行をキャンセルすることは出来るのでしょうか..?
PlayerCommandPreprocessEventで遅延実行コマンドを実行したプレイヤー名を取得、PlayerQuitEventでログアウトしたプレイヤー名を取得までは出来るのですが、プレイヤー名が一致した場合、スケジューラーの実行をキャンセルするという流れがあれこれ試してみましたが出来ませんでした..。


コマンドを実行するタイミングでe.getPlayer().isOnline() を使用してそのプレイヤーがオンラインかどうかをチェックすればいいと思います。
なんか、最近多忙な気がするなぁ....
アバター
Sea of trees
ID:405b560a
木を殴ってる
 
記事: 34
登録日時: 2015年3月01日(日) 15:27
お住まい: 日本

  • (PostNo.288786)

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

投稿記事by moon shift » 2016年11月27日(日) 09:32

画面端をコマンドで赤くしたいです!(worldborderに近づいたときみたいに)
どなたか教えてくださりませんか?
spigot の ver 1.10.1です。お願いします。
最後に編集したユーザー moon shift [ 2016年12月14日(水) 20:06 ], 累計 1 回
ドレミの歌疑問を抱き始めた。
アバター
moon shift
ID:08dd296e
水から上がったとこ
 
記事: 4
登録日時: 2015年10月23日(金) 17:15

  • (PostNo.288819)

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

投稿記事by mozow470 » 2016年11月27日(日) 15:03

ゲスト さんが書きました:サイドバーのTEST_1という部分をブロックを破壊したときに、TEST_2に置き換えるという処理の方法を教えてください。

public void ScoreboardSet() {
sb = Bukkit.getScoreboardManager().getNewScoreboard();
Objective objective = sb.registerNewObjective("objective", "dummy");
objective.setDisplayName(ChatColor.BOLD + "Info-Board");
objective.setDisplaySlot(DisplaySlot.SIDEBAR);
}

@EventHandler
public void onJoin(PlayerJoinEvent e) {
e.getPlayer().setScoreboard(getScoreboard());
getScoreboard().getObjective(DisplaySlot.SIDEBAR).getScore("TEST_1").setScore(0);
}

@EventHandler
public void onBreak(BlockBreakEvent e) {
//サイドバーのTEST_1をTEST_2に置き換える処理
}

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

public Scoreboard getScoreboard() {
return this.sb;
}


コード: 全て選択
getScoreboard().getObjective(DisplaySlot.SIDEBAR).getScore("TEST_2").setScore(0);
アバター
mozow470
ID:d7533983
木を殴ってる
 
記事: 13
登録日時: 2015年6月28日(日) 14:30
お住まい: JPN

  • (PostNo.288823)

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

投稿記事by ゲスト » 2016年11月27日(日) 15:36

mozow470さん、返信ありがとうございます。

getScoreboard().getObjective(DisplaySlot.SIDEBAR).getScore("TEST_2").setScore(0);
↑を使ってみたのですが、TEST_1の下の段に新しくTEST_が表示されてしまいます...。
ゲスト
ID:9b12332a
 

  • (PostNo.289128)

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

投稿記事by TUMIBUKURO » 2016年12月01日(木) 09:35

spigot-1.11にてモンスターを倒すと経験値が手に入りLVが上がるというプラグインを作成中なのですがサーバーを再起動してモンスターを倒すと経験値が初期化されてしまう状態ですこれをどうにかしたいのですが何がいけなかったのでしょうか?
作ったプラグイン
コード: 全て選択
 package keikentiplugin;

import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class KeikentiPlugin extends JavaPlugin implements Listener {
public int EXP;
public int LV;

//public static String playername = player.getName();
/**
* プラグインが開始するとき呼び出される
*/
public void onEnable(){
getCommand("dataload").setExecutor(this);
//デフォルトのコンフィグを出力
saveDefaultConfig();
// イベントリスナーを登録
getServer().getPluginManager().registerEvents( this, this);
}


/**
* プラグインが終了するとき呼び出される
*/
public void onDisable() {

}

@
EventHandler
public void killenemy
(EntityDeathEvent e){
Player player = e.getEntity().getKiller();
String playername = player.getName();
Entity ene = e.getEntity();
if(
ene.getType() == EntityType.SKELETON){
if(!(
player instanceof Player)) return ;
FileConfiguration conf=getConfig();
EXP+=100;
conf.set(playername, "現在の経験値"+EXP +"現在のLV"+ LV);
player.sendMessage(ChatColor.GREEN+"経験値を得ました");
this.saveConfig();
};

};

@
Override
public boolean onCommand
(CommandSender sender, Command cmd, String label, String[] args) {
Player player = (Player) sender;
String playername = player.getName();


if (cmd.getName().equalsIgnoreCase("dataload")) {
FileConfiguration conf=getConfig();
player.sendMessage(conf.getString(playername));
}


return true;

}

}
 

plugin.yml
コード: 全て選択
name: KeikentiPlugin
version
: 1.0.0
main
: keikentiplugin.KeikentiPlugin
commands
:
dataload:
description: This is a demo command.
usage: /<command>
default:
 true

最近プラグインの勉強を始めたばかりでいろんなところのプログラムをつなぎ合わせてて作りました問題の解決方法以外にもまだ改善の余地があると思うのですがそれについても教えていただけらたと思っています。よろしくお願いします 
最後に編集したユーザー TUMIBUKURO [ 2016年12月01日(木) 18:53 ], 累計 1 回
TUMIBUKURO
ID:3fc8fc48
水から上がったとこ
 
記事: 4
登録日時: 2016年11月30日(水) 22:42

  • (PostNo.289129)

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

投稿記事by TUMIBUKURO » 2016年12月01日(木) 09:36

連続投稿すみません。質問様式が悪かったみたいなので投稿しなおしました
TUMIBUKURO
ID:3fc8fc48
水から上がったとこ
 
記事: 4
登録日時: 2016年11月30日(水) 22:42

1つ前へ次へ

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

x