Probleme bei meinem PvP Plugin.

07/24/2013 18:24 SBotDE#1
Hey,
ich arbeite zur Zeit an einem PvP Plugin und ich mache grade das Größte Teil vom Plugin und zwar den Shop Ich sende euch mal die EventHandler die ich habe:
Code:
	   @EventHandler
	   public void onSignKlick(PlayerInteractEvent event) {
	       if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
	    	   Player p = event.getPlayer();
	            BlockState bs = event.getClickedBlock().getState();
	            
	            if (bs instanceof Sign) {
	               Sign sign = (Sign) bs;
	               if(sign.getLine(1).equalsIgnoreCase("Item Shop")){
	           		Inventory inv = Bukkit.createInventory(null, 9, "PvP - ItemShop");
	        		
	            	   p.openInventory(inv);
	           		   //Shop Items
	            	   ItemStack schwert = new ItemStack(Material.DIAMOND_SWORD, 1);
	        		   ItemMeta schwertMeta = schwert.getItemMeta();
	        	       schwertMeta.setDisplayName(ChatColor.AQUA + "Schwerter");
	        	       schwert.setItemMeta(schwertMeta);
	        	       //Leder Rüstung
	            	   ItemStack leather = new ItemStack(Material.LEATHER_CHESTPLATE, 1);
	        		   ItemMeta lederMeta = leather.getItemMeta();
	        		   lederMeta.setDisplayName(ChatColor.BOLD + "Leder Rüstung");
	        		   leather.setItemMeta(lederMeta);
	        	       //Ketten Rüstung
	            	   ItemStack chain = new ItemStack(Material.CHAINMAIL_CHESTPLATE, 1);
	        		   ItemMeta kettenMeta = chain.getItemMeta();
	        		   kettenMeta.setDisplayName(ChatColor.BOLD + "Ketten Rüstung");
	        		   chain.setItemMeta(kettenMeta);
	        	       //Eisen Rüstung
	            	   ItemStack iron = new ItemStack(Material.IRON_CHESTPLATE, 1);
	        		   ItemMeta ironMeta = iron.getItemMeta();
	        		   ironMeta.setDisplayName(ChatColor.BOLD + "Eisen Rüstung");
	        		   iron.setItemMeta(ironMeta);
	        	       //Portions
	            	   ItemStack potion = new ItemStack(Material.POTION, 1);
	        		   ItemMeta potionMeta = potion.getItemMeta();
	        		   potionMeta.setDisplayName(ChatColor.DARK_PURPLE + "Tränke");
	        		   potion.setItemMeta(potionMeta);
	            	   
	        	   
	        	       
	        	       //Items in den Inventory:
	            	   inv.setItem(1, schwert);
	            	   inv.setItem(2, leather);
	            	   inv.setItem(3, chain);
	            	   inv.setItem(4, iron);
	            	   inv.setItem(5, potion);
	            	   
	            	   p.openInventory(inv);
					   
	               }
	               if(sign.getLine(1).equalsIgnoreCase("Random Teleport")){
	            		World welt = p.getWorld();
	            		

	              		 Location loc1 = new Location(welt, -156, 66, 441);
	              		 Location loc2 = new Location(welt, -156, 66, 442);
	              		 Location loc3 = new Location(welt, -156, 66, 443);
	              		 Location loc4 = new Location(welt, -156, 66, 444);
	              		 
	              		 
	              		 
	              		 Random rnd = new Random();
	              		 int zufallszahl = rnd.nextInt(3);
	              		 
	              		 Location loc = null;
	              		 
	              		 switch(zufallszahl){
	              		 case 0:
	              			 loc = loc1;
	              			 break;
	             		 case 1:
	           			 loc = loc2;
	           			 break;
	           		 case 2:
	           			 loc = loc3;
	           			 break;
	           		 case 3:
	           			 loc = loc4;

	              		 }
	              		 
	              		 p.teleport(loc);
	               }
	            }
	            
	         }
	         
	      }
	   
		@EventHandler
		public void onInventory(InventoryClickEvent e) {
		Player p = (Player)e.getWhoClicked();	
		Inventory schwerter = Bukkit.createInventory(null, 9 , "PvP - Schwerter");
		Inventory leder = Bukkit.createInventory(null, 9, "PvP - Leder Rüstung");
		Inventory ketten = Bukkit.createInventory(null, 9, "PvP - Ketten Rüstung");
		Inventory eisen = Bukkit.createInventory(null, 9, "PvP - Eisen Rüsung");
		Inventory trank = Bukkit.createInventory(null, 9, "PvP - Tränke");
		if(e.getInventory().getName().equalsIgnoreCase("PvP - ItemShop")) {
			//Haupt Shop
			if(e.getCurrentItem().getType() == Material.DIAMOND_SWORD) {
         	    p.openInventory(schwerter);
         	    p.closeInventory(p.get);
			} else if(e.getCurrentItem().getType() == Material.LEATHER_CHESTPLATE) {
         	    p.openInventory(leder);
			} else if(e.getCurrentItem().getType() == Material.CHAINMAIL_CHESTPLATE) {
         	    p.openInventory(ketten);
			} else if(e.getCurrentItem().getType() == Material.IRON_CHESTPLATE) {
         	    p.openInventory(eisen);
			} else if(e.getCurrentItem().getType() == Material.POTION) {
         	    p.openInventory(trank);
			} 
			//Schwerter Shop
			schwerter.setItem(2, new ItemStack(Material.WOOD_SWORD));
			schwerter.setItem(3, new ItemStack(Material.GOLD_SWORD));
			schwerter.setItem(4, new ItemStack(Material.STONE_SWORD));
			schwerter.setItem(5, new ItemStack(Material.IRON_SWORD));
			schwerter.setItem(5, new ItemStack(Material.IRON_SWORD,1));
			schwerter.setItem(6, new ItemStack(Material.DIAMOND_SWORD,1));
			schwerter.setItem(7, new ItemStack(Material.DIAMOND_SWORD));
     	    //Leder Shop
			leder.setItem(2, new ItemStack(Material.LEATHER_HELMET));
			leder.setItem(3, new ItemStack(Material.LEATHER_CHESTPLATE));
			leder.setItem(4, new ItemStack(Material.LEATHER_LEGGINGS));
			leder.setItem(5, new ItemStack(Material.LEATHER_BOOTS));
     	    //Ketten Shop
			ketten.setItem(2, new ItemStack(Material.CHAINMAIL_HELMET));
			ketten.setItem(3, new ItemStack(Material.CHAINMAIL_CHESTPLATE));
			ketten.setItem(4, new ItemStack(Material.CHAINMAIL_LEGGINGS));
			ketten.setItem(5, new ItemStack(Material.CHAINMAIL_BOOTS));
     	    //Eisen Shop
			eisen.setItem(2, new ItemStack(Material.IRON_HELMET));
			eisen.setItem(3, new ItemStack(Material.IRON_CHESTPLATE));
			eisen.setItem(4, new ItemStack(Material.IRON_LEGGINGS));
			eisen.setItem(5, new ItemStack(Material.IRON_BOOTS));
			
     	    //Potion Shop
			trank.setItem(2, new ItemStack(373,(short) 16385));
			trank.setItem(3, new ItemStack(373,(short) 16389));
			trank.setItem(4, new ItemStack(373,(short) 16458));
			trank.setItem(5, new ItemStack(373,(short) 8201));
			trank.setItem(6, new ItemStack(373,(short) 16396));
		}
		p.closeInventory();
		}

	}
Das mit dem Random Teleport müsst ihr nicht beachten. Der Fehler ist wenn ich Rechtsklick auf ein Schild mache mit dem Item Shop Öffnet sich der Shop und die Items aber wenn ich auf eines der Items klicke passiert nichts auser wenn ich auf Diamant Schwert klicke dann schließt sich das Fenster wieder...
Wo liegt der Fehler und Schudldigung wenn es so unübersichtlist ist ich wusste keine andere Möglichkeit es kleiner zu machen und die Item Meta in eine andere Klasse zu machen...wenn einer da och eine Idee hat kann er mich anschreiben.
07/24/2013 19:48 Kante'#2
Code:
			if(e.getCurrentItem().getType() == Material.DIAMOND_SWORD) {
         	    p.openInventory(schwerter);
         	    p.closeInventory(p.get);
			} else if(e.getCurrentItem().getType() == Material.LEATHER_CHESTPLATE) {
         	    p.openInventory(leder);
			} else if(e.getCurrentItem().getType() == Material.CHAINMAIL_CHESTPLATE) {
         	    p.openInventory(ketten);
			} else if(e.getCurrentItem().getType() == Material.IRON_CHESTPLATE) {
         	    p.openInventory(eisen);
			} else if(e.getCurrentItem().getType() == Material.POTION) {
         	    p.openInventory(trank);
			}
Ist doch selbstverständlich: Du hast nur bei dem Schwert
Code:
         	    p.closeInventory(p.get);
eingetragen, du musst es bei jedem machen ;)
07/24/2013 22:48 SBotDE#3
das soll aber nicht passieren es soll sich das neue inv öffnen!
07/24/2013 22:57 Kante'#4
probier mal, das alte Inventar zu schließen
Code:
p.closeInventory(p.get);
und dann erst das neue zu öffnen
Code:
p.openInventory(leder);
07/24/2013 23:08 SBotDE#5
ok danke! !! aber inv wird als ein Fehler angezeigt! :(
07/24/2013 23:12 Kante'#6
p.closeInventory(p.get);
07/24/2013 23:14 SBotDE#7
ok

Das klapt nicht wird als Fehler angezeigt
07/24/2013 23:22 Kante'#8
Welcher Fehler kommt denn? Weil, es klappt ja bei dem Schwert mit p.get ..
Und definier mal die ganzen Items, bevor du das Inventar öffnest.
07/24/2013 23:35 SBotDE#9
Ich habe dort nur angefangen damit...ich habe das nicht zuende geschrieben ich glaube du verstehst es nicht! ein Klick auf das Item soll ein neues Inventar öffnen!
07/25/2013 00:44 ComputerBaer#10
Vielleicht übersehe ich grade was, aber aufjedenfall bin ich grade nicht in der Lage zu erkennen, wie "p.closeInventory(p.get)" zustande kommt ...

Ihr könnt mir das ja mal erklären, vielleicht verstehe ich dann das Problem:
1. Was ist "p.get"?
2. Warum nimmt "closeInventory" eine Parameter entgegen? Der auch noch vom Typ ... (??? was ist p.get ?) ist.

Ich hätte ich jetzt einfach gesagt, dass es komplett falsch ist, aber ihr Beide benutzt da so selbstverständlich ...

Ich würde es so sehen:
Code:
p.closeInventory(p.get); // falsch, sollte sogar einen Error beim kompilieren geben
p.closeInventory();      // richtig
Aber wie gesagt, ich lasse mich auch gerne von der Richtigkeit überzeugen.

Edit:
Ansonsten würde ich erstmal Kante' zustimmen, erst das Alte schließen und dann das neue öffnen. Außerdem sollte das close am Ende der Methode weg, sonst ist das Inventar ja sofort wieder geschlossen.
07/25/2013 00:47 Kante'#11
Welcher Fehler kommt denn jetzt?!

--------

Es ist mir klar, aber wenn es doch bei dem Schwert klappt, dann müsst es auch bei den anderen unteren klappen, ich kann dir aber nicht mehr weiterhelfen, wenn du mir nicht die Frage beantwortest.

Edit: Ich kann mir eigentlich auch nicht vorstellen, dass es bei p.get klappt, aber wenn es ja klappt, dann müsst es ja so auch bei den anderen klappen.
07/25/2013 03:18 SBotDE#12
Also ich war grade dabei etwas zu schreiben und da habe ich das bei p.get gelassen danach habe ich diesen Thread hier eröffnet und habe vergessen das p.get raus zu tun
07/25/2013 10:05 ComputerBaer#13
Du solltest uns schon sagen was passiert, so können wir schlecht helfen ...

1. Was passiert zurzeit? Inventar 1 auf/zu/nichts, Inventar 2-5 auf/zu/nichts ... ?
2. Tritt ein Fehler auf? Wenn ja, welcher? Wo und Wann kommt er?
07/25/2013 17:07 SBotDE#14
Ich habe das eigentlich schon mal erklärt aber mache dies gerne noch mal.

Wenn ich auf das Schild mit "Item Shop" Rechtsklicke kommt ein neues Fenster (Ein neues Inventar) mit den Items die ich festgelegt habe. Nun wenn ich auf eines der Items klicke sollte sich ein neues Inventar öffnen aber das passiert nicht das ist das Problem es tretten aber keine Fehler auf! Keine in der Konsole und auch nicht beim Kompilieren!

Könnt ihr mit diesen Informationen etwas anfangen ? :)

MfG
07/25/2013 17:23 Kante'#15
Quote:
Originally Posted by SBotDE View Post
Ich habe das eigentlich schon mal erklärt aber mache dies gerne noch mal.

Wenn ich auf das Schild mit "Item Shop" Rechtsklicke kommt ein neues Fenster (Ein neues Inventar) mit den Items die ich festgelegt habe. Nun wenn ich auf eines der Items klicke sollte sich ein neues Inventar öffnen aber das passiert nicht das ist das Problem es tretten aber keine Fehler auf! Keine in der Konsole und auch nicht beim Kompilieren!

Könnt ihr mit diesen Informationen etwas anfangen ? :)

MfG
Code:
		if(e.getInventory().getName().equalsIgnoreCase("PvP - ItemShop")) {
			//Haupt Shop
			if(e.getCurrentItem().getType() == Material.DIAMOND_SWORD) {
         	    p.closeInventory();
         	    p.openInventory(schwerter);
			} else if(e.getCurrentItem().getType() == Material.LEATHER_CHESTPLATE) {
         	    p.closeInventory();
         	    p.openInventory(leder);
			} else if(e.getCurrentItem().getType() == Material.CHAINMAIL_CHESTPLATE) {
         	    p.closeInventory();
         	    p.openInventory(ketten);
			} else if(e.getCurrentItem().getType() == Material.IRON_CHESTPLATE) {
         	    p.closeInventory();
         	    p.openInventory(eisen);
			} else if(e.getCurrentItem().getType() == Material.POTION) {
         	    p.closeInventory();
         	    p.openInventory(trank);
			}
Hast du das mittlerweile mal probiert?