update 5.04

This commit is contained in:
坏黑
2019-08-18 15:07:39 +08:00
parent eab2835c52
commit a643453c88
12 changed files with 133 additions and 71 deletions

View File

@@ -1,5 +1,6 @@
package io.izzel.taboolib.common.event;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
@@ -11,8 +12,7 @@ public class PlayerJumpEvent extends Event implements Cancellable {
private boolean isCancelled;
private Player player;
public PlayerJumpEvent(boolean b, Player player) {
this.isCancelled = false;
public PlayerJumpEvent(Player player) {
this.player = player;
}
@@ -24,6 +24,11 @@ public class PlayerJumpEvent extends Event implements Cancellable {
return this.player;
}
public PlayerJumpEvent call() {
Bukkit.getPluginManager().callEvent(this);
return this;
}
@Override
public boolean isCancelled() {
return this.isCancelled;

View File

@@ -1,52 +1,40 @@
package io.izzel.taboolib.common.listener;
import io.izzel.taboolib.module.inject.TListener;
import io.izzel.taboolib.common.event.PlayerJumpEvent;
import org.bukkit.Bukkit;
import io.izzel.taboolib.module.inject.TInject;
import io.izzel.taboolib.module.inject.TListener;
import io.izzel.taboolib.util.lite.cooldown.Cooldown;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import java.util.HashMap;
@TListener
public class ListenerPlayerJump implements Listener {
public HashMap<Player, Long> cooldown = new HashMap<>();
@TInject
private static Cooldown cooldown = new Cooldown("taboolib:jump", 350);
@EventHandler(priority = EventPriority.HIGH)
public void onJump(PlayerMoveEvent event) {
if ((!event.getPlayer().isFlying()) && (event.getPlayer().getGameMode() != GameMode.CREATIVE) && (event.getFrom().getY() + 0.5D != event.getTo().getY()) && (event.getFrom().getY() + 0.419D < event.getTo().getY())) {
Location loc = event.getFrom();
loc.setY(event.getFrom().getY() - 1.0D);
if (loc.getBlock().getType() != Material.AIR) {
if (!this.cooldown.containsKey(event.getPlayer())) {
this.cooldown.put(event.getPlayer(), System.currentTimeMillis() + 350L);
PlayerJumpEvent evt = new PlayerJumpEvent(event.isCancelled(), event.getPlayer());
Bukkit.getPluginManager().callEvent(evt);
if (evt.isCancelled()) {
event.setTo(event.getFrom());
}
} else if (this.cooldown.get(event.getPlayer()) <= System.currentTimeMillis()) {
this.cooldown.put(event.getPlayer(), System.currentTimeMillis() + 350L);
PlayerJumpEvent evt = new PlayerJumpEvent(event.isCancelled(), event.getPlayer());
Bukkit.getPluginManager().callEvent(evt);
if (evt.isCancelled()) {
event.setTo(event.getFrom());
}
}
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onJump(PlayerMoveEvent e) {
// 不是飞行
if (!e.getPlayer().isFlying()
// 生存或冒险模式
&& (e.getPlayer().getGameMode() == GameMode.SURVIVAL || e.getPlayer().getGameMode() == GameMode.ADVENTURE)
// 坐标计算
&& (e.getFrom().getY() + 0.5D != e.getTo().getY())
&& (e.getFrom().getY() + 0.419D < e.getTo().getY())
// 不在冷却
&& !cooldown.isCooldown(e.getPlayer().getName())) {
PlayerJumpEvent event = new PlayerJumpEvent(e.getPlayer()).call();
if (event.isCancelled()) {
// 返回位置
e.setTo(e.getFrom());
// 重置冷却
cooldown.reset(e.getPlayer().getName());
}
}
}
@EventHandler
public void onQuit(PlayerQuitEvent event) {
this.cooldown.remove(event.getPlayer());
}
}