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:
Der Listener der momentan nutzlos ist, da ich das ItemCraftEvent in die main geschrieben habe:
Und zum Schluss der ItemBuilder, der aber nichts damit zutun haben müsste:
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.
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();
}
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!!");
}
}
}
}
}
} */
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;
}
}