package com.kasetoatz.fastGhast; import org.bukkit.Bukkit; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeInstance; import org.bukkit.entity.*; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDismountEvent; import org.bukkit.event.entity.EntityMountEvent; import org.bukkit.plugin.java.JavaPlugin; import io.papermc.paper.entity.Leashable; public final class FastGhast extends JavaPlugin implements Listener { private static final double DEFAULT = 0.05; private double SPEED; @Override public void onEnable() { saveDefaultConfig(); SPEED = getConfig().getDouble("speed"); getServer().getPluginManager().registerEvents(this, this); Bukkit.getScheduler().runTaskTimer(this, () -> { getServer().getWorlds().forEach(world -> world.getEntities().forEach(entity -> { if (entity instanceof Leashable leashed && leashed.isLeashed() && leashed.getLeashHolder() instanceof HappyGhast ghast && leashed.getLocation().distance(ghast.getLocation()) > 8) { leashed.teleport(ghast.getLocation()); } })); }, 0, 1); } private void setSpeed(Entity entity, double speed) { if (entity instanceof HappyGhast ghast) { AttributeInstance attr = ghast.getAttribute(Attribute.FLYING_SPEED); if (attr != null) { attr.setBaseValue(speed); } } } @EventHandler public void onEntityMount(EntityMountEvent event) { setSpeed(event.getMount(), SPEED); } @EventHandler public void onEntityDismount(EntityDismountEvent event) { setSpeed(event.getDismounted(), DEFAULT); } }