ClanWarehouse.java 6.5 KB

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