• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Problem mit erschaffen von Craftrezepten.

dadi5012

Minecrafter
Registriert
18 Oktober 2013
Beiträge
1
Diamanten
0
Hi Leute,

ich versuche schon seit geraumer Zeit ein Plugin zu programmieren, was zusätzliche Rezepte einfügt. Bis dahin hat auch alles geklappt, nur möchte ich das ein paar Rezepte nur von mir erschaffene Items verwenden.

Versucht habe ich es mit einem Listener und dem ItemCraftEvent. Das Rezept wäre, ich möchte zuerst Mehl aus Weizen und Pflasterstein erschaffen und dann daraus Brot zu erstellen.


Das Mehl basiert auf Zucker und das ist das Problem. Man kann Zucker verweden um Brot zu craften und dies versuche ich mit einem Listerner abzustellen.

Wäre über Hilfe sehr dankbar, weil ich langsam nicht mehr weiter weiß.

Code Main:
Code:
public class NewCraftRezeptemain extends JavaPlugin implements Listener{


ItemBuilder MehlBuilder = new ItemBuilder(Material.SUGAR, 10, "§fMehl", new String[] {"§fDas ist Mehl für Brot"});
ItemStack Mehl = MehlBuilder.build();

@SuppressWarnings("deprecation")
@Override
public void onEnable() {
System.out.println("NewCraftRezepte wurde erfolgreich gestartet! [version: 1.0]");
Bukkit.getPluginManager().registerEvents(new NewCraftRezepteListener(this), this);

createBrot();
createSpinnennetz();

ItemBuilder rubinBuilder = new ItemBuilder(Material.EMERALD, "§4Rubin");
ItemStack rubin = rubinBuilder.build();

ItemBuilder rubinstaubBuilder = new ItemBuilder(Material.BLAZE_POWDER, "§6Rubinstaub");
ItemStack rubinstaub = rubinstaubBuilder.build();

/*ItemBuilder MehlB = new ItemBuilder(Material.SUGAR, 10, (short) 5, "test", new String[] {"Das ist Mehl für Brot"});
ItemStack Mehl1 = MehlB.build();

ItemBuilder MehlB2 = new ItemBuilder(Material.SUGAR, 10, (short) 1, "Mehl");
ItemStack Mehl2 = MehlB2.build(); */

ItemStack test = rubin;

ShapedRecipe RezeptMehl = new ShapedRecipe(Mehl);
RezeptMehl.shape("AAA",
"ACA",
"WWW");
RezeptMehl.setIngredient('W', Material.WHEAT);
RezeptMehl.setIngredient('C', Material.COBBLESTONE);

ShapedRecipe Rezeptrubin = new ShapedRecipe(rubin);
Rezeptrubin.shape("DDD",
"DED",
"DDD");
Rezeptrubin.setIngredient('E', Material.EMERALD);
Rezeptrubin.setIngredient('D', Material.DIAMOND);

ShapedRecipe Rezeptrubinstaub = new ShapedRecipe(rubin);
Rezeptrubinstaub.shape("AAA",
"AEA",
"ADA");
Rezeptrubinstaub.setIngredient('E', Material.STONE);
Rezeptrubinstaub.setIngredient('D', Material.OBSIDIAN);

Bukkit.addRecipe(Rezeptrubinstaub);
Bukkit.addRecipe(Rezeptrubin);
Bukkit.addRecipe(RezeptMehl);

}

@SuppressWarnings("deprecation")
public static void createBrot() {

ItemStack Brot = new ItemStack(Material.BREAD);

     ShapedRecipe RezeptBrot = new ShapedRecipe(Brot);
     RezeptBrot.shape("AAA",
    "AAA",
    "MMM");
    RezeptBrot.setIngredient('M', Material.SUGAR);

Bukkit.addRecipe(RezeptBrot);
}

@SuppressWarnings("deprecation")
public void createSpinnennetz() {

ItemStack Spinnennetz = new ItemStack(Material.WEB, 3);

ShapedRecipe RezeptSpinnennetz = new ShapedRecipe(Spinnennetz);
RezeptSpinnennetz.shape("FFF", "FSF", "FFF");
RezeptSpinnennetz.setIngredient('F', Material.STRING);
RezeptSpinnennetz.setIngredient('S', Material.SLIME_BALL);

Bukkit.addRecipe(RezeptSpinnennetz);
}

@EventHandler
public void ItemCraftEvent(CraftItemEvent evt) {

Player pl = (Player)evt.getWhoClicked();
ItemStack Brot = new ItemStack(Material.BREAD);
pl.sendMessage("Schritt 0");

if(evt.getInventory() instanceof CraftingInventory) {
pl.sendMessage("Schritt 1");
CraftingInventory inv = (CraftingInventory) evt.getInventory();
if(evt.getRecipe().getResult().equals(Brot)) {
if(inv.getSize() != 4) {
pl.sendMessage("Schritt 2");
ItemStack[] itm = inv.getMatrix();
if(itm[7].getItemMeta().getDisplayName().toString().equals(Mehl.getItemMeta().getDisplayName().toString()) && itm[8].getItemMeta().getDisplayName().toString().equals(Mehl.getItemMeta().getDisplayName().toString()) && itm[9].getItemMeta().getDisplayName().toString().equals(Mehl.getItemMeta().getDisplayName().toString())){
pl.sendMessage("erfolgreich!");
inv.setResult(Brot);
return;
} else {
pl.sendMessage("nicht erfolgreich!");
inv.setResult(null);
evt.setCancelled(true);
}

}
}

}
}

public void onDisable() {
System.out.println("NewCraftRezepte wurde gestoppt!");
getServer().clearRecipes();
}
Der Listener der momentan nutzlos ist, da ich das ItemCraftEvent in die main geschrieben habe:
Code:
public class NewCraftRezepteListener implements Listener {


public NewCraftRezeptemain plugin;

ItemBuilder MehlBuilder = new ItemBuilder(Material.SUGAR, 10, "§fMehl", new String[] {"§fDas ist Mehl für Brot"});
ItemStack mehl = MehlBuilder.build();

ItemMeta meta = mehl.getItemMeta();

ItemStack Brot = new ItemStack(Material.BREAD);

public NewCraftRezepteListener(NewCraftRezeptemain NewCraftRezepteListener) {
this.plugin = NewCraftRezepteListener;
this.plugin.getServer().getPluginManager().registerEvents(this, plugin);
}

/*@EventHandler
public void onCraftEvent(CraftItemEvent evt) {

Player pl = (Player)evt.getWhoClicked();

if(evt.getInventory() instanceof CraftingInventory) {
CraftingInventory inv = (CraftingInventory) evt.getInventory();
if(inv.getSize() != 4) {
ItemStack[] itm = inv.getMatrix();
if(itm[7].getItemMeta().getDisplayName().toString().toLowerCase().equals(mehl.getItemMeta().getDisplayName().toString().toLowerCase()) && itm[8].getItemMeta().getDisplayName().toString().toLowerCase().equals(mehl.getItemMeta().getDisplayName().toString().toLowerCase()) && itm[9].getItemMeta().getDisplayName().toString().toLowerCase().equals(mehl.getItemMeta().getDisplayName().toString().toLowerCase())){
inv.setResult(Brot);
return;
} else {
inv.setResult(null);
evt.setCancelled(true);
}

}

}
} */
}


/*if(result.equals(Material.BREAD)) {
if(!(pl.hasPermission("craft.brot"))) {
for(ItemStack zutaten : i.getContents()) {
if(!(zutaten.getItemMeta().hasLore() && zutaten.getItemMeta().hasDisplayName())) {
String name = zutaten.getItemMeta().getDisplayName();
List<String> lore = zutaten.getItemMeta().getLore();
if(!(lore.contains("§fDas ist Mehl für Brot") && ChatColor.stripColor(name).equals("§fMehl"))) {
evt.setCancelled(true);
pl.sendMessage("Das darfst du nicht craften! schaue ins Wiki!!");
}
}
}
}
}
} */
Und zum Schluss der ItemBuilder, der aber nichts damit zutun haben müsste:
Code:
public class ItemBuilder {

private ItemStack stack;
private ItemMeta meta;

public ItemBuilder(ItemStack itemStack) {
stack = new ItemStack(itemStack);
meta = stack.getItemMeta();
meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
meta.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS);
}

public ItemBuilder(Material mat, String name) {
stack = new ItemStack(mat);
meta = stack.getItemMeta();
setDisplayName(name);
meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
meta.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS);
}

public ItemBuilder(Material mat, int amo, String name, String[] lore) {
stack = new ItemStack(mat);
meta = stack.getItemMeta();
setDisplayName(name);
setAmount(amo);
setLore(lore);
meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
meta.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS);
}

public ItemBuilder(Material m, int amount, short data, String name, String[] lore) {
this(new ItemStack(m, amount, data));
setDisplayName(name);
setLore(lore);
meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
meta.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS);
}

public ItemBuilder(Material m, int amount, short durability, String name) {
this(new ItemStack(m, amount, durability));
setDisplayName(name);
meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
meta.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS);
}

public ItemBuilder setLore(String[] lore) {
meta.setLore(Arrays.asList(lore));
return this;
}

public void setAmount(int amo){
stack.setAmount(amo);
}

public void setDisplayName(String name){
meta.setDisplayName(name);
}

public ItemStack build(){
stack.setItemMeta(meta);
return stack;
}


}
PS: Es geht nicht, dass ich den Items eine Data oder Haltbarkeit zuweise, bzw habe ich das schon hinbekommen, aber ich möchte den Items andere Texturen geben und somit dürfen sie keine SUB-ID's besitzen.
 

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
26
Diamanten
312
Minecraft
FastFelix771
Du kannst auch das Brot Rezept direkt entfernen.
Bukkit.recipeIterator() oder so war der Zugriffspunkt für die Rezeptregistry. Ich bin mir nicht sicher, ob das in den letzten 6 Jahren abgeändert wurde, aber dort in der Richtung findest du garantiert etwas!

Ich sehe später mal genauer in der Doku nach und hänge dir den Link dann mit dran.
 
Oben