mirror of
https://github.com/barkeser2002/CatServer.git
synced 2026-09-25 08:39:58 +03:00
119 lines
4.9 KiB
Diff
119 lines
4.9 KiB
Diff
--- ../src-base/minecraft/net/minecraft/entity/item/EntityItem.java
|
|
+++ ../src-work/minecraft/net/minecraft/entity/item/EntityItem.java
|
|
@@ -14,6 +14,7 @@
|
|
import net.minecraft.network.datasync.DataParameter;
|
|
import net.minecraft.network.datasync.DataSerializers;
|
|
import net.minecraft.network.datasync.EntityDataManager;
|
|
+import net.minecraft.server.MinecraftServer;
|
|
import net.minecraft.stats.AchievementList;
|
|
import net.minecraft.stats.StatList;
|
|
import net.minecraft.util.DamageSource;
|
|
@@ -29,17 +30,19 @@
|
|
import net.minecraftforge.fml.relauncher.SideOnly;
|
|
import org.apache.logging.log4j.LogManager;
|
|
import org.apache.logging.log4j.Logger;
|
|
+import org.bukkit.event.player.PlayerPickupItemEvent;
|
|
|
|
public class EntityItem extends Entity
|
|
{
|
|
private static final Logger LOGGER = LogManager.getLogger();
|
|
private static final DataParameter<Optional<ItemStack>> ITEM = EntityDataManager.<Optional<ItemStack>>createKey(EntityItem.class, DataSerializers.OPTIONAL_ITEM_STACK);
|
|
private int age;
|
|
- private int delayBeforeCanPickup;
|
|
+ public int delayBeforeCanPickup;
|
|
private int health;
|
|
private String thrower;
|
|
private String owner;
|
|
public float hoverStart;
|
|
+ private int lastTick = MinecraftServer.currentTick; // CraftBukkit
|
|
|
|
/**
|
|
* The maximum age of this EntityItem. The item is expired once this is reached.
|
|
@@ -97,10 +100,12 @@
|
|
{
|
|
super.onUpdate();
|
|
|
|
- if (this.delayBeforeCanPickup > 0 && this.delayBeforeCanPickup != 32767)
|
|
- {
|
|
- --this.delayBeforeCanPickup;
|
|
- }
|
|
+ // CraftBukkit start - Use wall time for pickup and despawn timers
|
|
+ int elapsedTicks = MinecraftServer.currentTick - this.lastTick;
|
|
+ if (this.delayBeforeCanPickup != 32767) this.delayBeforeCanPickup -= elapsedTicks;
|
|
+ if (this.age != -32768) this.age += elapsedTicks;
|
|
+ this.lastTick = MinecraftServer.currentTick;
|
|
+ // CraftBukkit end
|
|
|
|
this.prevPosX = this.posX;
|
|
this.prevPosY = this.posY;
|
|
@@ -147,10 +152,12 @@
|
|
this.motionY *= -0.5D;
|
|
}
|
|
|
|
+ /* Craftbukkit start - moved up
|
|
if (this.age != -32768)
|
|
{
|
|
++this.age;
|
|
}
|
|
+ // Craftbukkit end */
|
|
|
|
this.handleWaterMovement();
|
|
|
|
@@ -158,6 +165,12 @@
|
|
|
|
if (!this.worldObj.isRemote && this.age >= lifespan)
|
|
{
|
|
+ // CraftBukkit start - fire ItemDespawnEvent
|
|
+ if (org.bukkit.craftbukkit.event.CraftEventFactory.callItemDespawnEvent(this).isCancelled()) {
|
|
+ this.age = 0;
|
|
+ return;
|
|
+ }
|
|
+ // CraftBukkit end
|
|
int hook = net.minecraftforge.event.ForgeEventFactory.onItemExpire(this, item);
|
|
if (hook < 0) this.setDead();
|
|
else this.lifespan += hook;
|
|
@@ -226,6 +239,7 @@
|
|
}
|
|
else
|
|
{
|
|
+ if (org.bukkit.craftbukkit.event.CraftEventFactory.callItemMergeEvent(this, other).isCancelled()) return false; // CraftBukkit
|
|
itemstack1.stackSize += itemstack.stackSize;
|
|
other.delayBeforeCanPickup = Math.max(other.delayBeforeCanPickup, this.delayBeforeCanPickup);
|
|
other.age = Math.min(other.age, this.age);
|
|
@@ -291,6 +305,11 @@
|
|
}
|
|
else
|
|
{
|
|
+ // CraftBukkit start
|
|
+ if (org.bukkit.craftbukkit.event.CraftEventFactory.handleNonLivingEntityDamageEvent(this, source, amount)) {
|
|
+ return false;
|
|
+ }
|
|
+ // CraftBukkit end
|
|
this.setBeenAttacked();
|
|
this.health = (int)((float)this.health - amount);
|
|
|
|
@@ -366,6 +385,23 @@
|
|
if (this.delayBeforeCanPickup > 0) return;
|
|
ItemStack itemstack = this.getEntityItem();
|
|
int i = itemstack.stackSize;
|
|
+
|
|
+ // CraftBukkit start
|
|
+ int canHold = entityIn.inventory.canHold(itemstack);
|
|
+ int remaining = itemstack.stackSize - canHold;
|
|
+ if ((this.delayBeforeCanPickup <= 0) && (canHold > 0))
|
|
+ {
|
|
+ itemstack.stackSize = canHold;
|
|
+ PlayerPickupItemEvent event = new PlayerPickupItemEvent((org.bukkit.entity.Player)entityIn.getBukkitEntity(), (org.bukkit.entity.Item)getBukkitEntity(), remaining);
|
|
+
|
|
+ this.worldObj.getServer().getPluginManager().callEvent(event);
|
|
+ itemstack.stackSize = (canHold + remaining);
|
|
+ if (event.isCancelled()) {
|
|
+ return;
|
|
+ }
|
|
+ this.delayBeforeCanPickup = 0;
|
|
+ }
|
|
+ // CraftBukkit end
|
|
|
|
int hook = net.minecraftforge.event.ForgeEventFactory.onItemPickup(this, entityIn, itemstack);
|
|
if (hook < 0) return;
|