Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
package me.xDark.hybridanticheat.listener;
import java.util.HashMap;
import java.util.map.Entry;
import org.bukkit.Location;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.block.Biome;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.EventHandler;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
public class BiomeListener implements Listener {
private static final HashMap<Player, BiomeData> data = new HashMap<>();
@EventHandler
public void onJoin(PlayerJoinEvent e) {
initPlayer(e.getPlayer());
}
@EventHandler
public void onQuit(PlayerQuitEvent e) {
data.remove(e.getPlayer());
}
@EventHandler
public void onChange(BiomeChangeEvent e) {
// TODO
}
private static void initPlayer(Player p) {
World world = p.getWorld();
Location loc = p.getLocation();
Biome biome = world.getBiome(loc.getBlockX(), loc.getBlockZ());
data.put(e.getPlayer(), new BiomeData(biome, biome));
}
// scheduleSyncRepeatingTask, не проверял, может и async работать будет
public static void init() {
Bukkit.getOnlinePlayers().forEach(p -> {
initPlayer(p);
});
// TODO: registerEvents
Bukkit.getScheduler().scheduleAsyncRepeatingTask(YourPlugin.instance(), () -> {
if (data.isEmpty())
return;
for (Entry<Player, BiomeData> entry : data.entrySet()) {
Player p = entry.getKey();
BiomeData data = entry.getValue();
Location loc = p.getLocation();
Biome biome = world.getBiome(loc.getBlockX(), loc.getBlockZ());
data.update(biome);
if (data.getPrevious() != data.getNow())
Bukkit.getPluginManager().callEvent(new BiomeChangeEvent(p, data.getPrevius(), data.getNow()));
}
}, 1L, 20 * 5L);
}
public static void clear() {
data.clear();
}
private static class BiomeData {
private Biome previus, now;
public BiomeData(Biome previous, Biome now) {
this.previus = previous;
this.now = now;
}
public Biome getPrevious() {
return previus;
}
public Biome getNow() {
return now;
}
public void update(Biome biome) {
previous = now;
now = biome;
}
}
public static class BiomeChangeEvent extends Event {
private static final HandlerList handlerList = new HandlerList();
private final Biome from, to;
private final Player player;
public BiomeChangeEvent(Player player, Biome from, Biome to) {
this.player = player;
this.from = from;
this.to = to;
}
public Player getPlayer() {
return player;
}
public Biome getFrom() {
return from;
}
public Biome getTo() {
return to;
}
@Override
public HandlerList getHandlers() {
return handlerList;
}
public static HandlerList getHandlerList() {
return handlerList;
}
}
}
Хм, проверю...Писал от руки, возможны ошибки, надеюсь принцип понял
Java:package me.xDark.hybridanticheat.listener; import java.util.HashMap; import java.util.map.Entry; import org.bukkit.Location; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.block.Biome; import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.bukkit.event.EventHandler; import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; public class BiomeListener implements Listener { private static final HashMap<Player, BiomeData> data = new HashMap<>(); @EventHandler public void onJoin(PlayerJoinEvent e) { initPlayer(e.getPlayer()); } @EventHandler public void onQuit(PlayerQuitEvent e) { data.remove(e.getPlayer()); } @EventHandler public void onChange(BiomeChangeEvent e) { // TODO } private static void initPlayer(Player p) { World world = p.getWorld(); Location loc = p.getLocation(); Biome biome = world.getBiome(loc.getBlockX(), loc.getBlockZ()); data.put(e.getPlayer(), new BiomeData(biome, biome)); } // scheduleSyncRepeatingTask, не проверял, может и async работать будет public static void init() { Bukkit.getOnlinePlayers().forEach(p -> { initPlayer(p); }) Bukkit.getScheduler().scheduleAsyncRepeatingTask(YourPlugin.instance(), () -> { if (data.isEmpty()) return; for (Entry<Player, BiomeData> entry : data.entrySet()) { Player p = entry.getKey(); BiomeData data = entry.getValue(); Location loc = p.getLocation(); Biome biome = world.getBiome(loc.getBlockX(), loc.getBlockZ()); data.update(biome); if (data.getPrevius() != data.getNow()) Bukkit.getPluginManager().callEvent(new BiomeChangeEvent(p, data.getPrevius(), data.getNow())); } }, 1L, 20 * 5L); } public static void clear() { data.clear(); } private static class BiomeData { private Biome previus, now; public BiomeData(Biome previous, Biome now) { this.previus = previous; this.now = now; } public Biome getPrevius() { return previus; } public Biome getNow() { return now; } public void update(Biome biome) { previous = now; now = biome; } } public static class BiomeChangeEvent extends Event { private static final HandlerList handlerList = new HandlerList(); private final Biome from, to; private final Player player; public BiomeChangeEvent(Player player, Biome from, Biome to) { this.player = player; this.from = from; this.to = to; } public Player getPlayer() { return player; } public Biome getFrom() { return from; } public Biome getTo() { return to; } @Override public HandlerList getHandlers() { return handlerList; } public static HandlerList getHandlerList() { return handlerList; } } }
Спасибо искал надеюсь робит)Писал от руки, возможны ошибки, надеюсь принцип понял
Java:package me.xDark.hybridanticheat.listener; import java.util.HashMap; import java.util.map.Entry; import org.bukkit.Location; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.block.Biome; import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.bukkit.event.EventHandler; import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; public class BiomeListener implements Listener { private static final HashMap<Player, BiomeData> data = new HashMap<>(); @EventHandler public void onJoin(PlayerJoinEvent e) { initPlayer(e.getPlayer()); } @EventHandler public void onQuit(PlayerQuitEvent e) { data.remove(e.getPlayer()); } @EventHandler public void onChange(BiomeChangeEvent e) { // TODO } private static void initPlayer(Player p) { World world = p.getWorld(); Location loc = p.getLocation(); Biome biome = world.getBiome(loc.getBlockX(), loc.getBlockZ()); data.put(e.getPlayer(), new BiomeData(biome, biome)); } // scheduleSyncRepeatingTask, не проверял, может и async работать будет public static void init() { Bukkit.getOnlinePlayers().forEach(p -> { initPlayer(p); }); // TODO: registerEvents Bukkit.getScheduler().scheduleAsyncRepeatingTask(YourPlugin.instance(), () -> { if (data.isEmpty()) return; for (Entry<Player, BiomeData> entry : data.entrySet()) { Player p = entry.getKey(); BiomeData data = entry.getValue(); Location loc = p.getLocation(); Biome biome = world.getBiome(loc.getBlockX(), loc.getBlockZ()); data.update(biome); if (data.getPrevious() != data.getNow()) Bukkit.getPluginManager().callEvent(new BiomeChangeEvent(p, data.getPrevius(), data.getNow())); } }, 1L, 20 * 5L); } public static void clear() { data.clear(); } private static class BiomeData { private Biome previus, now; public BiomeData(Biome previous, Biome now) { this.previus = previous; this.now = now; } public Biome getPrevious() { return previus; } public Biome getNow() { return now; } public void update(Biome biome) { previous = now; now = biome; } } public static class BiomeChangeEvent extends Event { private static final HandlerList handlerList = new HandlerList(); private final Biome from, to; private final Player player; public BiomeChangeEvent(Player player, Biome from, Biome to) { this.player = player; this.from = from; this.to = to; } public Player getPlayer() { return player; } public Biome getFrom() { return from; } public Biome getTo() { return to; } @Override public HandlerList getHandlers() { return handlerList; } public static HandlerList getHandlerList() { return handlerList; } } }