Jump to content

Falling Blocks ? Spigot 1.19 API ?


Squall
 Share

Recommended Posts

Guten morgen..
Ich hoffe ihr könnt mir helfen wie ich diese funktion aufrufen kann.
Habe wirklich alles versucht..

Ich möchte halt dass man /Spawnblock block eingibt das ein fallender block dieses types kommt..
Habe jetzt auchmal einiges umgeschrieben dennoch bekomm ich es nicht hin.

Main Class:

package me.svdermant.info;

import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;
import me.svdermant.commands.Command_RandomItem;
import me.svdermant.commands.Command_backtp;
import me.svdermant.commands.Command_countdown;
import me.svdermant.commands.Command_daten;
import me.svdermant.commands.Command_inforeload;
import me.svdermant.commands.Command_inv;
import me.svdermant.commands.Command_invclear;
import me.svdermant.commands.Command_pheal;
import me.svdermant.commands.SpawnBlockCommand;
import me.svdermant.commands.commandinfo;
import me.svdermant.commands.monsterspawn;
import me.svdermant.events.ArrowExplode;

public class info extends JavaPlugin implements Listener {
	
	private static info instance;
	
	public static info getInstance() {
	  return info.instance;
	}
	
	@Override
	public void onEnable() {
		loadConfig();
		info.instance = this;
		registerEvents();
		registerCommands();
		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());
		this.getCommand("countdown").setExecutor(new Command_countdown());
		this.getCommand("pheal").setExecutor(new Command_pheal());
		this.getCommand("inforeload").setExecutor(new Command_inforeload());
		this.getCommand("randomitem").setExecutor(new Command_RandomItem());
		this.getCommand("monsterspawn").setExecutor(new monsterspawn());
	}
	
	@Override
	public void onDisable() {
		System.out.println("[Info] Wurde deaktiviert!");
	}
	
	public void loadConfig() {
		getConfig().options().copyDefaults(true);
		saveConfig();
	}
	
	public void registerEvents( ) {
		new TheEvents(this);
		new ArrowExplode(this);
	}
	
	public void registerCommands() {
		SpawnBlockCommand cSpawnBlockCommand = new SpawnBlockCommand(this);
		getCommand("spawnblock").setExecutor(cSpawnBlockCommand);
		
	}
	
}	


Umgeschriebener Command:

SpawnBlockCommand2.PNG
Link to comment
Share on other sites

Die Fehlermeldung sagt dir doch, dass deine übergebenen Argumente nicht zu den Argumenten passt die von der Funktion erwartet wird. Wenn du genauer hinguckst erwartet die Funktion 2 Argumente (Location, Material). Du übergibst ein Argument zu viel. 

 

image.thumb.png.5592a7262fffd61f279da87329eeeae1.png

 

Link to comment
Share on other sites

vor 2 Stunden schrieb Joey:

Die Fehlermeldung sagt dir doch, dass deine übergebenen Argumente nicht zu den Argumenten passt die von der Funktion erwartet wird. Wenn du genauer hinguckst erwartet die Funktion 2 Argumente (Location, Material). Du übergibst ein Argument zu viel. 

 

image.thumb.png.5592a7262fffd61f279da87329eeeae1.png

 

Ich will ja deine Info nicht infrage stellen du versuchst ja schlieslich zu helfen deswegen erstmal danke.. Ja ich weis das Byte data depricate ist. Nehm ich aber den 3. wert weg. will er dennoch irgendwie den 3. wert haben.
Er schlägt mir ja ein Quickfix vor wo er dennoch irgendwie das byte möchte siehe bild.
Also das entfernen von Material.valueOf(Blockname).getData() hat in demsinne nix gebracht.
1969123553_FallingBlocks2.thumb.PNG.28bdf396cffb4978128f4a6699ee90cb.PNG

Ebefalls funktioniert nicht die Manuelle angabe:
126859838_FallingBlocks3.thumb.PNG.91e84a6f0ac222c8af9308d786a2553e.PNG

Er möchte also ein 3. wert nähmlich das byte glaub ich..
Dies erhalte ich ja durch Material.valueOf(Blockname).getData()

Sollte ja richtig sein.

Link to comment
Share on other sites

vor 53 Minuten schrieb Joey:

Kann es leider gerade nicht testen, aber probiere es mal mit 

 

p.getWorld().spawnFallingBlock(p.getLocation(), Material.STONE.createBlockData());

 

Yahhh Wunderbar  also wieder etwas neues ... und ich dachte mittels Material.STONE.getData(), kommt man halt an die fehlenden Bytes.

 

Link to comment
Share on other sites

Mir ist was aufgefallen bei meinem Code oder generell ist das vllt so...

package me.svdermant.commands;

import org.apache.commons.lang3.EnumUtils;
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.scheduler.BukkitRunnable;

import me.svdermant.info.info;

public class SpawnBlockCommand implements CommandExecutor {

	private info plugin;

	public SpawnBlockCommand(info info) {
		this.plugin = info;
	}

	@Override
	public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
		if(sender instanceof Player) {
			Player p = (Player) sender;
			if (args.length == 1) {
				String Blockname = args[0];
				if(EnumUtils.isValidEnum(Material.class, Blockname) == true && Material.valueOf(Blockname).isBlock()) { //Hiermit Prüfe ich nun ob das Angegebene Argument was in einen String Blockname Gespeichert wird Als Material existiert aber auch gleichzeite ob dies ein block ist..
					p.sendMessage("Watch out a Falling Block is falling down move!");
					new BukkitRunnable() {
						public void run() {
							p.getWorld().spawnFallingBlock(p.getLocation().add(0, 10, 0), Material.valueOf(Blockname).createBlockData());
						}
					}.runTaskLater(plugin, 20L * 3L);
				} else {
					p.sendMessage("Invalid Blockname");
				}
			} else {
				p.sendMessage("Use: /SpawnBlock <blockname> to spawn a falling Block");
			}
		}
		return true;
	}
}
if(EnumUtils.isValidEnum(Material.class, Blockname) == true && Material.valueOf(Blockname).isBlock()) { 
//Hiermit Prüfe ich nun ob das Angegebene Argument was in einen String Blockname Gespeichert wird Als Material existiert 
//aber auch gleichzeite ob dies ein block ist..

Folgender test Ingame gebe ich /spawnBlock DIAMOND ein wird mir wiedergegeben Invalid Blockname soweit stimmt das ja denn Diamond ist ein item...
Gebe ich aber /Spawnblock OAK_SAPLING an so bekomme ich diesen.. Ist Zählt der OAK_SAPLING nicht als Item bzw MATERIAL sondern als block muss ja so sein denn man kann ihn ja platzieren...
Was man bei einem Diamond nicht kann.. Mich hat es nur eben verwundert :)

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