aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-Server-Patches
diff options
context:
space:
mode:
authorJake Potrebic <[email protected]>2021-05-30 18:18:03 -0700
committerGitHub <[email protected]>2021-05-31 02:18:03 +0100
commita04ad7bfb42ca7546ba3eea96c42fc94663bffa9 (patch)
treeb82f9f3244b07f961f83497b659551182ccefde0 /Spigot-Server-Patches
parentc894e8bbbebc2100bc3e486697cc4d7310226d66 (diff)
downloadPaper-a04ad7bfb42ca7546ba3eea96c42fc94663bffa9.tar.gz
Paper-a04ad7bfb42ca7546ba3eea96c42fc94663bffa9.zip
Fix invulnerable end crystals: MC-108513 (#5734)
Diffstat (limited to 'Spigot-Server-Patches')
-rw-r--r--Spigot-Server-Patches/0753-Fix-invulnerable-end-crystals.patch76
1 files changed, 76 insertions, 0 deletions
diff --git a/Spigot-Server-Patches/0753-Fix-invulnerable-end-crystals.patch b/Spigot-Server-Patches/0753-Fix-invulnerable-end-crystals.patch
new file mode 100644
index 0000000000..7d36d72742
--- /dev/null
+++ b/Spigot-Server-Patches/0753-Fix-invulnerable-end-crystals.patch
@@ -0,0 +1,76 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Jake Potrebic <[email protected]>
+Date: Thu, 27 May 2021 14:52:30 -0700
+Subject: [PATCH] Fix invulnerable end crystals
+
+MC-108513
+
+diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
+index 795b76379eb698aa0ed83c000ea0679a844792d5..1a368df78feb4afdf522527af5ed1652afffcd15 100644
+--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
++++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
+@@ -825,4 +825,9 @@ public class PaperWorldConfig {
+ private void fixItemsMergingThroughWalls() {
+ fixItemsMergingThroughWalls = getBoolean("fix-items-merging-through-walls", fixItemsMergingThroughWalls);
+ }
++
++ public boolean fixInvulnerableEndCrystalExploit = true;
++ private void fixInvulnerableEndCrystalExploit() {
++ fixInvulnerableEndCrystalExploit = getBoolean("unsupported-settings.fix-invulnerable-end-crystal-exploit", fixInvulnerableEndCrystalExploit);
++ }
+ }
+diff --git a/src/main/java/net/minecraft/world/level/dimension/end/EnderDragonBattle.java b/src/main/java/net/minecraft/world/level/dimension/end/EnderDragonBattle.java
+index 0ab6319aa3e4e1f5679f37be36999ca56ca2484c..558216ea96bcdc34ffa595c848151278c33b5ca1 100644
+--- a/src/main/java/net/minecraft/world/level/dimension/end/EnderDragonBattle.java
++++ b/src/main/java/net/minecraft/world/level/dimension/end/EnderDragonBattle.java
+@@ -570,6 +570,7 @@ public class EnderDragonBattle {
+
+ while (iterator.hasNext()) {
+ WorldGenEnder.Spike worldgenender_spike = (WorldGenEnder.Spike) iterator.next();
++ if (!this.world.paperConfig.fixInvulnerableEndCrystalExploit || worldgenender_spike.crystal == null) { // Paper
+ List<EntityEnderCrystal> list = this.world.a(EntityEnderCrystal.class, worldgenender_spike.f());
+ Iterator iterator1 = list.iterator();
+
+@@ -579,6 +580,13 @@ public class EnderDragonBattle {
+ entityendercrystal.setInvulnerable(false);
+ entityendercrystal.setBeamTarget((BlockPosition) null);
+ }
++ // Paper start
++ } else {
++ worldgenender_spike.crystal.setInvulnerable(false);
++ worldgenender_spike.crystal.setBeamTarget(null);
++ worldgenender_spike.crystal = null;
++ }
++ // Paper end
+ }
+
+ }
+diff --git a/src/main/java/net/minecraft/world/level/levelgen/feature/WorldGenEnder.java b/src/main/java/net/minecraft/world/level/levelgen/feature/WorldGenEnder.java
+index dd623702131eaa1a65937a19a0e986e865322258..1960fc029262d54c6a5ee05c99d86428386cba4a 100644
+--- a/src/main/java/net/minecraft/world/level/levelgen/feature/WorldGenEnder.java
++++ b/src/main/java/net/minecraft/world/level/levelgen/feature/WorldGenEnder.java
+@@ -42,7 +42,7 @@ public class WorldGenEnder extends WorldGenerator<WorldGenFeatureEndSpikeConfigu
+ return (List) WorldGenEnder.a.getUnchecked(i);
+ }
+
+- public boolean a(GeneratorAccessSeed generatoraccessseed, ChunkGenerator chunkgenerator, Random random, BlockPosition blockposition, WorldGenFeatureEndSpikeConfiguration worldgenfeatureendspikeconfiguration) {
++ public boolean generate(GeneratorAccessSeed generatoraccessseed, ChunkGenerator chunkgenerator, Random random, BlockPosition blockposition, WorldGenFeatureEndSpikeConfiguration worldgenfeatureendspikeconfiguration) { // Paper - decompile fix
+ List<WorldGenEnder.Spike> list = worldgenfeatureendspikeconfiguration.c();
+
+ if (list.isEmpty()) {
+@@ -107,6 +107,7 @@ public class WorldGenEnder extends WorldGenerator<WorldGenFeatureEndSpikeConfigu
+ entityendercrystal.setInvulnerable(worldgenfeatureendspikeconfiguration.b());
+ entityendercrystal.setPositionRotation((double) worldgenender_spike.a() + 0.5D, (double) (worldgenender_spike.d() + 1), (double) worldgenender_spike.b() + 0.5D, random.nextFloat() * 360.0F, 0.0F);
+ worldaccess.addEntity(entityendercrystal);
++ worldgenender_spike.crystal = entityendercrystal; // Paper
+ this.a(worldaccess, new BlockPosition(worldgenender_spike.a(), worldgenender_spike.d(), worldgenender_spike.b()), Blocks.BEDROCK.getBlockData());
+ }
+
+@@ -156,6 +157,7 @@ public class WorldGenEnder extends WorldGenerator<WorldGenFeatureEndSpikeConfigu
+ private final int e;
+ private final boolean f;
+ private final AxisAlignedBB g;
++ public EntityEnderCrystal crystal; // Paper
+
+ public Spike(int i, int j, int k, int l, boolean flag) {
+ this.b = i;