2018-12-04 23:24:24 +01:00
|
|
|
package com.songoda.epicbuckets.listener;
|
|
|
|
|
2018-12-13 01:23:11 +01:00
|
|
|
|
2018-12-04 23:24:24 +01:00
|
|
|
import com.songoda.epicbuckets.EpicBuckets;
|
2019-01-12 01:28:39 +01:00
|
|
|
import com.songoda.epicbuckets.event.GenbucketPlaceEvent;
|
2018-12-04 23:24:24 +01:00
|
|
|
import com.songoda.epicbuckets.genbucket.Genbucket;
|
|
|
|
import com.songoda.epicbuckets.genbucket.GenbucketType;
|
|
|
|
import com.songoda.epicbuckets.genbucket.types.Horizontal;
|
|
|
|
import com.songoda.epicbuckets.genbucket.types.Infused;
|
|
|
|
import com.songoda.epicbuckets.genbucket.types.PsuedoVertical;
|
|
|
|
import com.songoda.epicbuckets.genbucket.types.Vertical;
|
2018-12-06 01:32:12 +01:00
|
|
|
import com.songoda.epicbuckets.util.XMaterial;
|
2018-12-04 23:24:24 +01:00
|
|
|
import de.tr7zw.itemnbtapi.NBTItem;
|
2018-12-20 20:50:48 +01:00
|
|
|
import org.bukkit.Bukkit;
|
2018-12-06 01:32:12 +01:00
|
|
|
import org.bukkit.GameMode;
|
2018-12-04 23:24:24 +01:00
|
|
|
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;
|
|
|
|
|
|
|
|
public class GenbucketPlaceListener implements Listener {
|
|
|
|
|
|
|
|
@EventHandler
|
|
|
|
public void emptyBucket(PlayerBucketEmptyEvent e) {
|
|
|
|
NBTItem nbtItem = new NBTItem(e.getItemStack());
|
|
|
|
if (nbtItem.hasKey("Genbucket")) {
|
|
|
|
e.setCancelled(true);
|
|
|
|
e.getBlockClicked().getRelative(e.getBlockFace()).getState().update();
|
|
|
|
e.getBlockClicked().getState().update();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@EventHandler
|
|
|
|
public void onInteract(PlayerInteractEvent e) {
|
|
|
|
if (e.getAction() != Action.RIGHT_CLICK_BLOCK || e.getItem() == null) return;
|
|
|
|
|
|
|
|
NBTItem nbtItem = new NBTItem(e.getItem());
|
|
|
|
if (!nbtItem.hasKey("Genbucket")) return;
|
|
|
|
|
|
|
|
e.setCancelled(true);
|
|
|
|
|
2019-01-12 01:28:39 +01:00
|
|
|
boolean isInfiniteUse = EpicBuckets.getInstance().getConfigManager().isInfiniteUse();
|
|
|
|
boolean isInfiniteUseCharge = EpicBuckets.getInstance().getConfigManager().isChargeInfiniteUse();
|
|
|
|
|
2018-12-15 23:20:18 +01:00
|
|
|
if (!e.getPlayer().hasPermission("epicbuckets.place")) {
|
2018-12-13 01:23:11 +01:00
|
|
|
e.getPlayer().sendMessage(EpicBuckets.getInstance().getLocale().getMessage("event.place.nothere"));
|
2018-12-06 01:32:12 +01:00
|
|
|
return;
|
|
|
|
}
|
2018-12-22 16:55:47 +01:00
|
|
|
if (EpicBuckets.getInstance().getConfigManager().isOnCooldown(e.getPlayer())) {
|
2018-12-21 23:21:48 +01:00
|
|
|
e.getPlayer().sendMessage(EpicBuckets.getInstance().getLocale().getMessage("event.place.delay"));
|
|
|
|
return;
|
|
|
|
}
|
2018-12-13 01:23:11 +01:00
|
|
|
if (EpicBuckets.getInstance().getConfigManager().isGenbucketsDisabled()) {
|
|
|
|
e.getPlayer().sendMessage(EpicBuckets.getInstance().getLocale().getMessage("event.genbucket.disabled"));
|
2018-12-06 01:32:12 +01:00
|
|
|
return;
|
|
|
|
}
|
2018-12-13 01:23:11 +01:00
|
|
|
if (!EpicBuckets.getInstance().getGenbucketManager().canRegisterNewGenbucket(e.getPlayer())) {
|
|
|
|
e.getPlayer().sendMessage(EpicBuckets.getInstance().getLocale().getMessage("event.place.wait"));
|
2018-12-06 01:32:12 +01:00
|
|
|
return;
|
|
|
|
}
|
2018-12-13 01:23:11 +01:00
|
|
|
if (!EpicBuckets.getInstance().getGenbucketManager().canPlaceGenbucket(e.getPlayer(), e.getClickedBlock().getLocation())) {
|
|
|
|
e.getPlayer().sendMessage(EpicBuckets.getInstance().getLocale().getMessage("event.place.nothere"));
|
2018-12-06 01:32:12 +01:00
|
|
|
return;
|
|
|
|
}
|
2018-12-04 23:24:24 +01:00
|
|
|
|
|
|
|
Genbucket genbucket = null;
|
|
|
|
|
2019-01-12 01:28:39 +01:00
|
|
|
switch (GenbucketType.valueOf(nbtItem.getString("Type"))) {
|
2018-12-04 23:24:24 +01:00
|
|
|
case PSUEDO:
|
2018-12-13 01:23:11 +01:00
|
|
|
genbucket = new PsuedoVertical(e.getPlayer(), e.getClickedBlock(), e.getBlockFace(), EpicBuckets.getInstance().getShopManager().getShop(nbtItem.getString("Shop")).getSubShop(nbtItem.getString("SubShop")));
|
2018-12-04 23:24:24 +01:00
|
|
|
break;
|
|
|
|
case INFUSED:
|
2018-12-13 01:23:11 +01:00
|
|
|
genbucket = new Infused(e.getPlayer(), e.getClickedBlock(), e.getBlockFace(), EpicBuckets.getInstance().getShopManager().getShop(nbtItem.getString("Shop")).getSubShop(nbtItem.getString("SubShop")));
|
2018-12-04 23:24:24 +01:00
|
|
|
break;
|
|
|
|
case VERTICAL:
|
2018-12-13 01:23:11 +01:00
|
|
|
genbucket = new Vertical(e.getPlayer(), e.getClickedBlock(), e.getBlockFace(), EpicBuckets.getInstance().getShopManager().getShop(nbtItem.getString("Shop")).getSubShop(nbtItem.getString("SubShop")));
|
2018-12-04 23:24:24 +01:00
|
|
|
break;
|
|
|
|
case HORIZONTAL:
|
2018-12-13 01:23:11 +01:00
|
|
|
genbucket = new Horizontal(e.getPlayer(), e.getClickedBlock(), e.getBlockFace(), EpicBuckets.getInstance().getShopManager().getShop(nbtItem.getString("Shop")).getSubShop(nbtItem.getString("SubShop")));
|
2018-12-04 23:24:24 +01:00
|
|
|
}
|
|
|
|
|
2018-12-11 19:47:21 +01:00
|
|
|
if (!genbucket.calculateBlockFace()) {
|
2018-12-13 01:23:11 +01:00
|
|
|
e.getPlayer().sendMessage(EpicBuckets.getInstance().getLocale().getMessage("event.genbucket.placedwrong").replace("%genbucket%", genbucket.getGenbucketType().name.toUpperCase() + " genbucket"));
|
2018-12-06 01:32:12 +01:00
|
|
|
return;
|
|
|
|
}
|
2018-12-13 01:23:11 +01:00
|
|
|
if (genbucket.getGenbucketType() == GenbucketType.PSUEDO && !EpicBuckets.getInstance().getConfigManager().getPsuedoMaterials().contains(XMaterial.requestXMaterial(e.getClickedBlock().getType().name(), e.getClickedBlock().getData()))) {
|
|
|
|
e.getPlayer().sendMessage(EpicBuckets.getInstance().getLocale().getMessage("event.genbucket.wrongmaterialpsuedo"));
|
2018-12-06 01:32:12 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2019-01-12 01:28:39 +01:00
|
|
|
double infiniteUseCost = EpicBuckets.getInstance().getConfigManager().getInfiniteUseCostForGenbucketType(genbucket.getGenbucketType(), genbucket.getGenItem());
|
|
|
|
|
|
|
|
if (isInfiniteUse && isInfiniteUseCharge && EpicBuckets.getInstance().getEcon().getBalance(Bukkit.getOfflinePlayer(e.getPlayer().getUniqueId())) < infiniteUseCost) {
|
|
|
|
e.getPlayer().sendMessage(EpicBuckets.getInstance().getLocale().getMessage("event.genbucket.infiniteuse.notenough"));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
Call event and check if cancelled before proceeding to start the gen and charging the player
|
|
|
|
*/
|
|
|
|
GenbucketPlaceEvent placeEvent = new GenbucketPlaceEvent(e.getPlayer(), genbucket);
|
|
|
|
Bukkit.getPluginManager().callEvent(placeEvent);
|
|
|
|
if (placeEvent.isCancelled()) return;
|
|
|
|
|
|
|
|
/*
|
|
|
|
Subtract bucket from players inventory
|
|
|
|
*/
|
|
|
|
if (e.getPlayer().getGameMode() != GameMode.CREATIVE && !isInfiniteUse) {
|
2018-12-06 01:32:12 +01:00
|
|
|
if (e.getItem().getAmount() > 1) {
|
|
|
|
e.getItem().setAmount(e.getItem().getAmount() - 1);
|
|
|
|
} else {
|
2019-01-06 01:12:33 +01:00
|
|
|
e.getPlayer().getInventory().setItem(e.getPlayer().getInventory().getHeldItemSlot(), null);
|
2018-12-06 01:32:12 +01:00
|
|
|
}
|
|
|
|
}
|
2018-12-04 23:24:24 +01:00
|
|
|
|
2019-01-12 01:28:39 +01:00
|
|
|
/*
|
|
|
|
Charge for infinite use placement
|
|
|
|
*/
|
|
|
|
if (isInfiniteUse && isInfiniteUseCharge && infiniteUseCost > 0) {
|
|
|
|
EpicBuckets.getInstance().getEcon().withdrawPlayer(Bukkit.getOfflinePlayer(e.getPlayer().getUniqueId()), infiniteUseCost);
|
|
|
|
e.getPlayer().sendMessage(EpicBuckets.getInstance().getLocale().getMessage("event.genbucket.infiniteuse.charge").replace("%charge%", infiniteUseCost + ""));
|
2018-12-20 20:50:48 +01:00
|
|
|
}
|
|
|
|
|
2018-12-13 01:23:11 +01:00
|
|
|
EpicBuckets.getInstance().getGenbucketManager().registerGenbucketForPlayer(e.getPlayer(), genbucket);
|
|
|
|
EpicBuckets.getInstance().getGenbucketManager().notifyAdmins(e.getPlayer(), genbucket);
|
2018-12-04 23:24:24 +01:00
|
|
|
genbucket.generate();
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|