Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-11-16 21:10:17 +01:00
Updated the block place cancellation code for steps to handle many more cases. There's still one edge case left however.
Dieser Commit ist enthalten in:
Ursprung
73e34c2fe3
Commit
938db4de2d
@ -57,11 +57,17 @@ public class ItemBlock extends Item {
|
|||||||
|
|
||||||
// CraftBukkit start - This executes the placement of the block
|
// CraftBukkit start - This executes the placement of the block
|
||||||
BlockState replacedBlockState = CraftBlockState.getBlockState(world, i, j, k);
|
BlockState replacedBlockState = CraftBlockState.getBlockState(world, i, j, k);
|
||||||
|
|
||||||
// Special case the silly stepstone :'(
|
// There are like 30 combinations you can mix and match steps and double steps
|
||||||
if (l == 1 && world.getTypeId(i, j - 1, k) == Block.STEP.id && itemstack.id == Block.STEP.id) {
|
// of different materials, so there are a lot of different cases of what
|
||||||
replacedBlockState = CraftBlockState.getBlockState(world, i, j - 1, k);
|
// would happen if you place x step onto another y step, so let's just keep
|
||||||
|
// track of the entire state
|
||||||
|
BlockState blockStateBelow = null;
|
||||||
|
if ((world.getTypeId(i, j - 1, k) == Block.STEP.id || world.getTypeId(i, j - 1, k) == Block.DOUBLE_STEP.id)
|
||||||
|
&& (itemstack.id == Block.DOUBLE_STEP.id || itemstack.id == Block.STEP.id)) {
|
||||||
|
blockStateBelow = CraftBlockState.getBlockState(world, i, j - 1, k);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see net.minecraft.server.World#setTypeIdAndData(int i, int j, int k, int l, int i1)
|
* @see net.minecraft.server.World#setTypeIdAndData(int i, int j, int k, int l, int i1)
|
||||||
*
|
*
|
||||||
@ -76,9 +82,9 @@ public class ItemBlock extends Item {
|
|||||||
BlockPlaceEvent event = CraftEventFactory.callBlockPlaceEvent(world, entityhuman, replacedBlockState, clickedX, clickedY, clickedZ, block);
|
BlockPlaceEvent event = CraftEventFactory.callBlockPlaceEvent(world, entityhuman, replacedBlockState, clickedX, clickedY, clickedZ, block);
|
||||||
|
|
||||||
if (event.isCancelled() || !event.canBuild()) {
|
if (event.isCancelled() || !event.canBuild()) {
|
||||||
if ((this.id == Block.STEP.id) && (world.getTypeId(i, j - 1, k) == Block.DOUBLE_STEP.id) && (world.getTypeId(i, j, k) == 0)) {
|
if (blockStateBelow != null) { // Used for steps
|
||||||
// Half steps automatically set the block below to a double
|
world.setTypeIdAndData(i, j, k, replacedBlockState.getTypeId(), replacedBlockState.getRawData());
|
||||||
world.setTypeId(i, j - 1, k, 44);
|
world.setTypeIdAndData(i, j - 1, k, blockStateBelow.getTypeId(), blockStateBelow.getRawData());
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren