123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 |
- /*
- * 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.itemcontainer;
- import javolution.util.FastList;
- import com.l2jserver.Config;
- import com.l2jserver.gameserver.model.L2Clan;
- import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
- import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
- import com.l2jserver.gameserver.model.items.instance.L2ItemInstance.ItemLocation;
- import com.l2jserver.gameserver.scripting.scriptengine.events.ClanWarehouseAddItemEvent;
- import com.l2jserver.gameserver.scripting.scriptengine.events.ClanWarehouseDeleteItemEvent;
- import com.l2jserver.gameserver.scripting.scriptengine.events.ClanWarehouseTransferEvent;
- import com.l2jserver.gameserver.scripting.scriptengine.listeners.clan.ClanWarehouseListener;
- public final class ClanWarehouse extends Warehouse
- {
- private final L2Clan _clan;
-
- private final FastList<ClanWarehouseListener> clanWarehouseListeners = new FastList<ClanWarehouseListener>().shared();
-
- public ClanWarehouse(L2Clan clan)
- {
- _clan = clan;
- }
-
- @Override
- public String getName()
- {
- return "ClanWarehouse";
- }
-
- @Override
- public int getOwnerId()
- {
- return _clan.getClanId();
- }
-
- @Override
- public L2PcInstance getOwner()
- {
- return _clan.getLeader().getPlayerInstance();
- }
-
- @Override
- public ItemLocation getBaseLocation()
- {
- return ItemLocation.CLANWH;
- }
-
- public String getLocationId()
- {
- return "0";
- }
-
- public int getLocationId(boolean dummy)
- {
- return 0;
- }
-
- public void setLocationId(L2PcInstance dummy)
- {
- }
-
- @Override
- public boolean validateCapacity(int slots)
- {
- return ((_items.size() + slots) <= Config.WAREHOUSE_SLOTS_CLAN);
- }
-
- @Override
- public L2ItemInstance addItem(String process, int itemId, long count, L2PcInstance actor, Object reference)
- {
- L2ItemInstance item = getItemByItemId(itemId);
- if (!fireClanWarehouseAddItemListeners(process, item, actor, count))
- {
- return null;
- }
- return super.addItem(process, itemId, count, actor, reference);
- }
-
- @Override
- public L2ItemInstance addItem(String process, L2ItemInstance item, L2PcInstance actor, Object reference)
- {
- if (!fireClanWarehouseAddItemListeners(process, item, actor, item.getCount()))
- {
- return null;
- }
- return super.addItem(process, item, actor, reference);
- }
-
- @Override
- public L2ItemInstance destroyItem(String process, L2ItemInstance item, long count, L2PcInstance actor, Object reference)
- {
- if (!fireClanWarehouseDeleteItemListeners(process, item, actor, count))
- {
- return null;
- }
- return super.destroyItem(process, item, count, actor, reference);
- }
-
- @Override
- public L2ItemInstance transferItem(String process, int objectId, long count, ItemContainer target, L2PcInstance actor, Object reference)
- {
- L2ItemInstance sourceitem = getItemByObjectId(objectId);
- if (!fireClanWarehouseTransferListeners(process, sourceitem, count, target, actor))
- {
- return null;
- }
- return super.transferItem(process, objectId, count, target, actor, reference);
- }
-
- // Listeners
- /**
- * Fires all the ClanWarehouse add item listeners, if any.<br>
- * Action is cancelled if it returns false
- * @param process
- * @param item
- * @param actor
- * @param count
- * @return
- */
- private boolean fireClanWarehouseAddItemListeners(String process, L2ItemInstance item, L2PcInstance actor, long count)
- {
- if (!clanWarehouseListeners.isEmpty() && actor != null && item != null)
- {
- ClanWarehouseAddItemEvent event = new ClanWarehouseAddItemEvent();
- event.setActor(actor);
- event.setItem(item);
- event.setCount(count);
- event.setProcess(process);
- for (ClanWarehouseListener listener : clanWarehouseListeners)
- {
- if (!listener.onAddItem(event))
- {
- return false;
- }
- }
- }
- return true;
- }
-
- /**
- * Fires all the ClanWarehouse delete item listeners, if any.<br>
- * Action is cancelled if it returns false
- * @param process
- * @param item
- * @param actor
- * @param count
- * @return
- */
- private boolean fireClanWarehouseDeleteItemListeners(String process, L2ItemInstance item, L2PcInstance actor, long count)
- {
- if (!clanWarehouseListeners.isEmpty() && actor != null && item != null)
- {
- ClanWarehouseDeleteItemEvent event = new ClanWarehouseDeleteItemEvent();
- event.setActor(actor);
- event.setCount(count);
- event.setItem(item);
- event.setProcess(process);
- for (ClanWarehouseListener listener : clanWarehouseListeners)
- {
- if (!listener.onDeleteItem(event))
- {
- return false;
- }
- }
- }
- return true;
- }
-
- /**
- * Fires all the ClanWarehouse transfer listeners, if any.<br>
- * Action is cancelled if it returns false
- * @param process
- * @param item
- * @param count
- * @param target
- * @param actor
- * @return
- */
- private boolean fireClanWarehouseTransferListeners(String process, L2ItemInstance item, long count, ItemContainer target, L2PcInstance actor)
- {
- if (!clanWarehouseListeners.isEmpty() && actor != null && item != null && target != null)
- {
- ClanWarehouseTransferEvent event = new ClanWarehouseTransferEvent();
- event.setActor(actor);
- event.setCount(count);
- event.setItem(item);
- event.setProcess(process);
- event.setTarget(target);
- for (ClanWarehouseListener listener : clanWarehouseListeners)
- {
- if (!listener.onTransferItem(event))
- {
- return false;
- }
- }
- }
- return true;
- }
-
- /**
- * Adds a clan warehouse listener
- * @param listener
- */
- public void addWarehouseListener(ClanWarehouseListener listener)
- {
- if (!clanWarehouseListeners.contains(listener))
- {
- clanWarehouseListeners.add(listener);
- }
- }
-
- /**
- * Removes a clan warehouse listener
- * @param listener
- */
- public void removeWarehouseListener(ClanWarehouseListener listener)
- {
- clanWarehouseListeners.remove(listener);
- }
- }
|