Coding mit Java | Java-basierten APIs

  • Ersteller Ersteller ij9F_i0FaF-d9lrDSDDpDbfo
  • Erstellt am Erstellt am
Status
Für weitere Antworten geschlossen.
p.getItemInHand().setAmount(p.getItemInHand().getAmount() -1);
Ich glaube das wird auch die Schüssel löschen, kannst es aber mal versuchen ^^
 
Hey, ich habe ein Soup plugin geschrieben.

Code:
@EventHandler
    public void onInteract(PlayerInteractEvent e)
    {   
        Player p = e.getPlayer();
        if(e.getAction() == Action.RIGHT_CLICK_AIR | e.getAction() == Action.RIGHT_CLICK_BLOCK)
        {       
            if(e.getMaterial().equals(Material.MUSHROOM_SOUP)){
                if(Main.soupingame.contains(e.getPlayer().getName())){
                    if(p.getHealth() < 20){                       
                        if(p.getHealth() >= 16){
                            p.setHealth(20);

                            ItemStack bowl = new ItemStack(Material.BOWL);
                            p.setItemInHand(bowl);
                        }
                        else{
                            int health = (int) p.getHealth();
                            p.setHealth(health + 4);
                           
                            ItemStack bowl = new ItemStack(Material.BOWL);
                            p.setItemInHand(bowl);
                        }
                    }
                }
                else{
                    e.getPlayer().sendMessage(Main.error);
                }
            }   
        }
    }

Nun habe ich das Problem, wenn ich die Muschroom Bowl rechtsklicke und dabei in die Luvt zeige, kommen nur Herzen hinzu und die Bowl wird nicht ersetze. Aber wenn ich auf den Boden (Block) zeige funktioniert alles.
Was habe ich falsch gemacht?


a) Hat der Spieler Hunger , wenn er die Suppe benutzt? Probier es bitte mal mit mal ohne Hunger.

b) Wieso:

ItemStack bowl = new ItemStack(Material.BOWL);
p.setItemInHand(bowl);

Anstatt
p.setItemInHand(new ItemStack(Material.BOWL)?

-> Das gleiche gilt auch für Health

MfG,

Tim

P.S.: EDIT: Ich habe bereits gestellte Vorschläge aus meinem Beitrag entfernt.
 
Zuletzt bearbeitet:
Bei dem Paragraph-Zeichen kommt aber immer noch die selbe Fehlermeldung.

Error:
PHP:
[18:31:48 INFO]: [Ljava.lang.String;@26d61872
[18:31:48 WARN]: java.lang.ArrayIndexOutOfBoundsException: 1
[18:31:48 WARN]:        at net.blockbreaker.serversigns.StatusSign.update(Status
Sign.java:72)
[18:31:48 WARN]:        at net.blockbreaker.serversigns.StatusSigns$1.run(Status
Signs.java:60)
[18:31:48 WARN]:        at org.bukkit.craftbukkit.v1_8_R1.scheduler.CraftTask.ru
n(CraftTask.java:71)
[18:31:48 WARN]:        at org.bukkit.craftbukkit.v1_8_R1.scheduler.CraftSchedul
er.mainThreadHeartbeat(CraftScheduler.java:350)
[18:31:48 WARN]:        at net.minecraft.server.v1_8_R1.MinecraftServer.z(Minecr
aftServer.java:695)
[18:31:48 WARN]:        at net.minecraft.server.v1_8_R1.DedicatedServer.z(Dedica
tedServer.java:316)
[18:31:48 WARN]:        at net.minecraft.server.v1_8_R1.MinecraftServer.y(Minecr
aftServer.java:625)
[18:31:48 WARN]:        at net.minecraft.server.v1_8_R1.MinecraftServer.run(Mine
craftServer.java:528)
[18:31:48 WARN]:        at java.lang.Thread.run(Unknown Source)
[18:31:49 INFO]: A Minecraft Serverº0º500

Code:
PHP:
package net.blockbreaker.serversigns;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;

import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.block.Sign;

public class StatusSign {

    private Location location;
    private Sign sign;
    private String name, ip;
    private int port;

    public StatusSign(Location location, String name, String ip, int port) {
        this.location = location;
        this.sign = (Sign) location.getBlock().getState();
        this.name = name;
        this.ip = ip;
        this.port = port;
    }

    public Location getLocation() {
        return location;
    }

    public String getName() {
        return name;
    }

    public String getIP() {
        return ip;
    }

    public int getPort() {
        return port;
    }

    public void update() {
        try {
            Socket socket = new Socket();
            socket.connect(new InetSocketAddress(ip, port), 1 * 1000);

            DataOutputStream out = new DataOutputStream(socket.getOutputStream());
            DataInputStream in = new DataInputStream(socket.getInputStream());

            out.write(0xFE);

            StringBuilder str = new StringBuilder();

            int b;
            while ((b = in.read()) != -1) {
                if (b != 0 && b > 16 && b != 255 && b != 23 && b != 24) {
                    str.append((char) b);
                }
            }
                    
                        /*
                        <Name>
                        <IP>
                        <Current/Max>
                        <MOTD>
                         */

            String[] data = str.toString().split("§"); //Hier
            String motd = data[0];
            int onlinePlayers = Integer.valueOf(data[1]);
            int maxPlayers = Integer.valueOf(data[2]);

            sign.setLine(0, name);
            sign.setLine(1, ip);
            sign.setLine(2, onlinePlayers + "/" + maxPlayers);
            sign.setLine(3, motd);

            socket.close();
        } catch (Exception e) {
            e.printStackTrace();

            sign.setLine(0, name);
            sign.setLine(1, ip);
            sign.setLine(2, ChatColor.RED + "Error.");
        }

        sign.update();
    }
}
Das Paragraphzeichen ist ja am ENDE des Strings. Somit gibt es nur einen String der aus dem Split hervorgeht, -> Array.length == 1; arr[1]->ArrayIndexOutOfBounds.... : 1
 
  • Like
Reaktionen: lusu007
a) Hat der Spieler Hunger , wenn er die Suppe benutzt? Probier es bitte mal mit mal ohne Hunger.

b) Wieso:

ItemStack bowl = new ItemStack(Material.BOWL);
p.setItemInHand(bowl);

Anstatt
p.setItemInHand(new ItemStack(Material.BOWL)?

-> Das gleiche gilt auch für Health

MfG,

Tim

P.S.: EDIT: Ich habe bereits gestellte Vorschläge aus meinem Beitrag entfernt.

Hunger hat der Spieler nicht. Soll er auch nicht haben. (Wird verhindert). Das problem ist, wenn man in die Luft schaut und Rechtsklickt kommen nur die Herzen hinzu und es wird die Suppe nicht getauscht. Wenn man auf den Block klickt passiert beides. (Also Suppe wird getauscht und HP kommen dazu.)

Nummer b, habe ich getestet und geht auch nicht.
 
Hallo,

bin noch neu in Coding also nicht lachen :D

Meine Frage is wie bleibt ein Item im Inv und kann nicht verschoben werden: zB Stone auf 1
Kann auch nicht gedroppt werden so wie in der lobby ^^

mfg
 
Status
Für weitere Antworten geschlossen.

Soziale Medien

  • X
  • TikTok

Über uns

  • GommeHD.net ist einer der größten Minecraft-Server der Welt. Dir gefällt unser Server? Dann unterstütze uns durch einen Kauf im Shop!
  • Shop