A feature-rich Minecraft plugin which enhances gaming experience
git clone git://soophie.de/poppy
blob: eaaccac50706f8cb2e46a6d51437d2489ac92b72 (2689 bytes)[doc][blame][raw]
1
package de.typable.minecrafthub.event;3
import org.bukkit.Location;4
import org.bukkit.Material;5
import org.bukkit.block.Block;6
import org.bukkit.block.data.Bisected.Half;7
import org.bukkit.block.data.type.Stairs;8
import org.bukkit.entity.AbstractArrow.PickupStatus;9
import org.bukkit.entity.Arrow;10
import org.bukkit.entity.Entity;11
import org.bukkit.entity.Player;12
import org.bukkit.event.EventHandler;13
import org.bukkit.event.Listener;14
import org.bukkit.event.block.Action;15
import org.bukkit.event.player.PlayerInteractEvent;16
import org.bukkit.util.Vector;17
import org.spigotmc.event.entity.EntityDismountEvent;20
public class ChairListener implements Listener21
{22
private static final Material[] CHAIR_TYPE = new Material[] { Material.OAK_STAIRS, Material.SPRUCE_STAIRS, Material.BIRCH_STAIRS, Material.JUNGLE_STAIRS, Material.ACACIA_STAIRS, Material.DARK_OAK_STAIRS, Material.ACACIA_STAIRS, Material.CRIMSON_STAIRS, Material.WARPED_STAIRS };24
@SuppressWarnings("deprecation")25
@EventHandler26
public void onPlayerInteract(PlayerInteractEvent event)27
{28
if(event.getAction() == Action.RIGHT_CLICK_BLOCK)29
{30
if(event.getClickedBlock() != null && !event.getPlayer().isSneaking())31
{32
Block block = event.getClickedBlock();34
if(isChair(block.getType()))35
{36
Block upperBlock = block.getWorld().getBlockAt(block.getLocation().add(0, 1, 0));38
if(upperBlock != null && upperBlock.getType() == Material.AIR)39
{40
Stairs stairs = (Stairs) block.getState().getBlockData();42
if(isCompatible(stairs))43
{44
Location location = block.getLocation().add(0.5, 0, 0.5);45
Arrow arrow = (Arrow) block.getWorld()46
.spawnArrow(location, new Vector(), 0F, 0F);47
arrow.setGravity(false);48
arrow.setInvulnerable(true);49
arrow.setPickupStatus(PickupStatus.DISALLOWED);50
arrow.setPassenger((Entity) event.getPlayer());52
event.setCancelled(true);53
}54
}55
}56
}57
}58
}60
@EventHandler61
public void onEntityDismount(EntityDismountEvent event)62
{63
if(event.getEntity() instanceof Player)64
{65
Entity entity = event.getDismounted();67
if(entity != null && entity instanceof Arrow)68
{69
entity.remove();70
}71
}72
}74
private boolean isChair(Material material)75
{76
for(Material chair : CHAIR_TYPE)77
{78
if(material == chair)79
{80
return true;81
}82
}84
return false;85
}87
private boolean isCompatible(Stairs stairs)88
{89
if(stairs.getHalf() != Half.BOTTOM)90
{91
return false;92
}94
if(stairs.isWaterlogged())95
{96
return false;97
}99
if(stairs.getShape() == Stairs.Shape.INNER_RIGHT || stairs100
.getShape() == Stairs.Shape.INNER_LEFT)101
{102
return false;103
}105
return true;106
}107
}