Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Index: java/com/l2jserver/gameserver/model/DropProtection.java
- ===================================================================
- --- java/com/l2jserver/gameserver/model/DropProtection.java (revision 0)
- +++ java/com/l2jserver/gameserver/model/DropProtection.java (revision 0)
- @@ -0,0 +1,95 @@
- +/*
- + * This program is free software: you can redistribute it and/or modify it under
- + * the terms of the GNU General Public License as published by the Free Software
- + * Foundation, either version 3 of the License, or (at your option) any later
- + * version.
- + *
- + * This program is distributed in the hope that it will be useful, but WITHOUT
- + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License along with
- + * this program. If not, see <http://www.gnu.org/licenses/>.
- + */
- +package com.l2jserver.gameserver.model;
- +
- +import java.util.concurrent.ScheduledFuture;
- +
- +import com.l2jserver.gameserver.ThreadPoolManager;
- +import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
- +import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
- +
- +/**
- + *
- + * @author DrHouse
- + *
- + */
- +public class DropProtection implements Runnable
- +{
- + private volatile boolean _isProtected = false;
- + private L2PcInstance _owner = null;
- + private ScheduledFuture<?> _task = null;
- +
- + private static final long PROTECTED_MILLIS_TIME = 15000;
- +
- + public synchronized void run()
- + {
- + _isProtected = false;
- + _owner = null;
- + _task = null;
- + }
- +
- + public boolean isProtected()
- + {
- + return _isProtected;
- + }
- +
- + public L2PcInstance getOwner()
- + {
- + return _owner;
- + }
- +
- + public synchronized boolean tryPickUp(L2PcInstance actor)
- + {
- + if (!_isProtected)
- + return true;
- +
- + if (_owner == actor)
- + return true;
- +
- + if (_owner.getParty() != null && _owner.getParty() == actor.getParty())
- + return true;
- +
- + if (_owner.getClan() != null && _owner.getClan() == actor.getClan())
- + return true;
- +
- + return false;
- + }
- +
- + public boolean tryPickUp(L2PetInstance pet)
- + {
- + return tryPickUp(pet.getOwner());
- + }
- +
- + public synchronized void unprotect()
- + {
- + if (_task != null)
- + _task.cancel(false);
- + _isProtected = false;
- + _owner = null;
- + _task = null;
- + }
- +
- + public synchronized void protect(L2PcInstance player)
- + {
- + unprotect();
- +
- + _isProtected = true;
- +
- + if ((_owner = player) == null)
- + throw new NullPointerException("Trying to protect dropped item to null owner");
- +
- + _task = ThreadPoolManager.getInstance().scheduleGeneral(this, PROTECTED_MILLIS_TIME);
- + }
- +}
- Index: java/com/l2jserver/gameserver/model/L2ItemInstance.java
- ===================================================================
- --- java/com/l2jserver/gameserver/model/L2ItemInstance.java (revision 4578)
- +++ java/com/l2jserver/gameserver/model/L2ItemInstance.java (working copy)
- @@ -158,6 +158,8 @@
- private ScheduledFuture<?> itemLootShedule = null;
- public ScheduledFuture<?> _lifeTimeTask;
- +
- + private final DropProtection _dropProtection = new DropProtection();
- /**
- * Constructor of the L2ItemInstance from the objectId and the itemId.
- * @param objectId : int designating the ID of the object in the world
- @@ -1891,6 +1893,11 @@
- activeChar.sendPacket(new SpawnItem(this));
- }
- + public final DropProtection getDropProtection()
- + {
- + return _dropProtection;
- + }
- +
- public boolean isPublished()
- {
- return _published;
- Index: java/com/l2jserver/gameserver/model/actor/L2Attackable.java
- ===================================================================
- --- java/com/l2jserver/gameserver/model/actor/L2Attackable.java (revision 4578)
- +++ java/com/l2jserver/gameserver/model/actor/L2Attackable.java (working copy)
- @@ -595,19 +595,13 @@
- if (getAggroList().isEmpty())
- return;
- - // Manage Base, Quests and Sweep drops of the L2Attackable
- - doItemDrop(lastAttacker);
- -
- - // Manage drop of Special Events created by GM for a defined period
- - doEventDrop(lastAttacker);
- -
- - if (!getMustRewardExpSP())
- - return;
- -
- int damage;
- L2Character attacker, ddealer;
- RewardInfo reward;
- + L2PcInstance maxDealer = null;
- + int maxDamage = 0;
- +
- // While Interating over This Map Removing Object is Not Allowed
- //synchronized (getAggroList())
- {
- @@ -644,9 +638,25 @@
- reward.addDamage(damage);
- rewards.put(ddealer, reward);
- +
- + if (ddealer.getActingPlayer() != null && reward._dmg > maxDamage)
- + {
- + maxDealer = ddealer.getActingPlayer();
- + maxDamage = reward._dmg;
- + }
- }
- }
- }
- +
- + // Manage Base, Quests and Sweep drops of the L2Attackable
- + doItemDrop(maxDealer != null && maxDealer.isOnline() == true ? maxDealer : lastAttacker);
- +
- + // Manage drop of Special Events created by GM for a defined period
- + doEventDrop(lastAttacker);
- +
- + if (!getMustRewardExpSP())
- + return;
- +
- if (!rewards.isEmpty())
- {
- L2Party attackerParty;
- @@ -1575,9 +1585,9 @@
- return null;
- }
- - public void doItemDrop(L2Character lastAttacker)
- + public void doItemDrop(L2Character mainDamageDealer)
- {
- - doItemDrop(getTemplate(),lastAttacker);
- + doItemDrop(getTemplate(),mainDamageDealer);
- }
- /**
- @@ -1599,12 +1609,12 @@
- *
- * @param lastAttacker The L2Character that has killed the L2Attackable
- */
- - public void doItemDrop(L2NpcTemplate npcTemplate, L2Character lastAttacker)
- + public void doItemDrop(L2NpcTemplate npcTemplate, L2Character mainDamageDealer)
- {
- - if (lastAttacker == null)
- + if (mainDamageDealer == null)
- return;
- - L2PcInstance player = lastAttacker.getActingPlayer();
- + L2PcInstance player = mainDamageDealer.getActingPlayer();
- // Don't drop anything if the last attacker or owner isn't L2PcInstance
- if (player == null)
- @@ -1780,7 +1790,7 @@
- /**
- * Drop reward item.
- */
- - public L2ItemInstance dropItem(L2PcInstance lastAttacker, RewardItem item)
- + public L2ItemInstance dropItem(L2PcInstance mainDamageDealer, RewardItem item)
- {
- int randDropLim = 70;
- @@ -1790,12 +1800,13 @@
- // Randomize drop position
- int newX = getX() + Rnd.get(randDropLim * 2 + 1) - randDropLim;
- int newY = getY() + Rnd.get(randDropLim * 2 + 1) - randDropLim;
- - int newZ = Math.max(getZ(), lastAttacker.getZ()) + 20; // TODO: temp hack, do somethign nicer when we have geodatas
- + int newZ = Math.max(getZ(), mainDamageDealer.getZ()) + 20; // TODO: temp hack, do somethign nicer when we have geodatas
- if (ItemTable.getInstance().getTemplate(item.getItemId()) != null)
- {
- // Init the dropped L2ItemInstance and add it in the world as a visible object at the position where mob was last
- - ditem = ItemTable.getInstance().createItem("Loot", item.getItemId(), item.getCount(), lastAttacker, this);
- + ditem = ItemTable.getInstance().createItem("Loot", item.getItemId(), item.getCount(), mainDamageDealer, this);
- + ditem.getDropProtection().protect(mainDamageDealer);
- ditem.dropMe(this, newX, newY, newZ);
- // Add drop to auto destroy item task
- Index: java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
- ===================================================================
- --- java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (revision 4578)
- +++ java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (working copy)
- @@ -523,11 +523,11 @@
- private int _transformationId = 0;
- /** The table containing all L2RecipeList of the L2PcInstance */
- - private Map<Integer, L2RecipeList> _dwarvenRecipeBook = new FastMap<Integer, L2RecipeList>();
- - private Map<Integer, L2RecipeList> _commonRecipeBook = new FastMap<Integer, L2RecipeList>();
- + private final Map<Integer, L2RecipeList> _dwarvenRecipeBook = new FastMap<Integer, L2RecipeList>();
- + private final Map<Integer, L2RecipeList> _commonRecipeBook = new FastMap<Integer, L2RecipeList>();
- /** Premium Items */
- - private Map<Integer, L2PremiumItem> _premiumItems = new FastMap<Integer, L2PremiumItem>();
- + private final Map<Integer, L2PremiumItem> _premiumItems = new FastMap<Integer, L2PremiumItem>();
- /** True if the L2PcInstance is sitting */
- private boolean _waitTypeSitting;
- @@ -539,7 +539,7 @@
- private boolean _observerMode = false;
- /** Stored from last ValidatePosition **/
- - private Point3D _lastServerPosition = new Point3D(0, 0, 0);
- + private final Point3D _lastServerPosition = new Point3D(0, 0, 0);
- /** The number of recommendation obtained by the L2PcInstance */
- private int _recomHave; // how much I was recommended by others
- @@ -552,7 +552,7 @@
- /** Recommendation Two Hours bonus **/
- private boolean _recoTwoHoursGiven = false;
- - private PcInventory _inventory = new PcInventory(this);
- + private final PcInventory _inventory = new PcInventory(this);
- private PcWarehouse _warehouse;
- private PcRefund _refund;
- @@ -581,16 +581,16 @@
- private int _questNpcObject = 0;
- /** The table containing all Quests began by the L2PcInstance */
- - private Map<String, QuestState> _quests = new FastMap<String, QuestState>();
- + private final Map<String, QuestState> _quests = new FastMap<String, QuestState>();
- /** The list containing all shortCuts of this L2PcInstance */
- - private ShortCuts _shortCuts = new ShortCuts(this);
- + private final ShortCuts _shortCuts = new ShortCuts(this);
- /** The list containing all macroses of this L2PcInstance */
- - private MacroList _macroses = new MacroList(this);
- + private final MacroList _macroses = new MacroList(this);
- - private List<L2PcInstance> _snoopListener = new FastList<L2PcInstance>();
- - private List<L2PcInstance> _snoopedPlayer = new FastList<L2PcInstance>();
- + private final List<L2PcInstance> _snoopListener = new FastList<L2PcInstance>();
- + private final List<L2PcInstance> _snoopedPlayer = new FastList<L2PcInstance>();
- private ClassId _skillLearningClassId;
- @@ -656,7 +656,7 @@
- private int _deathPenaltyBuffLevel = 0;
- // charges
- - private AtomicInteger _charges = new AtomicInteger();
- + private final AtomicInteger _charges = new AtomicInteger();
- private ScheduledFuture<?> _chargeTask = null;
- // Absorbed Souls
- @@ -681,7 +681,7 @@
- // there can only be one active party request at once
- private L2PcInstance _activeRequester;
- private long _requestExpireTime = 0;
- - private L2Request _request = new L2Request(this);
- + private final L2Request _request = new L2Request(this);
- private L2ItemInstance _arrowItem;
- private L2ItemInstance _boltItem;
- @@ -737,10 +737,10 @@
- private byte _handysBlockCheckerEventArena = -1;
- /** new loto ticket **/
- - private int _loto[] = new int[5];
- + private final int _loto[] = new int[5];
- //public static int _loto_nums[] = {0,1,2,3,4,5,6,7,8,9,};
- /** new race ticket **/
- - private int _race[] = new int[2];
- + private final int _race[] = new int[2];
- private final BlockList _blockList = new BlockList(this);
- @@ -762,8 +762,8 @@
- private ScheduledFuture<?> _taskWater;
- /** Bypass validations */
- - private List<String> _validBypass = new FastList<String>();
- - private List<String> _validBypass2 = new FastList<String>();
- + private final List<String> _validBypass = new FastList<String>();
- + private final List<String> _validBypass2 = new FastList<String>();
- private Forum _forumMail;
- private Forum _forumMemo;
- @@ -861,6 +861,7 @@
- }
- + @Override
- public void run()
- {
- try
- @@ -896,11 +897,11 @@
- private class HerbTask implements Runnable
- {
- - private String _process;
- - private int _itemId;
- - private long _count;
- - private L2Object _reference;
- - private boolean _sendMessage;
- + private final String _process;
- + private final int _itemId;
- + private final long _count;
- + private final L2Object _reference;
- + private final boolean _sendMessage;
- HerbTask(String process, int itemId, long count, L2Object reference, boolean sendMessage)
- {
- @@ -911,6 +912,7 @@
- _sendMessage = sendMessage;
- }
- + @Override
- public void run()
- {
- try
- @@ -929,6 +931,7 @@
- private class ShortBuffTask implements Runnable
- {
- + @Override
- public void run()
- {
- if (L2PcInstance.this == null)
- @@ -951,9 +954,9 @@
- /** Skill casting information (used to queue when several skills are cast in a short time) **/
- public static class SkillDat
- {
- - private L2Skill _skill;
- - private boolean _ctrlPressed;
- - private boolean _shiftPressed;
- + private final L2Skill _skill;
- + private final boolean _ctrlPressed;
- + private final boolean _shiftPressed;
- protected SkillDat(L2Skill skill, boolean ctrlPressed, boolean shiftPressed)
- {
- @@ -984,7 +987,7 @@
- }
- //summon friend
- - private SummonRequest _summonRequest = new SummonRequest();
- + private final SummonRequest _summonRequest = new SummonRequest();
- private static class SummonRequest
- {
- @@ -1009,7 +1012,7 @@
- }
- // open/close gates
- - private GatesRequest _gatesRequest = new GatesRequest();
- + private final GatesRequest _gatesRequest = new GatesRequest();
- private static class GatesRequest
- {
- @@ -3110,6 +3113,7 @@
- */
- private class SitDownTask implements Runnable
- {
- + @Override
- public void run()
- {
- L2PcInstance.this.setIsParalyzed(false);
- @@ -3121,6 +3125,7 @@
- */
- private class StandUpTask implements Runnable
- {
- + @Override
- public void run()
- {
- L2PcInstance.this.setIsSitting(false);
- @@ -3454,7 +3459,7 @@
- // If over capacity, drop the item
- if (!isGM() && !_inventory.validateCapacity(0, item.isQuestItem()) && newitem.isDropable() && (!newitem.isStackable() || newitem.getLastChange() != L2ItemInstance.MODIFIED))
- - dropItem("InvDrop", newitem, null, true);
- + dropItem("InvDrop", newitem, null, true, true);
- // Cursed Weapon
- else if(CursedWeaponsManager.getInstance().isCursed(newitem.getItemId()))
- @@ -3859,9 +3864,10 @@
- * @param item : L2ItemInstance to be dropped
- * @param reference : L2Object Object referencing current action like NPC selling item or previous item in transformation
- * @param sendMessage : boolean Specifies whether to send message to Client about this action
- + * @param protectItem: whether or not dropped item must be protected temporary against other players
- * @return boolean informing if the action was successfull
- */
- - public boolean dropItem(String process, L2ItemInstance item, L2Object reference, boolean sendMessage)
- + public boolean dropItem(String process, L2ItemInstance item, L2Object reference, boolean sendMessage, boolean protectItem)
- {
- item = _inventory.dropItem(process, item, this, reference);
- @@ -3875,19 +3881,27 @@
- item.dropMe(this, getX() + Rnd.get(50) - 25, getY() + Rnd.get(50) - 25, getZ() + 20);
- - if (Config.AUTODESTROY_ITEM_AFTER >0 && Config.DESTROY_DROPPED_PLAYER_ITEM && !Config.LIST_PROTECTED_ITEMS.contains(item.getItemId()))
- - {
- - if ( (item.isEquipable() && Config.DESTROY_EQUIPABLE_PLAYER_ITEM) || !item.isEquipable())
- + if (Config.AUTODESTROY_ITEM_AFTER > 0
- + && Config.DESTROY_DROPPED_PLAYER_ITEM
- + && !Config.LIST_PROTECTED_ITEMS.contains(item.getItemId())) {
- + if ((item.isEquipable() && Config.DESTROY_EQUIPABLE_PLAYER_ITEM)
- + || !item.isEquipable())
- ItemsAutoDestroy.getInstance().addItem(item);
- }
- - if (Config.DESTROY_DROPPED_PLAYER_ITEM){
- - if (!item.isEquipable() || (item.isEquipable() && Config.DESTROY_EQUIPABLE_PLAYER_ITEM ))
- +
- + // protection against auto destroy dropped item
- + if (Config.DESTROY_DROPPED_PLAYER_ITEM) {
- + if (!item.isEquipable()
- + || (item.isEquipable() && Config.DESTROY_EQUIPABLE_PLAYER_ITEM))
- item.setProtected(false);
- else
- item.setProtected(true);
- - }
- - else
- + } else
- item.setProtected(true);
- +
- + // retail drop protection
- + if (protectItem)
- + item.getDropProtection().protect(this);
- // Send inventory update packet
- if (!Config.FORCE_INVENTORY_UPDATE)
- @@ -3914,6 +3928,11 @@
- return true;
- }
- + public boolean dropItem(String process, L2ItemInstance item, L2Object reference, boolean sendMessage)
- + {
- + return dropItem(process, item, reference, sendMessage, false);
- + }
- +
- /**
- * Drop item from inventory by using its <B>objectID</B> and send a Server->Client InventoryUpdate packet to the L2PcInstance.
- * @param process : String Identifier of process triggering this action
- @@ -3926,7 +3945,7 @@
- * @param sendMessage : boolean Specifies whether to send message to Client about this action
- * @return L2ItemInstance corresponding to the new item or the updated item in inventory
- */
- - public L2ItemInstance dropItem(String process, int objectId, long count, int x, int y, int z, L2Object reference, boolean sendMessage)
- + public L2ItemInstance dropItem(String process, int objectId, long count, int x, int y, int z, L2Object reference, boolean sendMessage, boolean protectItem)
- {
- L2ItemInstance invitem = _inventory.getItemByObjectId(objectId);
- L2ItemInstance item = _inventory.dropItem(process, objectId, count, this, reference);
- @@ -3955,6 +3974,10 @@
- else
- item.setProtected(true);
- + // retail drop protection
- + if (protectItem)
- + item.getDropProtection().protect(this);
- +
- // Send inventory update packet
- if (!Config.FORCE_INVENTORY_UPDATE)
- {
- @@ -4511,6 +4534,7 @@
- /**
- * @see java.lang.Runnable#run()
- */
- + @Override
- public void run()
- {
- L2GameClient client = L2PcInstance.this.getClient();
- @@ -4652,6 +4676,15 @@
- sendPacket(ActionFailed.STATIC_PACKET);
- return;
- }
- +
- + if (!target.getDropProtection().tryPickUp(this))
- + {
- + sendPacket(ActionFailed.STATIC_PACKET);
- + SystemMessage smsg = SystemMessage.getSystemMessage(SystemMessageId.FAILED_TO_PICKUP_S1);
- + smsg.addItemName(target);
- + sendPacket(smsg);
- + return;
- + }
- if ( ((isInParty() && getParty().getLootDistribution() == L2Party.ITEM_LOOTER) || !isInParty()) && !_inventory.validateCapacity(target))
- {
- @@ -9562,6 +9595,7 @@
- private class InventoryEnable implements Runnable
- {
- + @Override
- public void run()
- {
- _inventoryDisable = false;
- @@ -9803,6 +9837,7 @@
- private class WarnUserTakeBreak implements Runnable
- {
- + @Override
- public void run()
- {
- if (L2PcInstance.this.isOnline())
- @@ -9817,6 +9852,7 @@
- private class RentPetTask implements Runnable
- {
- + @Override
- public void run()
- {
- stopRentPet();
- @@ -9825,6 +9861,7 @@
- private class WaterTask implements Runnable
- {
- + @Override
- public void run()
- {
- double reduceHp = getMaxHp()/100.0;
- @@ -9856,6 +9893,7 @@
- _isUpperGrade = isUpperGrade;
- }
- + @Override
- public void run()
- {
- if (System.currentTimeMillis() >= _endTaskTime) {
- @@ -11177,6 +11215,7 @@
- _player = L2PcInstance.this;
- }
- + @Override
- public void run()
- {
- if (_player == null || !_player.isTeleporting())
- @@ -12626,6 +12665,7 @@
- private class PunishTask implements Runnable
- {
- + @Override
- public void run()
- {
- L2PcInstance.this.setPunishLevel(PunishLevel.NONE, 0);
- @@ -12660,6 +12700,7 @@
- _value = value;
- }
- + @Override
- public void run()
- {
- if (_player == null || (_player.isDead() && !Config.FAME_FOR_DEAD_PLAYERS))
- @@ -12701,6 +12742,7 @@
- _player = player;
- }
- + @Override
- public void run()
- {
- if (!_player.isInsideZone(L2Character.ZONE_PEACE))
- @@ -12891,6 +12933,7 @@
- private class SoulTask implements Runnable
- {
- + @Override
- public void run()
- {
- L2PcInstance.this.clearSouls();
- @@ -12997,7 +13040,7 @@
- addSkill(SkillTable.getInstance().getInfo(5076, getDeathPenaltyBuffLevel()), false);
- }
- - private FastMap<Integer, TimeStamp> _reuseTimeStamps = new FastMap<Integer, TimeStamp>().shared();
- + private final FastMap<Integer, TimeStamp> _reuseTimeStamps = new FastMap<Integer, TimeStamp>().shared();
- private boolean _canFeed;
- private int _eventEffectId = 0;
- private boolean _isInSiege;
- @@ -13474,6 +13517,7 @@
- /** Section for mounted pets */
- private class FeedTask implements Runnable
- {
- + @Override
- public void run()
- {
- try
- @@ -13616,6 +13660,7 @@
- private class Dismount implements Runnable
- {
- + @Override
- public void run()
- {
- try
- @@ -13815,6 +13860,7 @@
- private class ChargeTask implements Runnable
- {
- + @Override
- public void run()
- {
- L2PcInstance.this.clearCharges();
- @@ -14330,7 +14376,7 @@
- * list of character friends
- *
- */
- - private List<Integer> _friendList = new FastList<Integer>();
- + private final List<Integer> _friendList = new FastList<Integer>();
- public List<Integer> getFriendList()
- {
- @@ -15023,6 +15069,7 @@
- private class RecoGiveTask implements Runnable
- {
- + @Override
- public void run()
- {
- if (L2PcInstance.this == null)
- @@ -15051,6 +15098,7 @@
- private class RecoBonusTaskEnd implements Runnable
- {
- + @Override
- public void run()
- {
- if (L2PcInstance.this == null)
- Index: java/com/l2jserver/gameserver/model/actor/instance/L2PetInstance.java
- ===================================================================
- --- java/com/l2jserver/gameserver/model/actor/instance/L2PetInstance.java (revision 4578)
- +++ java/com/l2jserver/gameserver/model/actor/instance/L2PetInstance.java (working copy)
- @@ -766,16 +766,23 @@
- }
- }
- - public void dropItemHere(L2ItemInstance dropit)
- + public void dropItemHere(L2ItemInstance dropit, boolean protect)
- {
- dropit = getInventory().dropItem("Drop", dropit.getObjectId(), dropit.getCount(), getOwner(), this);
- if (dropit != null)
- {
- + if (protect)
- + dropit.getDropProtection().protect(getOwner());
- _logPet.finer("Item id to drop: "+dropit.getItemId()+" amount: "+dropit.getCount());
- dropit.dropMe(this, getX(), getY(), getZ()+100);
- }
- }
- +
- + public void dropItemHere(L2ItemInstance dropit)
- + {
- + dropItemHere(dropit, false);
- + }
- /** @return Returns the mount able. */
- @Override
- Index: java/com/l2jserver/gameserver/network/clientpackets/RequestDropItem.java
- ===================================================================
- --- java/com/l2jserver/gameserver/network/clientpackets/RequestDropItem.java (revision 4578)
- +++ java/com/l2jserver/gameserver/network/clientpackets/RequestDropItem.java (working copy)
- @@ -200,7 +200,7 @@
- activeChar.sendPacket(il);
- }
- - L2ItemInstance dropedItem = activeChar.dropItem("Drop", _objectId, _count, _x, _y, _z, null, false);
- + L2ItemInstance dropedItem = activeChar.dropItem("Drop", _objectId, _count, _x, _y, _z, null, false, true);
- if (Config.DEBUG)
- _log.fine("dropping " + _objectId + " item(" + _count + ") at: " + _x + " " + _y + " " + _z);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement