EpicBuckets/src/main/java/com/songoda/epicbuckets/genbuckets/Genbucket.java

249 lines
7.4 KiB
Java

package com.songoda.epicbuckets.genbuckets;
import com.songoda.epicbuckets.EpicBuckets;
import com.songoda.epicbuckets.regionhandlers.*;
import com.songoda.epicbuckets.util.ChatUtil;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.OfflinePlayer;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import java.util.UUID;
/**
* Genbucket created by: SoFocused
* Date Created: oktober 02 2018
* Time created: 21:51
*/
public abstract class Genbucket {
protected EpicBuckets main = EpicBuckets.getInstance();
private GenbucketType genbucketType;
public Genbucket(GenbucketType genbucketType) {
this.genbucketType = genbucketType;
}
public abstract void run();
public EpicBuckets getInstance() {
return main;
}
protected void genbucketFinished(Player player, UUID uuid) {
int a = GenbucketManager.getActiveGenBuckets(player);
if (a - 1 < 0)
GenbucketManager.setActiveGenBuckets(player, 0);
else
GenbucketManager.setActiveGenBuckets(player, a - 1);
if (GenbucketManager.activeGenbucketItems.containsKey(uuid))
GenbucketManager.activeGenbucketItems.remove(uuid);
if (GenbucketManager.activeGenbucketLocation.containsKey(uuid))
GenbucketManager.activeGenbucketLocation.remove(uuid);
}
protected boolean canPlace(Player player, Location location) {
boolean factionsCheck = RegionFactions.canBuild(player, location);
boolean factionsUUIDCheck = RegionFactions.canBuild(player, location);
boolean griefPreventionCheck = RegionGriefPrevention.canBuild(player, location);
boolean worldGuardCheck = RegionWorldGuard.canBuild(player, location);
boolean worldBorderCheck = RegionWBorder.isOutsideOfBorder(location);
//ChatUtil.debugMSG(player, factionsCheck, factionsUUIDCheck, griefPreventionCheck, worldGuardCheck, worldBorderCheck);
if (!factionsCheck || !factionsUUIDCheck || !griefPreventionCheck || !worldGuardCheck || worldBorderCheck) {
player.sendMessage(ChatUtil.colorPrefix(main.messageFile.config.getString("YOU-CANNOT-PLACE-HERE")));
return false;
}
return true;
}
protected boolean canPlace(Player player, Location location, boolean sendMessage) {
boolean factionsCheck = RegionFactions.canBuild(player, location);
boolean factionsUUIDCheck = RegionFactions.canBuild(player, location);
boolean griefPreventionCheck = RegionGriefPrevention.canBuild(player, location);
boolean worldGuardCheck = RegionWorldGuard.canBuild(player, location);
boolean worldBorderCheck = RegionWBorder.isOutsideOfBorder(location);
if (!factionsCheck || !factionsUUIDCheck || !griefPreventionCheck || !worldGuardCheck || worldBorderCheck) {
if (sendMessage)
player.sendMessage(ChatUtil.colorPrefix(main.messageFile.config.getString("YOU-CANNOT-PLACE-HERE")));
return false;
}
return true;
}
private void removeBucket(Player player, ItemStack item) {
int genBuckets = item.getAmount();
if (genBuckets > 1)
item.setAmount(genBuckets - 1);
else
player.getInventory().clear(player.getInventory().getHeldItemSlot());
player.updateInventory();
}
protected boolean canPlayerPlaceAGenbucket(Player player) {
if (GenbucketManager.getActiveGenBuckets(player) >= maxActiveGenForPlayer(player) + 1) {
player.sendMessage(ChatUtil.colorPrefix(main.messageFile.config.getString("YOU-MUST-WAIT")));
return false;
}
return true;
}
protected void notifyAdmins(Player target) {
for (UUID uuid : GenbucketManager.adminList) {
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(uuid);
if (!offlinePlayer.isOnline())
continue;
offlinePlayer.getPlayer().sendMessage(ChatUtil.colorPrefix(main.messageFile.config.getString("ADMIN-MESSAGE").replace("{player}", target.getName()).replace("{type}", genbucketType.toString().toLowerCase())));
}
}
protected boolean withdrawMoney(Player player, GenbucketItem item) {
boolean useInfinityGens = main.getConfig().getBoolean("INFINITE-USE");
if (!useInfinityGens) {
removeBucket(player, player.getInventory().getItem(player.getInventory().getHeldItemSlot()));
return true;
}
double playerBalance = main.getBalance(player);
if (playerBalance >= item.getPrice()) {
main.withdrawBalance(player, item.getPrice(), true);
return true;
} else {
player.sendMessage(ChatUtil.colorPrefix(main.messageFile.config.getString("NOT-ENOUGH-MONEY").replace("{money}", String.valueOf((playerBalance - item.getPrice()) * -1))));
return false;
}
}
private int maxActiveGenForPlayer(Player player) {
int maxActiveGenForPlayer = 0;
boolean foundValue = false;
for (String maxAmountString : main.getConfig().getConfigurationSection("CUSTOM-ACTIVE-GEN-PER-PLAY").getKeys(false)) {
String value[] = main.getConfig().getString("CUSTOM-ACTIVE-GEN-PER-PLAY." + maxAmountString).split(":");
if (!player.hasPermission(value[1]))
continue;
maxActiveGenForPlayer = Integer.valueOf(value[0]);
foundValue = true;
break;
}
if (!foundValue)
maxActiveGenForPlayer = main.getConfig().getInt("MAX-ACTIVE-GEN-PER-PLAYER");
//ChatUtil.debugMSG(player, maxActiveGenForPlayer, foundValue);
return maxActiveGenForPlayer;
}
protected boolean foundSponge(Location loc) {
boolean useSponge = main.getConfig().getBoolean("USE-SPONGE-SUPPORT");
if (!useSponge)
return false;
int radius = main.getConfig().getInt("SPONGE-RADIUS");
if (radius < 0)
return false;
for (double x = loc.getX() - radius; x < loc.getX() + radius; x++) {
for (double y = loc.getY() - radius; y < loc.getY() + radius; y++) {
for (double z = loc.getZ() - radius; z < loc.getZ() + radius; z++) {
Material materialAt = new Location(loc.getWorld(), x, y, z).getBlock().getType();
if (materialAt.equals(Material.SPONGE))
return true;
}
}
}
return false;
}
protected Block moveBlock(Block b, BlockFace blockFace, int length) {
switch (blockFace) {
case NORTH:
return b.getRelative(0, 0, -length);
case SOUTH:
return b.getRelative(0, 0, length);
case EAST:
return b.getRelative(length, 0, 0);
case WEST:
return b.getRelative(-length, 0, 0);
}
return null;
}
protected Block getLastBlockPlaced(Block b, BlockFace blockFace) {
switch (blockFace) {
case NORTH:
return b.getRelative(0, 0, -1);
case SOUTH:
return b.getRelative(0, 0, 1);
case EAST:
return b.getRelative(1, 0, 0);
case WEST:
return b.getRelative(-1, 0, 0);
}
return null;
}
}