Jump to content

Eigenes Testplugin macht Probleme.


Squall
 Share

Recommended Posts

Hallo beim Erstellen einens Plugins mittels Eclipse stoße ich auf ein Problem bei meiner ersten if abfrage.

 

package me.svdermant.info;

import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

public class info extends JavaPlugin {

	@Override
	public void onEnable() {
		System.out.println("[Info] Wurde geladen und Aktiviert");
	}
	
	@Override
	public void onDisable() {
		System.out.println("[Info] Wurde deaktiviert!");
	}
	
	
	public boolean onCommand(CommandSender sender, Command cmd, String cmdlabel, String[] args) {
		Player p = (Player) sender;
		
		
		if (cmd.getName().equalsIgnoreCase("Info")) {
			p.sendMessage("§n§6[Info]§r §nDieser Server gehört Svdermant aka (Sharmox)");
			p.setHealth(20);
			p.setFoodLevel(20);
			p.sendMessage("§n§6[Info]§r §bDu hast volles Leben und keinen §lHunger§l§b mehr!");
			return true;
		}
		
		if(cmd.getName().equalsIgnoreCase("Invclear")) {
			if(p.hasPermission("Info.Invclear")); {
				p.getInventory().clear();
				p.sendMessage("§n§6[Info]§r §bDein Inventar wurde geleert!!!");
			} else {
				p.sendMessage("§n§6[Info]§r §bUnzureichende Rechte");
				return true;
			}
		}		
		return false;
	}
	
}

Folgendes Eclipse sagt mir dies:

Invclear.png.87d372a82b52ca58172e6ba53aac2b88.png

Ich möchte halt das wenn ein Spieler die Permission Info.Invclear nicht hat das halt die eine Meldung laut code kommt deswegen ein else nach dem if.
Aber Eclipse scheint dies nicht zu Aktzeptieren.

Ebenfalls hab ich bei meiner Plugin.yml wörter rot unterstrichen:

plugin-yml.PNG.bfcbdb53f0b729588e6783561a01c12a.PNG

Link to comment
Share on other sites

Gesagt getan ich hab aber noch ein weiteres Problem:
Aber warum sind in meiner Plugins.yml ein paar Wörter rot unterstrichen?
und warum kann ich den Befehl im Spiel nicht als Nicht-Op eingeben? es sollte möglich sein...
Damit er ja die meldung nach else sendet weil ein nicht op ja die permission nicht hat.

cant-enter.PNG.699208185021156e38af8973fde81fcf.PNG

Link to comment
Share on other sites

Hallo da ich auf ein Erneutes Problem gestoßen bin wollte ich jetzt nicht wirklich eine neues Thema erstellen es geht ja hierbei immernoch um das gleiche eigene Plugin.
Ich bitte euch mal ca 11 Minuten Zeit zu nehmen um mein Problemvideo anzusehen:

https://youtu.be/gsV3QrR2Kgw

Habt auch verständniss für die dort Angekündigte Videobeschreibung.

Ich hoffe ihr könnt mir weiterhelfen.

 

Edited by Squall
Link to comment
Share on other sites

Das Video was du da geguckt hast ist von 2013. Wenn du mithilfe von YT Videos lernen möchtest solltest du aktuelle Videos nutzen. Kann durchaus sein, dass Funktionen mittlerweile entfernt und durch neue ersetzt wurden.

 

Ich verlinke dir hier nochmal etwas aus dem Spigot Wiki, dass sollte aktuell sein und funktionieren.

https://www.spigotmc.org/wiki/scheduler-programming/

Link to comment
Share on other sites

Die links sind für mich nicht wirklich hilfreich eine Aktuele Deutsche Tutorial Playlist wäre mir persönlich hilfreicher...
Ich tue mich schwer mit Fremdsprachen. Deswegen schaue ich auch keine englischen Playlists sondern lieber deutsche. Noch dazu bringt es nix wenn ich neuere funktionen verwende wenn ich die alte durch ausprobieren noch nicht verstanden habe.
Jeder Mensch lernt anders.
 

Ich müsste jetzt erst wieder den Text übersetzen um ihn zu verstehen. Da meine Kertwertsübersetzung nicht so perfekt ist wird das Schwierig Selbst mittels google.
Ich lerne besser wenn ich was gezeigt bekomme. (Videotutorials) als mich irgendwo einzulesen.

Deswegen Jeder Mensch lernt anders wir sind verschieden!.

Link to comment
Share on other sites

Nach mehreren Versuchen den Englischen Text zu verstehen ist es mir nach Stunden gelungen da was im Video gezeigt wurde umzusetzen.
Ich musste natürlich ein paar dinge Hinzufügen.

Derzeitig sieht die main und commandclasse so aus.
Resultat es funktioniert.

command_backtp.class

package me.svdermant.info;

import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitScheduler;

public class Command_backtp implements CommandExecutor {
	
	private final info plugin = info.getInstance();
	
	public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
		if (sender instanceof Player) {
			Player p = (Player) sender;
			if(cmd.getName().equalsIgnoreCase("backtp")) {
				Location loc = p.getLocation();
				p.sendMessage("§bIn 5 Sekunden wirst du zurück Teleportiert");
				BukkitScheduler scheduler = Bukkit.getScheduler();
				scheduler.runTaskLater(plugin, () -> {
					p.teleport(loc);
					p.sendMessage("§aDu wurdest Teleportiert!");
				}, 20*5);
			}
					
		}
		return true;
	}

}

Hauptklasse Info

package me.svdermant.info;

import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerKickEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class info extends JavaPlugin implements Listener {
	
	private static info instance;
	
	public static info getInstance() {
	  return info.instance;
	}
	
	
	  
	@Override
	public void onEnable() {
		info.instance = this;
		this.getServer().getPluginManager().registerEvents(this, this);
		System.out.println("[Info] Wurde geladen und Aktiviert");
		this.getCommand("Info").setExecutor(new commandinfo());
		this.getCommand("InvClear").setExecutor(new Command_invclear());
		this.getCommand("Daten").setExecutor(new Command_daten());
		this.getCommand("Inv").setExecutor(new Command_inv());
		this.getCommand("backtp").setExecutor(new Command_backtp());
	}
	
	@Override
	public void onDisable() {
		System.out.println("[Info] Wurde deaktiviert!");
	}
	
	
	@EventHandler
	public void onJoin(PlayerJoinEvent e) {
		Player p = e.getPlayer();
		if(p.isOp()) {
			e.setJoinMessage("§4" + p.getName() + " §bist dem Spiel beigetreten!");
		} else {
			e.setJoinMessage("§b" + p.getName() + " §3ist dem Spiel beigetreten!");
		}
	}
	@EventHandler
	public void onQuit(PlayerQuitEvent e) {
		e.setQuitMessage("§c" + e.getPlayer().getName() + " §bhat das Spiel verlassen!");
	}
	@EventHandler 
	public void onKick(PlayerKickEvent e) {
		e.setLeaveMessage("§2" + e.getPlayer().getName() + "§b wurde gekickt!");
	}
}	

 

Edited by Squall
Link to comment
Share on other sites

Warum bekomme ich bei diesem code manchmal Folgenden Fehler siehe Output:

Quellcode;

package me.svdermant.info;

import java.util.Random;

import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

public class Command_RandomItem implements CommandExecutor {

	@Override
	public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
		// TODO Auto-generated method stub
		if(sender instanceof Player) {
			@SuppressWarnings("unused")
			Player p = (Player) sender;
			if (args.length == 0) {
				String[] Materials = {
						"STONE",
						"DIRT",
						"OAK_LOG",
						"BONE"
				};
				int min = 1;
				int max = Materials.length;
				Random ran = new Random();
				int id = (int)(Math.random() * ((max - min) + 1)) + min;
				System.out.println((int)(Math.random() * ((max - min) + 1)) + min);
				System.out.println(id);
				System.out.println(Materials[id]);
			} 
			
		}
		
		return true;
	}

}

Ich habe diesen Output:

[01:27:30] [Server thread/INFO]: Sharmox issued server command: /randomitem
[01:27:30] [Server thread/INFO]: 1
[01:27:30] [Server thread/INFO]: 3
[01:27:30] [Server thread/INFO]: BONE
[01:27:40] [Server thread/INFO]: Sharmox issued server command: /randomitem
[01:27:40] [Server thread/INFO]: 3
[01:27:40] [Server thread/INFO]: 2
[01:27:40] [Server thread/INFO]: OAK_LOG
[01:27:41] [Server thread/INFO]: Sharmox issued server command: /randomitem
[01:27:41] [Server thread/INFO]: 3
[01:27:41] [Server thread/INFO]: 3
[01:27:41] [Server thread/INFO]: BONE
[01:27:42] [Server thread/INFO]: Sharmox issued server command: /randomitem
[01:27:42] [Server thread/INFO]: 4
[01:27:42] [Server thread/INFO]: 2
[01:27:42] [Server thread/INFO]: OAK_LOG
[01:27:43] [Server thread/INFO]: Sharmox issued server command: /randomitem
[01:27:43] [Server thread/INFO]: 3
[01:27:43] [Server thread/INFO]: 4
[01:27:43] [Server thread/ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'randomitem' in plugin Info v1.0
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:47) ~[spigot-api-1.19.4-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:149) ~[spigot-api-1.19.4-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.craftbukkit.v1_19_R3.CraftServer.dispatchCommand(CraftServer.java:864) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at org.bukkit.craftbukkit.v1_19_R3.command.BukkitCommandWrapper.run(BukkitCommandWrapper.java:50) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at com.mojang.brigadier.CommandDispatcher.execute(CommandDispatcher.java:264) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:?]
        at net.minecraft.commands.CommandDispatcher.performCommand(CommandDispatcher.java:312) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at net.minecraft.commands.CommandDispatcher.a(CommandDispatcher.java:296) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at net.minecraft.server.network.PlayerConnection.a(PlayerConnection.java:1957) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at net.minecraft.server.network.PlayerConnection.lambda$18(PlayerConnection.java:1919) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at net.minecraft.util.thread.IAsyncTaskHandler.b(SourceFile:67) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768) ~[?:?]
        at net.minecraft.server.TickTask.run(SourceFile:18) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at net.minecraft.util.thread.IAsyncTaskHandler.d(SourceFile:156) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at net.minecraft.util.thread.IAsyncTaskHandlerReentrant.d(SourceFile:23) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at net.minecraft.server.MinecraftServer.b(MinecraftServer.java:1154) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at net.minecraft.server.MinecraftServer.d(MinecraftServer.java:1) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at net.minecraft.util.thread.IAsyncTaskHandler.x(SourceFile:130) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at net.minecraft.server.MinecraftServer.bi(MinecraftServer.java:1133) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at net.minecraft.server.MinecraftServer.x(MinecraftServer.java:1126) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at net.minecraft.util.thread.IAsyncTaskHandler.br(SourceFile:115) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at net.minecraft.server.MinecraftServer.i_(MinecraftServer.java:1109) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:1021) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at net.minecraft.server.MinecraftServer.lambda$0(MinecraftServer.java:304) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at java.lang.Thread.run(Thread.java:833) ~[?:?]
Caused by: java.lang.ArrayIndexOutOfBoundsException: Index 4 out of bounds for length 4
        at me.svdermant.info.Command_RandomItem.onCommand(Command_RandomItem.java:31) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[spigot-api-1.19.4-R0.1-SNAPSHOT.jar:?]
        ... 23 more


Sinn und Zweck war es ein Zufallsnamen aus dem Array in der Console auszugeben:
Aber bei mehrfachen eingaben kommt es irgendwann zu den Oben gesehenen fehler.

 

Edited by Squall
Link to comment
Share on other sites

vor einer Stunde schrieb boomer41:
int max = Materials.length;

Zu

int max = Materials.length - 1;

 

Wenn du Zeitnahen Support möchtest, musst du wen bezahlen. Wir machen das hier freiwillig und sitzen nicht jeden Tag im Forum.

Aber dafür jeden tag im Discord sonst wüsstet ihr ja nicht wer neue Beiträge schreibt :) aber das ist ein anderes Thema.

Mein Code ist also der folgende:

 

package me.svdermant.info;

import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;

public class Command_RandomItem implements CommandExecutor {

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        // TODO Auto-generated method stub
        if(sender instanceof Player) {
            Player p = (Player) sender;
            if (args.length == 0) {
                String[] Mats = {
                        "IRON_SHOVEL",
                        "IRON_PICKAXE",
                        "IRON_AXE",
                        "FLINT_AND_STEEL",
                        "BOW",
                        "WOODEN_SHOVEL",
                        "WOODEN_PICKAXE",
                        "WOODEN_AXE",
                        "STONE_SHOVEL",
                        "STONE_PICKAXE",
                        "STONE_AXE",
                        "DIAMOND_SHOVEL",
                        "DIAMOND_PICKAXE",
                        "DIAMOND_AXE",
                        "GOLDEN_SHOVEL",
                        "GOLDEN_PICKAXE",
                        "GOLDEN_AXE",
                        "STONE_HOE",
                        "IRON_HOE",
                        "DIAMOND_HOE",
                        "WOODEN_HOE",
                        "COMPASS",
                        "FISHING_ROD",
                        "CLOCK",
                        "FILLED_MAP",
                        "SHEARS",
                        "MAP",
                        "CARROT_ON_A_STICK",
                        "LEAD",
                        "TOTEM_OF_UNDYING",
                        "SHULKER_SHELL",
                        "IRON_NUGGET",
                        "GRINDSTONE",
                        "STONECUTTER",
                        "BELL",
                        "LANTERN",
                        "NETHERITE_SHOVEL",
                        "NETHERITE_PICKAXE",
                        "NETHERITE_AXE",
                        "NETHERITE_HOE",
                        "WARPED_FUNGUS_ON_A_STICK",
                        "SOUL_LANTERN",
                        "SOUL_CAMPFIRE",
                        "SPYGLASS"
                };
                int min = 0;
                int max = Mats.length - 1;
                //Random ran = new Random();
                int id = (int)(Math.random() * ((max - min) + 1)) + min;
                System.out.println((int)(Math.random() * ((max - min) + 1)) + min);
                System.out.println("the max contents of the materials array are: " + max);
                p.sendMessage("You are about to be given a tool: " + Mats[id]);
                String itemid = Mats[id];
                p.sendMessage("the ItemID is: " + itemid);
                ItemStack item = new ItemStack(Material.itemid);
                             
            }
         
        }
     
        return true;
    }

}

Wie kann ich jetzt die zufällig generierte ID zur Funktion ItemStack hinzufügen?
Da das Wort itemid in der Zeile: ItemStack item = new ItemStack(Material.itemid);
Wird rot unterstrichen!

Wie kann ich dies als Wert für ItemStack festlegen?

Link to comment
Share on other sites

Habe es zwar jetzt hinbekommen. Aber beim Test will er mir ein Item geben was gar nicht existiert als Material.
Das Problem tritt auch bei anderen auf wie zb der BELL oder den STONECUTTER.

 

Zitat

[13:08:40] [Server thread/INFO]: Sharmox ist dem Spiel beigetreten!
[13:08:40] [Server thread/INFO]: Sharmox[/151.189.144.76:64483] logged in with entity id 257 at ([world]23.23480948402223, 64.0, 7.540057692907433)
[13:09:06] [Server thread/INFO]: Sharmox issued server command: /randomitem
[13:09:06] [Server thread/INFO]: 40
[13:09:06] [Server thread/INFO]: the max contents of the materials array are: 43
[13:09:06] [Server thread/ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'randomitem' in plugin Info v1.0
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:47) ~[spigot-api-1.19.4-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:149) ~[spigot-api-1.19.4-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.craftbukkit.v1_19_R3.CraftServer.dispatchCommand(CraftServer.java:864) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at org.bukkit.craftbukkit.v1_19_R3.command.BukkitCommandWrapper.run(BukkitCommandWrapper.java:50) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at com.mojang.brigadier.CommandDispatcher.execute(CommandDispatcher.java:264) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:?]
        at net.minecraft.commands.CommandDispatcher.performCommand(CommandDispatcher.java:312) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at net.minecraft.commands.CommandDispatcher.a(CommandDispatcher.java:296) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at net.minecraft.server.network.PlayerConnection.a(PlayerConnection.java:1957) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at net.minecraft.server.network.PlayerConnection.lambda$18(PlayerConnection.java:1919) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at net.minecraft.util.thread.IAsyncTaskHandler.b(SourceFile:67) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768) ~[?:?]
        at net.minecraft.server.TickTask.run(SourceFile:18) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at net.minecraft.util.thread.IAsyncTaskHandler.d(SourceFile:156) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at net.minecraft.util.thread.IAsyncTaskHandlerReentrant.d(SourceFile:23) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at net.minecraft.server.MinecraftServer.b(MinecraftServer.java:1154) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at net.minecraft.server.MinecraftServer.d(MinecraftServer.java:1) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at net.minecraft.util.thread.IAsyncTaskHandler.x(SourceFile:130) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at net.minecraft.server.MinecraftServer.bi(MinecraftServer.java:1133) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at net.minecraft.server.MinecraftServer.x(MinecraftServer.java:1126) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at net.minecraft.util.thread.IAsyncTaskHandler.c(SourceFile:139) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at net.minecraft.server.MinecraftServer.i_(MinecraftServer.java:1110) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:1021) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at net.minecraft.server.MinecraftServer.lambda$0(MinecraftServer.java:304) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at java.lang.Thread.run(Thread.java:833) ~[?:?]
Caused by: java.lang.IllegalArgumentException: No enum constant org.bukkit.Material.LEGACY_STONECUTTER
        at java.lang.Enum.valueOf(Enum.java:273) ~[?:?]
        at org.bukkit.Material.valueOf(Material.java:1) ~[spigot-api-1.19.4-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.craftbukkit.v1_19_R3.legacy.CraftLegacy.valueOf(CraftLegacy.java:229) ~[spigot-1.19.4-R0.1-SNAPSHOT.jar:3763-Spigot-7d7b241-5a5e43e]
        at me.svdermant.info.Command_RandomItem.onCommand(Command_RandomItem.java:80) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[spigot-api-1.19.4-R0.1-SNAPSHOT.jar:?]
        ... 23 more
>

Geprüft ob es diesen als Material überhaubt gibt:
stonecutter.thumb.png.5643c4e3db3424c6261e89e5f51a44fb.png

Hier der Jetzige Code:

package me.svdermant.info;

import java.util.ArrayList;
import java.util.concurrent.ThreadLocalRandom;

import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;


public class Command_RandomItem implements CommandExecutor {

	@Override
	public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
		// TODO Auto-generated method stub
		if(sender instanceof Player) {
			Player p = (Player) sender;
			if (args.length == 0) {
				String[] Mats = {
						"IRON_SHOVEL",
						"IRON_PICKAXE",
						"IRON_AXE",
						"FLINT_AND_STEEL",
						"BOW",
						"WOODEN_SHOVEL",
						"WOODEN_PICKAXE",
						"WOODEN_AXE",
						"STONE_SHOVEL",
						"STONE_PICKAXE",
						"STONE_AXE",
						"DIAMOND_SHOVEL",
						"DIAMOND_PICKAXE",
						"DIAMOND_AXE",
						"GOLDEN_SHOVEL",
						"GOLDEN_PICKAXE",
						"GOLDEN_AXE",
						"STONE_HOE",
						"IRON_HOE",
						"DIAMOND_HOE",
						"LEGACY_WOOD_HOE",
						"COMPASS",
						"FISHING_ROD",
						"CLOCK",
						"FILLED_MAP",
						"SHEARS",
						"MAP",
						"CARROT_ON_A_STICK",
						"LEAD",
						"TOTEM_OF_UNDYING",
						"SHULKER_SHELL",
						"IRON_NUGGET",
						"GRINDSTONE",
						"STONECUTTER",
						"BELL",
						"LANTERN",
						"NETHERITE_SHOVEL",
						"NETHERITE_PICKAXE",
						"NETHERITE_AXE",
						"NETHERITE_HOE",
						"WARPED_FUNGUS_ON_A_STICK",
						"SOUL_LANTERN",
						"SOUL_CAMPFIRE",
						"SPYGLASS"
				};
				int min = 0;
				int max = Mats.length - 1;
				//Random ran = new Random();
				//int id = (int)(Math.random() * ((max - min) + 1)) + min;
				int id = ThreadLocalRandom.current().nextInt(min, max);
				System.out.println((int)(Math.random() * ((max - min) + 1)) + min);
				System.out.println("the max contents of the materials array are: " + max);
				p.sendMessage("You are about to be given a tool: " + Mats[id]);
				String itemid = Mats[id];
				p.sendMessage("the ItemID is: " + itemid);
				ItemStack itemdb = new ItemStack(Material.valueOf(itemid));
				ItemMeta meta = itemdb.getItemMeta();
				
				String[] text = {
						"The New Item",
						"The Other Item",
						"The Nice Item",
						"The Bad Item."
				};
				int textmin = 0;
				int textmax = text.length - 1;
				int textid = ThreadLocalRandom.current().nextInt(textmin, textmax);
				String loretext = text[textid];
				ArrayList<String> lore = new ArrayList<>();
				lore.add(loretext);
				meta.setLore(lore);
				meta.addEnchant(Enchantment.DURABILITY, 2, true);
				itemdb.setItemMeta(meta);
				p.getInventory().setItem(4, itemdb);
				p.sendMessage("You get: " + itemid);
				} else {
					p.sendMessage("wrong syntax!");
				}
			
		}
		return true;
	}

}

Wieso will er also Items geben die gar nicht als Material existieren ? wie kommt er also darauf?
Wie gesagt auch andere Items.

Link to comment
Share on other sites

Hallo bei meinem erstellten Command:

import java.util.ArrayList;
import java.util.concurrent.ThreadLocalRandom;
import org.bukkit.Material;
import org.bukkit.attribute.Attribute;
import org.bukkit.attribute.AttributeModifier;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

public class Command_RandomItem implements CommandExecutor {

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        // TODO Auto-generated method stub
        if(sender instanceof Player) {
            Player p = (Player) sender;
            if (args.length == 0) {
                String[] Mats = {
                        "IRON_SHOVEL",
                        "IRON_PICKAXE",
                        "IRON_AXE",
                        "FLINT_AND_STEEL",
                        "BOW",
                        "WOODEN_SHOVEL",
                        "WOODEN_PICKAXE",
                        "WOODEN_AXE",
                        "STONE_SHOVEL",
                        "STONE_PICKAXE",
                        "STONE_AXE",
                        "DIAMOND_SHOVEL",
                        "DIAMOND_PICKAXE",
                        "DIAMOND_AXE",
                        "GOLDEN_SHOVEL",
                        "GOLDEN_PICKAXE",
                        "GOLDEN_AXE",
                        "STONE_HOE",
                        "IRON_HOE",
                        "DIAMOND_HOE",
                        "LEGACY_WOOD_HOE",
                        "COMPASS",
                        "FISHING_ROD",
                        "CLOCK",
                        "FILLED_MAP",
                        "SHEARS",
                        "MAP",
                        "CARROT_ON_A_STICK",
                        "LEAD",
                        "TOTEM_OF_UNDYING",
                        "SHULKER_SHELL",
                        "IRON_NUGGET",
                        "GRINDSTONE",
                        "STONECUTTER",
                        "BELL",
                        "LANTERN",
                        "NETHERITE_SHOVEL",
                        "NETHERITE_PICKAXE",
                        "NETHERITE_AXE",
                        "NETHERITE_HOE",
                        "WARPED_FUNGUS_ON_A_STICK",
                        "SOUL_LANTERN",
                        "SOUL_CAMPFIRE",
                        "SPYGLASS"
                };
                int min = 0;
                int max = Mats.length - 1;
                int id = ThreadLocalRandom.current().nextInt(min, max);
                System.out.println((int)(Math.random() * ((max - min) + 1)) + min);
                System.out.println("the max contents of the materials array are: " + max);
                p.sendMessage("You are about to be given a tool: " + Mats[id]);
                String itemid = Mats[id];
                p.sendMessage("the ItemID is: " + itemid);
                ItemStack itemdb = new ItemStack(Material.valueOf(itemid));
                ItemMeta meta = itemdb.getItemMeta();

                String[] text = {
                        "The New Item",
                        "The Other Item",
                        "The Nice Item",
                        "The Bad Item."
                };
                int textmin = 0;
                int textmax = text.length - 1;
                int textid = ThreadLocalRandom.current().nextInt(textmin, textmax);
                String loretext = text[textid];
                ArrayList<String> lore = new ArrayList<>();
                lore.add(loretext);
                meta.setLore(lore);
                meta.addEnchant(Enchantment.DURABILITY, 2, true);         
                meta.addAttributeModifier(Attribute.GENERIC_ATTACK_DAMAGE, new AttributeModifier(Attribute.GENERIC_ATTACK_DAMAGE.toString(), 10, AttributeModifier.Operation.ADD_NUMBER));
                itemdb.setItemMeta(meta);
                p.getInventory().addItem(itemdb);
                p.sendMessage("You get: " + itemid);     

                } else {
                    p.sendMessage("wrong syntax!");
                }
        }
        return true;
    }
}

 

Habe ich ein Problem der Angriffschaden den ich modifiziere stimmt sofern ich das seh.
Es ist nur so das er Mehrfach hinzugefügt wird bei allen Tools die ich im Array festgelegt habe.
Habe dazu mal ein Gif gemacht für das Result:

ezgif.com-video-to-gif.gif

Das rechte item wurde mittels /give command erstellt.
Die Anderen beiden durch /randomitems.
Ich habe also versucht den Standardschaden der Schaufel von 3.5 auf 10 zu erhöhen.
Was nicht ganz funktionierte.

Das item wird Zwar generiert und teilt auch den Angezeigten Schaden aus.
Aber die Lore etc hat zuviele infos:

Es dürfte eigentlich nur dastehen:
When in Main hand:
+10 Attack Damage

Link to comment
Share on other sites

vor 19 Stunden schrieb Squall:

Caused by: java.lang.IllegalArgumentException: No enum constant org.bukkit.Material.LEGACY_STONECUTTER

Manche Items haben sich über die verschiedenen Minecraft Versionen geändert - lege da in der plugins.yml deine Version fest

api-version: '1.19'

 

Link to comment
Share on other sites

 

vor 8 Stunden schrieb Bedrock:

Manche Items haben sich über die verschiedenen Minecraft Versionen geändert - lege da in der plugins.yml deine Version fest

api-version: '1.19'

 

Ja das ist auch möglich aber die ursache war das ich den Equipmentslot angeben musste ..
Aber diese Information erhielt ich natürlich aus einem Aktiveren Forum.

Nichts gegen dich @Bedrock du hast mir bisher immer geholfen weis das sehr zu schätzen.

Aber viele andere hier wo ich genau weis das sie selbst Plugins entwickeln wollen halt keinen Anfänger unterstützen.

 

Edited by Squall
Link to comment
Share on other sites

  • 2 weeks later...

Nein. Ich habe die ganze Pluginentwicklung aufgegeben. Habe mir über Tage Zahlreiche videos und Documentationen Durchgelesen und habe für mich selbst festgestellt. Das für diese Sprache gewisse Grundvorraussetzungen gefordert sind die Ich leider nicht besitze.

Ich befasse mich lieber mit der Sprache oder Scriptsprache die ich vor Jahren angelernt habe und die für mich auch besser zu verstehen ist und wo ich auch besser die Zusammenhänge erkennen kann.
 

Link to comment
Share on other sites

vor 16 Stunden schrieb Squall:

Eigentlich nicht. Aber ja für dich ist es schade :) für mich nicht da ich bei meiner alten Scriptsprache bin die ich meistere :)

für mich ist es nicht schade , ich hätte wirklich nur gerne mal gewusst was dieses Plugin machen soll

 

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