mirror of https://github.com/Ste3et/furniture.git
173 lines
5.4 KiB
Java
173 lines
5.4 KiB
Java
package de.Ste3et_C0st.Furniture.Objects.garden;
|
|
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.GameMode;
|
|
import org.bukkit.Location;
|
|
import org.bukkit.Material;
|
|
import org.bukkit.block.Block;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.event.EventHandler;
|
|
import org.bukkit.event.Listener;
|
|
import org.bukkit.inventory.ItemStack;
|
|
import org.bukkit.plugin.Plugin;
|
|
|
|
import de.Ste3et_C0st.Furniture.Main.main;
|
|
import de.Ste3et_C0st.FurnitureLib.Events.FurnitureBlockBreakEvent;
|
|
import de.Ste3et_C0st.FurnitureLib.Events.FurnitureBlockClickEvent;
|
|
import de.Ste3et_C0st.FurnitureLib.Events.FurnitureBreakEvent;
|
|
import de.Ste3et_C0st.FurnitureLib.Events.FurnitureClickEvent;
|
|
import de.Ste3et_C0st.FurnitureLib.main.Furniture;
|
|
import de.Ste3et_C0st.FurnitureLib.main.ObjectID;
|
|
import de.Ste3et_C0st.FurnitureLib.main.Type.SQLAction;
|
|
import de.Ste3et_C0st.FurnitureLib.main.entity.fArmorStand;
|
|
|
|
public class fance extends Furniture implements Listener{
|
|
|
|
private void setTypes(ItemStack is){for(fArmorStand packet : getManager().getfArmorStandByObjectID(getObjID())){packet.getInventory().setHelmet(is);}}
|
|
List<Material> matList = Arrays.asList(
|
|
Material.SPRUCE_FENCE,
|
|
Material.BIRCH_FENCE,
|
|
Material.JUNGLE_FENCE,
|
|
Material.DARK_OAK_FENCE,
|
|
Material.ACACIA_FENCE,
|
|
Material.COBBLE_WALL,
|
|
Material.NETHER_FENCE);
|
|
Block block;
|
|
Material m;
|
|
|
|
public fance(Plugin plugin, ObjectID id){
|
|
super(plugin, id);
|
|
if(isFinish()){
|
|
setBlock();
|
|
Bukkit.getPluginManager().registerEvents(this, plugin);
|
|
return;
|
|
}
|
|
spawn(id.getStartLocation());
|
|
setBlock();
|
|
}
|
|
|
|
public void spawn(Location location){
|
|
this.m = Material.STONE;
|
|
Location locat = getLocation().clone();
|
|
locat=getLutil().getCenter(locat);
|
|
locat.add(0, -1.2, 0);
|
|
locat.setYaw(getLutil().FaceToYaw(getBlockFace().getOppositeFace()));
|
|
for(int i = 0; i<=2;i++){
|
|
Location loc = locat.clone();
|
|
fArmorStand packet = getManager().createArmorStand(getObjID(), loc);
|
|
packet.getInventory().setHelmet(new ItemStack(m,0,(short) 0));
|
|
packet.setGravity(false);
|
|
packet.setInvisible(true);
|
|
packet.setBasePlate(false);
|
|
packet.setSmall(true);
|
|
locat.add(0, .44, 0);
|
|
}
|
|
send();
|
|
Bukkit.getPluginManager().registerEvents(this, getPlugin());
|
|
}
|
|
|
|
|
|
@EventHandler
|
|
private void onBlockBreak(FurnitureBlockBreakEvent e){
|
|
if(getObjID()==null){return;}
|
|
if(getObjID().getSQLAction().equals(SQLAction.REMOVE)){return;}
|
|
if(e.isCancelled()){return;}
|
|
if(!e.getID().equals(getObjID())){return;}
|
|
if(!e.canBuild()){return;}
|
|
e.remove();
|
|
delete();
|
|
}
|
|
|
|
@SuppressWarnings("deprecation")
|
|
@EventHandler
|
|
private void onBlockBreak(FurnitureBlockClickEvent e){
|
|
if(getObjID()==null){return;}
|
|
if(getObjID().getSQLAction().equals(SQLAction.REMOVE)){return;}
|
|
if(e.isCancelled()){return;}
|
|
if(!e.getID().equals(getObjID())){return;}
|
|
if(!e.canBuild()){return;}
|
|
Player p = e.getPlayer();
|
|
ItemStack is = p.getItemInHand();
|
|
if(is==null||!is.getType().isBlock()||is.getType().equals(Material.AIR)) return;
|
|
ItemStack itemStack = is.clone();
|
|
if(matList.contains(itemStack.getType())){
|
|
this.block.setType(itemStack.getType());
|
|
this.block.setData((byte) itemStack.getDurability());
|
|
remove(p, is);
|
|
return;
|
|
}else if(main.materialWhiteList.contains(itemStack.getType())){
|
|
setTypes(itemStack);
|
|
remove(p, is);
|
|
getManager().updateFurniture(getObjID());
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@EventHandler
|
|
public void onFurnitureBreak(FurnitureBreakEvent e){
|
|
if(getObjID()==null){return;}
|
|
if(e.getID()==null){return;}
|
|
if(getObjID().getSQLAction().equals(SQLAction.REMOVE)){return;}
|
|
if(e.isCancelled()){return;}
|
|
if(!e.getID().equals(getObjID())){return;}
|
|
if(!e.canBuild()){return;}
|
|
e.setCancelled(true);
|
|
e.remove();
|
|
delete();
|
|
}
|
|
|
|
private void remove(Player p, ItemStack is){
|
|
if(!p.getGameMode().equals(GameMode.CREATIVE)){
|
|
Integer i = p.getInventory().getHeldItemSlot();
|
|
is.setAmount(is.getAmount()-1);
|
|
p.getInventory().setItem(i, is);
|
|
p.updateInventory();
|
|
}
|
|
}
|
|
|
|
@SuppressWarnings("deprecation")
|
|
@EventHandler
|
|
public void onFurnitureClick(FurnitureClickEvent e){
|
|
if(getObjID()==null){return;}
|
|
if(getObjID().getSQLAction().equals(SQLAction.REMOVE)){return;}
|
|
if(e.isCancelled()){return;}
|
|
if(this.block==null) return;
|
|
if(!e.getID().equals(getObjID())){return;}
|
|
if(!e.canBuild()){return;}
|
|
e.setCancelled(true);
|
|
Player p = e.getPlayer();
|
|
ItemStack is = p.getItemInHand();
|
|
if(is==null || !is.getType().isBlock()||is.getType().equals(Material.AIR)) return;
|
|
ItemStack itemStack = is.clone();
|
|
if(matList.contains(itemStack.getType())){
|
|
this.block.setType(itemStack.getType());
|
|
this.block.setData((byte) itemStack.getDurability());
|
|
remove(p, is);
|
|
return;
|
|
}else if(main.materialWhiteList.contains(itemStack.getType())){
|
|
setTypes(itemStack);
|
|
remove(p, is);
|
|
getManager().updateFurniture(getObjID());
|
|
return;
|
|
}
|
|
}
|
|
|
|
private void setBlock(){
|
|
Location location = getLocation().clone();
|
|
this.block = location.getBlock();
|
|
if(this.block.getType()==null||this.block.getType().equals(Material.AIR)||!this.block.getType().equals(Material.FENCE)){
|
|
if(!this.matList.contains(this.block.getType())){
|
|
this.block.setType(Material.FENCE);
|
|
}
|
|
}
|
|
getObjID().addBlock(Arrays.asList(this.block));
|
|
}
|
|
|
|
|
|
}
|