Wie kann ich Commands in meinem Minecraft-Plugin ausführen?

Hi,

ich habe ein Problem:

Ich möchte ein Plugin machen in welchem man ein "Gutschein"(Papier mit besonderen Tags) rechtsclickt und dann Geld bekommt. Das Geld möchte ich über EssentialsX geben mit folgendem Command: /eco give %player% <amount>. Also Amount soll durch den Betrag ersetzt werden als Beispiel 5000. Ich habe alles gecodet nun habe ich aber das Problem das ich ja in meiem Listener den Command triggern muss. Kann mir wer damit helfen? Hier ist schonmal mein Plugin was ich bis jetzt habe als erstes die Listeners-Class:

package moneypaper.moneypaper.handler;

import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerInteractEvent;
import moneypaper.moneypaper.Moneys.funf;
import org.bukkit.inventory.ItemStack;

public class ItemClickListener implements Listener {



    @EventHandler
    public void onInteract(PlayerInteractEvent event) {
        if (event.getItem() == null) return;

        ItemStack itemStack = event.getItem();

        if (itemStack == funf.funf){



        }
    }

}

und hier die ItemStack-Class:

package moneypaper.moneypaper.Moneys;

import org.bukkit.ChatColor;
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.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

import java.lang.reflect.Executable;
import java.util.ArrayList;
import java.util.concurrent.Executors;

public class funf implements CommandExecutor {

    public static ItemStack funf = new ItemStack(Material.PAPER);

    public static ItemStack getFunf() {

        ItemMeta meta = funf.getItemMeta();
        meta.setDisplayName("§l§r§350k");

        ArrayList<String> lore = new ArrayList<>();
        lore.add(ChatColor.DARK_PURPLE + "___________________");
        lore.add(ChatColor.RED + "Right click for 50k");
        lore.add(ChatColor.DARK_PURPLE + "___________________");
        meta.setLore(lore);
        funf.setItemMeta(meta);
        return funf;
    }

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        Player player = (Player) sender;



        if (args.length == 1) {
            if (args[0].equalsIgnoreCase("50k")) {

                Inventory inv = player.getInventory();
                inv.addItem(funf);
            }
        }
   return false;
    }
}

Ich müsste jetzt bei dem leern IF in dem Listener den Command triggern.

Schonmal Danke für eure Hilfe

programmieren, Minecraft, Minecraft Server, Spigot
Spigot Plugin: Variable kann nicht benutzt werden?

Also, ich arbeite weiter an meinem Spigot Plugin (in Java) und möchte nun einen for loop, in welchem eine Variable c deklariert ist, haben, und dieses c in das runTaskLater() übergeben. Dort wird ein final int y = c gesetzt.

for (int c = 0; c <= 100; c++) {
  Bukkit.getScheduler().runTaskLater(this, () -> {

    for (int i = 0; i <= 100; i++){
        for (int j = 0; j <= 100; j++){
            final int x = i;
            final int y = c;
            final int z = j;
            //...
        }
    }     
  },200L);
}

Jedoch bekomme ich folgenden Fehler:

Variable used in lambda expression should be final or effectively final

Dann, nach befolgen der Korrekturvorschläge:

for (int c = 0; c <= 100; c++) {
  int tempC = c;
  Bukkit.getScheduler().runTaskLater(this, () -> {

    for (int i = 0; i <= 100; i++){
        for (int j = 0; j <= 100; j++){
            final int x = i;
            final int y = tempC;
            final int z = j;
            //...
        }
    }     
  },200L);
}
                  

Und es funktioniert.

Warum muss ich c nochmal in einer anderen Variable speichern, bevor ich es weitergeben kann? Die Datentypen, Sichtbarkeiten, etc sind nämlich bei c und tempC die gleichen.

Außerdem, was genau hat die Fehlermeldung mit allem zu tun, weil die Orte an welchen final steht haben sich nicht verändert?

Übrigens, es liegt nicht an schon festgelegten Variablen, da kein anderer Variablenname anstelle von c funktioniert, ohne diesen Fehler zu erzeugen.

Ich hoffe jemand kann mir weiterhelfen!

Java, Programmiersprache, Fehlermeldung, Bukkit, Sichtbarkeit, Spigot
Warum funktioniert der Code nicht?

Hi!

Ich programmiere grade ein Spigot-Plugin. Ich will das das Plugin überprüft on ein block abgebaut wurde und dass es dann einen Block auf die Koordinate 0 0 0 setzt wenn ja. Wenn ich aber den Block auf 0 0 0 abbaue, muss ich erst noch einen anderen abbauen damit der Block auf 0 0 0 neu gesetzt wird. Ich habe schon ein Timeout gesetzt. Hier ist mein Code:

package de.craftcommunity.oneblock;

import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.concurrent.TimeUnit;

import static org.bukkit.Bukkit.broadcastMessage;
import static org.bukkit.Bukkit.getWorld;

public class OneBlock extends JavaPlugin implements Listener {

@Override
public void onEnable() {             Bukkit.getServer().getPluginManager().registerEvents(this, this);
}
  
@EventHandler
public void onBlockBreak(BlockBreakEvent event) throws InterruptedException {
getServer( ).broadcastMessage("BLOCK " + event.getBlock().getType() + " WAS BROKEN!");
TimeUnit.MILLISECONDS.sleep(750);
checkOneBlock();
}

public void checkOneBlock() {
World OneBlockWorld = getServer().getWorld("world");
Location locOneBlock = new Location(OneBlockWorld,0,0,0);
for (int i = 0; i < 3; i++) {
if (locOneBlock.getBlock().getType().isAir()) { locOneBlock.getBlock().setType(Material.OAK_LOG);
}
}
}
} 

Danke im Vorraus!

~BlockiiLP

Java, Minecraft, Minecraft Server, Programmiersprache, Bukkit, Spigot
Minecraft Server willkommensnachricht?

Hallo, ich habe mal eine Frage. Ich habe ein plugin für meinen Minecraft Paper 1.19.3 server gefunden, dass angeblich eine Willkommensnachricht (wenn man auf den Server Joint) anzeigt. Es gibt eine Commands und permissions liste. Findet jemand den Befehl in der liste, womit ich eine Willkommensnachricht anzeigen lassen kann? Vielen Dank!

Commands und Permissions

• Alle Commands - system.*

• /system - Zeigt die Plugin Infos.

• /system reload - system.reload

• /heal - system.heal | system.heal.*

• /heal <Spieler> - system.heal.other | system.heal.*

• /fly - system.fly | system.fly.*

• /fly <Spieler> - system.fly.other | system.fly.*

• /feed - system.feed | system.feed.*

• /feed <Spieler> - system.feed.other | system.feed.*

• /teamspeak | /ts - keine Permissions

• /discord - keine Permissions

• /forum - keine Permissions

• /gamemode | /gm - system.gamemode

• /kick - system.kick

• /tphere - system.tphere

• /broadcast | /bc - system.broadcast

• /day - system.day

• /night - system.night

• /setspawn - system.setspawn

• /spawn - keine Permissions

• /clearchat | /cc - system.clearchat

• /msg - keine Permissions

• /msgtoggle - system.msgtoggle

• /workbench | /wb - system.workbench

• /home - system.home

• /sethome - system.home

• /kopf <Name> | /skull <Name> - system.kopf

• /money - keine Permissions

• /money <Spieler> - system.money.other

• /money set <Spieler> <Geld> - system.money.set | system.money.*

• /money add <Spieler> <Geld> - system.money.add | system.money.*

• /money remove <Spieler> <Geld> - system.money.remove | system.money.*

• /pay <Spieler> <Geld> - keine Permissions

• /ban <Spieler> <Grund> - system.ban

• /unban <Spieler> - system.unban

• /check <Spieler> - system.check

• /setwarp <Name> - system.setwarp

• /warp <Name> - keine Permissions

• /enderchest | /ec - system.enderchest

• /enderchest <Spieler> | /ec <Spieler> system.enderchest.other

• /world - system.world

PC, Server, Minecraft, Minecraft Server, Plug-in, Spigot, Pluginsuche

Meistgelesene Fragen zum Thema Spigot