Seite 1 von 1

items im inv zählen

BeitragVerfasst: So 23. Jul 2017, 15:38
von bsheep87
Hallo habe schon viel im internet gesucht aber noch nicht das richtige gefunden undzwar möchte ich bestimmte items im player inventory zählen
aber irgendwie geht das nicht wirklich

Code: Alles auswählen
  1.          if (b == Material.CARROT) {
  2.             e.setCancelled(true);
  3.             Block block = w.getBlockAt(l);
  4.             int i = 0;
  5.             for (ItemStack is : p.getInventory().getContents()) {
  6.                if (is == null) {
  7.                   continue;
  8.                }
  9.                if (is.getData().equals(Material.getMaterial(391).getData())) {
  10.                   i += is.getAmount();
  11.                   p.sendMessage("" + i);
  12.                }
  13.                if (i <= 32) {
  14.                   block.setData(CropState.SEEDED.getData());
  15.                block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(Material.CARROT_ITEM, 2));
  16.                }
  17.                
  18.                
  19.             }
  20.          }


bin für jede hilfe dankbar

Re: items im inv zählen

BeitragVerfasst: Mo 24. Jul 2017, 05:09
von Knadda
Es wäre sehr hilfreich wenn man die komplette Methode sehen könnte.

Re: items im inv zählen

BeitragVerfasst: Mo 24. Jul 2017, 08:44
von bsheep87
also eigendlich ist das schon alles aber ok zur erklärung es soll wenn weizen oder kartoffel oder so gefarmt wird neu bepflanzt werden und wenn der spieler weniger als 32 von dem gefarmten hat 1-3 davon gedropt werden
Code: Alles auswählen
  1. public class Events implements Listener {
  2.    @EventHandler
  3.    public void onFarm(BlockBreakEvent e) {
  4.       World w = e.getBlock().getWorld();
  5.       Location l = e.getBlock().getLocation();
  6.       Material b = e.getBlock().getType();
  7.       Player p = e.getPlayer();
  8.       if (w == Bukkit.getWorld("Adventure")) {
  9.          if (b == Material.CARROT) {
  10.             e.setCancelled(true);
  11.             Block block = w.getBlockAt(l);
  12.             int i = 0;
  13.             for (ItemStack is : p.getInventory().getContents()) {
  14.                if (is == null) {
  15.                   continue;
  16.                }
  17.                if (is.getData().equals(Material.CARROT.getData())) {
  18.                   i += is.getAmount();
  19.                   p.sendMessage("" + i);
  20.                }
  21.                if (i <= 32) {
  22.                   block.setData(CropState.SEEDED.getData());
  23.                block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(Material.CARROT_ITEM, 2));
  24.                }
  25.                
  26.                
  27.             }
  28.          }

Re: items im inv zählen

BeitragVerfasst: Mo 24. Jul 2017, 10:18
von Knadda
Ich denke das wird fso wie du es dir vorgestellt hast unktonieren :D

Code: Alles auswählen
  1.    @SuppressWarnings("deprecation")
  2.    @EventHandler
  3.    public void onFarm(final BlockBreakEvent e) {
  4.       final Block block = e.getBlock();
  5.       final World w = block.getWorld();
  6.       final Material b = block.getType();
  7.       final Material d = this.getDropType(block);
  8.       final Player p = e.getPlayer();
  9.       if (w.getName().equals("Adventure") && p.getGameMode() != GameMode.CREATIVE) {
  10.          if (b == Material.CARROT || b == Material.POTATO || b == Material.CROPS) {
  11.             if (e.getBlock().getData() == CropState.RIPE.getData()) {
  12.                e.setCancelled(true);
  13.                int i = 0;
  14.                for (final ItemStack is : p.getInventory().getContents()) {
  15.                   if (is != null) {
  16.                      if (is.getType() == d) {
  17.                         i += is.getAmount();
  18.                      }
  19.                   }
  20.                }
  21.                if (i <= 32) {
  22.                   block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(d, new Random().nextInt(3)+1));
  23.                }
  24.                block.breakNaturally();
  25.                block.setType(b);
  26.                block.setData(CropState.SEEDED.getData());
  27.             }
  28.          }
  29.       }
  30.    }
  31.    public Material getDropType(final Block block) {
  32.       switch(block.getType()) {
  33.          case CARROT: return Material.CARROT_ITEM;
  34.          case POTATO: return Material.POTATO_ITEM;
  35.          case CROPS: return Material.WHEAT;
  36.          default: return Material.AIR;
  37.       }
  38.    }

Re: items im inv zählen

BeitragVerfasst: Mo 24. Jul 2017, 10:46
von bsheep87
Hab das grade mal getestet und es ist genau so wie mein vorheriges es wird gedropt obwohl man mehr als 32 im inv hat der rest mit crop state und so ging ja schon aber danke schonmal

Re: items im inv zählen

BeitragVerfasst: Mo 24. Jul 2017, 11:46
von Knadda
Dann musst du Zeile 25 und 26 entfernen :)

Re: items im inv zählen

BeitragVerfasst: Mo 24. Jul 2017, 12:39
von bsheep87
dir ist aber schon klar das dies eine sehr ungenaue angabe ist da die zeilen bei jedem anders sind bs. leer zeilen und so
wäre schön wenn du mir das etwas genauer sagen könntes

Re: items im inv zählen

BeitragVerfasst: Mo 24. Jul 2017, 13:56
von Knadda
Code: Alles auswählen
  1.    @SuppressWarnings("deprecation")
  2.    @EventHandler
  3.    public void onFarm(final BlockBreakEvent e) {
  4.       final Block block = e.getBlock();
  5.       final World w = block.getWorld();
  6.       final Material b = block.getType();
  7.       final Material d = this.getDropType(block);
  8.       final Player p = e.getPlayer();
  9.       if (w.getName().equals("Adventure") && p.getGameMode() != GameMode.CREATIVE) {
  10.          if (b == Material.CARROT || b == Material.POTATO || b == Material.CROPS) {
  11.             if (e.getBlock().getData() == CropState.RIPE.getData()) {
  12.                e.setCancelled(true);
  13.                int i = 0;
  14.                for (final ItemStack is : p.getInventory().getContents()) {
  15.                   if (is != null) {
  16.                      if (is.getType() == d) {
  17.                         i += is.getAmount();
  18.                      }
  19.                   }
  20.                }
  21.                if (i <= 32) {
  22.                   block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(d, new Random().nextInt(3)+1));
  23.                }
  24.                block.breakNaturally();                                                <--------------
  25.                block.setType(b);                                                         <--------------
  26.                block.setData(CropState.SEEDED.getData());
  27.             }
  28.          }
  29.       }
  30.    }
  31.    public Material getDropType(final Block block) {
  32.       switch(block.getType()) {
  33.          case CARROT: return Material.CARROT_ITEM;
  34.          case POTATO: return Material.POTATO_ITEM;
  35.          case CROPS: return Material.WHEAT;
  36.          default: return Material.AIR;
  37.       }
  38.    }