1
0
mirror of https://github.com/essentials/Essentials.git synced 2025-08-15 11:04:29 +02:00

Cleaning up item spawning and kits.

This commit is contained in:
KHobbits
2012-01-04 17:51:14 +00:00
parent 6dd73f5247
commit de0a419476
10 changed files with 71 additions and 86 deletions

View File

@@ -3,10 +3,12 @@ package com.earth2me.essentials;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.api.IEssentials;
import com.earth2me.essentials.api.IItemDb;
import com.earth2me.essentials.api.IUser;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import lombok.Cleanup;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
@@ -58,6 +60,31 @@ public class ItemDb implements IItemDb
}
}
public ItemStack get(final String id, final IUser user) throws Exception
{
final ItemStack stack = get(id.toLowerCase(Locale.ENGLISH));
int defaultStackSize = 0;
int oversizedStackSize = 0;
@Cleanup
com.earth2me.essentials.api.ISettings settings = ess.getSettings();
settings.acquireReadLock();
defaultStackSize = settings.getData().getGeneral().getDefaultStacksize();
oversizedStackSize = settings.getData().getGeneral().getOversizedStacksize();
if (defaultStackSize > 0)
{
stack.setAmount(defaultStackSize);
}
else if (oversizedStackSize > 0 && user.isAuthorized("essentials.oversizedstacks"))
{
stack.setAmount(oversizedStackSize);
}
return stack;
}
public ItemStack get(final String id, final int quantity) throws Exception
{
final ItemStack retval = get(id.toLowerCase(Locale.ENGLISH));

View File

@@ -65,7 +65,7 @@ public class Kits extends AsyncStorageObjectHolder<com.earth2me.essentials.setti
public void sendKit(IUser user, Kit kit) throws Exception
{
final List<ItemStack> itemList = kit.getItems();
user.giveItems(itemList);
user.giveItems(itemList, true);
}
@Override

View File

@@ -5,6 +5,8 @@ import org.bukkit.inventory.ItemStack;
public interface IItemDb extends IReload
{
ItemStack get(final String name, final IUser user) throws Exception;
ItemStack get(final String name, final int quantity) throws Exception;
ItemStack get(final String name) throws Exception;

View File

@@ -30,9 +30,9 @@ public interface IUser extends Player, IStorageObjectHolder<UserData>, IReload,
void giveMoney(double value, CommandSender initiator);
void giveItems(ItemStack itemStack);
void giveItems(ItemStack itemStack, Boolean canSpew);
void giveItems(List<ItemStack> itemStacks);
void giveItems(List<ItemStack> itemStacks, Boolean canSpew);
void setMoney(double value);

View File

@@ -22,8 +22,10 @@ public class Commandgive extends EssentialsCommand
{
throw new NotEnoughArgumentsException();
}
final IUser giveTo = getPlayer(args, 0);
final ItemStack stack = ess.getItemDb().get(args[1]);
final ItemStack stack = ess.getItemDb().get(args[1], giveTo);
final String itemname = stack.getType().toString().toLowerCase(Locale.ENGLISH).replace("_", "");
if (sender instanceof Player
@@ -31,35 +33,12 @@ public class Commandgive extends EssentialsCommand
&& !ess.getUser((Player)sender).isAuthorized("essentials.give.item-" + stack.getTypeId())))
{
throw new Exception(ChatColor.RED + "You are not allowed to spawn the item " + itemname);
}
}
final IUser giveTo = getPlayer(args, 0);
int defaultStackSize = 0;
int oversizedStackSize = 0;
ISettings settings = ess.getSettings();
settings.acquireReadLock();
try
{
defaultStackSize = settings.getData().getGeneral().getDefaultStacksize();
oversizedStackSize = settings.getData().getGeneral().getOversizedStacksize();
}
finally
{
settings.unlock();
}
if (args.length > 2 && Integer.parseInt(args[2]) > 0)
{
stack.setAmount(Integer.parseInt(args[2]));
}
else if (defaultStackSize > 0)
{
stack.setAmount(defaultStackSize);
}
else if (oversizedStackSize > 0 && giveTo.isAuthorized("essentials.oversizedstacks"))
{
stack.setAmount(oversizedStackSize);
}
}
if (args.length > 3)
{
@@ -88,17 +67,11 @@ public class Commandgive extends EssentialsCommand
{
throw new Exception(ChatColor.RED + "You can't give air.");
}
giveTo.giveItems(stack, false);
final String itemName = stack.getType().toString().toLowerCase(Locale.ENGLISH).replace('_', ' ');
sender.sendMessage(ChatColor.BLUE + "Giving " + stack.getAmount() + " of " + itemName + " to " + giveTo.getDisplayName() + ".");
if (giveTo.isAuthorized("essentials.oversizedstacks"))
{
InventoryWorkaround.addItem(giveTo.getInventory(), true, oversizedStackSize, stack);
}
else
{
InventoryWorkaround.addItem(giveTo.getInventory(), true, stack);
}
giveTo.updateInventory();
}
}

View File

@@ -19,7 +19,7 @@ public class Commanditem extends EssentialsCommand
{
throw new NotEnoughArgumentsException();
}
final ItemStack stack = ess.getItemDb().get(args[0]);
final ItemStack stack = ess.getItemDb().get(args[0], user);
final String itemname = stack.getType().toString().toLowerCase(Locale.ENGLISH).replace("_", "");
if (!user.isAuthorized("essentials.itemspawn.item-" + itemname)
@@ -28,32 +28,11 @@ public class Commanditem extends EssentialsCommand
throw new Exception(_("cantSpawnItem", itemname));
}
int defaultStackSize = 0;
int oversizedStackSize = 0;
ISettings settings = ess.getSettings();
settings.acquireReadLock();
try
{
defaultStackSize = settings.getData().getGeneral().getDefaultStacksize();
oversizedStackSize = settings.getData().getGeneral().getOversizedStacksize();
}
finally
{
settings.unlock();
}
if (args.length > 1 && Integer.parseInt(args[1]) > 0)
{
stack.setAmount(Integer.parseInt(args[1]));
}
else if (defaultStackSize > 0)
{
stack.setAmount(defaultStackSize);
}
else if (oversizedStackSize > 0 && user.isAuthorized("essentials.oversizedstacks"))
{
stack.setAmount(oversizedStackSize);
}
if (args.length > 2)
{
for (int i = 2; i < args.length; i++)
@@ -82,16 +61,9 @@ public class Commanditem extends EssentialsCommand
throw new Exception(_("cantSpawnItem", "Air"));
}
user.giveItems(stack, false);
final String displayName = stack.getType().toString().toLowerCase(Locale.ENGLISH).replace('_', ' ');
user.sendMessage(_("itemSpawn", stack.getAmount(), displayName));
if (user.isAuthorized("essentials.oversizedstacks"))
{
InventoryWorkaround.addItem(user.getInventory(), true, oversizedStackSize, stack);
}
else
{
InventoryWorkaround.addItem(user.getInventory(), true, stack);
}
user.updateInventory();
user.sendMessage(_("itemSpawn", stack.getAmount(), displayName));
}
}

View File

@@ -19,7 +19,8 @@ public class Commandrealname extends EssentialsCommand
{
throw new NotEnoughArgumentsException();
}
@Cleanup final ISettings settings = ess.getSettings();
@Cleanup
final ISettings settings = ess.getSettings();
final String whois = args[0].toLowerCase(Locale.ENGLISH);
for (Player onlinePlayer : server.getOnlinePlayers())
{

View File

@@ -104,6 +104,7 @@ public class Commandunlimited extends EssentialsCommand
user.sendMessage(_(message, itemname, target.getDisplayName()));
}
target.sendMessage(_(message, itemname, target.getDisplayName()));
target.acquireWriteLock();
target.getData().setUnlimited(stack.getType(), enableUnlimited);
return true;

View File

@@ -654,21 +654,21 @@ public class User extends UserBase implements IUser
}
@Override
public void giveItems(ItemStack itemStack)
public void giveItems(ItemStack itemStack, Boolean canSpew)
{
if (giveItemStack(itemStack))
if (giveItemStack(itemStack, canSpew))
{
sendMessage(_("InvFull"));
}
}
@Override
public void giveItems(List<ItemStack> itemStacks)
public void giveItems(List<ItemStack> itemStacks, Boolean canSpew)
{
boolean spew = false;
for (ItemStack itemStack : itemStacks)
{
if (giveItemStack(itemStack))
if (giveItemStack(itemStack, canSpew))
{
spew = true;
}
@@ -679,9 +679,15 @@ public class User extends UserBase implements IUser
}
}
private boolean giveItemStack(ItemStack itemStack)
private boolean giveItemStack(ItemStack itemStack, Boolean canSpew)
{
boolean spew = false;
if (itemStack == null || itemStack.getType() == Material.AIR)
{
return spew;
}
final Map<Integer, ItemStack> overfilled;
if (isAuthorized("essentials.oversizedstacks"))
{
@@ -696,11 +702,14 @@ public class User extends UserBase implements IUser
{
overfilled = InventoryWorkaround.addItem(getInventory(), true, itemStack);
}
for (ItemStack overflowStack : overfilled.values())
if (canSpew)
{
getWorld().dropItemNaturally(getLocation(), overflowStack);
spew = true;
for (ItemStack overflowStack : overfilled.values())
{
getWorld().dropItemNaturally(getLocation(), overflowStack);
spew = true;
}
}
return spew;
}
}
}

View File

@@ -3,6 +3,7 @@ package com.earth2me.essentials.signs;
import com.earth2me.essentials.*;
import com.earth2me.essentials.api.IEssentials;
import com.earth2me.essentials.api.IUser;
import com.earth2me.essentials.settings.Kit;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -31,7 +32,7 @@ public class SignKit extends EssentialsSign
{
try
{
ess.getSettings().getKit(kitName);
ess.getKits().getKit(kitName);
}
catch (Exception ex)
{
@@ -58,10 +59,9 @@ public class SignKit extends EssentialsSign
charge.isAffordableFor(player);
try
{
final Object kit = ess.getSettings().getKit(kitName);
final Map<String, Object> els = (Map<String, Object>)kit;
final List<String> items = Kit.getItems(player, els);
Kit.expandItems(ess, player, items);
final Kit kit = ess.getKits().getKit(kitName);
ess.getKits().sendKit(player, kit);
charge.charge(player);
}
catch (Exception ex)