Moar, fix API
This commit is contained in:
		
					parent
					
						
							
								ee75b5dc2d
							
						
					
				
			
			
				commit
				
					
						d4e6ee3d12
					
				
			
		
					 165 changed files with 103 additions and 120 deletions
				
			
		|  | @ -0,0 +1,60 @@ | |||
| From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 | ||||
| From: Shane Freeder <theboyetronic@gmail.com> | ||||
| Date: Thu, 16 Nov 2017 12:12:41 +0000 | ||||
| Subject: [PATCH] use CB BlockState implementations for captured blocks | ||||
| 
 | ||||
| When modifying the world, CB will store a copy of the affected | ||||
| blocks in order to restore their state in the case that the event | ||||
| is cancelled. This change only modifies the collection of blocks | ||||
| in the world by normal means, e.g. not during tree population, | ||||
| as the potentially marginal overheads would serve no advantage. | ||||
| 
 | ||||
| CB was using a CraftBlockState for all blocks, which causes issues | ||||
| should any block that uses information beyond a data ID would suffer | ||||
| from missing information, e.g. Skulls. | ||||
| 
 | ||||
| By using CBs CraftBlock#getState(), we will maintain a proper copy of | ||||
| the blockstate that will be valid for restoration, as opposed to dropping | ||||
| information on restoration when the event is cancelled. | ||||
| 
 | ||||
| diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
 | ||||
| index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 | ||||
| --- a/src/main/java/net/minecraft/world/level/Level.java
 | ||||
| +++ b/src/main/java/net/minecraft/world/level/Level.java
 | ||||
| @@ -0,0 +0,0 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
 | ||||
|      public boolean preventPoiUpdated = false; // CraftBukkit - SPIGOT-5710 | ||||
|      public boolean captureBlockStates = false; | ||||
|      public boolean captureTreeGeneration = false; | ||||
| -    public Map<BlockPos, CapturedBlockState> capturedBlockStates = new java.util.LinkedHashMap<>();
 | ||||
| +    public Map<BlockPos, org.bukkit.craftbukkit.block.CraftBlockState> capturedBlockStates = new java.util.LinkedHashMap<>(); // Paper
 | ||||
|      public Map<BlockPos, BlockEntity> capturedTileEntities = new HashMap<>(); | ||||
|      public List<ItemEntity> captureDrops; | ||||
|      public final it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap<SpawnCategory> ticksPerSpawnCategory = new it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap<>(); | ||||
| @@ -0,0 +0,0 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
 | ||||
|      public boolean setBlock(BlockPos pos, BlockState state, int flags, int maxUpdateDepth) { | ||||
|          // CraftBukkit start - tree generation | ||||
|          if (this.captureTreeGeneration) { | ||||
| -            CapturedBlockState blockstate = this.capturedBlockStates.get(pos);
 | ||||
| +            CraftBlockState blockstate = this.capturedBlockStates.get(pos);
 | ||||
|              if (blockstate == null) { | ||||
|                  blockstate = CapturedBlockState.getTreeBlockState(this, pos, flags); | ||||
|                  this.capturedBlockStates.put(pos.immutable(), blockstate); | ||||
| @@ -0,0 +0,0 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
 | ||||
|              // CraftBukkit start - capture blockstates | ||||
|              boolean captured = false; | ||||
|              if (this.captureBlockStates && !this.capturedBlockStates.containsKey(pos)) { | ||||
| -                CapturedBlockState blockstate = CapturedBlockState.getBlockState(this, pos, flags);
 | ||||
| +                CraftBlockState blockstate = (CraftBlockState) world.getBlockAt(pos.getX(), pos.getY(), pos.getZ()).getState(); // Paper - use CB getState to get a suitable snapshot
 | ||||
| +                blockstate.setFlag(flags); // Paper - set flag
 | ||||
|                  this.capturedBlockStates.put(pos.immutable(), blockstate); | ||||
|                  captured = true; | ||||
|              } | ||||
| @@ -0,0 +0,0 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
 | ||||
|      public BlockState getBlockState(BlockPos pos) { | ||||
|          // CraftBukkit start - tree generation | ||||
|          if (this.captureTreeGeneration) { | ||||
| -            CapturedBlockState previous = this.capturedBlockStates.get(pos);
 | ||||
| +            CraftBlockState previous = this.capturedBlockStates.get(pos); // Paper
 | ||||
|              if (previous != null) { | ||||
|                  return previous.getHandle(); | ||||
|              } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Nassim Jahnke
				Nassim Jahnke