Paper/Spigot-Server-Patches/0345-Add-More-Creeper-API.patch
Aikar b62dfa0bf9
Updated Upstream (Bukkit/CraftBukkit)
Upstream has released updates that appears to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

Bukkit Changes:
39ce5d3a SPIGOT-4399: ItemMeta.equals broken with AttributeModifiers

CraftBukkit Changes:
1cf8b5dc SPIGOT-4400: Populators running on existing chunks
116cb9a1 SPIGOT-4399: Add attribute modifier equality test
5ee1c18a SPIGOT-4398: Set ASM7_EXPERIMENTAL flag
2018-09-28 19:31:59 -04:00

123 lines
4.6 KiB
Diff

From 74c0ccbb939db48c2e3c10af810630132b2d7d74 Mon Sep 17 00:00:00 2001
From: BillyGalbreath <Blake.Galbreath@GMail.com>
Date: Fri, 24 Aug 2018 11:50:26 -0500
Subject: [PATCH] Add More Creeper API
diff --git a/src/main/java/net/minecraft/server/EntityCreeper.java b/src/main/java/net/minecraft/server/EntityCreeper.java
index 19022b6e24..e070e7b2d2 100644
--- a/src/main/java/net/minecraft/server/EntityCreeper.java
+++ b/src/main/java/net/minecraft/server/EntityCreeper.java
@@ -14,7 +14,7 @@ public class EntityCreeper extends EntityMonster {
private static final DataWatcherObject<Boolean> b = DataWatcher.a(EntityCreeper.class, DataWatcherRegistry.i);
private static final DataWatcherObject<Boolean> c = DataWatcher.a(EntityCreeper.class, DataWatcherRegistry.i);private static final DataWatcherObject<Boolean> isIgnitedDW = c; // Paper OBFHELPER
private int bC;
- private int fuseTicks;
+ public int fuseTicks; // Paper - public
public int maxFuseTicks = 30;
public int explosionRadius = 3;
private int bG;
@@ -92,9 +92,12 @@ public class EntityCreeper extends EntityMonster {
public void tick() {
if (this.isAlive()) {
this.bC = this.fuseTicks;
- if (this.isIgnited()) {
- this.a(1);
- }
+ // Paper start - This is no longer needed as the state is being set in setIgnited() now.
+ // Ensures the CreeperIgniteEvent is not spammed every tick
+ //if (this.isIgnited()) {
+ // this.a(1);
+ //}
+ // Paper end
int i = this.dz();
@@ -102,7 +105,7 @@ public class EntityCreeper extends EntityMonster {
this.a(SoundEffects.ENTITY_CREEPER_PRIMED, 1.0F, 0.5F);
}
- this.fuseTicks += i;
+ this.fuseTicks += this.isIgnited() ? 1 : i; // Paper - workaround now that we aren't letting it get re-set every tick - GH-1389
if (this.fuseTicks < 0) {
this.fuseTicks = 0;
}
@@ -151,12 +154,21 @@ public class EntityCreeper extends EntityMonster {
return LootTables.x;
}
+ public int getState() { return dz(); } // Paper - OBFHELPER
public int dz() {
return ((Integer) this.datawatcher.get(EntityCreeper.a)).intValue();
}
+ public void setState(int state) { a(state); } // Paper - OBFHELPER
public void a(int i) {
- this.datawatcher.set(EntityCreeper.a, Integer.valueOf(i));
+ // Paper start
+ if (getState() != i) {
+ com.destroystokyo.paper.event.entity.CreeperIgniteEvent event = new com.destroystokyo.paper.event.entity.CreeperIgniteEvent((org.bukkit.entity.Creeper) getBukkitEntity(), i == 1);
+ if (event.callEvent()) {
+ this.datawatcher.set(EntityCreeper.a, event.isIgnited() ? 1 : -1);
+ }
+ }
+ // Paper end
}
public void onLightningStrike(EntityLightning entitylightning) {
@@ -190,6 +202,7 @@ public class EntityCreeper extends EntityMonster {
return super.a(entityhuman, enumhand);
}
+ public void explode() { this.dE(); } // Paper - OBFHELPER
private void dE() {
if (!this.world.isClientSide) {
boolean flag = this.world.getGameRules().getBoolean("mobGriefing");
@@ -241,8 +254,15 @@ public class EntityCreeper extends EntityMonster {
return ((Boolean) this.datawatcher.get(EntityCreeper.c)).booleanValue();
}
+ // Paper start
+ public void setIgnited(boolean ignited) {
+ this.datawatcher.set(EntityCreeper.c, ignited);
+ setState(ignited ? 1 : -1);
+ }
+
public void dB() {
- this.datawatcher.set(EntityCreeper.c, Boolean.valueOf(true));
+ setIgnited(true);
+ // Paper end
}
public boolean canCauseHeadDrop() {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java
index ffebb54caa..ab2b20a0d4 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java
@@ -76,4 +76,22 @@ public class CraftCreeper extends CraftMonster implements Creeper {
public EntityType getType() {
return EntityType.CREEPER;
}
+
+ // Paper start
+ public void setIgnited(boolean ignited) {
+ getHandle().setIgnited(ignited);
+ }
+
+ public boolean isIgnited() {
+ return getHandle().isIgnited();
+ }
+
+ public int getFuseTicks() {
+ return getHandle().fuseTicks;
+ }
+
+ public void explode() {
+ getHandle().explode();
+ }
+ // Paper end
}
--
2.19.0