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:
@@ -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));
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -23,7 +23,9 @@ public class Commandgive extends EssentialsCommand
|
||||
throw new NotEnoughArgumentsException();
|
||||
}
|
||||
|
||||
final ItemStack stack = ess.getItemDb().get(args[1]);
|
||||
final IUser giveTo = getPlayer(args, 0);
|
||||
|
||||
final ItemStack stack = ess.getItemDb().get(args[1], giveTo);
|
||||
|
||||
final String itemname = stack.getType().toString().toLowerCase(Locale.ENGLISH).replace("_", "");
|
||||
if (sender instanceof Player
|
||||
@@ -33,33 +35,10 @@ public class Commandgive extends EssentialsCommand
|
||||
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)
|
||||
{
|
||||
@@ -89,16 +68,10 @@ 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();
|
||||
|
||||
}
|
||||
}
|
||||
|
@@ -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,31 +28,10 @@ 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)
|
||||
{
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
@@ -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())
|
||||
{
|
||||
|
@@ -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;
|
||||
|
@@ -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,10 +702,13 @@ 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;
|
||||
}
|
||||
|
@@ -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)
|
||||
|
Reference in New Issue
Block a user