Add Scavenger Kit to SG

This commit is contained in:
Spencer 2017-12-31 20:12:23 -05:00 committed by Alexander Meech
parent 087640ce1a
commit d1c147b025
2 changed files with 248 additions and 0 deletions

View File

@ -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);
}
}

View File

@ -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;
}
}
}