mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-05-17 03:08:58 +00:00
Implemented InventorySourceEntity into HumanEntity
This commit is contained in:
parent
f6589db064
commit
4449af2213
@ -154,7 +154,7 @@ abstract class Entity extends Position{
|
|||||||
}
|
}
|
||||||
|
|
||||||
$timeNow = microtime(true);
|
$timeNow = microtime(true);
|
||||||
$this->ticksLived += ($now - $this->lastUpdate) * 20;
|
$this->ticksLived += ($timeNow - $this->lastUpdate) * 20;
|
||||||
|
|
||||||
if($this->handleWaterMovement()){
|
if($this->handleWaterMovement()){
|
||||||
$this->fallDistance = 0;
|
$this->fallDistance = 0;
|
||||||
@ -490,6 +490,7 @@ abstract class Entity extends Position{
|
|||||||
/***REM_START***/
|
/***REM_START***/
|
||||||
require_once("entity/DamageableEntity.php");
|
require_once("entity/DamageableEntity.php");
|
||||||
require_once("entity/ProjectileSourceEntity.php");
|
require_once("entity/ProjectileSourceEntity.php");
|
||||||
|
require_once("entity/InventorySourceEntity.php");
|
||||||
require_once("entity/RideableEntity.php");
|
require_once("entity/RideableEntity.php");
|
||||||
require_once("entity/TameableEntity.php");
|
require_once("entity/TameableEntity.php");
|
||||||
require_once("entity/AttachableEntity.php");
|
require_once("entity/AttachableEntity.php");
|
||||||
|
@ -19,9 +19,10 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class HumanEntity extends CreatureEntity implements ProjectileSourceEntity{
|
class HumanEntity extends CreatureEntity implements ProjectileSourceEntity, InventorySourceEntity{
|
||||||
|
|
||||||
protected $nameTag;
|
protected $nameTag = "TESTIFICATE";
|
||||||
|
protected $inventory = array();
|
||||||
|
|
||||||
protected function initEntity(){
|
protected function initEntity(){
|
||||||
if(isset($this->namedtag->NameTag)){
|
if(isset($this->namedtag->NameTag)){
|
||||||
@ -106,7 +107,7 @@ class HumanEntity extends CreatureEntity implements ProjectileSourceEntity{
|
|||||||
}
|
}
|
||||||
}*/
|
}*/
|
||||||
return $d;
|
return $d;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function attack($damage, $source = "generic"){
|
public function attack($damage, $source = "generic"){
|
||||||
|
|
||||||
@ -115,4 +116,113 @@ class HumanEntity extends CreatureEntity implements ProjectileSourceEntity{
|
|||||||
public function heal($amount, $source = "generic"){
|
public function heal($amount, $source = "generic"){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function hasItem(Item $item, $checkDamage = true){
|
||||||
|
foreach($this->inventory as $s => $i){
|
||||||
|
if($i->equals($item, $checkDamage)){
|
||||||
|
return $i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function canAddItem(Item $item){
|
||||||
|
$inv = $this->inventory;
|
||||||
|
while($item->getCount() > 0){
|
||||||
|
$add = 0;
|
||||||
|
foreach($inv as $s => $i){
|
||||||
|
if($i->getID() === AIR){
|
||||||
|
$add = min($i->getMaxStackSize(), $item->getCount());
|
||||||
|
$inv[$s] = clone $item;
|
||||||
|
$inv[$s]->setCount($add);
|
||||||
|
break;
|
||||||
|
}elseif($i->equals($item)){
|
||||||
|
$add = min($i->getMaxStackSize() - $i->getCount(), $item->getCount());
|
||||||
|
if($add <= 0){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$inv[$s] = clone $item;
|
||||||
|
$inv[$s]->setCount($i->getCount() + $add);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if($add <= 0){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$item->setCount($item->getCount() - $add);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addItem(Item $item){
|
||||||
|
while($item->getCount() > 0){
|
||||||
|
$add = 0;
|
||||||
|
foreach($this->inventory as $s => $i){
|
||||||
|
if($i->getID() === AIR){
|
||||||
|
$add = min($i->getMaxStackSize(), $item->getCount());
|
||||||
|
$i2 = clone $item;
|
||||||
|
$i2->setCount($add);
|
||||||
|
$this->setSlot($s, $i2);
|
||||||
|
break;
|
||||||
|
}elseif($i->equals($item)){
|
||||||
|
$add = min($i->getMaxStackSize() - $i->getCount(), $item->getCount());
|
||||||
|
if($add <= 0){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$i2 = clone $item;
|
||||||
|
$i2->setCount($i->getCount() + $add);
|
||||||
|
$this->setSlot($s, $i2);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if($add <= 0){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$item->setCount($item->getCount() - $add);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function canRemoveItem(Item $item, $checkDamage = true){
|
||||||
|
return $this->hasItem($item, $checkDamage);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function removeItem(Item $item, $checkDamage = true){
|
||||||
|
while($item->getCount() > 0){
|
||||||
|
$remove = 0;
|
||||||
|
foreach($this->inventory as $s => $i){
|
||||||
|
if($i->equals($item, $checkDamage)){
|
||||||
|
$remove = min($item->getCount(), $i->getCount());
|
||||||
|
if($item->getCount() < $i->getCount()){
|
||||||
|
$i->setCount($i->getCount() - $item->getCount());
|
||||||
|
$this->setSlot($s, $i);
|
||||||
|
}else{
|
||||||
|
$this->setSlot($s, BlockAPI::getItem(AIR, 0, 0));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if($remove <= 0){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$item->setCount($item->getCount() - $remove);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setSlot($slot, Item $item){
|
||||||
|
$this->inventory[(int) $slot] = $item;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSlot($slot){
|
||||||
|
$this->inventory[(int) $slot] = $item;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAllSlots(){
|
||||||
|
return $this->inventory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSlotCount(){
|
||||||
|
return count($this->inventory);
|
||||||
|
}
|
||||||
}
|
}
|
49
src/entity/InventorySourceEntity.php
Normal file
49
src/entity/InventorySourceEntity.php
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
interface InventorySourceEntity{
|
||||||
|
|
||||||
|
public function hasItem(Item $item, $checkDamage = true);
|
||||||
|
|
||||||
|
public function canAddItem(Item $item);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return boolean hasBeenAdded
|
||||||
|
*/
|
||||||
|
public function addItem(Item $item);
|
||||||
|
|
||||||
|
public function canRemoveItem(Item $item, $checkDamage = true);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return boolean hasBeenRemoved
|
||||||
|
*/
|
||||||
|
public function removeItem(Item $item, $checkDamage = true);
|
||||||
|
|
||||||
|
public function getSlotCount();
|
||||||
|
|
||||||
|
public function getAllSlots();
|
||||||
|
|
||||||
|
public function getSlot($slot);
|
||||||
|
|
||||||
|
public function setSlot($slot, Item $item);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -80,6 +80,14 @@ class Item{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getCount(){
|
||||||
|
return $this->count;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setCount($count){
|
||||||
|
$this->count = (int) $count;
|
||||||
|
}
|
||||||
|
|
||||||
final public function getName(){
|
final public function getName(){
|
||||||
return $this->name;
|
return $this->name;
|
||||||
}
|
}
|
||||||
@ -282,4 +290,8 @@ class Item{
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final function equals(Item $item, $checkDamage = false){
|
||||||
|
return $this->id === $item->getID() and ($checkDamage === false or $this->getMetadata() === $item->getMetadata());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -101,7 +101,7 @@ class AxisAlignedBB{
|
|||||||
return $vec;
|
return $vec;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getMixedBoundingBox(AxisAlignedBB $bb){
|
public function setBB(AxisAlignedBB $bb){
|
||||||
return new AxisAlignedBB(
|
return new AxisAlignedBB(
|
||||||
min($this->minX, $bb->minX),
|
min($this->minX, $bb->minX),
|
||||||
min($this->minY, $bb->minY),
|
min($this->minY, $bb->minY),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user