A feature-rich Minecraft plugin which enhances gaming experience
git clone git://soophie.de/poppy
blob: a6ffc225eb59e7b97713c94fd3311fbb4fe69fbf (3331 bytes)[doc][blame][raw]
1
package de.typable.minecrafthub.event;3
import java.util.ArrayList;4
import java.util.List;6
import org.bukkit.Location;7
import org.bukkit.Material;8
import org.bukkit.Sound;9
import org.bukkit.block.Block;10
import org.bukkit.block.BlockState;11
import org.bukkit.block.data.type.Door;12
import org.bukkit.entity.Player;13
import org.bukkit.event.EventHandler;14
import org.bukkit.event.Listener;15
import org.bukkit.event.block.Action;16
import org.bukkit.event.player.PlayerInteractEvent;18
public class DoubleDoorListener implements Listener19
{20
private static final Material[] DOOR_TYPE = new Material[] {21
Material.OAK_DOOR,22
Material.SPRUCE_DOOR,23
Material.BIRCH_DOOR,24
Material.JUNGLE_DOOR,25
Material.ACACIA_DOOR,26
Material.DARK_OAK_DOOR,27
Material.ACACIA_DOOR,28
Material.CRIMSON_DOOR,29
Material.WARPED_DOOR30
};32
@EventHandler33
public void onPlayerInteract(PlayerInteractEvent event)34
{35
Player player = event.getPlayer();37
if(event.getAction() == Action.RIGHT_CLICK_BLOCK)38
{39
if(event.getClickedBlock() != null)40
{41
Block block = event.getClickedBlock();43
if(isDoor(block.getType()))44
{45
List<Block> blockList = getNearbyDoors(block.getLocation());47
if(player.isSneaking())48
{49
return;50
}52
if(blockList.isEmpty())53
{54
return;55
}57
for(Block blockItem : blockList)58
{59
if(block.getType() != blockItem.getType())60
{61
continue;62
}64
BlockState state = block.getState();65
BlockState stateItem = blockItem.getState();67
Door door = (Door) state.getBlockData();68
Door doorItem = (Door) stateItem.getBlockData();70
if(isCompatible(door, doorItem))71
{72
if(door.isOpen() && doorItem.isOpen())73
{74
doorItem.setOpen(false);76
stateItem.setBlockData(doorItem);77
stateItem.update();79
player.playSound(player.getLocation(), Sound.BLOCK_WOODEN_DOOR_CLOSE, 1F, 1F);80
}82
if(!door.isOpen() && !doorItem.isOpen())83
{84
doorItem.setOpen(true);86
stateItem.setBlockData(doorItem);87
stateItem.update();89
player.playSound(player.getLocation(), Sound.BLOCK_WOODEN_DOOR_OPEN, 1F, 1F);90
}91
}92
}93
}94
}95
}96
}98
private boolean isDoor(Material material)99
{100
for(Material door : DOOR_TYPE)101
{102
if(material == door)103
{104
return true;105
}106
}108
return false;109
}111
private boolean isCompatible(Door door, Door doorItem)112
{113
if(door.getFacing() != doorItem.getFacing())114
{115
return false;116
}118
if(door.getHalf() != doorItem.getHalf())119
{120
return false;121
}123
if(door.getHinge() == doorItem.getHinge())124
{125
return false;126
}128
return true;129
}131
private List<Block> getNearbyDoors(Location location)132
{133
List<Block> blockList = new ArrayList<>();135
int blockX = location.getBlockX();136
int blockY = location.getBlockY();137
int blockZ = location.getBlockZ();139
for(int x = blockX - 1; x <= blockX + 1; x++)140
{141
for(int z = blockZ - 1; z <= blockZ + 1; z++)142
{143
if(blockX != x || blockZ != z)144
{145
Block block = location.getWorld().getBlockAt(x, blockY, z);147
if(block != null && isDoor(block.getType()))148
{149
blockList.add(block);150
}151
}152
}153
}155
return blockList;156
}157
}