EpicBuckets/src/main/java/com/songoda/epicbuckets/listeners/GenbucketPlaceListener.java

201 lines
6.9 KiB
Java

package com.songoda.epicbuckets.listeners;
import com.songoda.epicbuckets.EpicBuckets;
import com.songoda.epicbuckets.events.GenbucketPlaceEvent;
import com.songoda.epicbuckets.genbuckets.GenbucketItem;
import com.songoda.epicbuckets.genbuckets.GenbucketManager;
import com.songoda.epicbuckets.genbuckets.types.Horizontal;
import com.songoda.epicbuckets.genbuckets.types.Infused;
import com.songoda.epicbuckets.genbuckets.types.PsuedoVertical;
import com.songoda.epicbuckets.genbuckets.types.Vertical;
import com.songoda.epicbuckets.util.ChatUtil;
import com.songoda.epicbuckets.util.ItemStackUtil;
import com.songoda.epicbuckets.util.Util;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerBucketEmptyEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import java.util.Arrays;
import java.util.List;
/**
* GenbucketPlaceListener created by: SoFocused
* Date Created: oktober 05 2018
* Time created: 16:06
*/
public class GenbucketPlaceListener implements Listener {
private EpicBuckets plugin = EpicBuckets.getInstance();
// We have to do a double for loop to find the genbucket
// don't think this is going to be a big issue but eehhh
@EventHandler
public void onPlayerBucketEmptyEvent(PlayerBucketEmptyEvent event) {
FileConfiguration config = plugin.shopFile.config;
final Player player = event.getPlayer();
GenbucketItem genbucketItem;
ItemStack itemStack = player.getInventory().getItem(player.getInventory().getHeldItemSlot());
if (!itemStack.hasItemMeta())
return;
for (String path : config.getConfigurationSection("shops").getKeys(false)) {
for (String key : config.getConfigurationSection("shops." + path).getKeys(false)) {
if (!config.contains("shops." + path + "." + key + ".icon"))
continue;
genbucketItem = new GenbucketItem(path, key);
Material itemMaterial = itemStack.getType();
String itemName = ChatUtil.stripColor(itemStack.getItemMeta().getDisplayName());
List<String> itemLore = itemStack.getItemMeta().getLore();
if (!genbucketItem.getIcon().equals(itemMaterial))
continue;
if (!ChatUtil.stripColor(genbucketItem.getItemName()).equalsIgnoreCase(itemName))
continue;
if (!itemLore.equals(genbucketItem.getItemLore()))
continue;
event.setCancelled(true);
player.updateInventory();
event.getBlockClicked().getRelative(event.getBlockFace()).getState().update();
event.getBlockClicked().getState().update();
break;
}
}
}
@EventHandler
public void onRightClickBlock(PlayerInteractEvent event) {
if (event.getAction() != Action.RIGHT_CLICK_BLOCK || event.getItem() == null)
return;
if (!event.getItem().hasItemMeta())
return;
final Player player = event.getPlayer();
Block clickedBlock = event.getClickedBlock();
FileConfiguration config = plugin.shopFile.config;
boolean foundGenbucket = false;
GenbucketItem genbucketItem = null;
for (String path : config.getConfigurationSection("shops").getKeys(false)) {
if (foundGenbucket)
break;
for (String key : config.getConfigurationSection("shops." + path).getKeys(false)) {
if (!config.contains("shops." + path + "." + key + ".icon"))
continue;
genbucketItem = new GenbucketItem(path, key);
Material itemMaterial;
String itemName;
List<String> itemLore;
try {
itemMaterial = event.getItem().getType();
itemName = ChatUtil.stripColor(event.getItem().getItemMeta().getDisplayName());
itemLore = event.getItem().getItemMeta().getLore();
} catch (NullPointerException e) {
continue;
}
if (!genbucketItem.getIcon().equals(itemMaterial))
continue;
if (!ChatUtil.stripColor(genbucketItem.getItemName()).equalsIgnoreCase(itemName))
continue;
if (!itemLore.equals(genbucketItem.getItemLore()))
continue;
foundGenbucket = true;
event.setCancelled(true);
break;
}
}
if (!foundGenbucket)
return;
if (!player.hasPermission("genbucket.place")) {
player.sendMessage(ChatUtil.colorPrefix(EpicBuckets.getInstance().messageFile.config.getString("NO-PERMISSION")));
return;
}
if (Util.disableGenbuckets()) {
player.sendMessage(ChatUtil.colorPrefix(EpicBuckets.getInstance().messageFile.config.getString("GENBUCKET-DISABLED")));
player.updateInventory();
return;
}
switch (genbucketItem.getGenbucketType()) {
case PSUEDO:
new PsuedoVertical(player, clickedBlock.getLocation(), event.getBlockFace(), genbucketItem);
break;
case INFUSED:
new Infused(player, clickedBlock.getLocation(), event.getBlockFace(), genbucketItem);
break;
case VERTICAL:
new Vertical(player, clickedBlock.getLocation(), event.getBlockFace(), genbucketItem);
break;
case HORIZONTAL:
new Horizontal(player, clickedBlock.getLocation(), event.getBlockFace(), genbucketItem);
break;
}
player.updateInventory();
}
@EventHandler
public void onGenbucketPlace(GenbucketPlaceEvent event) {
ItemStack item = ItemStackUtil.createItemStack("§7" + event.getGenbucketUUID().toString(), Arrays.asList("", "§7Information:", " §eLeft click: §6Teleport to location", " §eRight click: §6Stop genbucket", " §ePlaced by §6SoFocused", " §eCordinates: §6" + ChatUtil.getCoordinatesFromLocation(event.getLocation()), " §eMaterial: §6" + event.getGenbucketItem().getType(), " §eDamage: §6" + event.getGenbucketItem().getTypeDamage()), Material.STAINED_GLASS_PANE, 1, 13, true);
GenbucketManager.activeGenbucketItems.put(event.getGenbucketUUID(), item);
GenbucketManager.activeGenbucketLocation.put(event.getGenbucketUUID(), event.getLocation());
if (!plugin.getConfig().getBoolean("PLACE-UNLIMTED-GENS"))
GenbucketManager.setActiveGenBuckets(event.getPlayer(), GenbucketManager.getActiveGenBuckets(event.getPlayer()) + 1);
}
}