items im inv zählen

Wenn ihr bei eurem Plugin nicht weiter kommt, könnt ihr hier euer Problem beschreiben und um Hilfe bitten.

items im inv zählen

Beitragvon bsheep87 » So 23. Jul 2017, 15:38

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
Benutzeravatar
bsheep87
 
Beiträge: 17
Registriert: So 14. Aug 2016, 09:39

Re: items im inv zählen

Beitragvon Knadda » Mo 24. Jul 2017, 05:09

Es wäre sehr hilfreich wenn man die komplette Methode sehen könnte.
Benutzeravatar
Knadda
 
Beiträge: 49
Registriert: Mo 1. Aug 2016, 07:06

Re: items im inv zählen

Beitragvon bsheep87 » Mo 24. Jul 2017, 08:44

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.          }
Benutzeravatar
bsheep87
 
Beiträge: 17
Registriert: So 14. Aug 2016, 09:39

Re: items im inv zählen

Beitragvon Knadda » Mo 24. Jul 2017, 10:18

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.    }
Benutzeravatar
Knadda
 
Beiträge: 49
Registriert: Mo 1. Aug 2016, 07:06

Re: items im inv zählen

Beitragvon bsheep87 » Mo 24. Jul 2017, 10:46

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
Benutzeravatar
bsheep87
 
Beiträge: 17
Registriert: So 14. Aug 2016, 09:39

Re: items im inv zählen

Beitragvon Knadda » Mo 24. Jul 2017, 11:46

Dann musst du Zeile 25 und 26 entfernen :)
Benutzeravatar
Knadda
 
Beiträge: 49
Registriert: Mo 1. Aug 2016, 07:06

Re: items im inv zählen

Beitragvon bsheep87 » Mo 24. Jul 2017, 12:39

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
Benutzeravatar
bsheep87
 
Beiträge: 17
Registriert: So 14. Aug 2016, 09:39

Re: items im inv zählen

Beitragvon Knadda » Mo 24. Jul 2017, 13:56

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.    }
Benutzeravatar
Knadda
 
Beiträge: 49
Registriert: Mo 1. Aug 2016, 07:06


Zurück zu Hilfe und Support

Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 6 Gäste