Add Scavenger Kit to SG
This commit is contained in:
parent
087640ce1a
commit
d1c147b025
@ -0,0 +1,30 @@
|
||||
package nautilus.game.arcade.game.games.survivalgames.kit;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.kit.KitAvailability;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
import nautilus.game.arcade.kit.perks.PerkItemBreakdown;
|
||||
|
||||
public class KitScavenger extends SurvivalGamesKit
|
||||
{
|
||||
private static final String[] DESCRIPTION = {
|
||||
"Break down items for their parts!",
|
||||
"",
|
||||
"Left click a crafting table with items",
|
||||
"to break them down."
|
||||
};
|
||||
|
||||
private static final Perk[] PERKS = {
|
||||
new PerkItemBreakdown()
|
||||
};
|
||||
|
||||
private static final ItemStack IN_HAND = new ItemStack(Material.WORKBENCH);
|
||||
|
||||
public KitScavenger(ArcadeManager manager)
|
||||
{
|
||||
super(manager, "Scavenger", KitAvailability.Gem, 4000, DESCRIPTION, PERKS, IN_HAND);
|
||||
}
|
||||
}
|
@ -0,0 +1,218 @@
|
||||
package nautilus.game.arcade.kit.perks;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilItem;
|
||||
import mineplex.core.itemstack.ItemStackFactory;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
|
||||
public class PerkItemBreakdown extends Perk
|
||||
{
|
||||
private static final Random random = new Random();
|
||||
|
||||
// 90 seconds
|
||||
private static final long ABILITY_COOLDOWN = 90000;
|
||||
|
||||
public PerkItemBreakdown()
|
||||
{
|
||||
super("Item Breakdown", new String[] {
|
||||
C.cYellow + "Left Click " + C.mBody + "a crafting table",
|
||||
"with weapons, armor, and some food",
|
||||
"to scavenge it for parts!"
|
||||
});
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onWorkbenchClick(PlayerInteractEvent event)
|
||||
{
|
||||
if (event.getPlayer() == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.getAction() != Action.LEFT_CLICK_BLOCK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.getClickedBlock() == null || event.getClickedBlock().getType() != Material.WORKBENCH)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!hasPerk(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ItemStack item = player.getItemInHand();
|
||||
|
||||
if (item == null || item.getType() == Material.AIR)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int maxReturn;
|
||||
if (UtilItem.isHelmet(item))
|
||||
{
|
||||
maxReturn = 5;
|
||||
}
|
||||
else if (UtilItem.isChestplate(item))
|
||||
{
|
||||
maxReturn = 8;
|
||||
}
|
||||
else if (UtilItem.isLeggings(item))
|
||||
{
|
||||
maxReturn = 7;
|
||||
}
|
||||
else if (UtilItem.isBoots(item))
|
||||
{
|
||||
maxReturn = 4;
|
||||
}
|
||||
else if (UtilItem.isSword(item))
|
||||
{
|
||||
maxReturn = 2;
|
||||
}
|
||||
else if (UtilItem.isAxe(item))
|
||||
{
|
||||
maxReturn = 3;
|
||||
}
|
||||
else if (item.getType() == Material.BOW)
|
||||
{
|
||||
// for the string that makes the bow
|
||||
maxReturn = 3;
|
||||
}
|
||||
else if (item.getType() == Material.FISHING_ROD)
|
||||
{
|
||||
maxReturn = 2;
|
||||
}
|
||||
else if (item.getType() == Material.RAW_CHICKEN)
|
||||
{
|
||||
maxReturn = 2;
|
||||
}
|
||||
else if (item.getType() == Material.RAW_BEEF)
|
||||
{
|
||||
maxReturn = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Recharge.Instance.usable(player, GetName()))
|
||||
{
|
||||
player.sendMessage(F.main(GetName(), "You can't break that item down."));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Recharge.Instance.use(player, GetName(), ABILITY_COOLDOWN, true, false))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Multiply max return by the percent of durability remaining to get the new max return,
|
||||
// but it can't be less than 1.
|
||||
// Turns out SG does not have durability, but keep this in case we ever add it.
|
||||
//maxReturn = Math.min(1, (int) Math.floor(maxReturn * ((item.getType().getMaxDurability() - item.getDurability()) / item.getType().getMaxDurability())));
|
||||
|
||||
int returnAmount = random.nextInt(maxReturn) + 1;
|
||||
|
||||
Material returnMat;
|
||||
|
||||
if (item.getType() == Material.BOW || item.getType() == Material.FISHING_ROD)
|
||||
{
|
||||
returnMat = Material.STRING;
|
||||
}
|
||||
else if (UtilItem.isDiamondProduct(item))
|
||||
{
|
||||
returnMat = Material.DIAMOND;
|
||||
}
|
||||
else if (UtilItem.isIronProduct(item))
|
||||
{
|
||||
returnMat = Material.IRON_INGOT;
|
||||
}
|
||||
else if (UtilItem.isChainmailProduct(item))
|
||||
{
|
||||
returnMat = Material.IRON_INGOT;
|
||||
returnAmount = Math.floorDiv(returnAmount, 2);
|
||||
}
|
||||
else if (UtilItem.isGoldProduct(item))
|
||||
{
|
||||
returnMat = Material.GOLD_INGOT;
|
||||
}
|
||||
else if (UtilItem.isStoneProduct(item))
|
||||
{
|
||||
returnMat = Material.FLINT;
|
||||
}
|
||||
else if (UtilItem.isLeatherProduct(item))
|
||||
{
|
||||
returnMat = Material.LEATHER;
|
||||
}
|
||||
else if (UtilItem.isWoodProduct(item))
|
||||
{
|
||||
returnMat = Material.STICK;
|
||||
}
|
||||
else if (item.getType() == Material.RAW_CHICKEN)
|
||||
{
|
||||
returnMat = Material.FEATHER;
|
||||
}
|
||||
else if (item.getType() == Material.RAW_BEEF)
|
||||
{
|
||||
returnMat = Material.LEATHER;
|
||||
}
|
||||
else
|
||||
{
|
||||
player.sendMessage(F.main(GetName(), "Something went wrong, couldn't break down your item."));
|
||||
return;
|
||||
}
|
||||
|
||||
ItemStack returningItem = new ItemStack(returnMat, Math.max(returnAmount, 1));
|
||||
|
||||
if (item.getAmount() == 1)
|
||||
{
|
||||
player.setItemInHand(new ItemStack(Material.AIR));
|
||||
}
|
||||
else
|
||||
{
|
||||
item.setAmount(item.getAmount() - 1);
|
||||
}
|
||||
|
||||
player.getInventory().addItem(returningItem);
|
||||
|
||||
player.playSound(player.getLocation(), Sound.ANVIL_BREAK, 1F, 1F);
|
||||
|
||||
// "You broke your Diamond Sword into 3 Diamonds!"
|
||||
player.sendMessage(F.main(GetName(),
|
||||
"You broke your "
|
||||
+ F.elem(ItemStackFactory.Instance.GetName(item, true))
|
||||
+ C.mBody + " into "
|
||||
+ F.elem(returnAmount
|
||||
+ " "
|
||||
+ ItemStackFactory.Instance.GetName(returnMat, (byte) 0, true))
|
||||
+ C.mBody + "!"));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onBlockBreak(BlockBreakEvent event)
|
||||
{
|
||||
if (event.getPlayer() == null || event.getBlock() == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user