|
You last visited: Today at 11:06
Advertisement
Minecraft Villager
Discussion on Minecraft Villager within the Minecraft forum part of the Other Online Games category.
07/19/2014, 18:02
|
#1
|
elite*gold: 0
Join Date: Feb 2014
Posts: 48
Received Thanks: 0
|
Minecraft Villager
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 
MFG LuisKillergurke
|
|
|
07/19/2014, 19:04
|
#2
|
elite*gold: 0
Join Date: Apr 2011
Posts: 11,117
Received Thanks: 2,436
|
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
|
#3
|
elite*gold: 0
Join Date: Feb 2014
Posts: 48
Received Thanks: 0
|
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
|
#4
|
elite*gold: 0
Join Date: Apr 2011
Posts: 11,117
Received Thanks: 2,436
|
Quote:
Originally Posted by LuisKillergurke
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 :
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;
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);
recipe1 = new MerchantRecipe(CraftItemStack.asNMSCopy(new ItemStack(Material.BONE,1)), CraftItemStack.asNMSCopy(bow1));
recipe2 = new MerchantRecipe(CraftItemStack.asNMSCopy(new ItemStack(Material.DIAMOND,1)), CraftItemStack.asNMSCopy(bow2));
recipe3 = new MerchantRecipe(CraftItemStack.asNMSCopy(new ItemStack(Material.APPLE,1)), CraftItemStack.asNMSCopy(bow3));
list.a(recipe1);
list.a(recipe2);
list.a(recipe3);
recipes.set(villager, list);
} catch (Exception exception) {
exception.printStackTrace();
}
|
|
|
07/19/2014, 21:41
|
#5
|
elite*gold: 0
Join Date: Feb 2014
Posts: 48
Received Thanks: 0
|
Das habe ich schon probiert... Es passiert trotzdem nichts anderes. Es wird nur Bogen 1 angezeigt...
|
|
|
07/19/2014, 21:54
|
#6
|
elite*gold: 0
Join Date: Apr 2011
Posts: 11,117
Received Thanks: 2,436
|
Quote:
Originally Posted by LuisKillergurke
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
|
#7
|
elite*gold: 0
Join Date: Feb 2014
Posts: 48
Received Thanks: 0
|
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
MFG LuisKillergurke
|
|
|
07/19/2014, 22:50
|
#8
|
elite*gold: 0
Join Date: Apr 2011
Posts: 11,117
Received Thanks: 2,436
|
Quote:
Originally Posted by LuisKillergurke
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
MFG LuisKillergurke
|
Kein Problem, wenn du weiterhin Probleme hast poste mal dein Komplette Klasse(Bitte auf Pastebin)
|
|
|
07/20/2014, 12:56
|
#9
|
elite*gold: 0
Join Date: Feb 2014
Posts: 48
Received Thanks: 0
|
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
|
#10
|
elite*gold: 10
Join Date: Mar 2010
Posts: 908
Received Thanks: 118
|
Quote:
Originally Posted by LuisKillergurke
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
|
#11
|
elite*gold: 0
Join Date: Feb 2014
Posts: 48
Received Thanks: 0
|
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
|
#12
|
elite*gold: 0
Join Date: Apr 2011
Posts: 11,117
Received Thanks: 2,436
|
Quote:
Originally Posted by LuisKillergurke
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
|
#13
|
elite*gold: 0
Join Date: Feb 2014
Posts: 48
Received Thanks: 0
|
Ok, ist auf Pastebin ^^
Danke nochmal für eure Hilfe
|
|
|
07/20/2014, 20:55
|
#14
|
elite*gold: 0
Join Date: Apr 2011
Posts: 11,117
Received Thanks: 2,436
|
Quote:
Originally Posted by LuisKillergurke
Ok, ist auf Pastebin ^^
Danke nochmal für eure Hilfe 
|
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
|
#15
|
elite*gold: 0
Join Date: Feb 2014
Posts: 48
Received Thanks: 0
|
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
|
|
|
All times are GMT +1. The time now is 11:08.
|
|