Refactored BlockPlaceEvent and BlockChangeDelegate. Adds BUKKIT-5558

23 classes have been removed as they are no longer needed using the new
capture logic. This should help quite a bit with future MC updates.

BlockPlaceEvent Refactor

Before calling Item.interactWith, a recording flag is turned on for
setTypeAndData to capture a blockstate for each block that attempts to be set.
When a block place event is cancelled, the recorded blockstate, stack
size, and metadata will revert back to the captured state. If the event is
not cancelled, a notification will be sent to clients and block physics
will be updated.

BlockChangeDelegate Refactor

Now that we have the ability to capture blockstates through world, there
is no need to modify world gen classes with BlockChangeDelegate. Instead
we will simply capture blocks during world generation in order to "replay"
all of the captured blockstates to send back to delegates.
StructureGrowDelegate and BlockSapling.TreeGenerator have also been
removed as part of this change. BlockSapling and BlockMushroom will
capture blockstates the same as block placement and revert back any grow
events if needed.
This commit is contained in:
bloodshot
2014-01-06 00:17:16 -05:00
committed by Nate Mortensen
parent de97b62b89
commit 576758bc55
39 changed files with 323 additions and 2635 deletions

View File

@@ -22,9 +22,9 @@ import org.bukkit.event.block.BlockFormEvent;
import org.bukkit.event.weather.LightningStrikeEvent;
import org.bukkit.event.weather.ThunderChangeEvent;
import org.bukkit.event.weather.WeatherChangeEvent;
// CraftBukkit end
public class WorldServer extends World implements org.bukkit.BlockChangeDelegate {
// CraftBukkit end
public class WorldServer extends World {
private static final Logger a = LogManager.getLogger();
private final MinecraftServer server;
@@ -998,23 +998,7 @@ public class WorldServer extends World implements org.bukkit.BlockChangeDelegate
}
}
// CraftBukkit start - Compatibility methods for BlockChangeDelegate
public boolean setRawTypeId(int x, int y, int z, int typeId) {
return this.setTypeAndData(x, y, z, Block.e(typeId), 0, 4);
}
public boolean setRawTypeIdAndData(int x, int y, int z, int typeId, int data) {
return this.setTypeAndData(x, y, z, Block.e(typeId), data, 4);
}
public boolean setTypeId(int x, int y, int z, int typeId) {
return this.setTypeAndData(x, y, z, Block.e(typeId), 0, 3);
}
public boolean setTypeIdAndData(int x, int y, int z, int typeId, int data) {
return this.setTypeAndData(x, y, z, Block.e(typeId), data, 3);
}
// CraftBukkit start - Helper method
public int getTypeId(int x, int y, int z) {
return Block.b(getType(x, y, z));
}