From 03be5e1044ffd5ce7a5a986ab59430074f30a38a Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Wed, 10 Jul 2019 20:13:50 -0500 Subject: [PATCH] Obfuscation helpers --- ...cows-to-mooshroom-when-fed-mushrooms.patch | 75 +++++---- ...cow-rotation-when-shearing-mooshroom.patch | 15 +- ...pumpkin-on-off-by-player-interaction.patch | 27 ++-- patches/server/0009-Silk-touch-spawners.patch | 38 +++-- ...ed-to-crystals-and-crystals-shoot-ph.patch | 142 ++++++++++++------ patches/server/0011-Integrate-ridables.patch | 70 ++++----- ...e-giants-naturally-spawn-and-have-AI.patch | 28 ++-- .../0016-Add-regen-effect-to-campfires.patch | 12 +- ...8-Campfires-should-fall-with-gravity.patch | 39 +++-- .../0028-Campfires-burn-out-in-rain.patch | 15 +- ...-Phantoms-spawn-naturally-in-the-end.patch | 33 ++-- 11 files changed, 279 insertions(+), 215 deletions(-) diff --git a/patches/server/0003-cows-to-mooshroom-when-fed-mushrooms.patch b/patches/server/0003-cows-to-mooshroom-when-fed-mushrooms.patch index 326aa24bb..2dd0abbe3 100644 --- a/patches/server/0003-cows-to-mooshroom-when-fed-mushrooms.patch +++ b/patches/server/0003-cows-to-mooshroom-when-fed-mushrooms.patch @@ -1,16 +1,17 @@ -From cfbb0bb30d3e59592aeb8799880857a3a88f92c1 Mon Sep 17 00:00:00 2001 +From 5c6fa6e2f30756c23b1e2998a4978e934fcc9e3a Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 4 May 2019 01:10:30 -0500 Subject: [PATCH] cows to mooshroom when fed mushrooms --- - .../java/net/minecraft/server/Entity.java | 1 + - .../java/net/minecraft/server/EntityCow.java | 76 ++++++++++++++++++- + .../java/net/minecraft/server/Entity.java | 2 + + .../java/net/minecraft/server/EntityCow.java | 71 ++++++++++++++++++- + .../net/minecraft/server/EntityLiving.java | 10 ++- .../java/net/pl3x/purpur/PurpurConfig.java | 5 ++ - 3 files changed, 81 insertions(+), 1 deletion(-) + 4 files changed, 85 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index c5198af94b..485da37a73 100644 +index 0a2c9a9f8..dd7da4117 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java @@ -1048,6 +1048,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke @@ -21,26 +22,19 @@ index c5198af94b..485da37a73 100644 public void a(SoundEffect soundeffect, float f, float f1) { if (!this.isSilent()) { this.world.a((EntityHuman) null, this.locX, this.locY, this.locZ, soundeffect, this.getSoundCategory(), f, f1); +@@ -2545,6 +2546,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke + this.invulnerable = flag; + } + ++ public void copyPositionRotation(Entity entity) { this.u(entity); } // Purpur - OBFHELPER + public void u(Entity entity) { + this.setPositionRotation(entity.locX, entity.locY, entity.locZ, entity.yaw, entity.pitch); + } diff --git a/src/main/java/net/minecraft/server/EntityCow.java b/src/main/java/net/minecraft/server/EntityCow.java -index d2c2e3cc33..f053ff0e50 100644 +index d2c2e3cc3..c3aef0b2a 100644 --- a/src/main/java/net/minecraft/server/EntityCow.java +++ b/src/main/java/net/minecraft/server/EntityCow.java -@@ -1,9 +1,14 @@ - package net.minecraft.server; - - // CraftBukkit start -+import net.pl3x.purpur.PurpurConfig; - import org.bukkit.craftbukkit.event.CraftEventFactory; - import org.bukkit.craftbukkit.inventory.CraftItemStack; - // CraftBukkit end -+// Purpur start -+import com.destroystokyo.paper.event.entity.EntityTransformedEvent; -+import org.bukkit.event.entity.EntityTransformEvent; -+// Purpur end - - public class EntityCow extends EntityAnimal { - -@@ -16,7 +21,7 @@ public class EntityCow extends EntityAnimal { +@@ -16,7 +16,7 @@ public class EntityCow extends EntityAnimal { this.goalSelector.a(0, new PathfinderGoalFloat(this)); this.goalSelector.a(1, new PathfinderGoalPanic(this, 2.0D)); this.goalSelector.a(2, new PathfinderGoalBreed(this, 1.0D)); @@ -49,7 +43,7 @@ index d2c2e3cc33..f053ff0e50 100644 this.goalSelector.a(4, new PathfinderGoalFollowParent(this, 1.25D)); this.goalSelector.a(5, new PathfinderGoalRandomStrollLand(this, 1.0D)); this.goalSelector.a(6, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 6.0F)); -@@ -79,11 +84,80 @@ public class EntityCow extends EntityAnimal { +@@ -79,11 +79,80 @@ public class EntityCow extends EntityAnimal { // CraftBukkit end return true; @@ -81,7 +75,7 @@ index d2c2e3cc33..f053ff0e50 100644 + private boolean feedMushroom(EntityHuman entityhuman, ItemStack itemstack) { + world.broadcastEntityEffect(this, (byte) 18); // hearts + playSound(SoundEffects.ENTITY_COW_MILK, 1.0F, 1.0F); -+ if (incrementFeedCount(itemstack) < PurpurConfig.feedMushroomsToCows) { ++ if (incrementFeedCount(itemstack) < net.pl3x.purpur.PurpurConfig.feedMushroomsToCows) { + if (!entityhuman.abilities.canInstantlyBuild) { + itemstack.subtract(1); + } @@ -99,18 +93,18 @@ index d2c2e3cc33..f053ff0e50 100644 + mooshroom.setPositionRotation(this.locX, this.locY, this.locZ, this.yaw, this.pitch); + mooshroom.setHealth(this.getHealth()); + mooshroom.setAge(getAge()); -+ mooshroom.u(this); -+ mooshroom.aK = this.aK; -+ mooshroom.aM = this.aM; ++ mooshroom.copyPositionRotation(this); ++ mooshroom.setRenderYawOffset(this.getRenderYawOffset()); ++ mooshroom.setHeadRotation(this.getHeadRotation()); + mooshroom.lastYaw = this.lastYaw; + mooshroom.lastPitch = this.lastPitch; + if (this.hasCustomName()) { + mooshroom.setCustomName(this.getCustomName()); + } -+ if (CraftEventFactory.callEntityTransformEvent(this, mooshroom, EntityTransformEvent.TransformReason.SHROOMED).isCancelled()) { ++ if (CraftEventFactory.callEntityTransformEvent(this, mooshroom, org.bukkit.event.entity.EntityTransformEvent.TransformReason.SHROOMED).isCancelled()) { + return false; + } -+ if (!new EntityTransformedEvent(this.getBukkitEntity(), mooshroom.getBukkitEntity(), EntityTransformedEvent.TransformedReason.SHROOMED).callEvent()) { ++ if (!new com.destroystokyo.paper.event.entity.EntityTransformedEvent(this.getBukkitEntity(), mooshroom.getBukkitEntity(), com.destroystokyo.paper.event.entity.EntityTransformedEvent.TransformedReason.SHROOMED).callEvent()) { + return false; + } + this.world.addEntity(mooshroom); @@ -130,8 +124,29 @@ index d2c2e3cc33..f053ff0e50 100644 @Override public EntityCow createChild(EntityAgeable entityageable) { return (EntityCow) EntityTypes.COW.a(this.world); +diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java +index d44ea9ec5..84bc1a629 100644 +--- a/src/main/java/net/minecraft/server/EntityLiving.java ++++ b/src/main/java/net/minecraft/server/EntityLiving.java +@@ -2742,8 +2742,14 @@ public abstract class EntityLiving extends Entity { + this.aM = f; + } + +- @Override +- public void l(float f) { ++ // Purpur start ++ public float getRenderYawOffset() { ++ return this.aK; ++ } ++ // Purpur end ++ ++ public void setRenderYawOffset(float f) { this.l(f); } // Purpur - OBFHELPER ++ @Override public void l(float f) { + this.aK = f; + } + diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index 2f87a929c1..3a1a6b9671 100644 +index 2f87a929c..3a1a6b967 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -124,4 +124,9 @@ public class PurpurConfig { diff --git a/patches/server/0006-Fix-cow-rotation-when-shearing-mooshroom.patch b/patches/server/0006-Fix-cow-rotation-when-shearing-mooshroom.patch index 0c15ef052..f00dc30b7 100644 --- a/patches/server/0006-Fix-cow-rotation-when-shearing-mooshroom.patch +++ b/patches/server/0006-Fix-cow-rotation-when-shearing-mooshroom.patch @@ -1,24 +1,25 @@ -From 87a60fa232ee8a521f6d3b8e1d9b27f21ecec0af Mon Sep 17 00:00:00 2001 +From 3ffd0f1a1470899d3ba61300e32ac3eab30f596c Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 3 May 2019 23:53:16 -0500 Subject: [PATCH] Fix cow rotation when shearing mooshroom --- - src/main/java/net/minecraft/server/EntityMushroomCow.java | 6 ++++++ - 1 file changed, 6 insertions(+) + src/main/java/net/minecraft/server/EntityMushroomCow.java | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/EntityMushroomCow.java b/src/main/java/net/minecraft/server/EntityMushroomCow.java -index d1059355ad..6bfffb4077 100644 +index d1059355a..f4f60c38d 100644 --- a/src/main/java/net/minecraft/server/EntityMushroomCow.java +++ b/src/main/java/net/minecraft/server/EntityMushroomCow.java @@ -101,7 +101,13 @@ public class EntityMushroomCow extends EntityCow { entitycow.setPositionRotation(this.locX, this.locY, this.locZ, this.yaw, this.pitch); entitycow.setHealth(this.getHealth()); +- entitycow.aK = this.aK; + // Purpur start - correctly copy rotation -+ entitycow.u(this); - entitycow.aK = this.aK; -+ entitycow.aM = this.aM; ++ entitycow.copyPositionRotation(this); ++ entitycow.setRenderYawOffset(this.getRenderYawOffset()); ++ entitycow.setHeadRotation(this.getHeadRotation()); + entitycow.lastYaw = this.lastYaw; + entitycow.lastPitch = this.lastPitch; + // Purpur end diff --git a/patches/server/0007-Snowman-set-pumpkin-on-off-by-player-interaction.patch b/patches/server/0007-Snowman-set-pumpkin-on-off-by-player-interaction.patch index 4a7814685..31b31009c 100644 --- a/patches/server/0007-Snowman-set-pumpkin-on-off-by-player-interaction.patch +++ b/patches/server/0007-Snowman-set-pumpkin-on-off-by-player-interaction.patch @@ -1,25 +1,18 @@ -From 64c7e4e5d7c36b73a4a012fa258066a3913feba4 Mon Sep 17 00:00:00 2001 +From 6f98e087a81f0c88afc5a0d57ffaccfaa69ffc4e Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 3 May 2019 23:58:44 -0500 Subject: [PATCH] Snowman set pumpkin on/off by player interaction --- - .../net/minecraft/server/EntitySnowman.java | 20 ++++++++++++++++++- + .../net/minecraft/server/EntitySnowman.java | 19 ++++++++++++++++++- .../java/net/pl3x/purpur/PurpurConfig.java | 7 +++++++ - 2 files changed, 26 insertions(+), 1 deletion(-) + 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/EntitySnowman.java b/src/main/java/net/minecraft/server/EntitySnowman.java -index fe1381cc17..e106b1dce4 100644 +index fe1381cc1..1fed1d6e7 100644 --- a/src/main/java/net/minecraft/server/EntitySnowman.java +++ b/src/main/java/net/minecraft/server/EntitySnowman.java -@@ -2,12 +2,14 @@ package net.minecraft.server; - - import javax.annotation.Nullable; - // CraftBukkit start -+import net.pl3x.purpur.PurpurConfig; - import org.bukkit.craftbukkit.event.CraftEventFactory; - import org.bukkit.event.player.PlayerShearEntityEvent; - // CraftBukkit end +@@ -8,6 +8,7 @@ import org.bukkit.event.player.PlayerShearEntityEvent; public class EntitySnowman extends EntityGolem implements IRangedEntity { @@ -27,7 +20,7 @@ index fe1381cc17..e106b1dce4 100644 private static final DataWatcherObject b = DataWatcher.a(EntitySnowman.class, DataWatcherRegistry.a); public EntitySnowman(EntityTypes entitytypes, World world) { -@@ -112,7 +114,7 @@ public class EntitySnowman extends EntityGolem implements IRangedEntity { +@@ -112,7 +113,7 @@ public class EntitySnowman extends EntityGolem implements IRangedEntity { protected boolean a(EntityHuman entityhuman, EnumHand enumhand) { ItemStack itemstack = entityhuman.b(enumhand); @@ -36,20 +29,20 @@ index fe1381cc17..e106b1dce4 100644 // CraftBukkit start PlayerShearEntityEvent event = new PlayerShearEntityEvent((org.bukkit.entity.Player) entityhuman.getBukkitEntity(), this.getBukkitEntity()); this.world.getServer().getPluginManager().callEvent(event); -@@ -126,6 +128,22 @@ public class EntitySnowman extends EntityGolem implements IRangedEntity { +@@ -126,6 +127,22 @@ public class EntitySnowman extends EntityGolem implements IRangedEntity { itemstack.damage(1, entityhuman, (entityhuman1) -> { entityhuman1.d(enumhand); }); + + // Purpur start -+ if (PurpurConfig.snowmanDropsPumpkin) { ++ if (net.pl3x.purpur.PurpurConfig.snowmanDropsPumpkin) { + EntityItem pumpkin = new EntityItem(world, locX, locY, locZ, new ItemStack(Blocks.PUMPKIN.getItem())); + pumpkin.pickupDelay = 10; + world.addEntity(pumpkin); + } + return true; + }} else { -+ if (PurpurConfig.snowmanPumpkinPutBack && PUMPKIN.test(itemstack)) { ++ if (net.pl3x.purpur.PurpurConfig.snowmanPumpkinPutBack && PUMPKIN.test(itemstack)) { + setHasPumpkin(true); + if (!entityhuman.abilities.canInstantlyBuild) { + itemstack.subtract(1); @@ -60,7 +53,7 @@ index fe1381cc17..e106b1dce4 100644 return super.a(entityhuman, enumhand); diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index 3a1a6b9671..1666412782 100644 +index 3a1a6b967..166641278 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -129,4 +129,11 @@ public class PurpurConfig { diff --git a/patches/server/0009-Silk-touch-spawners.patch b/patches/server/0009-Silk-touch-spawners.patch index cfdfef58b..a669908fd 100644 --- a/patches/server/0009-Silk-touch-spawners.patch +++ b/patches/server/0009-Silk-touch-spawners.patch @@ -1,4 +1,4 @@ -From 38e634bad7487c17e998ca79edc18ca82da1dd1b Mon Sep 17 00:00:00 2001 +From d5b26b7987432b2a6fb3bc0d022061b9e378f796 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 9 May 2019 14:27:37 -0500 Subject: [PATCH] Silk touch spawners @@ -6,14 +6,14 @@ Subject: [PATCH] Silk touch spawners --- src/main/java/net/minecraft/server/Block.java | 1 + .../net/minecraft/server/BlockMobSpawner.java | 35 +++++++++++++++++++ - .../net/minecraft/server/EntityTypes.java | 13 +++++++ - .../net/minecraft/server/ItemSpawner.java | 22 ++++++++++++ + .../net/minecraft/server/EntityTypes.java | 14 ++++++++ + .../net/minecraft/server/ItemSpawner.java | 23 ++++++++++++ src/main/java/net/minecraft/server/Items.java | 2 +- - 5 files changed, 72 insertions(+), 1 deletion(-) + 5 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 src/main/java/net/minecraft/server/ItemSpawner.java diff --git a/src/main/java/net/minecraft/server/Block.java b/src/main/java/net/minecraft/server/Block.java -index 5d8db912a6..8e16162a7b 100644 +index 5d8db912a..8e16162a7 100644 --- a/src/main/java/net/minecraft/server/Block.java +++ b/src/main/java/net/minecraft/server/Block.java @@ -493,6 +493,7 @@ public class Block implements IMaterial { @@ -25,7 +25,7 @@ index 5d8db912a6..8e16162a7b 100644 if (!world.isClientSide && !itemstack.isEmpty() && world.getGameRules().getBoolean(GameRules.DO_TILE_DROPS)) { float f = 0.5F; diff --git a/src/main/java/net/minecraft/server/BlockMobSpawner.java b/src/main/java/net/minecraft/server/BlockMobSpawner.java -index bb77d916ab..974a5d2816 100644 +index bb77d916a..974a5d281 100644 --- a/src/main/java/net/minecraft/server/BlockMobSpawner.java +++ b/src/main/java/net/minecraft/server/BlockMobSpawner.java @@ -11,6 +11,40 @@ public class BlockMobSpawner extends BlockTileEntity { @@ -78,10 +78,10 @@ index bb77d916ab..974a5d2816 100644 return i; diff --git a/src/main/java/net/minecraft/server/EntityTypes.java b/src/main/java/net/minecraft/server/EntityTypes.java -index eaacc9bff8..ec63f1dbe1 100644 +index eaacc9bff..c32f40a60 100644 --- a/src/main/java/net/minecraft/server/EntityTypes.java +++ b/src/main/java/net/minecraft/server/EntityTypes.java -@@ -137,6 +137,12 @@ public class EntityTypes { +@@ -137,10 +137,17 @@ public class EntityTypes { return (EntityTypes) IRegistry.a((IRegistry) IRegistry.ENTITY_TYPE, s, (Object) entitytypes_a.a(s)); } @@ -94,7 +94,12 @@ index eaacc9bff8..ec63f1dbe1 100644 public static MinecraftKey getName(EntityTypes entitytypes) { return IRegistry.ENTITY_TYPE.getKey(entitytypes); } -@@ -255,6 +261,12 @@ public class EntityTypes { + ++ public static Optional> getType(String name) { return a(name); } // Purpur - OBFHELPER + public static Optional> a(String s) { + return IRegistry.ENTITY_TYPE.getOptional(MinecraftKey.a(s)); + } +@@ -255,6 +262,12 @@ public class EntityTypes { return this.ba; } @@ -107,7 +112,7 @@ index eaacc9bff8..ec63f1dbe1 100644 public String e() { if (this.be == null) { this.be = SystemUtils.a("entity", IRegistry.ENTITY_TYPE.getKey(this)); -@@ -263,6 +275,7 @@ public class EntityTypes { +@@ -263,6 +276,7 @@ public class EntityTypes { return this.be; } @@ -117,10 +122,10 @@ index eaacc9bff8..ec63f1dbe1 100644 this.bf = new ChatMessage(this.e(), new Object[0]); diff --git a/src/main/java/net/minecraft/server/ItemSpawner.java b/src/main/java/net/minecraft/server/ItemSpawner.java new file mode 100644 -index 0000000000..05dbc162fa +index 000000000..7dc68ffe9 --- /dev/null +++ b/src/main/java/net/minecraft/server/ItemSpawner.java -@@ -0,0 +1,22 @@ +@@ -0,0 +1,23 @@ +package net.minecraft.server; + +public class ItemSpawner extends ItemBlock { @@ -132,11 +137,12 @@ index 0000000000..05dbc162fa + protected boolean a(BlockPosition blockposition, World world, EntityHuman entityhuman, ItemStack itemstack, IBlockData iblockdata) { + boolean handled = super.a(blockposition, world, entityhuman, itemstack, iblockdata); + if (entityhuman.getBukkitEntity().hasPermission("purpur.place.spawners")) { -+ TileEntity te = world.getTileEntity(blockposition); -+ if (te instanceof TileEntityMobSpawner && itemstack.hasTag()) { ++ TileEntity spawner = world.getTileEntity(blockposition); ++ if (spawner instanceof TileEntityMobSpawner && itemstack.hasTag()) { + NBTTagCompound tag = itemstack.getTag(); + if (tag.hasKey("Purpur.mob_type")) { -+ EntityTypes.a(tag.getString("Purpur.mob_type")).ifPresent(type -> ((TileEntityMobSpawner) te).getSpawner().setMobName(type)); ++ EntityTypes.getType(tag.getString("Purpur.mob_type")).ifPresent(type -> ++ ((TileEntityMobSpawner) spawner).getSpawner().setMobName(type)); + } + } + } @@ -144,7 +150,7 @@ index 0000000000..05dbc162fa + } +} diff --git a/src/main/java/net/minecraft/server/Items.java b/src/main/java/net/minecraft/server/Items.java -index 84646dbc26..987297634c 100644 +index 84646dbc2..987297634 100644 --- a/src/main/java/net/minecraft/server/Items.java +++ b/src/main/java/net/minecraft/server/Items.java @@ -155,7 +155,7 @@ public class Items { diff --git a/patches/server/0010-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch b/patches/server/0010-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch index 649a7c493..519ccaf7e 100644 --- a/patches/server/0010-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch +++ b/patches/server/0010-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch @@ -1,15 +1,60 @@ -From fb39b44c654ae8bfaae679e4031d088616b50e38 Mon Sep 17 00:00:00 2001 +From 76c45487e76be7cbec6df4e8438bc79095cc5227 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 9 May 2019 18:26:06 -0500 Subject: [PATCH] Phantoms attracted to crystals and crystals shoot phantoms --- - .../minecraft/server/EntityEnderCrystal.java | 49 ++++++ - .../net/minecraft/server/EntityPhantom.java | 165 +++++++++++++++++- - 2 files changed, 211 insertions(+), 3 deletions(-) + .../net/minecraft/server/DamageSource.java | 1 + + .../java/net/minecraft/server/Entity.java | 8 +- + .../minecraft/server/EntityEnderCrystal.java | 49 +++++ + .../net/minecraft/server/EntityPhantom.java | 170 +++++++++++++++++- + .../net/minecraft/server/IEntityAccess.java | 1 + + 5 files changed, 219 insertions(+), 10 deletions(-) +diff --git a/src/main/java/net/minecraft/server/DamageSource.java b/src/main/java/net/minecraft/server/DamageSource.java +index 730a15f33..31454349a 100644 +--- a/src/main/java/net/minecraft/server/DamageSource.java ++++ b/src/main/java/net/minecraft/server/DamageSource.java +@@ -77,6 +77,7 @@ public class DamageSource { + return (new EntityDamageSourceIndirect("thrown", entity, entity1)).c(); + } + ++ public static DamageSource indirectMagic(Entity entity, @Nullable Entity owner) { return c(entity, owner); } // Purpur - OBFHELPER + public static DamageSource c(Entity entity, @Nullable Entity entity1) { + return (new EntityDamageSourceIndirect("indirectMagic", entity, entity1)).setIgnoreArmor().setMagic(); + } +diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java +index dd7da4117..adfd6e855 100644 +--- a/src/main/java/net/minecraft/server/Entity.java ++++ b/src/main/java/net/minecraft/server/Entity.java +@@ -1399,6 +1399,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke + return d3 * d3 + d4 * d4 + d5 * d5; + } + ++ public double getDistanceSq(Entity entity) { return this.h(entity); } // Purpur - OBFHELPER + public double h(Entity entity) { + return this.c(entity.ci()); + } +@@ -1918,14 +1919,13 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke + return this.a(new ItemStack(imaterial), (float) i); + } + +- @Nullable +- public EntityItem a(ItemStack itemstack) { ++ @Nullable public EntityItem dropItem(ItemStack itemstack) { return this.a(itemstack); } // Purpur - OBFHELPER ++ @Nullable public EntityItem a(ItemStack itemstack) { + return this.a(itemstack, 0.0F); + } + + @Nullable public final EntityItem dropItem(ItemStack itemstack, float offset) { return this.a(itemstack, offset); } // Paper - OBFHELPER +- @Nullable +- public EntityItem a(ItemStack itemstack, float f) { ++ @Nullable public EntityItem a(ItemStack itemstack, float f) { + if (itemstack.isEmpty()) { + return null; + } else if (this.world.isClientSide) { diff --git a/src/main/java/net/minecraft/server/EntityEnderCrystal.java b/src/main/java/net/minecraft/server/EntityEnderCrystal.java -index 9491cb9de..871c65b88 100644 +index 801552fc6..b3366b461 100644 --- a/src/main/java/net/minecraft/server/EntityEnderCrystal.java +++ b/src/main/java/net/minecraft/server/EntityEnderCrystal.java @@ -13,6 +13,12 @@ public class EntityEnderCrystal extends Entity { @@ -35,7 +80,7 @@ index 9491cb9de..871c65b88 100644 + } + + if (targetPhantom == null) { -+ for (EntityPhantom phantom : world.a(EntityPhantom.class, getBoundingBox().grow(16, 16, 16))) { ++ for (EntityPhantom phantom : world.getEntities(EntityPhantom.class, getBoundingBox().grow(16, 16, 16))) { + if (phantom.hasLineOfSight(this)) { + attackPhantom(phantom); + break; @@ -48,7 +93,7 @@ index 9491cb9de..871c65b88 100644 + if (targetPhantom.hasLineOfSight(this)) { + if (phantomDamageCooldown <= 0) { + phantomDamageCooldown = 20; -+ targetPhantom.damageEntity(DamageSource.c(this, this), 1.0F); ++ targetPhantom.damageEntity(DamageSource.indirectMagic(this, this), 1.0F); + } + } else { + forgetPhantom(); // no longer in sight @@ -77,25 +122,24 @@ index 9491cb9de..871c65b88 100644 @Override protected void b(NBTTagCompound nbttagcompound) { diff --git a/src/main/java/net/minecraft/server/EntityPhantom.java b/src/main/java/net/minecraft/server/EntityPhantom.java -index e5d032d02..6aa116f4b 100644 +index b672ac5c2..4e07287e9 100644 --- a/src/main/java/net/minecraft/server/EntityPhantom.java +++ b/src/main/java/net/minecraft/server/EntityPhantom.java -@@ -1,5 +1,6 @@ - package net.minecraft.server; +@@ -8,9 +8,10 @@ import javax.annotation.Nullable; + public class EntityPhantom extends EntityFlying implements IMonster { -+import java.util.Comparator; - import java.util.EnumSet; - import java.util.Iterator; - import java.util.List; -@@ -11,6 +12,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { - private Vec3D c; - private BlockPosition d; - private EntityPhantom.AttackPhase bz; + private static final DataWatcherObject b = DataWatcher.a(EntityPhantom.class, DataWatcherRegistry.b); +- private Vec3D c; +- private BlockPosition d; +- private EntityPhantom.AttackPhase bz; ++ private Vec3D c; public void setHomeOffset(Vec3D offset) { this.c = offset; } public Vec3D getHomeOffset() { return this.c; } // Purpur - OBFHELPER ++ private BlockPosition d; public void setHome(BlockPosition home) { this.d = home; } public BlockPosition getHome() { return this.d; } // Purpur - OBFHELPER ++ private EntityPhantom.AttackPhase bz; public AttackPhase getAttackPhase() { return this.bz; } // Purpur - OBFHELPER + private BlockPosition crystalPosition; // Purpur public EntityPhantom(EntityTypes entitytypes, World world) { super(entitytypes, world); -@@ -29,8 +31,10 @@ public class EntityPhantom extends EntityFlying implements IMonster { +@@ -29,8 +30,10 @@ public class EntityPhantom extends EntityFlying implements IMonster { @Override protected void initPathfinder() { @@ -106,7 +150,7 @@ index e5d032d02..6aa116f4b 100644 this.goalSelector.a(3, new EntityPhantom.e()); this.targetSelector.a(1, new EntityPhantom.b()); } -@@ -114,6 +118,26 @@ public class EntityPhantom extends EntityFlying implements IMonster { +@@ -114,6 +117,26 @@ public class EntityPhantom extends EntityFlying implements IMonster { super.mobTick(); } @@ -116,7 +160,7 @@ index e5d032d02..6aa116f4b 100644 + boolean dropped = false; + if (killer == null && damagesource.getEntity() instanceof EntityEnderCrystal) { + if (random.nextInt(5) < 1) { // 1 out of 5 chance (20%) -+ dropped = a(new ItemStack(Items.PHANTOM_MEMBRANE)) != null; ++ dropped = dropItem(new ItemStack(Items.PHANTOM_MEMBRANE)) != null; + } + } + if (!dropped) { @@ -133,7 +177,7 @@ index e5d032d02..6aa116f4b 100644 @Override public GroupDataEntity prepare(GeneratorAccess generatoraccess, DifficultyDamageScaler difficultydamagescaler, EnumMobSpawn enummobspawn, @Nullable GroupDataEntity groupdataentity, @Nullable NBTTagCompound nbttagcompound) { this.d = (new BlockPosition(this)).up(5); -@@ -202,6 +226,136 @@ public class EntityPhantom extends EntityFlying implements IMonster { +@@ -202,6 +225,136 @@ public class EntityPhantom extends EntityFlying implements IMonster { } // Paper end @@ -141,23 +185,23 @@ index e5d032d02..6aa116f4b 100644 + class FindCrystalGoal extends PathfinderGoal { + private final EntityPhantom phantom; + private EntityEnderCrystal crystal; -+ private Comparator comparator; ++ private java.util.Comparator comparator; + + FindCrystalGoal(EntityPhantom phantom) { + this.phantom = phantom; -+ comparator = Comparator.comparingDouble(phantom::h); ++ comparator = java.util.Comparator.comparingDouble(phantom::h); + } + + @Override + public boolean a() { // shouldExecute + double range = maxTargetRange(); -+ List crystals = world.a(EntityEnderCrystal.class, phantom.getBoundingBox().grow(range, range, range)); ++ List crystals = world.getEntities(EntityEnderCrystal.class, phantom.getBoundingBox().grow(range, range, range)); + if (crystals.isEmpty()) { + return false; + } + crystals.sort(comparator); + crystal = crystals.get(0); -+ if (phantom.h(crystal) > range * range) { ++ if (phantom.getDistanceSq(crystal) > range * range) { + crystal = null; + return false; + } @@ -170,7 +214,7 @@ index e5d032d02..6aa116f4b 100644 + return false; + } + double range = maxTargetRange(); -+ return phantom.h(crystal) <= (range * range) * 2; ++ return phantom.getDistanceSq(crystal) <= (range * range) * 2; + } + + @Override @@ -190,7 +234,7 @@ index e5d032d02..6aa116f4b 100644 + return range == null ? 16.0D : range.getValue(); + } + -+ class DistanceComparator implements Comparator { ++ class DistanceComparator implements java.util.Comparator { + private final Entity entity; + + public DistanceComparator(Entity entity) { @@ -198,14 +242,14 @@ index e5d032d02..6aa116f4b 100644 + } + + public int compare(Entity entity1, Entity entity2) { -+ return Double.compare(entity.h(entity1), entity.h(entity2)); ++ return Double.compare(entity.getDistanceSq(entity1), entity.getDistanceSq(entity2)); + } + } + } + + class OrbitCrystalGoal extends PathfinderGoal { + private final EntityPhantom phantom; -+ private float c; ++ private float offset; + private float radius; + private float verticalChange; + private float direction; @@ -241,28 +285,28 @@ index e5d032d02..6aa116f4b 100644 + } + } + if (phantom.random.nextInt(450) == 0) { -+ this.c = phantom.random.nextFloat() * 2.0F * 3.1415927F; ++ this.offset = phantom.random.nextFloat() * 2.0F * 3.1415927F; + updateOffset(); + } -+ if (phantom.c.c(phantom.locX, phantom.locY, phantom.locZ) < 4.0D) { ++ if (phantom.getHomeOffset().c(phantom.locX, phantom.locY, phantom.locZ) < 4.0D) { + updateOffset(); + } -+ if (phantom.c.y < phantom.locY && !phantom.world.isEmpty((new BlockPosition(phantom)).down(1))) { ++ if (phantom.getHomeOffset().y < phantom.locY && !phantom.world.isEmpty((new BlockPosition(phantom)).down(1))) { + this.verticalChange = Math.max(1.0F, this.verticalChange); + updateOffset(); + } -+ if (phantom.c.y > phantom.locY && !phantom.world.isEmpty((new BlockPosition(phantom)).up(1))) { ++ if (phantom.getHomeOffset().y > phantom.locY && !phantom.world.isEmpty((new BlockPosition(phantom)).up(1))) { + this.verticalChange = Math.min(-1.0F, this.verticalChange); + updateOffset(); + } + } + + private void updateOffset() { -+ this.c += this.direction * 15.0F * 0.017453292F; -+ phantom.c = new Vec3D(phantom.crystalPosition).add( -+ (double) (this.radius * MathHelper.cos(this.c)), ++ this.offset += this.direction * 15.0F * 0.017453292F; ++ phantom.setHomeOffset(new Vec3D(phantom.crystalPosition).add( ++ (double) (this.radius * MathHelper.cos(this.offset)), + (double) (-4.0F + this.verticalChange), -+ (double) (this.radius * MathHelper.sin(this.c))); ++ (double) (this.radius * MathHelper.sin(this.offset)))); + } + } + // Purpur end @@ -270,7 +314,7 @@ index e5d032d02..6aa116f4b 100644 class b extends PathfinderGoal { private final PathfinderTargetCondition b; -@@ -259,7 +413,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { +@@ -259,7 +412,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { public boolean a() { EntityLiving entityliving = EntityPhantom.this.getGoalTarget(); @@ -279,12 +323,12 @@ index e5d032d02..6aa116f4b 100644 } @Override -@@ -305,11 +459,16 @@ public class EntityPhantom extends EntityFlying implements IMonster { +@@ -305,11 +458,16 @@ public class EntityPhantom extends EntityFlying implements IMonster { @Override public boolean a() { - return EntityPhantom.this.getGoalTarget() != null && EntityPhantom.this.bz == EntityPhantom.AttackPhase.SWOOP; -+ return !isCirclingCrystal() && EntityPhantom.this.getGoalTarget() != null && EntityPhantom.this.bz == EntityPhantom.AttackPhase.SWOOP; // Purpur ++ return !isCirclingCrystal() && EntityPhantom.this.getGoalTarget() != null && EntityPhantom.this.getAttackPhase() == EntityPhantom.AttackPhase.SWOOP; // Purpur } @Override @@ -297,15 +341,27 @@ index e5d032d02..6aa116f4b 100644 EntityLiving entityliving = EntityPhantom.this.getGoalTarget(); if (entityliving == null) { -@@ -379,7 +538,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { +@@ -379,7 +537,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { @Override public boolean a() { - return EntityPhantom.this.getGoalTarget() == null || EntityPhantom.this.bz == EntityPhantom.AttackPhase.CIRCLE; -+ return !isCirclingCrystal() && EntityPhantom.this.getGoalTarget() == null || EntityPhantom.this.bz == EntityPhantom.AttackPhase.CIRCLE; // Purpur ++ return !isCirclingCrystal() && EntityPhantom.this.getGoalTarget() == null || EntityPhantom.this.getAttackPhase() == EntityPhantom.AttackPhase.CIRCLE; // Purpur } @Override +diff --git a/src/main/java/net/minecraft/server/IEntityAccess.java b/src/main/java/net/minecraft/server/IEntityAccess.java +index 3a86c519c..9f78ae099 100644 +--- a/src/main/java/net/minecraft/server/IEntityAccess.java ++++ b/src/main/java/net/minecraft/server/IEntityAccess.java +@@ -30,6 +30,7 @@ public interface IEntityAccess { + }); + } + ++ default List getEntities(Class oclass, AxisAlignedBB axisalignedbb) { return a(oclass, axisalignedbb); } // Purpur - OBFHELPER + default List a(Class oclass, AxisAlignedBB axisalignedbb) { + return this.a(oclass, axisalignedbb, IEntitySelector.f); + } -- 2.20.1 diff --git a/patches/server/0011-Integrate-ridables.patch b/patches/server/0011-Integrate-ridables.patch index 60ac5ec70..47741f9e3 100644 --- a/patches/server/0011-Integrate-ridables.patch +++ b/patches/server/0011-Integrate-ridables.patch @@ -1,4 +1,4 @@ -From 17561f8c3ae230ab95d83035ad1b647823cc0757 Mon Sep 17 00:00:00 2001 +From e1588564c74131a5b5b60262ea82f7df7607f8d7 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Tue, 30 Apr 2019 19:17:21 -0500 Subject: [PATCH] Integrate ridables @@ -35,7 +35,7 @@ Subject: [PATCH] Integrate ridables .../minecraft/server/EntityIllagerWizard.java | 3 + .../minecraft/server/EntityInsentient.java | 51 +++++++- .../net/minecraft/server/EntityIronGolem.java | 1 + - .../net/minecraft/server/EntityLiving.java | 25 +++- + .../net/minecraft/server/EntityLiving.java | 24 +++- .../net/minecraft/server/EntityMagmaCube.java | 3 +- .../minecraft/server/EntityMushroomCow.java | 1 + .../net/minecraft/server/EntityOcelot.java | 3 + @@ -136,7 +136,7 @@ Subject: [PATCH] Integrate ridables .../controller/ControllerMoveWASDWater.java | 42 +++++++ .../craftbukkit/entity/CraftLivingEntity.java | 10 ++ .../bukkit/craftbukkit/entity/CraftMob.java | 12 ++ - 132 files changed, 1249 insertions(+), 106 deletions(-) + 132 files changed, 1248 insertions(+), 106 deletions(-) create mode 100644 src/main/java/net/pl3x/purpur/controller/ControllerLookWASD.java create mode 100644 src/main/java/net/pl3x/purpur/controller/ControllerMoveWASD.java create mode 100644 src/main/java/net/pl3x/purpur/controller/ControllerMoveWASDFlying.java @@ -165,7 +165,7 @@ index 454627f65..df3d6cf28 100644 this.d = false; this.a.aM = this.a(this.a.aM, this.h() + 20.0F, this.b); diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index c10b41dff..e8b5729ef 100644 +index adfd6e855..cf5d829f6 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java @@ -78,6 +78,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke @@ -223,7 +223,7 @@ index c10b41dff..e8b5729ef 100644 this.passengers.remove(entity); entity.j = 60; } -@@ -3275,4 +3290,20 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -3276,4 +3291,20 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke public void setMot(double d0, double d1, double d2) { this.setMot(new Vec3D(d0, d1, d2)); } @@ -524,10 +524,10 @@ index 1e3782122..c0b066d18 100644 @Override diff --git a/src/main/java/net/minecraft/server/EntityCow.java b/src/main/java/net/minecraft/server/EntityCow.java -index f053ff0e5..16a35418f 100644 +index c3aef0b2a..087ce8739 100644 --- a/src/main/java/net/minecraft/server/EntityCow.java +++ b/src/main/java/net/minecraft/server/EntityCow.java -@@ -14,6 +14,7 @@ public class EntityCow extends EntityAnimal { +@@ -9,6 +9,7 @@ public class EntityCow extends EntityAnimal { public EntityCow(EntityTypes entitytypes, World world) { super(entitytypes, world); @@ -1701,7 +1701,7 @@ index 8e463111b..fd6a926ca 100644 } diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index c2d83bf3e..694200deb 100644 +index 60ddadbfe..7e59a7b30 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -87,10 +87,10 @@ public abstract class EntityLiving extends Entity { @@ -1769,14 +1769,6 @@ index c2d83bf3e..694200deb 100644 public void o(float f) { this.bD = f; } -@@ -2743,6 +2755,7 @@ public abstract class EntityLiving extends Entity { - this.aM = f; - } - -+ public void setRenderYawOffset(float renderYawOffset) { l(renderYawOffset); } // Purpur - OBFHELPER - @Override - public void l(float f) { - this.aK = f; diff --git a/src/main/java/net/minecraft/server/EntityMagmaCube.java b/src/main/java/net/minecraft/server/EntityMagmaCube.java index a17316c77..b34a258c2 100644 --- a/src/main/java/net/minecraft/server/EntityMagmaCube.java @@ -1799,7 +1791,7 @@ index a17316c77..b34a258c2 100644 this.setMot(vec3d.x, (double) (0.42F + (float) this.getSize() * 0.1F), vec3d.z); diff --git a/src/main/java/net/minecraft/server/EntityMushroomCow.java b/src/main/java/net/minecraft/server/EntityMushroomCow.java -index 6bfffb407..b6d5fe362 100644 +index f4f60c38d..f868ea114 100644 --- a/src/main/java/net/minecraft/server/EntityMushroomCow.java +++ b/src/main/java/net/minecraft/server/EntityMushroomCow.java @@ -18,6 +18,7 @@ public class EntityMushroomCow extends EntityCow { @@ -2063,10 +2055,10 @@ index 94e973ffb..d743ddb9c 100644 @Nullable diff --git a/src/main/java/net/minecraft/server/EntityPhantom.java b/src/main/java/net/minecraft/server/EntityPhantom.java -index ea11de3cb..8517fcf29 100644 +index 4e07287e9..7f414aee9 100644 --- a/src/main/java/net/minecraft/server/EntityPhantom.java +++ b/src/main/java/net/minecraft/server/EntityPhantom.java -@@ -16,12 +16,14 @@ public class EntityPhantom extends EntityFlying implements IMonster { +@@ -15,12 +15,14 @@ public class EntityPhantom extends EntityFlying implements IMonster { public EntityPhantom(EntityTypes entitytypes, World world) { super(entitytypes, world); @@ -2081,7 +2073,7 @@ index ea11de3cb..8517fcf29 100644 } @Override -@@ -106,7 +108,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { +@@ -105,7 +107,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { @Override public void movementTick() { @@ -2090,15 +2082,15 @@ index ea11de3cb..8517fcf29 100644 this.setOnFire(8); } -@@ -239,6 +241,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { +@@ -238,6 +240,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { @Override public boolean a() { // shouldExecute + if (this.phantom.getRider() != null) return false; double range = maxTargetRange(); - List crystals = world.a(EntityEnderCrystal.class, phantom.getBoundingBox().grow(range, range, range)); + List crystals = world.getEntities(EntityEnderCrystal.class, phantom.getBoundingBox().grow(range, range, range)); if (crystals.isEmpty()) { -@@ -255,6 +258,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { +@@ -254,6 +257,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { @Override public boolean b() { // shouldContinueExecuting @@ -2106,7 +2098,7 @@ index ea11de3cb..8517fcf29 100644 if (crystal == null || !crystal.isAlive()) { return false; } -@@ -306,6 +310,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { +@@ -305,6 +309,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { @Override public boolean a() { // shouldExecute @@ -2114,7 +2106,7 @@ index ea11de3cb..8517fcf29 100644 return phantom.isCirclingCrystal(); } -@@ -368,6 +373,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { +@@ -367,6 +372,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { @Override public boolean a() { @@ -2122,7 +2114,7 @@ index ea11de3cb..8517fcf29 100644 if (this.c > 0) { --this.c; return false; -@@ -397,6 +403,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { +@@ -396,6 +402,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { @Override public boolean b() { @@ -2130,7 +2122,7 @@ index ea11de3cb..8517fcf29 100644 EntityLiving entityliving = EntityPhantom.this.getGoalTarget(); return entityliving != null ? EntityPhantom.this.a(entityliving, PathfinderTargetCondition.a) : false; -@@ -411,6 +418,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { +@@ -410,6 +417,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { @Override public boolean a() { @@ -2138,12 +2130,12 @@ index ea11de3cb..8517fcf29 100644 EntityLiving entityliving = EntityPhantom.this.getGoalTarget(); return !isCirclingCrystal() && entityliving != null && EntityPhantom.this.a(EntityPhantom.this.getGoalTarget(), PathfinderTargetCondition.a); // Purpur -@@ -459,12 +467,14 @@ public class EntityPhantom extends EntityFlying implements IMonster { +@@ -458,12 +466,14 @@ public class EntityPhantom extends EntityFlying implements IMonster { @Override public boolean a() { + if (EntityPhantom.this.getRider() != null) return false; // Purpur - return !isCirclingCrystal() && EntityPhantom.this.getGoalTarget() != null && EntityPhantom.this.bz == EntityPhantom.AttackPhase.SWOOP; // Purpur + return !isCirclingCrystal() && EntityPhantom.this.getGoalTarget() != null && EntityPhantom.this.getAttackPhase() == EntityPhantom.AttackPhase.SWOOP; // Purpur } @Override @@ -2153,15 +2145,15 @@ index ea11de3cb..8517fcf29 100644 if (isCirclingCrystal()) { return false; } -@@ -538,6 +548,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { +@@ -537,6 +547,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { @Override public boolean a() { + if (EntityPhantom.this.getRider() != null) return false; // Purpur - return !isCirclingCrystal() && EntityPhantom.this.getGoalTarget() == null || EntityPhantom.this.bz == EntityPhantom.AttackPhase.CIRCLE; // Purpur + return !isCirclingCrystal() && EntityPhantom.this.getGoalTarget() == null || EntityPhantom.this.getAttackPhase() == EntityPhantom.AttackPhase.CIRCLE; // Purpur } -@@ -605,14 +616,23 @@ public class EntityPhantom extends EntityFlying implements IMonster { +@@ -604,14 +615,23 @@ public class EntityPhantom extends EntityFlying implements IMonster { } } @@ -2187,7 +2179,7 @@ index ea11de3cb..8517fcf29 100644 } class d extends EntityAIBodyControl { -@@ -628,7 +648,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { +@@ -627,7 +647,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { } } @@ -2196,7 +2188,7 @@ index ea11de3cb..8517fcf29 100644 private float j = 0.1F; -@@ -636,8 +656,19 @@ public class EntityPhantom extends EntityFlying implements IMonster { +@@ -635,8 +655,19 @@ public class EntityPhantom extends EntityFlying implements IMonster { super(entityinsentient); } @@ -2684,10 +2676,10 @@ index a59b66e66..2feb9d67b 100644 this.setMot(vec3d.x, 0.41999998688697815D, vec3d.z); diff --git a/src/main/java/net/minecraft/server/EntitySnowman.java b/src/main/java/net/minecraft/server/EntitySnowman.java -index e106b1dce..cee9bd683 100644 +index 1fed1d6e7..389372ba4 100644 --- a/src/main/java/net/minecraft/server/EntitySnowman.java +++ b/src/main/java/net/minecraft/server/EntitySnowman.java -@@ -14,6 +14,7 @@ public class EntitySnowman extends EntityGolem implements IRangedEntity { +@@ -13,6 +13,7 @@ public class EntitySnowman extends EntityGolem implements IRangedEntity { public EntitySnowman(EntityTypes entitytypes, World world) { super(entitytypes, world); @@ -2695,7 +2687,7 @@ index e106b1dce..cee9bd683 100644 } @Override -@@ -75,6 +76,7 @@ public class EntitySnowman extends EntityGolem implements IRangedEntity { +@@ -74,6 +75,7 @@ public class EntitySnowman extends EntityGolem implements IRangedEntity { return; } @@ -2957,10 +2949,10 @@ index 0037d1380..02a21641c 100644 return false; } else { diff --git a/src/main/java/net/minecraft/server/EntityTypes.java b/src/main/java/net/minecraft/server/EntityTypes.java -index ec63f1dbe..4aac81d3a 100644 +index c32f40a60..ad58a3c9a 100644 --- a/src/main/java/net/minecraft/server/EntityTypes.java +++ b/src/main/java/net/minecraft/server/EntityTypes.java -@@ -262,6 +262,10 @@ public class EntityTypes { +@@ -263,6 +263,10 @@ public class EntityTypes { } // Purpur start diff --git a/patches/server/0013-Make-giants-naturally-spawn-and-have-AI.patch b/patches/server/0013-Make-giants-naturally-spawn-and-have-AI.patch index be15ae518..3e5453403 100644 --- a/patches/server/0013-Make-giants-naturally-spawn-and-have-AI.patch +++ b/patches/server/0013-Make-giants-naturally-spawn-and-have-AI.patch @@ -1,17 +1,17 @@ -From 19eee04e36e465587cc15e413a773221c07ec6dd Mon Sep 17 00:00:00 2001 +From 458fda51cacad3f29fee4f83569abc21f4db2ef3 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sun, 12 May 2019 00:43:12 -0500 Subject: [PATCH] Make giants naturally spawn and have AI --- .../java/net/minecraft/server/BiomeBase.java | 1 + - .../java/net/minecraft/server/Biomes.java | 25 ++++++++++++++++ - .../minecraft/server/EntityGiantZombie.java | 30 ++++++++++++++++++- + .../java/net/minecraft/server/Biomes.java | 25 +++++++++++++++++ + .../minecraft/server/EntityGiantZombie.java | 28 ++++++++++++++++++- .../java/net/pl3x/purpur/PurpurConfig.java | 7 +++++ - 4 files changed, 62 insertions(+), 1 deletion(-) + 4 files changed, 60 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/BiomeBase.java b/src/main/java/net/minecraft/server/BiomeBase.java -index 72eb669c50..f1500f7a0e 100644 +index 72eb669c5..f1500f7a0 100644 --- a/src/main/java/net/minecraft/server/BiomeBase.java +++ b/src/main/java/net/minecraft/server/BiomeBase.java @@ -97,6 +97,7 @@ public abstract class BiomeBase { @@ -23,7 +23,7 @@ index 72eb669c50..f1500f7a0e 100644 ((List) this.u.get(enumcreaturetype)).add(biomebase_biomemeta); } diff --git a/src/main/java/net/minecraft/server/Biomes.java b/src/main/java/net/minecraft/server/Biomes.java -index f4698a6809..3f7f7a2de8 100644 +index f4698a680..3f7f7a2de 100644 --- a/src/main/java/net/minecraft/server/Biomes.java +++ b/src/main/java/net/minecraft/server/Biomes.java @@ -92,5 +92,30 @@ public abstract class Biomes { @@ -58,25 +58,17 @@ index f4698a6809..3f7f7a2de8 100644 + // Purpur end } diff --git a/src/main/java/net/minecraft/server/EntityGiantZombie.java b/src/main/java/net/minecraft/server/EntityGiantZombie.java -index b7e2022b19..28b93ce736 100644 +index b7e2022b1..3af376079 100644 --- a/src/main/java/net/minecraft/server/EntityGiantZombie.java +++ b/src/main/java/net/minecraft/server/EntityGiantZombie.java -@@ -1,5 +1,7 @@ - package net.minecraft.server; - -+import net.pl3x.purpur.PurpurConfig; -+ - public class EntityGiantZombie extends EntityMonster { - - public EntityGiantZombie(EntityTypes entitytypes, World world) { -@@ -24,8 +26,34 @@ public class EntityGiantZombie extends EntityMonster { +@@ -24,8 +24,34 @@ public class EntityGiantZombie extends EntityMonster { this.getAttributeInstance(GenericAttributes.ATTACK_DAMAGE).setValue(50.0D); } + // Purpur start + @Override + protected void initPathfinder() { -+ if (PurpurConfig.giantsHaveAI) { ++ if (net.pl3x.purpur.PurpurConfig.giantsHaveAI) { + this.goalSelector.a(0, new PathfinderGoalFloat(this)); + this.goalSelector.a(2, new PathfinderGoalMeleeAttack(this, 1.0D, false)); + this.goalSelector.a(7, new PathfinderGoalRandomStrollLand(this, 1.0D)); @@ -106,7 +98,7 @@ index b7e2022b19..28b93ce736 100644 } } diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index 1fe54bb161..162ab011ea 100644 +index 1fe54bb16..162ab011e 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -135,6 +135,13 @@ public class PurpurConfig { diff --git a/patches/server/0016-Add-regen-effect-to-campfires.patch b/patches/server/0016-Add-regen-effect-to-campfires.patch index 36445b387..a88268293 100644 --- a/patches/server/0016-Add-regen-effect-to-campfires.patch +++ b/patches/server/0016-Add-regen-effect-to-campfires.patch @@ -1,4 +1,4 @@ -From b6f682d729fd517aadd3e13ff1cd103df00aaa9a Mon Sep 17 00:00:00 2001 +From 0c3b1c07c2cd9820818551a76fe1b2df4a245322 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sun, 19 May 2019 18:11:53 -0500 Subject: [PATCH] Add regen effect to campfires @@ -11,7 +11,7 @@ Subject: [PATCH] Add regen effect to campfires 4 files changed, 89 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 694200deb2..1704609a7d 100644 +index 7e59a7b30..53cf6fc39 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -2715,10 +2715,19 @@ public abstract class EntityLiving extends Entity { @@ -38,7 +38,7 @@ index 694200deb2..1704609a7d 100644 @Override diff --git a/src/main/java/net/minecraft/server/EntityPotion.java b/src/main/java/net/minecraft/server/EntityPotion.java -index acf6082e7f..b0732da909 100644 +index acf6082e7..b0732da90 100644 --- a/src/main/java/net/minecraft/server/EntityPotion.java +++ b/src/main/java/net/minecraft/server/EntityPotion.java @@ -91,6 +91,7 @@ public class EntityPotion extends EntityProjectile { @@ -82,7 +82,7 @@ index acf6082e7f..b0732da909 100644 AxisAlignedBB axisalignedbb = this.getBoundingBox().grow(4.0D, 2.0D, 4.0D); List list = this.world.a(EntityLiving.class, axisalignedbb, EntityPotion.e); diff --git a/src/main/java/net/minecraft/server/TileEntityCampfire.java b/src/main/java/net/minecraft/server/TileEntityCampfire.java -index 2317adde44..7360e462d9 100644 +index 2317adde4..7360e462d 100644 --- a/src/main/java/net/minecraft/server/TileEntityCampfire.java +++ b/src/main/java/net/minecraft/server/TileEntityCampfire.java @@ -14,6 +14,7 @@ public class TileEntityCampfire extends TileEntity implements Clearable, ITickab @@ -151,7 +151,7 @@ index 2317adde44..7360e462d9 100644 } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 30f11fe261..5e9c633ac8 100644 +index 30f11fe26..cea2bcad5 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -60,4 +60,25 @@ public class PurpurWorldConfig { @@ -168,7 +168,7 @@ index 30f11fe261..5e9c633ac8 100644 + public int campfireRegenBoostRange = 10; + public int campfireRegenBoostAmp = 1; + public boolean campfireRegenBoostRequireLineOfSight = false; -+ private void campireRegenSettings() { ++ private void campfireRegenSettings() { + campfireRegenInterval = getInt("campfire-regen.interval", campfireRegenInterval); + campfireRegenDuration = getInt("campfire-regen.duration", campfireRegenDuration); + campfireRegenRange = getInt("campfire-regen.range", campfireRegenRange); diff --git a/patches/server/0018-Campfires-should-fall-with-gravity.patch b/patches/server/0018-Campfires-should-fall-with-gravity.patch index 198f5e043..5e069830d 100644 --- a/patches/server/0018-Campfires-should-fall-with-gravity.patch +++ b/patches/server/0018-Campfires-should-fall-with-gravity.patch @@ -1,25 +1,38 @@ -From efdbf6479d70b20959933d43eae954e9d1d2b9c9 Mon Sep 17 00:00:00 2001 +From a0a4abaa7e4b3ee773d5ed33d845fc743dbdf541 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 23 May 2019 16:20:21 -0500 Subject: [PATCH] Campfires should fall with gravity --- - .../net/minecraft/server/BlockCampfire.java | 20 ++++++++++++++++++- - .../net/pl3x/purpur/PurpurWorldConfig.java | 5 +++++ - 2 files changed, 24 insertions(+), 1 deletion(-) + src/main/java/net/minecraft/server/Block.java | 1 + + .../net/minecraft/server/BlockCampfire.java | 26 ++++++++++++++++++- + .../net/pl3x/purpur/PurpurWorldConfig.java | 5 ++++ + 3 files changed, 31 insertions(+), 1 deletion(-) +diff --git a/src/main/java/net/minecraft/server/Block.java b/src/main/java/net/minecraft/server/Block.java +index 8e16162a7..47a3ddd7f 100644 +--- a/src/main/java/net/minecraft/server/Block.java ++++ b/src/main/java/net/minecraft/server/Block.java +@@ -375,6 +375,7 @@ public class Block implements IMaterial { + PacketDebug.a(world, blockposition); + } + ++ public int tickRate(IWorldReader world) { return this.a(world); } // Purpur - OBFHELPER + public int a(IWorldReader iworldreader) { + return 10; + } diff --git a/src/main/java/net/minecraft/server/BlockCampfire.java b/src/main/java/net/minecraft/server/BlockCampfire.java -index 5cbe8e68e..904bf47b8 100644 +index 5cbe8e68e..eca3487b0 100644 --- a/src/main/java/net/minecraft/server/BlockCampfire.java +++ b/src/main/java/net/minecraft/server/BlockCampfire.java -@@ -72,8 +72,26 @@ public class BlockCampfire extends BlockTileEntity implements IBlockWaterlogged +@@ -72,8 +72,32 @@ public class BlockCampfire extends BlockTileEntity implements IBlockWaterlogged return (IBlockData) ((IBlockData) ((IBlockData) ((IBlockData) this.getBlockData().set(BlockCampfire.d, flag)).set(BlockCampfire.c, this.j(world.getType(blockposition.down())))).set(BlockCampfire.b, !flag)).set(BlockCampfire.e, blockactioncontext.f()); } + // Purpur start - Campfires should fall with gravity + @Override + public void onPlace(IBlockData iblockdata, World world, BlockPosition pos, IBlockData iblockdata1, boolean flag) { -+ world.getBlockTickList().a(pos, this, this.a((IWorldReader) world)); ++ world.getBlockTickList().a(pos, this, tickRate(world)); + } + + @Override @@ -30,16 +43,22 @@ index 5cbe8e68e..904bf47b8 100644 + if (iblockdata.get(BlockCampfire.d) && iblockdata.get(BlockCampfire.b)) { + world.setTypeAndData(pos, iblockdata.set(BlockCampfire.b, false), 3); + } ++ world.getBlockTickList().a(pos, this, tickRate(world)); ++ } ++ ++ @Override ++ public int tickRate(IWorldReader world) { ++ return 1; + } + // Purpur end + @Override public IBlockData updateState(IBlockData iblockdata, EnumDirection enumdirection, IBlockData iblockdata1, GeneratorAccess generatoraccess, BlockPosition blockposition, BlockPosition blockposition1) { -+ generatoraccess.getBlockTickList().a(blockposition, this, this.a((IWorldReader) generatoraccess)); // Purpur - Campfires should fall with gravity ++ generatoraccess.getBlockTickList().a(blockposition, this, tickRate(generatoraccess)); // Purpur - Campfires should fall with gravity if ((Boolean) iblockdata.get(BlockCampfire.d)) { generatoraccess.getFluidTickList().a(blockposition, FluidTypes.WATER, FluidTypes.WATER.a((IWorldReader) generatoraccess)); } -@@ -107,7 +125,7 @@ public class BlockCampfire extends BlockTileEntity implements IBlockWaterlogged +@@ -107,7 +131,7 @@ public class BlockCampfire extends BlockTileEntity implements IBlockWaterlogged @Override public boolean place(GeneratorAccess generatoraccess, BlockPosition blockposition, IBlockData iblockdata, Fluid fluid) { @@ -49,7 +68,7 @@ index 5cbe8e68e..904bf47b8 100644 if (flag) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 5e9c633ac..6e6d6defd 100644 +index cea2bcad5..dc2da586e 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -61,6 +61,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0028-Campfires-burn-out-in-rain.patch b/patches/server/0028-Campfires-burn-out-in-rain.patch index 48acd9602..7da5d6f1c 100644 --- a/patches/server/0028-Campfires-burn-out-in-rain.patch +++ b/patches/server/0028-Campfires-burn-out-in-rain.patch @@ -1,30 +1,29 @@ -From c9975466f043da8dc4f0e1c0a7ba4db7dbd352ef Mon Sep 17 00:00:00 2001 +From 7a219781d500be21e684c902ea24fb0b97a3697c Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 6 Jun 2019 21:30:49 -0500 Subject: [PATCH] Campfires burn out in rain --- - src/main/java/net/minecraft/server/BlockCampfire.java | 4 ++++ + src/main/java/net/minecraft/server/BlockCampfire.java | 3 +++ src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 5 +++++ - 2 files changed, 9 insertions(+) + 2 files changed, 8 insertions(+) diff --git a/src/main/java/net/minecraft/server/BlockCampfire.java b/src/main/java/net/minecraft/server/BlockCampfire.java -index 904bf47b8..1858c8cd4 100644 +index eca3487b0..d787fa006 100644 --- a/src/main/java/net/minecraft/server/BlockCampfire.java +++ b/src/main/java/net/minecraft/server/BlockCampfire.java -@@ -86,6 +86,10 @@ public class BlockCampfire extends BlockTileEntity implements IBlockWaterlogged +@@ -86,6 +86,9 @@ public class BlockCampfire extends BlockTileEntity implements IBlockWaterlogged if (iblockdata.get(BlockCampfire.d) && iblockdata.get(BlockCampfire.b)) { world.setTypeAndData(pos, iblockdata.set(BlockCampfire.b, false), 3); } + if (world.purpurConfig.campfiresGoOutInRain && world.getTime() % 20 == 0L && iblockdata.get(BlockCampfire.b) && world.isRainingAt(pos.shift(EnumDirection.UP))) { + world.setTypeAndData(pos, iblockdata.set(BlockCampfire.b, false), 3); + } -+ world.getBlockTickList().a(pos, this, 1); + world.getBlockTickList().a(pos, this, tickRate(world)); } - // Purpur end diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 490c2ede6..7f1c3ccb6 100644 +index 1238864e7..f090f76a1 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -92,6 +92,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0032-Phantoms-spawn-naturally-in-the-end.patch b/patches/server/0032-Phantoms-spawn-naturally-in-the-end.patch index 823436a93..c021aee75 100644 --- a/patches/server/0032-Phantoms-spawn-naturally-in-the-end.patch +++ b/patches/server/0032-Phantoms-spawn-naturally-in-the-end.patch @@ -1,17 +1,17 @@ -From a5647dc8df2a486be84ea8b22c12981f33c6d318 Mon Sep 17 00:00:00 2001 +From 8d3470ef8929a26859c9cdc01999b1a411006bd2 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 20 Jun 2019 18:48:58 -0500 Subject: [PATCH] Phantoms spawn naturally in the end --- - .../net/minecraft/server/BiomeTheEndHighIsland.java | 3 ++- - src/main/java/net/minecraft/server/EntityPhantom.java | 10 +++++++++- - .../java/net/minecraft/server/SpawnerCreature.java | 6 ++++++ - src/main/java/net/pl3x/purpur/PurpurConfig.java | 5 +++++ - 4 files changed, 22 insertions(+), 2 deletions(-) + .../java/net/minecraft/server/BiomeTheEndHighIsland.java | 3 ++- + src/main/java/net/minecraft/server/EntityPhantom.java | 8 ++++++++ + src/main/java/net/minecraft/server/SpawnerCreature.java | 6 ++++++ + src/main/java/net/pl3x/purpur/PurpurConfig.java | 5 +++++ + 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/BiomeTheEndHighIsland.java b/src/main/java/net/minecraft/server/BiomeTheEndHighIsland.java -index 6592d15291..67cb1520be 100644 +index 6592d1529..67cb1520b 100644 --- a/src/main/java/net/minecraft/server/BiomeTheEndHighIsland.java +++ b/src/main/java/net/minecraft/server/BiomeTheEndHighIsland.java @@ -4,10 +4,11 @@ public class BiomeTheEndHighIsland extends BiomeBase { @@ -28,19 +28,10 @@ index 6592d15291..67cb1520be 100644 } } diff --git a/src/main/java/net/minecraft/server/EntityPhantom.java b/src/main/java/net/minecraft/server/EntityPhantom.java -index 8517fcf293..124bcc884e 100644 +index 7f414aee9..924358157 100644 --- a/src/main/java/net/minecraft/server/EntityPhantom.java +++ b/src/main/java/net/minecraft/server/EntityPhantom.java -@@ -10,7 +10,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { - - private static final DataWatcherObject b = DataWatcher.a(EntityPhantom.class, DataWatcherRegistry.b); - private Vec3D c; -- private BlockPosition d; -+ private BlockPosition d; public void setHome(BlockPosition home) { this.d = home; } public BlockPosition getHome() { return this.d; } // Purpur - OBFHELPER - private EntityPhantom.AttackPhase bz; - private BlockPosition crystalPosition; // Purpur - -@@ -26,6 +26,12 @@ public class EntityPhantom extends EntityFlying implements IMonster { +@@ -25,6 +25,12 @@ public class EntityPhantom extends EntityFlying implements IMonster { this.canBeRiddenInWater = false; // Purpur } @@ -53,7 +44,7 @@ index 8517fcf293..124bcc884e 100644 @Override protected EntityAIBodyControl o() { return new EntityPhantom.d(this); -@@ -100,6 +106,8 @@ public class EntityPhantom extends EntityFlying implements IMonster { +@@ -99,6 +105,8 @@ public class EntityPhantom extends EntityFlying implements IMonster { this.world.addParticle(Particles.MYCELIUM, this.locX - (double) f2, this.locY + (double) f4, this.locZ - (double) f3, 0.0D, 0.0D, 0.0D); } @@ -63,7 +54,7 @@ index 8517fcf293..124bcc884e 100644 this.die(); } diff --git a/src/main/java/net/minecraft/server/SpawnerCreature.java b/src/main/java/net/minecraft/server/SpawnerCreature.java -index b442e09eb4..3e16cb2bc7 100644 +index b442e09eb..3e16cb2bc 100644 --- a/src/main/java/net/minecraft/server/SpawnerCreature.java +++ b/src/main/java/net/minecraft/server/SpawnerCreature.java @@ -75,6 +75,12 @@ public final class SpawnerCreature { @@ -80,7 +71,7 @@ index b442e09eb4..3e16cb2bc7 100644 EntityPositionTypes.Surface entitypositiontypes_surface = EntityPositionTypes.a(entitytypes); diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index 703fbab6e6..542ac964a8 100644 +index 703fbab6e..542ac964a 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -154,6 +154,11 @@ public class PurpurConfig {