Alter resetting of FastConsume timings.

* Reset to time, if time ran backwards.
* Reset to time instead of 0, on eating.

TODO: Switch to Monotonic.
This commit is contained in:
asofold 2014-06-13 00:18:31 +02:00
parent 56bab0a3ae
commit 587236dfdc
3 changed files with 18 additions and 10 deletions

View File

@ -5,7 +5,6 @@ import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.Event.Result;
import org.bukkit.event.player.PlayerItemConsumeEvent;
import org.bukkit.inventory.ItemStack;
@ -55,24 +54,26 @@ public class FastConsume extends Check implements Listener{
return;
}
final InventoryData data = InventoryData.getData(player);
if (check(player, event.getItem(), data)){
final long time = System.currentTimeMillis();
if (check(player, event.getItem(), time, data)){
event.setCancelled(true);
DataManager.getPlayerData(player.getName(), true).task.updateInventory();
}
data.instantEatInteract = 0;
data.instantEatInteract = time;
data.instantEatFood = null;
}
private boolean check(final Player player, final ItemStack stack, final InventoryData data){
private boolean check(final Player player, final ItemStack stack, final long time, final InventoryData data){
// Uses the instant-eat data for convenience.
// Consistency checks...
if (stack == null){ // || stack.getType() != data.instantEatFood){
// TODO: Strict version should prevent other material (?).
return false;
}
final long time = System.currentTimeMillis();
final long ref = Math.max(data.instantEatInteract, data.lastClickTime);
final long ref = data.instantEatInteract == 0 ? 0 : Math.max(data.instantEatInteract, data.lastClickTime);
if (time < ref){
// Time ran backwards.
data.instantEatInteract = data.lastClickTime = time;
return false;
}
// Check exceptions.

View File

@ -47,7 +47,7 @@ public class InstantBow extends Check {
if (cc.instantBowStrict) {
// The interact time is invalid, if set to 0.
valid = data.instantBowInteract != 0;
pullDuration = valid ? (now - data.instantBowInteract) : 0L;
pullDuration = valid ? (now - data.instantBowInteract) : 0L;
} else {
valid = true;
pullDuration = now - data.instantBowShoot;

View File

@ -228,6 +228,7 @@ public class InventoryListener extends CheckListener implements JoinLeaveListen
if (event.hasItem()){
final ItemStack item = event.getItem();
final Material type = item.getType();
// TODO: Get Magic values (800) from the config.
if (type == Material.BOW){
final long now = System.currentTimeMillis();
// It was a bow, the player starts to pull the string, remember this time.
@ -242,9 +243,13 @@ public class InventoryListener extends CheckListener implements JoinLeaveListen
} else resetAll = true;
// Illegal enchantments hotfix check.
if (Items.checkIllegalEnchantments(player, item)) event.setCancelled(true);
if (Items.checkIllegalEnchantments(player, item)) {
event.setCancelled(true);
}
}
else {
resetAll = true;
}
else resetAll = true;
if (resetAll){
// Nothing that we are interested in, reset data.
@ -257,7 +262,9 @@ public class InventoryListener extends CheckListener implements JoinLeaveListen
@EventHandler(ignoreCancelled = false, priority = EventPriority.LOWEST)
public final void onPlayerInteractEntity(final PlayerInteractEntityEvent event) {
final Player player = event.getPlayer();
if (player.getGameMode() == GameMode.CREATIVE) return;
if (player.getGameMode() == GameMode.CREATIVE) {
return;
}
if (player.isDead() && BridgeHealth.getHealth(player) <= 0.0) {
// No zombies.
event.setCancelled(true);