package com.weem.epicinventor.placeable; import com.weem.epicinventor.*; import com.weem.epicinventor.actor.*; import com.weem.epicinventor.hud.*; import com.weem.epicinventor.inventory.*; import com.weem.epicinventor.network.*; import com.weem.epicinventor.utility.*; import java.awt.*; import java.util.*; import java.io.*; public abstract class PlayerContainer extends Building implements Serializable { private static final long serialVersionUID = 10000L; protected Inventory inventory; transient protected HUD hud; protected int inventorySize; protected final static int MAX_IDLE_TIME = 30; protected long idleTime; public PlayerContainer(PlaceableManager pm, Registry rg, String sm, String am, int x, int y, Placeable.State cs, int is) { super(pm, rg, sm, am, x, y, cs); type = "PlayerContainer"; inventorySize = is; inventory = new Inventory(rg, inventorySize); initHUD(); } @Override public void setTransient(Registry rg) { registry = rg; placeableManager = rg.getPlaceableManager(); buildingImage = registry.getImageLoader().getImage(standardImage); buildingImage = registry.getImageLoader().changeToGrayscale(buildingImage); canPlaceImage = registry.getImageLoader().getImage(standardImage); canPlaceImage = registry.getImageLoader().changeTransperancy(canPlaceImage, 0.7f); canPlaceImage = registry.getImageLoader().changeColor(canPlaceImage, (short) 0, (short) 100, (short) 0); cantPlaceImage = registry.getImageLoader().getImage(standardImage); cantPlaceImage = registry.getImageLoader().changeTransperancy(cantPlaceImage, 0.7f); cantPlaceImage = registry.getImageLoader().changeColor(cantPlaceImage, (short) 100, (short) 0, (short) 0); inventory.setTransient(rg); if (id == null) { id = UUID.randomUUID().toString(); } hud = registry.getHUDManager().loadPlayerContainerHUD(this); } protected void initHUD() { hud = registry.getHUDManager().loadPlayerContainerHUD(this); } @Override public boolean setDestroying(Player p, boolean destroying) { if (destroying && inventory.getUsedSlots() > 0) { registry.showMessage("Error", "You must empty out this container before destroying it"); return false; } return super.setDestroying(p, destroying); } @Override public void setInventory(Inventory i) { inventory = i; } public int getInventorySize() { return inventorySize; } public void quickLoot() { for (int i = 0; i < inventorySize; i++) { int qty = inventory.getQtyFromSlot(i); if (qty > 0) { int oldQty = qty; String name = inventory.getNameFromSlot(i); int level = inventory.getLevelFromSlot(i); if(placeableManager.playerAddItem(name, qty, level) < oldQty) { deleteInventory(i, oldQty - qty); } } } hud.setShouldRender(false); } @Override public boolean handleRightClick(Point clickPoint) { if (this.isActivated()) { Point mapPoint = new Point( placeableManager.panelToMapX(clickPoint.x), placeableManager.panelToMapY(clickPoint.y)); if (currentState == State.Placed) { if (isInside(mapPoint)) { if (registry.getPlayerManager().getCurrentPlayer().getCenterPoint().distance(getCenterPoint()) <= registry.getMaxContainerDistance()) { this.toggled(); placeableManager.toggleContainerHUD(hud); return true; } } } } return false; } public Inventory getInventory() { return inventory; } public boolean addItem(int slot, String name, int qty) { int qtyLeft = inventory.addToInventory(slot, name, qty); if (qtyLeft == 0) { if (registry.getGameController().multiplayerMode != registry.getGameController().multiplayerMode.NONE && registry.getNetworkThread() != null) { if (registry.getNetworkThread().readyForUpdates()) { UpdatePlaceable up = new UpdatePlaceable(this.getId()); up.inventory = inventory; up.action = "InventoryUpdate"; registry.getNetworkThread().sendData(up); } } return true; } else { if(qty - qtyLeft > 0) { deleteInventory(slot, qty - qtyLeft); } return false; } } public boolean addItem(String name, int qty) { return addItem(0, name, qty); } public boolean addItem(int slot, String name, int qty, int level) { int qtyLeft = inventory.addToInventory(slot, name, qty, level); if (qtyLeft == 0) { if (registry.getGameController().multiplayerMode != registry.getGameController().multiplayerMode.NONE && registry.getNetworkThread() != null) { if (registry.getNetworkThread().readyForUpdates()) { UpdatePlaceable up = new UpdatePlaceable(this.getId()); up.inventory = inventory; up.action = "InventoryUpdate"; registry.getNetworkThread().sendData(up); } } return true; } else { if(qty - qtyLeft > 0) { deleteInventory(slot, qty - qtyLeft); } return false; } } public boolean addItem(String name, int qty, int level) { return addItem(0, name, qty, level); } public void deleteInventory(int slot, int qty) { inventory.deleteInventory(slot, qty); if (registry.getGameController().multiplayerMode != registry.getGameController().multiplayerMode.NONE && registry.getNetworkThread() != null) { if (registry.getNetworkThread().readyForUpdates()) { UpdatePlaceable up = new UpdatePlaceable(this.getId()); up.inventory = inventory; up.action = "InventoryUpdate"; registry.getNetworkThread().sendData(up); } } } public void swapInventory(int from, int to) { inventory.swapInventoryLocations(from, to); if (registry.getGameController().multiplayerMode != registry.getGameController().multiplayerMode.NONE && registry.getNetworkThread() != null) { if (registry.getNetworkThread().readyForUpdates()) { UpdatePlaceable up = new UpdatePlaceable(this.getId()); up.inventory = inventory; up.action = "InventoryUpdate"; registry.getNetworkThread().sendData(up); } } } }