furniture/src/de/Ste3et_C0st/Furniture/Objects/RPG/weaponStand.java

270 lines
9.2 KiB
Java

package de.Ste3et_C0st.Furniture.Objects.RPG;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.util.EulerAngle;
import de.Ste3et_C0st.Furniture.Main.main;
import de.Ste3et_C0st.FurnitureLib.main.Furniture;
import de.Ste3et_C0st.FurnitureLib.main.ObjectID;
import de.Ste3et_C0st.FurnitureLib.main.Type.BodyPart;
import de.Ste3et_C0st.FurnitureLib.main.Type.SQLAction;
import de.Ste3et_C0st.FurnitureLib.main.entity.fArmorStand;
import de.Ste3et_C0st.FurnitureLib.main.entity.fEntity;
public class weaponStand extends Furniture implements Listener{
List<Integer> slotList1 = Arrays.asList(6,11,14,16,19,21,24,29,32,34,42);
List<Integer> slotList2 = Arrays.asList(20, 15, 33);
List<Material> matList = Arrays.asList(
Material.OAK_FENCE_GATE,
Material.SPRUCE_FENCE_GATE,
Material.BIRCH_FENCE_GATE,
Material.JUNGLE_FENCE_GATE,
Material.DARK_OAK_FENCE_GATE,
Material.ACACIA_FENCE_GATE);
public weaponStand(ObjectID id) {
super(id);
if(isFinish()){
Bukkit.getPluginManager().registerEvents(this, main.getInstance());
return;
}
spawn(id.getStartLocation());
}
Player p = null;
Inventory inv = null;
String title = "";
@Override
public void onBreak(Player player) {
if(getObjID() == null) return;
if(getObjID().getSQLAction().equals(SQLAction.REMOVE)) return;
if(player == null) return;
if(canBuild(player)) {
if(p!=null){
p.closeInventory();
inv = null;
}
List<fEntity> asList = getManager().getfArmorStandByObjectID(getObjID());
for(fEntity packet : asList){
if(packet.getName()!=null&&!packet.getName().equalsIgnoreCase("")){
if(packet.getInventory().getItemInMainHand()!=null){
if(!packet.getInventory().getItemInMainHand().getType().equals(Material.AIR)){
getWorld().dropItem(getLocation(), packet.getInventory().getItemInMainHand());
}
}
}
}
this.destroy(player);
}
}
@Override
public void onClick(Player player){
if(getObjID() == null) return;
if(getObjID().getSQLAction().equals(SQLAction.REMOVE)) return;
if(player == null) return;
if(canBuild(player)) {
if(this.p != null) {return;}
this.p = player;
ItemStack itemstack = p.getInventory().getItemInMainHand();
if(itemstack!=null&&matList.contains(itemstack.getType())){
for(fEntity packet : getManager().getfArmorStandByObjectID(getObjID())){
if(packet.getInventory().getHelmet()!=null){
if(packet.getInventory().getHelmet().getType().name().toLowerCase().endsWith("gate")){
ItemStack itemStack = new ItemStack(itemstack.getType(), 1);
packet.getInventory().setHelmet(itemStack);
}
}
}
getManager().updateFurniture(getObjID());
this.p = null;
return;
}
ItemStack is1 = new ItemStack(Material.BLACK_STAINED_GLASS_PANE, 1);
ItemStack is3 = new ItemStack(Material.RED_STAINED_GLASS_PANE, 1);
ItemMeta im1 = is1.getItemMeta();
ItemMeta im3 = is3.getItemMeta();
im1.setDisplayName("§c");
im3.setDisplayName("§c");
is1.setItemMeta(im1);
is3.setItemMeta(im3);
this.title = "§cWeaponBox";
inv = Bukkit.createInventory(null, 45, this.title);
List<fEntity> asList = getManager().getfArmorStandByObjectID(getObjID());
int j = 1;
for(int i = 0; i<inv.getSize();i++){
inv.setItem(i, is1);
if(slotList1.contains(i)){
inv.setItem(i, is3);
}else if(slotList2.contains(i)){
for(fEntity packet : asList){
if(packet.getName()!=null&&!packet.getName().equalsIgnoreCase("")){
if(packet.getName().equalsIgnoreCase("#SLOT"+j+"#")){
ItemStack is = new ItemStack(Material.AIR);
if(packet.getInventory().getItemInMainHand()!=null){is = packet.getInventory().getItemInMainHand();}
inv.setItem(i, is);
}
}
}
j++;
}
}
this.p.openInventory(inv);
this.p.updateInventory();
}
}
@EventHandler
private void onClick(InventoryClickEvent e){
if(getObjID()==null){return;}
if(getObjID().getSQLAction().equals(SQLAction.REMOVE)){return;}
if(p==null){return;}
if(inv==null){return;}
if(e.getInventory()==null){return;}
if(e.getCurrentItem()==null){return;}
if(!e.getInventory().equals(inv)){return;}
ItemStack is = e.getCurrentItem();
Material m = is.getType();
if(!isValid(m)){e.setCancelled(true);}
}
public boolean isValid(Material m){
String matName = m.toString().toLowerCase();
boolean b = false;
if(matName.endsWith("axe")){b=true;}
if(matName.endsWith("hoe")){b=true;}
if(matName.endsWith("pickaxe")){b=true;}
if(matName.endsWith("spade")){b=true;}
if(matName.endsWith("sword")){b=true;}
if(matName.equalsIgnoreCase("air")){b=true;}
return b;
}
@EventHandler
private void onClose(InventoryCloseEvent e){
if(getObjID()==null){return;}
if(getObjID().getSQLAction().equals(SQLAction.REMOVE)){return;}
if(p==null){return;}
if(inv==null){return;}
if(!e.getView().getTitle().equalsIgnoreCase(this.title)){return;}
List<fEntity> asList = getManager().getfArmorStandByObjectID(getObjID());
int j = 1;
for(int i = 0; i<inv.getSize();i++){
if(slotList2.contains(i)){
for(fEntity packet : asList){
if(packet.getName()!=null&&!packet.getName().equalsIgnoreCase("")){
if(packet.getName().equalsIgnoreCase("#SLOT"+j+"#")){
ItemStack is = inv.getItem(i);
if(is==null){is = new ItemStack(Material.AIR);}
packet.getInventory().setItemInMainHand(is);
}
}
}
j++;
}
}
if(e.getPlayer().equals(p)){
this.p = null;
this.inv = null;
getManager().updateFurniture(getObjID());
}
}
@Override
public void spawn(Location loc) {
List<fArmorStand> packList = new ArrayList<fArmorStand>();
Location center = getLutil().getCenter(loc);
center = center.add(0, -2.2, 0);
Location center2 = center;
Location center3 = center.clone();
double offsety = 0.4;
fArmorStand as = getManager().createArmorStand(getObjID(), center2.add(0, offsety, 0));
as.getInventory().setHelmet(new ItemStack(Material.OAK_PRESSURE_PLATE, 1));
as.setPose(getLutil().degresstoRad(new EulerAngle(0, 45, 0)), BodyPart.HEAD);
packList.add(as);
as = getManager().createArmorStand(getObjID(), center3.add(0, .2, 0).add(0, offsety, 0));
as.getInventory().setHelmet(new ItemStack(Material.OAK_PRESSURE_PLATE, 1));
as.setPose(getLutil().degresstoRad(new EulerAngle(0, 45, 0)), BodyPart.HEAD);
packList.add(as);
Location location = center;
location = location.add(0, -offsety, 0);
float yaw = 0;
for(int i = 0; i<4;i++){
BlockFace face = getLutil().yawToFace(yaw);
Location locat = getLutil().getRelativ(location, face, -.0D, -.0D);
as = getManager().createArmorStand(getObjID(), locat.clone());
as.getInventory().setHelmet(new ItemStack(Material.OAK_FENCE_GATE, 1));
as.setPose(getLutil().degresstoRad(new EulerAngle(0, -45, 0)), BodyPart.HEAD);
packList.add(as);
as = getManager().createArmorStand(getObjID(), locat.add(0, .37, 0).clone());
as.getInventory().setHelmet(new ItemStack(Material.OAK_FENCE_GATE, 1));
as.setPose(getLutil().degresstoRad(new EulerAngle(0, -45, 0)), BodyPart.HEAD);
packList.add(as);
as = getManager().createArmorStand(getObjID(), locat.add(0, .37, 0).clone());
as.getInventory().setHelmet(new ItemStack(Material.OAK_FENCE_GATE, 1));
as.setPose(getLutil().degresstoRad(new EulerAngle(0, -45, 0)), BodyPart.HEAD);
packList.add(as);
yaw +=90;
}
as = getManager().createArmorStand(getObjID(), getLutil().getRelativ(location, getBlockFace(), .5, .4d).add(0, 1.8, 0));
as.setName("#SLOT1#");
as.setPose(getLutil().degresstoRad(new EulerAngle(80, 30, 15)), BodyPart.RIGHT_ARM);
as.setMarker(false);
packList.add(as);
BlockFace face = getLutil().yawToFace(getLutil().FaceToYaw(getBlockFace()) + 90);
as = getManager().createArmorStand(getObjID(), getLutil().getRelativ(location, face, .5, .45d).add(0, 1.75, 0));
as.setName("#SLOT2#");
as.setPose(getLutil().degresstoRad(new EulerAngle(80, 30, 20)), BodyPart.RIGHT_ARM);
as.setMarker(false);
packList.add(as);
as = getManager().createArmorStand(getObjID(), getLutil().getRelativ(location, getBlockFace().getOppositeFace(), -.30, .65d).add(0, 1.0, 0));
as.setName("#SLOT3#");
//as.getInventory().setItemInHand(new ItemStack(Material.DIAMOND_AXE));
as.setPose(getLutil().degresstoRad(new EulerAngle(-80, 30, 15)), BodyPart.RIGHT_ARM);
as.setMarker(false);
packList.add(as);
for(fArmorStand asp : packList){
asp.setInvisible(true);
}
send();
Bukkit.getPluginManager().registerEvents(this, getPlugin());
}
}