/* * Copyright (C) 2004-2014 L2J Server * * This file is part of L2J Server. * * L2J Server 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. * * L2J Server 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 . */ 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; @Override 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); } }