Jump to content

Recommended Posts

Hallo liebe Community,

ich habe ein Problem , denn ich bin kurz davor mein Bedwars Plugin zu beenden und habe ein Problem:

Hier Spawnt der das "Modifizierte" Item Bronze:

public void startSpawners () {
        Bukkit.getScheduler().scheduleSyncRepeatingTask(this.plugin, new Runnable() {

            @Override
            public void run() {
               
                ItemStack item = new ItemStack(Material.CLAY_BRICK, 1);
                ItemMeta meta = item.getItemMeta();
                meta.setDisplayName("Ziegel");
                item.setItemMeta(meta);

               
                Spawn("bronze", item);
            }


das geht ja alles aber jetzt ist dass Problem wenn ich im Shop also ich habe einen Villager so bearbeitet dass er ein Vituelle Inventar öffnet und dort kann man Items kaufen. Wenn ich jetzt mir 2 Sandsteine für 1 Bronze kaufe tut er mir die 2 Sandsteine ins Inventar aber zieht nicht die 1 "Modifizierte" Bronze ab, aber wenn ich normalen Clay Brick hernehme dann zieht er es ab.

if(e.getCurrentItem().getItemMeta().getDisplayName().contains("§eSandstein")) {
                if(p.getInventory().contains(Material.CLAY_BRICK, 1)) {
                   
                    p.getInventory().addItem(new ItemStack(Material.SANDSTONE, 2));
                   
                    p.getInventory().removeItem(new ItemStack(Material.CLAY_BRICK, 1));
                   
                    ItemStack bronze = new ItemStack(Material.CLAY_BRICK);
                    ItemMeta bronze_meta = bronze.getItemMeta();
                    bronze_meta.setDisplayName("§cBronze");
                    bronze.setItemMeta(bronze_meta);
                    p.updateInventory();

                }else {
                    p.sendMessage(this.plugin.prefix + "§cDu hast nicht genügend Items!");
                }
        }

Mit freundlichsten Grüßen,

Brenner_HD
 

Link to comment
Share on other sites

Probier es mal so:

if(e.getCurrentItem().getItemMeta().getDisplayName().contains("§eSandstein")) {

                ItemStack bronze = new ItemStack(Material.CLAY_BRICK);
                ItemMeta bronze_meta = bronze.getItemMeta();
                bronze_meta.setDisplayName("§cBronze");
                bronze.setItemMeta(bronze_meta);


                if(p.getInventory().contains(bronze)) {
                   
                    p.getInventory().addItem(new ItemStack(Material.SANDSTONE, 2));

                    p.getInventory().removeItem(bronze);
                    p.updateInventory();

                }else {
                    p.sendMessage(this.plugin.prefix + "§cDu hast nicht genügend Items!");
                }
        }

 

LG, Derya001

Link to comment
Share on other sites

Bei mir klappt es. An welcher Stelle des Plugins bekommt der Spieler denn überhaupt "Bronze", um damit bezahlen zu können? Vermutlich stimmten die beiden ItemStacks nicht überein (also das bronze welches du ihm gibst, und das was du ihm abziehst).

LG, Derya001

Link to comment
Share on other sites

Das is die gesamte Spawner klasse dort wird "Bronze" gespawnt:

 

package Methods;

import java.io.File;
import java.io.IOException;

import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

import bedwars.Bedwars;

public class Spawner implements Listener{
    
private Bedwars plugin;
    
    public Spawner(Bedwars plugin) {
        this.plugin = plugin;


    }
    public Integer setSpawn(String type, Location loc) {
        int i = 0;
        
        File file = new File(plugin.getDataFolder().getPath(), "Spawner.yml");
        FileConfiguration cfg = YamlConfiguration.loadConfiguration(file);
        
        i = cfg.getInt(type + ".amount");
        
        i++;
        cfg.set(type + ".amount", i);
        
        cfg.set(type + "." + i + ".world", loc.getWorld().getName());
        cfg.set(type + "." + i + ".x", loc.getX());
        cfg.set(type + "." + i + ".y", loc.getY());
        cfg.set(type + "." + i + ".z", loc.getZ());
        
        try {
            cfg.save(file);
        } catch (IOException e) {
            Bukkit.broadcastMessage(this.plugin.prefix + "§l§cEs gab einen Fehler bei der Speicherung!");
            e.printStackTrace();
        }
        
        return i;
    }
    private void Spawn(String type, ItemStack item) {
        
        File file = new File(this.plugin.getDataFolder().getPath(), "Spawner.yml");
        FileConfiguration cfg = YamlConfiguration.loadConfiguration(file);
        
        int amount = cfg.getInt(type + ".amount");
        
        for(int i = 1; i < amount+1; i++) {
            
            String world = cfg.getString(type + "." + i + ".world");
            double x = cfg.getDouble(type + "." + i + ".x");
            double y = cfg.getDouble(type + "." + i + ".y");
            double z = cfg.getDouble(type + "." + i + ".z");
            
            Location loc = new Location(Bukkit.getWorld(world), x, y, z);
            
            loc.getWorld().dropItemNaturally(loc, item);
        }
        
    }
    
    public void startSpawners () {
        Bukkit.getScheduler().scheduleSyncRepeatingTask(this.plugin, new Runnable() {

            @Override
            public void run() {
                
                ItemStack item = new ItemStack(Material.CLAY_BRICK, 1);
                ItemMeta meta = item.getItemMeta();
                meta.setDisplayName("§cBronze");
                item.setItemMeta(meta);

                
                Spawn("bronze", item);
            }
            
            
            
            
        }, 20, 20);
        
        Bukkit.getScheduler().scheduleSyncRepeatingTask(this.plugin, new Runnable() {

            @Override
            public void run() {
                
                ItemStack item = new ItemStack(Material.IRON_INGOT);
                ItemMeta meta = item.getItemMeta();
                meta.setDisplayName("§7Silber");
                item.setItemMeta(meta);
                
                Spawn("silber", item);
                
            }
            
            
            
            
        }, 200, 200);
        
        Bukkit.getScheduler().scheduleSyncRepeatingTask(this.plugin, new Runnable() {

            @Override
            public void run() {
                
                ItemStack item = new ItemStack(Material.GOLD_INGOT);
                ItemMeta meta = item.getItemMeta();
                meta.setDisplayName("§6Gold");
                item.setItemMeta(meta);
                
                Spawn("gold", item);
            
            }
        
            
            
            
            
        }, 600, 600);
    }
    
}

 

Link to comment
Share on other sites

Probier beim spawnen bitte mal folgenden Code für deine Items:

ItemStack item = new ItemStack(Material.CLAY_BRICK);
ItemMeta meta = item.getItemMeta();

meta.setDisplayName("§cBronze");
item.setItemMeta(meta);

 Spawn(item);

Link to comment
Share on other sites

Du darfst natürlich dann nicht die alten Items von vorher benutzen.

Zuerst den Server neu starten um das Plugin neu zu laden. Dann ein Item spawnen lassen und es dann mit diesem probieren. 

Hast du das schon gemacht? 

Link to comment
Share on other sites

Ok also auch im Villager Shop item hernehmen?

dass ist die spawner klasse:

public void startSpawners () {
        Bukkit.getScheduler().scheduleSyncRepeatingTask(this.plugin, new Runnable() {

            @Override
            public void run() {
                
                 ItemStack item = new ItemStack(Material.CLAY_BRICK);
                 ItemMeta meta = item.getItemMeta();

                 meta.setDisplayName("§cBronze");
                 item.setItemMeta(meta);

                  Spawn("bronze", item);
            }

Villager Shop:

 if(e.getCurrentItem().getItemMeta().getDisplayName().contains("§eSandstein")) {

                    ItemStack item = new ItemStack(Material.CLAY_BRICK);
                    ItemMeta meta = item.getItemMeta();
                    meta.setDisplayName("§cBronze");
                    item.setItemMeta(meta);

                    if(p.getInventory().contains(item)) {
                       
                        p.getInventory().addItem(new ItemStack(Material.SANDSTONE, 2));

                        p.getInventory().removeItem(item);
                        p.updateInventory();

                    }else {
                        p.sendMessage(this.plugin.prefix + "§cDu hast nicht genügend Items!");
                    }

 

 

Link to comment
Share on other sites

Komisch, mit .contains(item) funktioniert es bei mir einwandfrei. Das Problem, welches du jetzt hast, ist folgendes: jetzt kann jeder mit Clay bezahlen, egal ob es sich um dein "Bronze" handelt oder nicht.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...
B
B