package net.FENGberd.Nukkit.FNPC.npc; import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.level.*; import cn.nukkit.math.Vector3; import cn.nukkit.utils.TextFormat; import net.FENGberd.Nukkit.FNPC.Main; import net.FENGberd.Nukkit.FNPC.protocol.StrangePacket; import net.FENGberd.Nukkit.FNPC.utils.Utils; import java.util.HashMap; @SuppressWarnings("unused") public class TeleportNPC extends NPC { HashMap<String,Object> teleport=new HashMap<>(); public TeleportNPC(String nid,String nametag,double x,double y,double z,Item handItem) { super(nid,nametag,x,y,z,handItem); } public TeleportNPC(String nid,String nametag,double x,double y,double z) { this(nid,nametag,x,y,z,null); } public TeleportNPC(String nid) { this(nid,"",0,0,0); } @Override public void onTouch(Player player) { if(this.teleport.getOrDefault("ip",null)!=null && this.teleport.getOrDefault("port",null)!=null) { StrangePacket pk=new StrangePacket(); pk.address=Utils.cast(this.teleport.getOrDefault("ip","")); pk.port=Short.parseShort(Utils.cast(this.teleport.getOrDefault("port",0))); player.dataPacket(pk); } else if(this.teleport.getOrDefault("x",null)==null || this.teleport.getOrDefault("y",null)==null || this.teleport.getOrDefault("z",null)==null) { player.sendMessage("[System] "+TextFormat.RED+"该NPC未设置传送目标"); } else if(this.teleport.getOrDefault("level",null)!=null) { Level level=Main.getInstance().getServer().getLevelByName(Utils.cast(this.teleport.get("level"))); if(level==null) { player.sendMessage("[System] "+TextFormat.RED+"目标传送世界不存在"); } else { player.teleport(new Position(Utils.cast(this.teleport.getOrDefault("x",0)),Utils.cast(this.teleport.getOrDefault("y",0)),Utils.cast(this.teleport.getOrDefault("z",0)),level)); player.sendMessage("[System] "+TextFormat.GREEN+"传送成功"); } } else { player.teleport(new Vector3(Utils.cast(this.teleport.getOrDefault("x",0)),Utils.cast(this.teleport.getOrDefault("y",0)),Utils.cast(this.teleport.getOrDefault("z",0)))); player.sendMessage("[System] "+TextFormat.GREEN+"传送成功"); } } @Override public HashMap<String,Object> reload() { HashMap<String,Object> cfg=super.reload(); if(cfg!=null) { this.teleport=Utils.cast(cfg.getOrDefault("teleport",new HashMap<String,Object>())); } return cfg; } public void setTeleport(HashMap<String,Object> data) { this.teleport.clear(); if(data!=null) { this.teleport.putAll(data); } this.save(); } public void setTeleport(Vector3 data) { this.teleport.clear(); if(data!=null) { this.teleport.put("x",data.getX()); this.teleport.put("y",data.getY()); this.teleport.put("z",data.getZ()); if(data instanceof Position) { Position pos=Utils.cast(data); if(pos.getLevel()!=null) { this.teleport.put("level",pos.getLevel().getFolderName()); } } } this.save(); } @Override public void save() { this.save(new HashMap<>()); } @Override public void save(HashMap<String,Object> extra) { extra.put("type","teleport"); extra.put("teleport",this.teleport); super.save(extra); } }