From 7dff42b4ae8b20b36d0872d79e0e06c95c487b99 Mon Sep 17 00:00:00 2001 From: BillyGalbreath Date: Mon, 27 Aug 2018 02:01:09 -0500 Subject: [PATCH] Add More Creeper API (#1372) --- .../0142-Add-More-Creeper-API.patch | 102 ++++++++++++++++ ...ch => 0143-Add-PhantomPreSpawnEvent.patch} | 6 +- ...d-source-block-to-BlockPhysicsEvent.patch} | 2 +- .../0351-Add-More-Creeper-API.patch | 113 ++++++++++++++++++ 4 files changed, 219 insertions(+), 4 deletions(-) create mode 100644 Spigot-API-Patches/0142-Add-More-Creeper-API.patch rename Spigot-API-Patches/{0142-Add-PhantomPreSpawnEvent.patch => 0143-Add-PhantomPreSpawnEvent.patch} (93%) rename Spigot-API-Patches/{0143-Add-source-block-to-BlockPhysicsEvent.patch => 0144-Add-source-block-to-BlockPhysicsEvent.patch} (96%) create mode 100644 Spigot-Server-Patches/0351-Add-More-Creeper-API.patch diff --git a/Spigot-API-Patches/0142-Add-More-Creeper-API.patch b/Spigot-API-Patches/0142-Add-More-Creeper-API.patch new file mode 100644 index 0000000000..6182402a6a --- /dev/null +++ b/Spigot-API-Patches/0142-Add-More-Creeper-API.patch @@ -0,0 +1,102 @@ +From 64e603e1b7fea46169f1afe64337a7ce819eaa27 Mon Sep 17 00:00:00 2001 +From: BillyGalbreath +Date: Fri, 24 Aug 2018 11:50:16 -0500 +Subject: [PATCH] Add More Creeper API + + +diff --git a/src/main/java/com/destroystokyo/paper/event/entity/CreeperIgniteEvent.java b/src/main/java/com/destroystokyo/paper/event/entity/CreeperIgniteEvent.java +new file mode 100644 +index 00000000..3d10bb03 +--- /dev/null ++++ b/src/main/java/com/destroystokyo/paper/event/entity/CreeperIgniteEvent.java +@@ -0,0 +1,50 @@ ++package com.destroystokyo.paper.event.entity; ++ ++import org.bukkit.entity.Creeper; ++import org.bukkit.event.Cancellable; ++import org.bukkit.event.HandlerList; ++import org.bukkit.event.entity.EntityEvent; ++ ++/** ++ * Called when a Creeper is ignite flag is changed (armed/disarmed to explode). ++ */ ++public class CreeperIgniteEvent extends EntityEvent implements Cancellable { ++ private static final HandlerList handlers = new HandlerList(); ++ private boolean canceled; ++ private boolean ignited; ++ ++ public CreeperIgniteEvent(Creeper creeper, boolean ignited) { ++ super(creeper); ++ this.ignited = ignited; ++ } ++ ++ @Override ++ public Creeper getEntity() { ++ return (Creeper) entity; ++ } ++ ++ public boolean isIgnited() { ++ return ignited; ++ } ++ ++ public void setIgnited(boolean ignited) { ++ this.ignited = ignited; ++ } ++ ++ public boolean isCancelled() { ++ return canceled; ++ } ++ ++ public void setCancelled(boolean cancel) { ++ canceled = cancel; ++ } ++ ++ @Override ++ public HandlerList getHandlers() { ++ return handlers; ++ } ++ ++ public static HandlerList getHandlerList() { ++ return handlers; ++ } ++} +diff --git a/src/main/java/org/bukkit/entity/Creeper.java b/src/main/java/org/bukkit/entity/Creeper.java +index f957d836..b9877fb8 100644 +--- a/src/main/java/org/bukkit/entity/Creeper.java ++++ b/src/main/java/org/bukkit/entity/Creeper.java +@@ -50,4 +50,32 @@ public interface Creeper extends Monster { + * @return the explosion radius + */ + public int getExplosionRadius(); ++ ++ // Paper start ++ /** ++ * Set whether creeper is ignited or not (armed to explode) ++ * ++ * @param ignited New ignited state ++ */ ++ public void setIgnited(boolean ignited); ++ ++ /** ++ * Check if creeper is ignited or not (armed to explode) ++ * ++ * @return Ignited state ++ */ ++ public boolean isIgnited(); ++ ++ /** ++ * Get the number of ticks this creeper has been ignited (armed to explode) ++ * ++ * @return Ticks creeper has been ignited ++ */ ++ public int getFuseTicks(); ++ ++ /** ++ * Make the creeper explode (no waiting for fuse) ++ */ ++ public void explode(); ++ // Paper end + } +-- +2.18.0 + diff --git a/Spigot-API-Patches/0142-Add-PhantomPreSpawnEvent.patch b/Spigot-API-Patches/0143-Add-PhantomPreSpawnEvent.patch similarity index 93% rename from Spigot-API-Patches/0142-Add-PhantomPreSpawnEvent.patch rename to Spigot-API-Patches/0143-Add-PhantomPreSpawnEvent.patch index 6e7859cd10..e7de33c2dc 100644 --- a/Spigot-API-Patches/0142-Add-PhantomPreSpawnEvent.patch +++ b/Spigot-API-Patches/0143-Add-PhantomPreSpawnEvent.patch @@ -1,4 +1,4 @@ -From 7afd89928f309b7d009f38af76e51235e65762ef Mon Sep 17 00:00:00 2001 +From aad5790f10fafc46c204416df8cb615935d6a978 Mon Sep 17 00:00:00 2001 From: BillyGalbreath Date: Sat, 25 Aug 2018 19:56:42 -0500 Subject: [PATCH] Add PhantomPreSpawnEvent @@ -6,7 +6,7 @@ Subject: [PATCH] Add PhantomPreSpawnEvent diff --git a/src/main/java/com/destroystokyo/paper/event/entity/PhantomPreSpawnEvent.java b/src/main/java/com/destroystokyo/paper/event/entity/PhantomPreSpawnEvent.java new file mode 100644 -index 00000000..303a1ec9 +index 000000000..303a1ec9b --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/event/entity/PhantomPreSpawnEvent.java @@ -0,0 +1,30 @@ @@ -41,7 +41,7 @@ index 00000000..303a1ec9 + } +} diff --git a/src/main/java/org/bukkit/entity/Phantom.java b/src/main/java/org/bukkit/entity/Phantom.java -index 1a1044ed..65b703a2 100644 +index 1a1044edc..65b703a2d 100644 --- a/src/main/java/org/bukkit/entity/Phantom.java +++ b/src/main/java/org/bukkit/entity/Phantom.java @@ -14,4 +14,13 @@ public interface Phantom extends Flying { diff --git a/Spigot-API-Patches/0143-Add-source-block-to-BlockPhysicsEvent.patch b/Spigot-API-Patches/0144-Add-source-block-to-BlockPhysicsEvent.patch similarity index 96% rename from Spigot-API-Patches/0143-Add-source-block-to-BlockPhysicsEvent.patch rename to Spigot-API-Patches/0144-Add-source-block-to-BlockPhysicsEvent.patch index a03cc487bc..72df21b321 100644 --- a/Spigot-API-Patches/0143-Add-source-block-to-BlockPhysicsEvent.patch +++ b/Spigot-API-Patches/0144-Add-source-block-to-BlockPhysicsEvent.patch @@ -1,4 +1,4 @@ -From 30d73a5a4ab4628f42ac527d63715e8e16d5dfbe Mon Sep 17 00:00:00 2001 +From 848738ba141955d7957eca3be430bf5f8b5d0171 Mon Sep 17 00:00:00 2001 From: Sotr Date: Thu, 23 Aug 2018 16:14:25 +0800 Subject: [PATCH] Add source block to BlockPhysicsEvent diff --git a/Spigot-Server-Patches/0351-Add-More-Creeper-API.patch b/Spigot-Server-Patches/0351-Add-More-Creeper-API.patch new file mode 100644 index 0000000000..cd646c2c7d --- /dev/null +++ b/Spigot-Server-Patches/0351-Add-More-Creeper-API.patch @@ -0,0 +1,113 @@ +From db14fd6e2142e094d692eee5ad0c8210e78d4fcd Mon Sep 17 00:00:00 2001 +From: BillyGalbreath +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..1729297766 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 b = DataWatcher.a(EntityCreeper.class, DataWatcherRegistry.i); + private static final DataWatcherObject c = DataWatcher.a(EntityCreeper.class, DataWatcherRegistry.i);private static final DataWatcherObject 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(); + +@@ -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.18.0 +