mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-18 00:47:42 +01:00
Upstream has released updates that appears to apply and compile correctly Paper Changes: 7d85344e (1.16.3) Missed some fixes to include in commit 64ed4298 (FIRST 1.16.3): Update Paper to 1.16.3 fa9c5e0f (FINAL 1.16.2) Improve Entity Activation Range passenger behavior 6fda3fd0 (FINAL 1.16.2) Improve Timings support for Active vs Inactive vs Passengers 794e6baf Add additional open container api to HumanEntity 44e822f7 Fix block data exception when cancelling PortalCreateEvent (#4199)
147 lines
6.3 KiB
Diff
147 lines
6.3 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
|
Date: Sat, 22 Feb 2020 15:54:08 -0600
|
|
Subject: [PATCH] Item entity immunities
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
|
index 6628a15bf..e8199db7b 100644
|
|
--- a/src/main/java/net/minecraft/server/Entity.java
|
|
+++ b/src/main/java/net/minecraft/server/Entity.java
|
|
@@ -1447,6 +1447,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
|
|
|
|
}
|
|
|
|
+ public boolean isInLiquid(Tag<FluidType> tag) { return a(tag); } // Purpur - OBFHELPER
|
|
public boolean a(Tag<FluidType> tag) {
|
|
return this.O == tag;
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/EntityItem.java b/src/main/java/net/minecraft/server/EntityItem.java
|
|
index bc4f84c88..b6cb52c10 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityItem.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityItem.java
|
|
@@ -23,6 +23,8 @@ public class EntityItem extends Entity {
|
|
public final float b;
|
|
private int lastTick = MinecraftServer.currentTick - 1; // CraftBukkit
|
|
public boolean canMobPickup = true; // Paper
|
|
+ public boolean immuneToExplosion = false; // Purpur
|
|
+ public boolean immuneToFire = false; // Purpur
|
|
|
|
public EntityItem(EntityTypes<? extends EntityItem> entitytypes, World world) {
|
|
super(entitytypes, world);
|
|
@@ -274,6 +276,12 @@ public class EntityItem extends Entity {
|
|
return false;
|
|
} else if (!this.getItemStack().getItem().a(damagesource)) {
|
|
return false;
|
|
+ // Purpur start
|
|
+ } else if (immuneToFire && (damagesource.isFire() || damagesource == DamageSource.FIRE)) {
|
|
+ return false;
|
|
+ } else if (immuneToExplosion && damagesource.isExplosion()) {
|
|
+ respawnOnClient(); return false;
|
|
+ // Purpur end
|
|
} else {
|
|
// CraftBukkit start
|
|
if (org.bukkit.craftbukkit.event.CraftEventFactory.handleNonLivingEntityDamageEvent(this, damagesource, f)) {
|
|
@@ -454,6 +462,8 @@ public class EntityItem extends Entity {
|
|
com.google.common.base.Preconditions.checkArgument(!itemstack.isEmpty(), "Cannot drop air"); // CraftBukkit
|
|
this.getDataWatcher().set(EntityItem.ITEM, itemstack);
|
|
this.getDataWatcher().markDirty(EntityItem.ITEM); // CraftBukkit - SPIGOT-4591, must mark dirty
|
|
+ if (world.purpurConfig.itemImmuneToExplosion.contains(itemstack.getItem())) immuneToExplosion = true; // Purpur
|
|
+ if (world.purpurConfig.itemImmuneToFire.contains(itemstack.getItem())) immuneToFire = true; // Purpur
|
|
}
|
|
|
|
@Override
|
|
@@ -523,4 +533,15 @@ public class EntityItem extends Entity {
|
|
public Packet<?> P() {
|
|
return new PacketPlayOutSpawnEntity(this);
|
|
}
|
|
+
|
|
+ // Purpur start
|
|
+ public void respawnOnClient() {
|
|
+ Packet<?> spawnPacket = new PacketPlayOutSpawnEntity(this);
|
|
+ Packet<?> metadataPacket = new PacketPlayOutEntityMetadata(getId(), getDataWatcher(), true);
|
|
+ for (EntityPlayer entityplayer : getTracker().trackerEntry.trackedPlayers) {
|
|
+ entityplayer.playerConnection.sendPacket(spawnPacket);
|
|
+ entityplayer.playerConnection.sendPacket(metadataPacket);
|
|
+ }
|
|
+ }
|
|
+ // Purpur end
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/EntityTrackerEntry.java
|
|
index aea72b0db..29731da08 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityTrackerEntry.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityTrackerEntry.java
|
|
@@ -106,6 +106,15 @@ public class EntityTrackerEntry {
|
|
this.c();
|
|
}
|
|
|
|
+ // Purpur start - respawn burning item entities on client (client kills them)
|
|
+ if (tracker.fireTicks > 0 && tracker instanceof EntityItem) {
|
|
+ EntityItem item = (EntityItem) tracker;
|
|
+ if (item.immuneToFire && !item.dead) {
|
|
+ item.respawnOnClient();
|
|
+ }
|
|
+ }
|
|
+ // Purpur end
|
|
+
|
|
if (this.tickCounter % this.d == 0 || this.tracker.impulse || this.tracker.getDataWatcher().a()) {
|
|
int i;
|
|
int j;
|
|
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
|
index 607157312..401489cab 100644
|
|
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
|
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
|
@@ -99,6 +99,21 @@ public class PurpurWorldConfig {
|
|
}
|
|
}
|
|
|
|
+ public List<Item> itemImmuneToExplosion = new ArrayList<>();
|
|
+ public List<Item> itemImmuneToFire = new ArrayList<>();
|
|
+ private void itemSettings() {
|
|
+ itemImmuneToExplosion.clear();
|
|
+ getList("gameplay-mechanics.item.immune.explosion", new ArrayList<>()).forEach(key -> {
|
|
+ Item item = IRegistry.ITEM.get(new MinecraftKey(key.toString()));
|
|
+ if (item != Items.AIR) itemImmuneToExplosion.add(item);
|
|
+ });
|
|
+ itemImmuneToFire.clear();
|
|
+ getList("gameplay-mechanics.item.immune.fire", new ArrayList<>()).forEach(key -> {
|
|
+ Item item = IRegistry.ITEM.get(new MinecraftKey(key.toString()));
|
|
+ if (item != Items.AIR) itemImmuneToFire.add(item);
|
|
+ });
|
|
+ }
|
|
+
|
|
public boolean idleTimeoutKick = true;
|
|
public boolean idleTimeoutTickNearbyEntities = true;
|
|
public boolean idleTimeoutCountAsSleeping = false;
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java
|
|
index cb756b1ba..59b51f94e 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java
|
|
@@ -94,4 +94,26 @@ public class CraftItem extends CraftEntity implements Item {
|
|
public EntityType getType() {
|
|
return EntityType.DROPPED_ITEM;
|
|
}
|
|
+
|
|
+ // Purpur start
|
|
+ @Override
|
|
+ public void setImmuneToExplosion(boolean immuneToExplosion) {
|
|
+ item.immuneToExplosion = immuneToExplosion;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean isImmuneToExplosion() {
|
|
+ return item.immuneToExplosion;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setImmuneToFire(boolean immuneToFire) {
|
|
+ item.immuneToFire = immuneToFire;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean isImmuneToFire() {
|
|
+ return item.immuneToFire;
|
|
+ }
|
|
+ // Purpur end
|
|
}
|