furniture/src/de/Ste3et_C0st/Furniture/Objects/electric/streetlamp.java

248 lines
8.1 KiB
Java
Raw Normal View History

2015-08-11 22:49:50 +02:00
package de.Ste3et_C0st.Furniture.Objects.electric;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockRedstoneEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.EulerAngle;
import org.bukkit.util.Vector;
2015-11-18 18:04:31 +01:00
import de.Ste3et_C0st.Furniture.Main.main;
import de.Ste3et_C0st.FurnitureLib.Events.FurnitureBlockBreakEvent;
import de.Ste3et_C0st.FurnitureLib.Events.FurnitureBlockClickEvent;
2015-08-11 22:49:50 +02:00
import de.Ste3et_C0st.FurnitureLib.Events.FurnitureBreakEvent;
import de.Ste3et_C0st.FurnitureLib.Events.FurnitureClickEvent;
2015-08-13 19:26:30 +02:00
import de.Ste3et_C0st.FurnitureLib.main.Furniture;
2015-08-11 22:49:50 +02:00
import de.Ste3et_C0st.FurnitureLib.main.FurnitureLib;
import de.Ste3et_C0st.FurnitureLib.main.ObjectID;
import de.Ste3et_C0st.FurnitureLib.main.Type.BodyPart;
2015-09-07 19:55:55 +02:00
import de.Ste3et_C0st.FurnitureLib.main.Type.SQLAction;
import de.Ste3et_C0st.FurnitureLib.main.entity.fArmorStand;
2016-06-21 19:17:24 +02:00
import de.Ste3et_C0st.FurnitureLib.main.entity.fEntity;
2015-08-11 22:49:50 +02:00
2015-08-13 19:26:30 +02:00
public class streetlamp extends Furniture implements Listener{
2015-08-11 22:49:50 +02:00
Location light;
2015-08-31 16:35:09 +02:00
Vector loc2, loc3;
2015-08-11 22:49:50 +02:00
boolean redstone = false;
2015-11-18 18:04:31 +01:00
public streetlamp(ObjectID id){
super(id);
setBlock();
2015-08-17 22:27:16 +02:00
this.loc2 = id.getStartLocation().toVector();
2015-08-31 16:35:09 +02:00
this.loc3 = id.getStartLocation().getBlock().getRelative(BlockFace.DOWN).getLocation().toVector();
this.light = getLutil().getRelativ(getLocation(), getBlockFace(), -1D, 0D);
if(isFinish()){
2015-11-18 18:04:31 +01:00
Bukkit.getPluginManager().registerEvents(this, main.getInstance());
2015-08-11 22:49:50 +02:00
return;
}
2015-08-17 22:27:16 +02:00
spawn(id.getStartLocation());
2015-08-11 22:49:50 +02:00
}
public void spawn(Location location){
List<fArmorStand> asList = new ArrayList<fArmorStand>();
Location center = getLutil().getCenter(location).clone();
2015-08-11 22:49:50 +02:00
center.add(0, -1.1, 0);
Location aloc = center.clone();
aloc.add(0, -.2, 0);
for(int i = 0; i<=3;i++){
Location loc = aloc.clone().add(0, .215*i, 0);
fArmorStand packet = getManager().createArmorStand(getObjID(), loc);
2018-11-25 17:59:55 +01:00
packet.getInventory().setHelmet(new ItemStack(Material.STONE_SLAB));
2015-08-11 22:49:50 +02:00
packet.setSmall(true);
asList.add(packet);
}
for(int i = 0; i<=3;i++){
Location loc = getLutil().getRelativ(center.clone(), getBlockFace(), .47, .38).add(0, .88*i, 0);
fArmorStand packet = getManager().createArmorStand(getObjID(), loc);
packet.getInventory().setItemInMainHand(new ItemStack(Material.STICK));
2015-08-11 22:49:50 +02:00
packet.setPose(new EulerAngle(1.39, 0, 0), BodyPart.RIGHT_ARM);
asList.add(packet);
}
fArmorStand packet = getManager().createArmorStand(getObjID(), getLutil().getRelativ(center, getBlockFace(), -.9, .38).add(0, 3.1, 0));
packet.getInventory().setItemInMainHand(new ItemStack(Material.STICK));
2015-08-11 22:49:50 +02:00
packet.setPose(new EulerAngle(-.17, 0, 0), BodyPart.RIGHT_ARM);
asList.add(packet);
float yaw = getLutil().FaceToYaw(getBlockFace());
BlockFace face = getLutil().yawToFace(yaw +90);
packet = getManager().createArmorStand(getObjID(), getLutil().getRelativ(center, getBlockFace(), -.4, .38).add(0, 2.68, 0));
packet.getInventory().setItemInMainHand(new ItemStack(Material.STICK));
2015-08-11 22:49:50 +02:00
packet.setPose(new EulerAngle(1.39, 0, 0), BodyPart.RIGHT_ARM);
asList.add(packet);
packet = getManager().createArmorStand(getObjID(), getLutil().getRelativ(center, face, 0.0, -0.9).add(0, 2.3, 0));
2018-11-25 17:59:55 +01:00
packet.getInventory().setHelmet(new ItemStack(Material.REDSTONE_TORCH));
2015-08-11 22:49:50 +02:00
packet.setName("#LAMP#");
packet.setSmall(true);
asList.add(packet);
packet = getManager().createArmorStand(getObjID(), getLutil().getRelativ(center, face, 0.0, -0.9).add(0, 1.8, 0));
2018-11-25 17:59:55 +01:00
packet.getInventory().setHelmet(new ItemStack(Material.DARK_OAK_WOOD, 1,(short) 5));
2015-08-11 22:49:50 +02:00
asList.add(packet);
packet = getManager().createArmorStand(getObjID(), getLutil().getRelativ(center, face, 0.0, -0.9).add(0, 2.3, 0));
2015-08-11 22:49:50 +02:00
packet.getInventory().setHelmet(new ItemStack(Material.GLASS));
packet.setSmall(true);
asList.add(packet);
for(fArmorStand pack : asList){
2015-08-11 22:49:50 +02:00
pack.setInvisible(true);
pack.setBasePlate(false);
}
getManager().send(getObjID());
Bukkit.getPluginManager().registerEvents(this, getPlugin());
2015-08-11 22:49:50 +02:00
}
private void setBlock(){
List<Block> blockLocation = new ArrayList<Block>();
Location location = getLocation().getBlock().getLocation();
2015-08-11 22:49:50 +02:00
location.setY(location.getY()-1);
for(int i = 0; i<=3;i++){
location.setY(location.getY()+1);
Block block = location.getBlock();
block.setType(Material.BARRIER);
blockLocation.add(block);
2015-08-11 22:49:50 +02:00
if(i==3){
Location loc =getLutil().getRelativ(location, getBlockFace(), -1D, 0D);
2015-08-11 22:49:50 +02:00
Block blocks = loc.getBlock();
blocks.setType(Material.BARRIER);
blockLocation.add(blocks);
2015-08-11 22:49:50 +02:00
}
}
getObjID().addBlock(blockLocation);
2015-08-11 22:49:50 +02:00
}
@EventHandler
private void onBlockBreak(FurnitureBlockBreakEvent e){
2015-11-29 22:51:25 +01:00
if(e.getID() == null || getObjID() == null) return;
if(!e.getID().equals(getObjID())){return;}
if(getObjID().getSQLAction().equals(SQLAction.REMOVE)){return;}
if(!e.canBuild()){return;}
FurnitureLib.getInstance().getLightManager().removeLight(light);
e.remove();
delete();
}
@EventHandler
private void onBlockClick(FurnitureBlockClickEvent e){
2015-11-29 22:51:25 +01:00
if(e.getID() == null || getObjID() == null) return;
if(!e.getID().equals(getObjID())){return;}
if(getObjID().getSQLAction().equals(SQLAction.REMOVE)){return;}
if(!e.canBuild()){return;}
if(isOn()){
setLight(false);
}else{
setLight(true);
2015-08-11 22:49:50 +02:00
}
}
2015-08-13 19:26:30 +02:00
2015-08-11 22:49:50 +02:00
@EventHandler
private void onBlockPowered(BlockRedstoneEvent e){
if(getObjID()==null){return;}
if(getObjID().getSQLAction().equals(SQLAction.REMOVE)){return;}
2015-08-31 16:35:09 +02:00
if(e.getBlock()==null){return;}
2015-08-11 22:49:50 +02:00
Vector loc = e.getBlock().getLocation().toVector();
if(loc2.distance(loc)<=1){
if(e.getNewCurrent()==0){
setLight(false);
redstone = false;
}else{
setLight(true);
redstone = true;
}
2015-08-31 16:35:09 +02:00
return;
}
if(loc3.distance(loc)<=1){
if(e.getNewCurrent()==0){
setLight(false);
redstone = false;
}else{
setLight(true);
redstone = true;
}
return;
2015-08-11 22:49:50 +02:00
}
}
private void setLight(Boolean b){
if(!b){
2016-06-21 19:17:24 +02:00
fEntity packet = getPacket();
2015-08-11 22:49:50 +02:00
if(packet==null) return;
2018-11-25 17:59:55 +01:00
packet.getInventory().setHelmet(new ItemStack(Material.REDSTONE_TORCH));
getManager().updateFurniture(getObjID());
2015-08-31 16:35:09 +02:00
FurnitureLib.getInstance().getLightManager().removeLight(light);
return;
2015-08-11 22:49:50 +02:00
}else{
2016-06-21 19:17:24 +02:00
fEntity packet = getPacket();
2015-08-11 22:49:50 +02:00
if(packet==null) return;
packet.getInventory().setHelmet(new ItemStack(Material.GLOWSTONE));
getManager().updateFurniture(getObjID());
2015-08-31 16:35:09 +02:00
FurnitureLib.getInstance().getLightManager().addLight(light, 15);
return;
2015-08-11 22:49:50 +02:00
}
}
2016-06-21 19:17:24 +02:00
private fEntity getPacket(){
for(fEntity packet : getManager().getfArmorStandByObjectID(getObjID())){
2015-08-11 22:49:50 +02:00
if(packet.getName().equalsIgnoreCase("#LAMP#")){
return packet;
}
}
return null;
}
private boolean isOn(){
2016-06-21 19:17:24 +02:00
for(fEntity as : getManager().getfArmorStandByObjectID(getObjID())){
2015-08-11 22:49:50 +02:00
if(as.getName().equalsIgnoreCase("#LAMP#")){
switch (as.getInventory().getHelmet().getType()) {
2018-11-25 17:59:55 +01:00
case REDSTONE_TORCH: return false;
2015-08-11 22:49:50 +02:00
case GLOWSTONE: return true;
default: return false;
}
}
}
return false;
}
@EventHandler
2015-08-13 19:26:30 +02:00
public void onFurnitureBreak(FurnitureBreakEvent e) {
2015-11-29 22:51:25 +01:00
if(e.getID() == null || getObjID() == null) return;
if(!e.getID().equals(getObjID())){return;}
if(getObjID().getSQLAction().equals(SQLAction.REMOVE)){return;}
2015-08-17 22:27:16 +02:00
if(!e.canBuild()){return;}
2015-08-11 22:49:50 +02:00
FurnitureLib.getInstance().getLightManager().removeLight(light);
e.remove();
delete();
2015-08-13 19:26:30 +02:00
}
@EventHandler
public void onFurnitureClick(FurnitureClickEvent e) {
2015-11-29 22:51:25 +01:00
if(e.getID() == null || getObjID() == null) return;
if(getObjID().getSQLAction().equals(SQLAction.REMOVE)){return;}
if(!e.getID().equals(getObjID())){return;}
2015-08-14 18:08:21 +02:00
if(!e.canBuild()){return;}
2015-08-13 19:26:30 +02:00
Boolean isOn = isOn();
2016-06-21 19:17:24 +02:00
fEntity packet = getPacket();
2015-08-13 19:26:30 +02:00
if(packet==null) return;
if(redstone) return;
if(isOn){
setLight(false);
}else{
setLight(true);
}
2015-08-11 22:49:50 +02:00
}
}