Minecraft Villager

07/19/2014 18:02 LuisKillergurke#1
Hey Leute,

Ich bin dabei ein Rush zu programmieren, und scheitere nun ein weiters mal an den Villagern. Ich habe es nun zwar geschaft die zu tauschenden Items zu editieren, aber jedes item nur ein mal. Sprich: Ich habe einen Bogen lvl1, einen lvl2 und einen lvl3. Die sollen alle von einem Villager getauscht werden.

Ohne diese mehrmals gleichen Items mache ich es bis jetzt so:

Code:
MerchantRecipe bow = new MerchantRecipe(CraftItemStack.asNMSCopy(new ItemStack(Material.CLAY_BRICK, 1)), CraftItemStack.asNMSCopy(MeinBogen));

bow.a(999999999);

recipes.a(bow);

EntityVillager villager = ((CraftVillager) vlg).getHandle();
		
		try
		{
	         Field field = Class.forName("net.minecraft.server.R1.7_R3.EntityVillager").getDeclaredField("bu");
	         field.setAccessible(true);
	         field.set(villager, recipes);
	    }
		catch(Exception e)
		{
			e.printStackTrace();
		}
MeinBogen ist dabei der Bogen mit enchantments und name, vlg ein EntityVillager aus dem EntityInteract Event.

Mache ich jetzt aber eben zwei bögen mit verschiedenen Namen und Enchantments, handelt der Villager hinterher nur den ersten.

Ich freue mich über eure Hilfe :D
MFG LuisKillergurke
07/19/2014 19:04 False#2
Code:
Entity e = Bukkit.getServer().getWorld("world").spawnEntity(p.getLocation(), EntityType.VILLAGER);
			          EntityVillager villager = ((CraftVillager) e).getHandle();
			          try {
			                Field recipes = villager.getClass().getDeclaredField("bu");
			                recipes.setAccessible(true);
			                MerchantRecipeList list = new MerchantRecipeList();
			               
			                MerchantRecipe recipe1;
			                MerchantRecipe recipe2;
			                MerchantRecipe recipe3;
			              
			 
			                recipe1 = new MerchantRecipe(CraftItemStack.asNMSCopy(new ItemStack(Material.BONE,1)), CraftItemStack.asNMSCopy(new ItemStack(Material.STICK,1)));
			                recipe2 = new MerchantRecipe(CraftItemStack.asNMSCopy(new ItemStack(Material.DIAMOND,1)), CraftItemStack.asNMSCopy(new ItemStack(Material.STONE,1)));
			                recipe3 = new MerchantRecipe(CraftItemStack.asNMSCopy(new ItemStack(Material.APPLE,1)), CraftItemStack.asNMSCopy(new ItemStack(Material.DIRT,1)));
			                
			               
			                recipe1.a(2048);
			                recipe2.a(2048);
			                recipe3.a(2048);
			              
			               
			                list.a(recipe1);
			                list.a(recipe2);
			                list.a(recipe3);
			              
			               
			                recipes.set(villager, list);
							} catch (Exception exception) {
			                exception.printStackTrace();
			          }
So könnte es z.b aussehen...
07/19/2014 20:36 LuisKillergurke#3
Ja, das hab ich auch schon...

Ich meine das so:

Ich habe 3 Bögen also 3 mal das gleiche Item, nur verzaubert, und möchte diese alle mit einem Villager verkaufen. Das geht so aber leider nicht, da er, wenn ich da einfach die 3 Bögen hintereinander hinschreibe, nur einer wirklich gehandelt wird...
07/19/2014 20:51 False#4
Quote:
Originally Posted by LuisKillergurke View Post
Ja, das hab ich auch schon...

Ich meine das so:

Ich habe 3 Bögen also 3 mal das gleiche Item, nur verzaubert, und möchte diese alle mit einem Villager verkaufen. Das geht so aber leider nicht, da er, wenn ich da einfach die 3 Bögen hintereinander hinschreibe, nur einer wirklich gehandelt wird...
Deklarier die Bögen einfach vorher, ca so :
Code:
ItemStack bow1 = new ItemStack(Material.BOW);
bow1.addEnchantment(Enchantment.ARROW_DAMAGE, 1);

ItemStack bow2 = new ItemStack(Material.BOW);
bow2.addEnchantment(Enchantment.ARROW_DAMAGE, 3);

ItemStack bow3 = new ItemStack(Material.BOW);
bow3.addEnchantment(Enchantment.ARROW_DAMAGE, 5);
und ersetz
Code:
CraftItemStack.asNMSCopy(new ItemStack(Material.STICK,1)))
durch
Code:
CraftItemStack.asNMSCopy(bow1))
usw..
Also das es ca so ist :
07/19/2014 21:41 LuisKillergurke#5
Das habe ich schon probiert... Es passiert trotzdem nichts anderes. Es wird nur Bogen 1 angezeigt...
07/19/2014 21:54 False#6
Quote:
Originally Posted by LuisKillergurke View Post
Das habe ich schon probiert... Es passiert trotzdem nichts anderes. Es wird nur Bogen 1 angezeigt...
Bei mir geht es ohne probleme ;)

07/19/2014 22:08 LuisKillergurke#7
Ok, dann hab ich wohl nen fehler oder bin zu unfähig ^^ ich schaue nochmal, was ich falsch habe.
Vielen Dank das du dir die Mühe gemacht hast mir das alles zu erklären :D

MFG LuisKillergurke
07/19/2014 22:50 False#8
Quote:
Originally Posted by LuisKillergurke View Post
Ok, dann hab ich wohl nen fehler oder bin zu unfähig ^^ ich schaue nochmal, was ich falsch habe.
Vielen Dank das du dir die Mühe gemacht hast mir das alles zu erklären :D

MFG LuisKillergurke
Kein Problem, wenn du weiterhin Probleme hast poste mal dein Komplette Klasse(Bitte auf Pastebin)
07/20/2014 12:56 LuisKillergurke#9
Ich habe immernoch ein Problem aber ich weis jetzt wo es liegt, nur nicht wie ich es behebe...
Ich glaube der Code hilft da auch nicht weiter, denn wenn ich es so mache wie du geht es.

Aber:
Ich möchte z.B. Bogen lvl.1 für 1 Gold verkaufen, bogen lvl.2 für 2, bogen3 für 3... Sprich immer genau der gleiche Tausch nur mit verschiedenen Verzauberungen und Namen.
07/20/2014 13:11 milsowa#10
Quote:
Originally Posted by LuisKillergurke View Post
Ich habe immernoch ein Problem aber ich weis jetzt wo es liegt, nur nicht wie ich es behebe...
Ich glaube der Code hilft da auch nicht weiter, denn wenn ich es so mache wie du geht es.

Aber:
Ich möchte z.B. Bogen lvl.1 für 1 Gold verkaufen, bogen lvl.2 für 2, bogen3 für 3... Sprich immer genau der gleiche Tausch nur mit verschiedenen Verzauberungen und Namen.
.ƒaℓsє. hat es dir doch wunderschön gezeigt wie es geht.
Code:
ItemStack bow1 = new ItemStack(Material.BOW); //Bogen wird zu bow1
bow1.addEnchantment(Enchantment.ARROW_DAMAGE, 1);// bow 1 wird entchantment hinzugefügt

ItemStack bow2 = new ItemStack(Material.BOW); //Bogen wird auch zu bow2
bow2.addEnchantment(Enchantment.ARROW_DAMAGE, 3); // bow 2 wird entchantment hinzugefügt

ItemStack bow3 = new ItemStack(Material.BOW); //Bogen wird auch zu bow3
bow3.addEnchantment(Enchantment.ARROW_DAMAGE, 5); // bow 3 wird entchantment hinzugefügt

recipe1 = new MerchantRecipe(CraftItemStack.asNMSCopy(new ItemStack(Material.GOLD_INGOT,1)), CraftItemStack.asNMSCopy(bow1)); // bow1 soll 1Gold Kosten und wird als recipe1 abgekürtz
recipe2 = new MerchantRecipe(CraftItemStack.asNMSCopy(new ItemStack(Material.GOLD_INGOT,2)), CraftItemStack.asNMSCopy(bow2)); // bow2 soll 2Gold Kosten und wird als recipe2 abgekürtz
recipe3 = new MerchantRecipe(CraftItemStack.asNMSCopy(new ItemStack(Material.GOLD_INGOT,3)), CraftItemStack.asNMSCopy(bow3)); // bow3 soll 3Gold Kosten und wird als recipe3 abgekürtz
Oder wie meinst du das?
07/20/2014 13:25 LuisKillergurke#11
Ja so meine ich das, aber wenn ich das mit dem Code mache, dann funktioniert es nicht. Nur ein Bogen wird wieder angezeigt die anderen nicht, aus irgendeinem Grund...
07/20/2014 14:34 False#12
Quote:
Originally Posted by LuisKillergurke View Post
Ja so meine ich das, aber wenn ich das mit dem Code mache, dann funktioniert es nicht. Nur ein Bogen wird wieder angezeigt die anderen nicht, aus irgendeinem Grund...
Wie du im Video siehst funktioniert mein Code, lad mal deine komplette Klasse auf Pastebin hoch dann schau ich mir das an.
07/20/2014 15:28 LuisKillergurke#13
Ok, ist auf Pastebin ^^

[Only registered and activated users can see links. Click Here To Register...]

Danke nochmal für eure Hilfe :D
07/20/2014 20:55 False#14
Quote:
Originally Posted by LuisKillergurke View Post
Ok, ist auf Pastebin ^^

[Only registered and activated users can see links. Click Here To Register...]

Danke nochmal für eure Hilfe :D
Kein Problem, du bedankst dich ja wenigstens :)
Also es liegt dran das alle 3 mit gold gehandelt werden, sobald du die änderst werden auch alle Bögen angezeigt.
Wie du es dennoch hinbekommst das alle mit gold handelbar sind kann ich dir auf die schneller grade nicht sagen(grad keine zeit zu schauen^^).
07/21/2014 15:01 LuisKillergurke#15
Ok, danke Trotzdem ^^

Ich habe auch schon viel im Internet gesucht, aber nichts passendes gefunden...
Aber vlt. find ich ja noch was oder komme zufällig drauf ^^

Vielen Dank für die Hilfe
MFG LuisKillergurke