ClanWarehouse.java 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. /*
  2. * Copyright (C) 2004-2013 L2J Server
  3. *
  4. * This file is part of L2J Server.
  5. *
  6. * L2J Server is free software: you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation, either version 3 of the License, or
  9. * (at your option) any later version.
  10. *
  11. * L2J Server is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  18. */
  19. package com.l2jserver.gameserver.model.itemcontainer;
  20. import javolution.util.FastList;
  21. import com.l2jserver.Config;
  22. import com.l2jserver.gameserver.model.L2Clan;
  23. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  24. import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
  25. import com.l2jserver.gameserver.model.items.instance.L2ItemInstance.ItemLocation;
  26. import com.l2jserver.gameserver.scripting.scriptengine.events.ClanWarehouseAddItemEvent;
  27. import com.l2jserver.gameserver.scripting.scriptengine.events.ClanWarehouseDeleteItemEvent;
  28. import com.l2jserver.gameserver.scripting.scriptengine.events.ClanWarehouseTransferEvent;
  29. import com.l2jserver.gameserver.scripting.scriptengine.listeners.clan.ClanWarehouseListener;
  30. public final class ClanWarehouse extends Warehouse
  31. {
  32. private final L2Clan _clan;
  33. private final FastList<ClanWarehouseListener> clanWarehouseListeners = new FastList<ClanWarehouseListener>().shared();
  34. public ClanWarehouse(L2Clan clan)
  35. {
  36. _clan = clan;
  37. }
  38. @Override
  39. public String getName()
  40. {
  41. return "ClanWarehouse";
  42. }
  43. @Override
  44. public int getOwnerId()
  45. {
  46. return _clan.getId();
  47. }
  48. @Override
  49. public L2PcInstance getOwner()
  50. {
  51. return _clan.getLeader().getPlayerInstance();
  52. }
  53. @Override
  54. public ItemLocation getBaseLocation()
  55. {
  56. return ItemLocation.CLANWH;
  57. }
  58. public String getLocationId()
  59. {
  60. return "0";
  61. }
  62. public int getLocationId(boolean dummy)
  63. {
  64. return 0;
  65. }
  66. public void setLocationId(L2PcInstance dummy)
  67. {
  68. }
  69. @Override
  70. public boolean validateCapacity(long slots)
  71. {
  72. return ((_items.size() + slots) <= Config.WAREHOUSE_SLOTS_CLAN);
  73. }
  74. @Override
  75. public L2ItemInstance addItem(String process, int itemId, long count, L2PcInstance actor, Object reference)
  76. {
  77. L2ItemInstance item = getItemByItemId(itemId);
  78. if (!fireClanWarehouseAddItemListeners(process, item, actor, count))
  79. {
  80. return null;
  81. }
  82. return super.addItem(process, itemId, count, actor, reference);
  83. }
  84. @Override
  85. public L2ItemInstance addItem(String process, L2ItemInstance item, L2PcInstance actor, Object reference)
  86. {
  87. if (!fireClanWarehouseAddItemListeners(process, item, actor, item.getCount()))
  88. {
  89. return null;
  90. }
  91. return super.addItem(process, item, actor, reference);
  92. }
  93. @Override
  94. public L2ItemInstance destroyItem(String process, L2ItemInstance item, long count, L2PcInstance actor, Object reference)
  95. {
  96. if (!fireClanWarehouseDeleteItemListeners(process, item, actor, count))
  97. {
  98. return null;
  99. }
  100. return super.destroyItem(process, item, count, actor, reference);
  101. }
  102. @Override
  103. public L2ItemInstance transferItem(String process, int objectId, long count, ItemContainer target, L2PcInstance actor, Object reference)
  104. {
  105. L2ItemInstance sourceitem = getItemByObjectId(objectId);
  106. if (!fireClanWarehouseTransferListeners(process, sourceitem, count, target, actor))
  107. {
  108. return null;
  109. }
  110. return super.transferItem(process, objectId, count, target, actor, reference);
  111. }
  112. // Listeners
  113. /**
  114. * Fires all the ClanWarehouse add item listeners, if any.<br>
  115. * Action is cancelled if it returns false
  116. * @param process
  117. * @param item
  118. * @param actor
  119. * @param count
  120. * @return
  121. */
  122. private boolean fireClanWarehouseAddItemListeners(String process, L2ItemInstance item, L2PcInstance actor, long count)
  123. {
  124. if (!clanWarehouseListeners.isEmpty() && (actor != null) && (item != null))
  125. {
  126. ClanWarehouseAddItemEvent event = new ClanWarehouseAddItemEvent();
  127. event.setActor(actor);
  128. event.setItem(item);
  129. event.setCount(count);
  130. event.setProcess(process);
  131. for (ClanWarehouseListener listener : clanWarehouseListeners)
  132. {
  133. if (!listener.onAddItem(event))
  134. {
  135. return false;
  136. }
  137. }
  138. }
  139. return true;
  140. }
  141. /**
  142. * Fires all the ClanWarehouse delete item listeners, if any.<br>
  143. * Action is cancelled if it returns false
  144. * @param process
  145. * @param item
  146. * @param actor
  147. * @param count
  148. * @return
  149. */
  150. private boolean fireClanWarehouseDeleteItemListeners(String process, L2ItemInstance item, L2PcInstance actor, long count)
  151. {
  152. if (!clanWarehouseListeners.isEmpty() && (actor != null) && (item != null))
  153. {
  154. ClanWarehouseDeleteItemEvent event = new ClanWarehouseDeleteItemEvent();
  155. event.setActor(actor);
  156. event.setCount(count);
  157. event.setItem(item);
  158. event.setProcess(process);
  159. for (ClanWarehouseListener listener : clanWarehouseListeners)
  160. {
  161. if (!listener.onDeleteItem(event))
  162. {
  163. return false;
  164. }
  165. }
  166. }
  167. return true;
  168. }
  169. /**
  170. * Fires all the ClanWarehouse transfer listeners, if any.<br>
  171. * Action is cancelled if it returns false
  172. * @param process
  173. * @param item
  174. * @param count
  175. * @param target
  176. * @param actor
  177. * @return
  178. */
  179. private boolean fireClanWarehouseTransferListeners(String process, L2ItemInstance item, long count, ItemContainer target, L2PcInstance actor)
  180. {
  181. if (!clanWarehouseListeners.isEmpty() && (actor != null) && (item != null) && (target != null))
  182. {
  183. ClanWarehouseTransferEvent event = new ClanWarehouseTransferEvent();
  184. event.setActor(actor);
  185. event.setCount(count);
  186. event.setItem(item);
  187. event.setProcess(process);
  188. event.setTarget(target);
  189. for (ClanWarehouseListener listener : clanWarehouseListeners)
  190. {
  191. if (!listener.onTransferItem(event))
  192. {
  193. return false;
  194. }
  195. }
  196. }
  197. return true;
  198. }
  199. /**
  200. * Adds a clan warehouse listener
  201. * @param listener
  202. */
  203. public void addWarehouseListener(ClanWarehouseListener listener)
  204. {
  205. if (!clanWarehouseListeners.contains(listener))
  206. {
  207. clanWarehouseListeners.add(listener);
  208. }
  209. }
  210. /**
  211. * Removes a clan warehouse listener
  212. * @param listener
  213. */
  214. public void removeWarehouseListener(ClanWarehouseListener listener)
  215. {
  216. clanWarehouseListeners.remove(listener);
  217. }
  218. }