Hei Community,
ich habe gerade den mysteriösesten Fehler , den ich je hatte. Durch einen Vektor sollte der spieler , wenn er eine bestimmte Koordinate erreicht, nach oben geschleudert werden.
MoveEvent , indem der Spieler nach oben geschleudert werden sollte :
Code:
package Events;
import java.util.HashMap;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.util.Vector;
public classMove EventimplementsListener{
/*
* The first HashMap is for falldamage.
* The second one is for the admin message.
*/
public static HashMap<Player,Boolean> HMPB =newHashMap<Player,Boolean>();
public static HashMap<Player,Boolean> hmpb1 =newHashMap<Player,Boolean>();
@EventHandler
public void onMoveSave(PlayerMoveEvente){
FileConfiguration PosFile = Files.Pos.getPos();
Player p =e.getPlayer();
if(PosFile.getConfigurationSection("jumpUp")!=null){
for(String strg : PosFile.getConfigurationSection("jumpUp").getKeys(false)){
World world = Bukkit.getWorld(PosFile.getString("jumpUp." + strg + ".World"));
Location loc = new Location(world, PosFile.getInt("jumpUp." + strg + ".X"), PosFile.getInt("jumpUp." + strg + ".Y"), PosFile.getInt("jumpUp." + strg + ".Z"));
if(p.getLocation().getBlock().getLocation().distance(loc.getBlock().getLocation())<=0.5){
if(PosFile.getBoolean("jumpUp."+ strg +".Vector.Direction.Boolean")==Boolean.FALSE){
Vector vec = new Vector(PosFile.getInt("jumpUp." + strg + ".Vector.X"), PosFile.getInt("jumpUp." + strg + ".Vector.Y"), PosFile.getInt("jumpUp." + strg + ".Vector.Z"));
p.setVelocity(vec);
HMPB.put(p, true);
sendAdminMessage(p, strg);
}
}
else{
p.setVelocity(p.getLocation().getDirection().multiply(PosFile.getInt("jumpUp."+ strg +".Vector.Direction.Multiply")));
HMPB.put(p, true);
sendAdminMessage(p, strg);
}
}
}
}
private void sendAdminMessage(Player p,String strg){
if(p.hasPermission("Nr.1.Admin")){
if(hmpb1.containsKey(p)){
if(Files.Config.getCon().getBoolean("jumpUp.MessagesForAdmin")==Boolean.TRUE){
if(hmpb1.get(p).booleanValue()==true){
p.sendMessage(ChatColor.AQUA + "Your now jumping over " + ChatColor.RED + strg);
hmpb1.put(p, false);
}
}
}
else{
hmpb1.put(p, false);
p.sendMessage(ChatColor.AQUA + "Your now jumping over " + ChatColor.RED + strg);
}
}
}
}
Der Command , der die position absichert.
Code:
package Commands;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
public class save implements CommandExecutor{
@Override
public boolean onCommand(CommandSendersender,Commandcmd,Stringlabel,String[]args){
FileConfiguration PosFile = Files.Pos.getPos();
if(sender instancef Player){
Player p =(Player)sender;
if(args.length == 2){
if(args[0].equalsIgnoreCase("jumpUp")){
if(p.hasPermission("Nr.1.Admin")){
//Location
PosFile.set("jumpUp." + args[1] + ".X", p.getLocation().getBlockX());
PosFile.set("jumpUp." + args[1] + ".Y", p.getLocation().getBlockY());
PosFile.set("jumpUp." + args[1] + ".Z", p.getLocation().getBlockZ());
PosFile.set("jumpUp." + args[1] + ".World", p.getLocation().getWorld().getName());
//First vector if boolean false
PosFile.set("jumpUp."+args[1]+".Vector.X",(int)0);
PosFile.set("jumpUp."+args[1]+".Vector.Y",(int)0);
PosFile.set("jumpUp."+args[1]+".Vector.Z",(int)0);
//Second vector if boolean true
PosFile.set("jumpUp."+args[1]+".Vector.Direction.Boolean",(Boolean)true);
PosFile.set("jumpUp."+args[1]+".Vector.Direction.Multiply",(int)1.5);
Files.Pos.savePos();
p.sendMessage(ChatColor.AQUA + "The location for jumpUp, called " + ChatColor.BLUE + args[1] + ChatColor.AQUA + ", has been seted.");
}
}
}
else{
p.sendMessage(ChatColor.BLUE + "Arguments !");
}
}
return false;
}
}
Sobald ich eine Location in den File eintrage , beginnt der Spieler die ganze Zeit mit dem PosFile.getInt("jumpUp."+ strg +".Vector.Direction.Multiply") herum zu fliegen.
Ich habe bei der Fehlersuche begonnen , indem ich bei jedem abschnitt eine "soyso" hingeschrieben hab , doch ist die "soyso" nie durchgelaufen. Danach habe ich bei dem Abschnitt "jumpUp."+ strg +".Vector.Direction.Multiply" die Zahl rausgenommen und reloaded, eigentlich müsste doch dann die Fehlermeldung NullPointerExeption kommen , doch dann nimmt er die 0 als multiply her.
Es hat zuerst eigentlich alles funktioniert , bis ich den private void Teil geschrieben hab, doch nachdem ich den Teil wieder ausgeklammert hab , gab es immer noch den gleichen Fehler.
Vielleicht habe ich irgendwas übersehen oder habe einfach nur einen dummen Fehler gemacht
Mit freundlichen Grüßen
payno4
Zuletzt bearbeitet: