mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-27 11:27:35 +01:00
net/minecraft/world/level/levelgen/feature
This commit is contained in:
parent
6a85106951
commit
3fbf7aa159
@ -0,0 +1,52 @@
|
|||||||
|
--- a/net/minecraft/world/level/levelgen/feature/EndPlatformFeature.java
|
||||||
|
+++ b/net/minecraft/world/level/levelgen/feature/EndPlatformFeature.java
|
||||||
|
@@ -19,6 +_,12 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void createEndPlatform(ServerLevelAccessor level, BlockPos pos, boolean dropBlocks) {
|
||||||
|
+ // CraftBukkit start
|
||||||
|
+ createEndPlatform(level, pos, dropBlocks, null);
|
||||||
|
+ }
|
||||||
|
+ public static void createEndPlatform(ServerLevelAccessor level, BlockPos pos, boolean dropBlocks, net.minecraft.world.entity.Entity entity) {
|
||||||
|
+ org.bukkit.craftbukkit.util.BlockStateListPopulator blockList = new org.bukkit.craftbukkit.util.BlockStateListPopulator(level);
|
||||||
|
+ // CraftBukkit end
|
||||||
|
BlockPos.MutableBlockPos mutableBlockPos = pos.mutable();
|
||||||
|
|
||||||
|
for (int i = -2; i <= 2; i++) {
|
||||||
|
@@ -26,15 +_,33 @@
|
||||||
|
for (int i2 = -1; i2 < 3; i2++) {
|
||||||
|
BlockPos blockPos = mutableBlockPos.set(pos).move(i1, i2, i);
|
||||||
|
Block block = i2 == -1 ? Blocks.OBSIDIAN : Blocks.AIR;
|
||||||
|
- if (!level.getBlockState(blockPos).is(block)) {
|
||||||
|
+ // CraftBukkit start
|
||||||
|
+ if (!blockList.getBlockState(blockPos).is(block)) {
|
||||||
|
if (dropBlocks) {
|
||||||
|
- level.destroyBlock(blockPos, true, null);
|
||||||
|
+ blockList.destroyBlock(blockPos, true, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
- level.setBlock(blockPos, block.defaultBlockState(), 3);
|
||||||
|
+ blockList.setBlock(blockPos, block.defaultBlockState(), 3);
|
||||||
|
+ // CraftBukkit end
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ // CraftBukkit start
|
||||||
|
+ // SPIGOT-7746: Entity will only be null during world generation, which is async, so just generate without event
|
||||||
|
+ if (entity != null) {
|
||||||
|
+ org.bukkit.World bworld = level.getLevel().getWorld();
|
||||||
|
+ org.bukkit.event.world.PortalCreateEvent portalEvent = new org.bukkit.event.world.PortalCreateEvent((java.util.List<org.bukkit.block.BlockState>) (java.util.List) blockList.getList(), bworld, entity.getBukkitEntity(), org.bukkit.event.world.PortalCreateEvent.CreateReason.END_PLATFORM);
|
||||||
|
+ level.getLevel().getCraftServer().getPluginManager().callEvent(portalEvent);
|
||||||
|
+ if (portalEvent.isCancelled()) return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ // SPIGOT-7856: End platform not dropping items after replacing blocks
|
||||||
|
+ if (dropBlocks) {
|
||||||
|
+ blockList.getList().forEach((state) -> level.destroyBlock(state.getPosition(), true, null));
|
||||||
|
+ }
|
||||||
|
+ blockList.updateList();
|
||||||
|
+ // CraftBukkit end
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
--- a/net/minecraft/world/level/levelgen/feature/SpikeFeature.java
|
||||||
|
+++ b/net/minecraft/world/level/levelgen/feature/SpikeFeature.java
|
||||||
|
@@ -113,6 +_,7 @@
|
||||||
|
endCrystal.setBeamTarget(config.getCrystalBeamTarget());
|
||||||
|
endCrystal.setInvulnerable(config.isCrystalInvulnerable());
|
||||||
|
endCrystal.moveTo(spike.getCenterX() + 0.5, spike.getHeight() + 1, spike.getCenterZ() + 0.5, random.nextFloat() * 360.0F, 0.0F);
|
||||||
|
+ endCrystal.generatedByDragonFight = true; // Paper - Fix invulnerable end crystals
|
||||||
|
level.addFreshEntity(endCrystal);
|
||||||
|
BlockPos blockPosx = endCrystal.blockPosition();
|
||||||
|
this.setBlock(level, blockPosx.below(), Blocks.BEDROCK.defaultBlockState());
|
@ -1,72 +0,0 @@
|
|||||||
--- a/net/minecraft/world/level/levelgen/feature/EndPlatformFeature.java
|
|
||||||
+++ b/net/minecraft/world/level/levelgen/feature/EndPlatformFeature.java
|
|
||||||
@@ -7,6 +7,11 @@
|
|
||||||
import net.minecraft.world.level.block.Block;
|
|
||||||
import net.minecraft.world.level.block.Blocks;
|
|
||||||
import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration;
|
|
||||||
+// CraftBukkit start
|
|
||||||
+import java.util.List;
|
|
||||||
+import org.bukkit.block.BlockState;
|
|
||||||
+import org.bukkit.event.world.PortalCreateEvent;
|
|
||||||
+// CraftBukkit end
|
|
||||||
|
|
||||||
public class EndPlatformFeature extends Feature<NoneFeatureConfiguration> {
|
|
||||||
|
|
||||||
@@ -21,24 +26,51 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void createEndPlatform(ServerLevelAccessor world, BlockPos pos, boolean breakBlocks) {
|
|
||||||
- BlockPos.MutableBlockPos blockposition_mutableblockposition = pos.mutable();
|
|
||||||
+ EndPlatformFeature.createEndPlatform(world, pos, breakBlocks, null);
|
|
||||||
+ // CraftBukkit start
|
|
||||||
+ }
|
|
||||||
|
|
||||||
+ public static void createEndPlatform(ServerLevelAccessor worldaccess, BlockPos blockposition, boolean flag, Entity entity) {
|
|
||||||
+ org.bukkit.craftbukkit.util.BlockStateListPopulator blockList = new org.bukkit.craftbukkit.util.BlockStateListPopulator(worldaccess);
|
|
||||||
+ // CraftBukkit end
|
|
||||||
+ BlockPos.MutableBlockPos blockposition_mutableblockposition = blockposition.mutable();
|
|
||||||
+
|
|
||||||
for (int i = -2; i <= 2; ++i) {
|
|
||||||
for (int j = -2; j <= 2; ++j) {
|
|
||||||
for (int k = -1; k < 3; ++k) {
|
|
||||||
- BlockPos.MutableBlockPos blockposition_mutableblockposition1 = blockposition_mutableblockposition.set(pos).move(j, k, i);
|
|
||||||
+ BlockPos.MutableBlockPos blockposition_mutableblockposition1 = blockposition_mutableblockposition.set(blockposition).move(j, k, i);
|
|
||||||
Block block = k == -1 ? Blocks.OBSIDIAN : Blocks.AIR;
|
|
||||||
|
|
||||||
- if (!world.getBlockState(blockposition_mutableblockposition1).is(block)) {
|
|
||||||
- if (breakBlocks) {
|
|
||||||
- world.destroyBlock(blockposition_mutableblockposition1, true, (Entity) null);
|
|
||||||
+ // CraftBukkit start
|
|
||||||
+ if (!blockList.getBlockState(blockposition_mutableblockposition1).is(block)) {
|
|
||||||
+ if (flag) {
|
|
||||||
+ blockList.destroyBlock(blockposition_mutableblockposition1, true, (Entity) null);
|
|
||||||
}
|
|
||||||
|
|
||||||
- world.setBlock(blockposition_mutableblockposition1, block.defaultBlockState(), 3);
|
|
||||||
+ blockList.setBlock(blockposition_mutableblockposition1, block.defaultBlockState(), 3);
|
|
||||||
+ // CraftBukkit end
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+ // CraftBukkit start
|
|
||||||
+ // SPIGOT-7746: Entity will only be null during world generation, which is async, so just generate without event
|
|
||||||
+ if (entity != null) {
|
|
||||||
+ org.bukkit.World bworld = worldaccess.getLevel().getWorld();
|
|
||||||
+ PortalCreateEvent portalEvent = new PortalCreateEvent((List<BlockState>) (List) blockList.getList(), bworld, entity.getBukkitEntity(), org.bukkit.event.world.PortalCreateEvent.CreateReason.END_PLATFORM);
|
|
||||||
|
|
||||||
+ worldaccess.getLevel().getCraftServer().getPluginManager().callEvent(portalEvent);
|
|
||||||
+ if (portalEvent.isCancelled()) {
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ // SPIGOT-7856: End platform not dropping items after replacing blocks
|
|
||||||
+ if (flag) {
|
|
||||||
+ blockList.getList().forEach((state) -> worldaccess.destroyBlock(state.getPosition(), true, null));
|
|
||||||
+ }
|
|
||||||
+ blockList.updateList();
|
|
||||||
+ // CraftBukkit end
|
|
||||||
+
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,10 +0,0 @@
|
|||||||
--- a/net/minecraft/world/level/levelgen/feature/SpikeFeature.java
|
|
||||||
+++ b/net/minecraft/world/level/levelgen/feature/SpikeFeature.java
|
|
||||||
@@ -115,6 +115,7 @@
|
|
||||||
endCrystal.moveTo(
|
|
||||||
(double)spike.getCenterX() + 0.5, (double)(spike.getHeight() + 1), (double)spike.getCenterZ() + 0.5, random.nextFloat() * 360.0F, 0.0F
|
|
||||||
);
|
|
||||||
+ endCrystal.generatedByDragonFight = true; // Paper - Fix invulnerable end crystals
|
|
||||||
world.addFreshEntity(endCrystal);
|
|
||||||
BlockPos blockPos2 = endCrystal.blockPosition();
|
|
||||||
this.setBlock(world, blockPos2.below(), Blocks.BEDROCK.defaultBlockState());
|
|
Loading…
Reference in New Issue
Block a user