Compare commits

...
Author SHA1 Message Date
Axionize ee36c2559a Refactor HitboxData.getBlockHitbox() to include isTargetBlock as parameter
Also fixes a rare NPE
2025-01-20 02:31:34 -05:00
8 changed files with 58 additions and 51 deletions

No files matched your search

@@ -69,7 +69,7 @@ public class BlockPlaceCheck extends Check implements RotationCheck, PostPredict
protected SimpleCollisionBox getCombinedBox(final BlockPlace place) {
// Alright, instead of skidding AACAdditionsPro, let's just use bounding boxes
Vector3i clicked = place.getPlacedAgainstBlockLocation();
CollisionBox placedOn = HitboxData.getBlockHitbox(player, place.getMaterial(), player.getClientVersion(), player.compensatedWorld.getWrappedBlockStateAt(clicked), clicked.getX(), clicked.getY(), clicked.getZ());
CollisionBox placedOn = HitboxData.getBlockHitbox(player, place.getMaterial(), player.getClientVersion(), player.compensatedWorld.getWrappedBlockStateAt(clicked), true, clicked.getX(), clicked.getY(), clicked.getZ());
int size = placedOn.downCast(boxes);
@@ -814,7 +814,7 @@ public class CheckManagerListener extends PacketListenerAbstract {
return null;
}
CollisionBox data = HitboxData.getBlockHitbox(player, heldItem, player.getClientVersion(), block, vector3i.getX(), vector3i.getY(), vector3i.getZ());
CollisionBox data = HitboxData.getBlockHitbox(player, heldItem, player.getClientVersion(), block, false, vector3i.getX(), vector3i.getY(), vector3i.getZ());
List<SimpleCollisionBox> boxes = new ArrayList<>();
data.downCast(boxes);
@@ -37,7 +37,7 @@ public final class BlockBreak {
}
public SimpleCollisionBox getCombinedBox() {
CollisionBox placedOn = HitboxData.getBlockHitbox(player, player.getInventory().getHeldItem().getType().getPlacedType(), player.getClientVersion(), block, position.x, position.y, position.z);
CollisionBox placedOn = HitboxData.getBlockHitbox(player, player.getInventory().getHeldItem().getType().getPlacedType(), player.getClientVersion(), block, true, position.x, position.y, position.z);
List<SimpleCollisionBox> boxes = new ArrayList<>();
placedOn.downCast(boxes);
@@ -19,7 +19,7 @@ import java.util.*;
// Expansion to the CollisionData class, which is different than regular ray tracing hitboxes
public enum HitboxData {
RAILS((player, item, version, data, x, y, z) -> {
RAILS((player, item, version, data, isTargetBlock, x, y, z) -> {
return switch (data.getShape()) {
case ASCENDING_NORTH, ASCENDING_SOUTH, ASCENDING_EAST, ASCENDING_WEST -> {
if (version.isOlderThan(ClientVersion.V_1_8)) {
@@ -45,7 +45,7 @@ public enum HitboxData {
};
}, BlockTags.RAILS.getStates().toArray(new StateType[0])),
END_PORTAL((player, item, version, data, x, y, z) -> {
END_PORTAL((player, item, version, data, isTargetBlock, x, y, z) -> {
if (version.isOlderThan(ClientVersion.V_1_9)) {
return new SimpleCollisionBox(0.0D, 0.0D, 0.0D, 1.0D, 0.0625D, 1.0D);
} else if (version.isOlderThan(ClientVersion.V_1_17)) {
@@ -54,7 +54,7 @@ public enum HitboxData {
return new HexCollisionBox(0.0D, 6.0D, 0.0D, 16.0D, 12.0D, 16.0D);
}, StateTypes.END_PORTAL),
FENCE_GATE((player, item, version, data, x, y, z) -> {
FENCE_GATE((player, item, version, data, isTargetBlock, x, y, z) -> {
// This technically should be taken from the block data/made multi-version/run block updates... but that's too far even for me
// This way is so much easier and works unless the magic stick wand is used
boolean isInWall;
@@ -81,7 +81,7 @@ public enum HitboxData {
PANE(new DynamicHitboxPane(), Materials.getPanes().toArray(new StateType[0])),
LEVER(((player, item, version, data, x, y, z) -> {
LEVER(((player, item, version, data, isTargetBlock, x, y, z) -> {
Face face = data.getFace();
BlockFace facing = data.getFacing();
if (version.isOlderThan(ClientVersion.V_1_13)) {
@@ -133,7 +133,7 @@ public enum HitboxData {
};
}), StateTypes.LEVER),
BUTTON((player, item, version, data, x, y, z) -> {
BUTTON((player, item, version, data, isTargetBlock, x, y, z) -> {
final Face face = data.getFace();
final BlockFace facing = data.getFacing();
final boolean powered = data.isPowered();
@@ -178,7 +178,7 @@ public enum HitboxData {
case CEILING:
// ViaVersion shows lever
if (player.getClientVersion().isOlderThan(ClientVersion.V_1_8)) {
return LEVER.dynamic.fetch(player, item, version, data, x, y, z);
return LEVER.dynamic.fetch(player, item, version, data, isTargetBlock, x, y, z);
}
// x axis
if (facing == BlockFace.EAST || facing == BlockFace.WEST) {
@@ -189,7 +189,7 @@ public enum HitboxData {
case FLOOR:
// ViaVersion shows lever
if (player.getClientVersion().isOlderThan(ClientVersion.V_1_8)) {
return LEVER.dynamic.fetch(player, item, version, data, x, y, z);
return LEVER.dynamic.fetch(player, item, version, data, isTargetBlock, x, y, z);
}
// x axis
if (facing == BlockFace.EAST || facing == BlockFace.WEST) {
@@ -204,7 +204,7 @@ public enum HitboxData {
WALL(new DynamicHitboxWall(), BlockTags.WALLS.getStates().toArray(new StateType[0])),
WALL_SIGN((player, item, version, data, x, y, z) -> {
WALL_SIGN((player, item, version, data, isTargetBlock, x, y, z) -> {
return switch (data.getFacing()) {
case NORTH -> new HexCollisionBox(0.0, 4.5, 14.0, 16.0, 12.5, 16.0);
case SOUTH -> new HexCollisionBox(0.0, 4.5, 0.0, 16.0, 12.5, 2.0);
@@ -214,7 +214,7 @@ public enum HitboxData {
};
}, BlockTags.WALL_SIGNS.getStates().toArray(new StateType[0])),
WALL_HANGING_SIGN((player, item, version, data, x, y, z) -> {
WALL_HANGING_SIGN((player, item, version, data, isTargetBlock, x, y, z) -> {
return switch (data.getFacing()) {
case NORTH, SOUTH -> new ComplexCollisionBox(2,
new HexCollisionBox(0.0D, 14.0D, 6.0D, 16.0D, 16.0D, 10.0D),
@@ -225,7 +225,7 @@ public enum HitboxData {
};
}, BlockTags.WALL_HANGING_SIGNS.getStates().toArray(new StateType[0])),
STANDING_SIGN((player, item, version, data, x, y, z) ->
STANDING_SIGN((player, item, version, data, isTargetBlock, x, y, z) ->
new HexCollisionBox(4.0, 0.0, 4.0, 12.0, 16.0, 12.0),
BlockTags.STANDING_SIGNS.getStates().toArray(new StateType[0])),
@@ -241,10 +241,10 @@ public enum HitboxData {
StateTypes.LIGHT_GRAY_BANNER, StateTypes.CYAN_BANNER, StateTypes.PURPLE_BANNER, StateTypes.BLUE_BANNER,
StateTypes.BROWN_BANNER, StateTypes.GREEN_BANNER, StateTypes.RED_BANNER, StateTypes.BLACK_BANNER),
WALL_BANNER((player, item, version, data, x, y, z) -> {
WALL_BANNER((player, item, version, data, isTargetBlock, x, y, z) -> {
// ViaVersion replacement block
if (version.isOlderThan(ClientVersion.V_1_8)) {
return WALL_SIGN.dynamic.fetch(player, item, version, data, x, y, z);
return WALL_SIGN.dynamic.fetch(player, item, version, data, isTargetBlock, x, y, z);
}
return switch (data.getFacing()) {
@@ -260,9 +260,16 @@ public enum HitboxData {
StateTypes.CYAN_WALL_BANNER, StateTypes.PURPLE_WALL_BANNER, StateTypes.BLUE_WALL_BANNER,
StateTypes.BROWN_WALL_BANNER, StateTypes.GREEN_WALL_BANNER, StateTypes.RED_WALL_BANNER, StateTypes.BLACK_WALL_BANNER),
BREWING_STAND((player, item, version, block, x, y, z) -> {
BREWING_STAND((player, item, version, block, isTargetBlock, x, y, z) -> {
// BEWARE OF https://bugs.mojang.com/browse/MC-85109 FOR 1.8 PLAYERS
// 1.8 Brewing Stand hitbox is a fullblock until it is hit sometimes, can be caused be restarting client and joining server
if (version.isOlderThan(ClientVersion.V_1_13)) {
if (isTargetBlock && block.getType() == StateTypes.BREWING_STAND && player.getClientVersion().equals(ClientVersion.V_1_8)) {
return new ComplexCollisionBox(2,
new SimpleCollisionBox(0.0F, 0.0F, 0.0F, 1.0F, 0.125F, 1.0F),
new SimpleCollisionBox(0, 0, 0, 1, 1, 1, true)
);
}
return new SimpleCollisionBox(0.0F, 0.0F, 0.0F, 1.0F, 0.125F, 1.0F);
} else {
return new ComplexCollisionBox(2,
@@ -271,14 +278,14 @@ public enum HitboxData {
}
}, StateTypes.BREWING_STAND),
SMALL_FLOWER((player, item, version, data, x, y, z) -> player.getClientVersion().isOlderThan(ClientVersion.V_1_13)
SMALL_FLOWER((player, item, version, data, isTargetBlock, x, y, z) -> player.getClientVersion().isOlderThan(ClientVersion.V_1_13)
? new SimpleCollisionBox(0.3125D, 0.0D, 0.3125D, 0.6875D, 0.625D, 0.6875D)
: new OffsetCollisionBox(data.getType(), 0.3125D, 0.0D, 0.3125D, 0.6875D, 0.625D, 0.6875D),
BlockTags.SMALL_FLOWERS.getStates().toArray(new StateType[0])),
TALL_FLOWERS(new SimpleCollisionBox(0, 0, 0, 1, 1, 1, true), BlockTags.TALL_FLOWERS.getStates().toArray(new StateType[0])),
FIRE((player, item, version, data, x, y, z) -> {
FIRE((player, item, version, data, isTargetBlock, x, y, z) -> {
// Since 1.16 fire has a small hitbox
if (version.isNewerThanOrEquals(ClientVersion.V_1_16)) {
return new HexCollisionBox(0.0D, 0.0D, 0.0D, 16.0D, 1.0D, 16.0D);
@@ -292,7 +299,7 @@ public enum HitboxData {
SOUL_SAND(new SimpleCollisionBox(0, 0, 0, 1, 1, 1, true), StateTypes.SOUL_SAND),
CACTUS((player, item, version, data, x, y, z) -> {
CACTUS((player, item, version, data, isTargetBlock, x, y, z) -> {
if (version.isOlderThan(ClientVersion.V_1_13)) {
// https://bugs.mojang.com/browse/MC-59610
return new SimpleCollisionBox(0, 0, 0, 1, 1, 1, true);
@@ -300,11 +307,11 @@ public enum HitboxData {
return new HexCollisionBox(1.0D, 0.0D, 1.0D, 15.0D, 16.0D, 15.0D);
}, StateTypes.CACTUS),
SNOW((player, item, version, data, x, y, z) -> {
SNOW((player, item, version, data, isTargetBlock, x, y, z) -> {
return new SimpleCollisionBox(0, 0, 0, 1, data.getLayers() * 0.125, 1);
}, StateTypes.SNOW),
LECTERN_BLOCK((player, item, version, data, x, y, z) -> {
LECTERN_BLOCK((player, item, version, data, isTargetBlock, x, y, z) -> {
ComplexCollisionBox common = new ComplexCollisionBox(5,
new HexCollisionBox(0.0D, 0.0D, 0.0D, 16.0D, 2.0D, 16.0D),
new HexCollisionBox(4.0D, 2.0D, 4.0D, 12.0D, 14.0D, 12.0D));
@@ -330,7 +337,7 @@ public enum HitboxData {
return common;
}, StateTypes.LECTERN),
GLOW_LICHEN_SCULK_VEIN((player, item, version, data, x, y, z) -> {
GLOW_LICHEN_SCULK_VEIN((player, item, version, data, isTargetBlock, x, y, z) -> {
if (version.isNewerThan(ClientVersion.V_1_16_4)) {
ComplexCollisionBox box = new ComplexCollisionBox(6);
@@ -359,7 +366,7 @@ public enum HitboxData {
}
}, StateTypes.GLOW_LICHEN, StateTypes.SCULK_VEIN),
SPORE_BLOSSOM((player, item, version, data, x, y, z) -> {
SPORE_BLOSSOM((player, item, version, data, isTargetBlock, x, y, z) -> {
if (version.isNewerThan(ClientVersion.V_1_16_4)) {
return new HexCollisionBox(2.0D, 13.0D, 2.0D, 14.0D, 16.0D, 14.0D);
} else { // ViaVersion replacement is a Peony
@@ -367,7 +374,7 @@ public enum HitboxData {
}
}, StateTypes.SPORE_BLOSSOM),
PITCHER_CROP((player, item, version, data, x, y, z) -> {
PITCHER_CROP((player, item, version, data, isTargetBlock, x, y, z) -> {
if (version.isNewerThan(ClientVersion.V_1_19_4)) {
final SimpleCollisionBox FULL_UPPER_SHAPE = new HexCollisionBox(3.0D, 0.0D, 3.0D, 13.0D, 15.0D, 13.0D);
final SimpleCollisionBox FULL_LOWER_SHAPE = new HexCollisionBox(3.0D, -1.0D, 3.0D, 13.0D, 16.0D, 13.0D);
@@ -382,19 +389,19 @@ public enum HitboxData {
}
}, StateTypes.PITCHER_CROP),
WHEAT_BEETROOTS((player, item, version, data, x, y, z) -> {
WHEAT_BEETROOTS((player, item, version, data, isTargetBlock, x, y, z) -> {
return new HexCollisionBox(0.0D, 0.0D, 0.0D, 16.0D, (data.getAge() + 1) * 2, 16.0D);
}, StateTypes.WHEAT, StateTypes.BEETROOTS),
CARROT_POTATOES((player, item, version, data, x, y, z) -> {
CARROT_POTATOES((player, item, version, data, isTargetBlock, x, y, z) -> {
return new HexCollisionBox(0.0D, 0.0D, 0.0D, 16.0D, data.getAge() + 2, 16.0D);
}, StateTypes.CARROTS, StateTypes.POTATOES),
NETHER_WART((player, item, version, data, x, y, z) -> {
NETHER_WART((player, item, version, data, isTargetBlock, x, y, z) -> {
return new HexCollisionBox(0.0D, 0.0D, 0.0D, 16.0, 5 + (data.getAge() * 3), 16.0D);
}, StateTypes.NETHER_WART),
ATTACHED_PUMPKIN_STEM((player, item, version, data, x, y, z) -> {
ATTACHED_PUMPKIN_STEM((player, item, version, data, isTargetBlock, x, y, z) -> {
if (version.isOlderThan(ClientVersion.V_1_13))
return new HexCollisionBox(7.0D, 0.0D, 7.0D, 9.0D, 16.0D, 9.0D);
@@ -406,12 +413,12 @@ public enum HitboxData {
};
}, StateTypes.ATTACHED_MELON_STEM, StateTypes.ATTACHED_PUMPKIN_STEM),
PUMPKIN_STEM((player, item, version, data, x, y, z) -> {
PUMPKIN_STEM((player, item, version, data, isTargetBlock, x, y, z) -> {
return new HexCollisionBox(7, 0, 7, 9, 2 * (data.getAge() + 1), 9);
}, StateTypes.PUMPKIN_STEM, StateTypes.MELON_STEM),
// Hitbox/Outline is Same as Collision
COCOA_BEANS((player, item, version, data, x, y, z) -> {
COCOA_BEANS((player, item, version, data, isTargetBlock, x, y, z) -> {
return CollisionData.getCocoa(version, data.getAge(), data.getFacing());
}, StateTypes.COCOA),
@@ -420,7 +427,7 @@ public enum HitboxData {
// Redstone wire is very complex with its collision shapes and has many de-syncs
REDSTONE_WIRE(NoCollisionBox.INSTANCE, StateTypes.REDSTONE_WIRE),
SWEET_BERRY((player, item, version, data, x, y, z) -> {
SWEET_BERRY((player, item, version, data, isTargetBlock, x, y, z) -> {
if (data.getAge() == 0) {
return new HexCollisionBox(3.0D, 0.0D, 3.0D, 13.0D, 8.0D, 13.0D);
} else if (data.getAge() < 3) {
@@ -431,7 +438,7 @@ public enum HitboxData {
CORAL_FAN(new HexCollisionBox(2.0D, 0.0D, 2.0D, 14.0D, 4.0D, 14.0D), BlockTags.CORALS.getStates().toArray(new StateType[0])),
TORCHFLOWER_CROP((player, item, version, data, x, y, z) -> {
TORCHFLOWER_CROP((player, item, version, data, isTargetBlock, x, y, z) -> {
if (data.getAge() == 0) {
return new HexCollisionBox(5.0D, 0.0D, 5.0D, 11.0D, 6.0D, 11.0D);
}
@@ -447,7 +454,7 @@ public enum HitboxData {
HANGING_ROOTS(new HexCollisionBox(2.0D, 10.0D, 2.0D, 14.0D, 16.0D, 14.0D), StateTypes.HANGING_ROOTS),
GRASS_FERN((player, item, version, data, x ,y, z) -> {
GRASS_FERN((player, item, version, data, isTargetBlock, x ,y, z) -> {
if (version.isOlderThan(ClientVersion.V_1_13)) {
return new SimpleCollisionBox(0.1F, 0.0F, 0.1F, 0.9F, 0.8F, 0.9F);
}
@@ -465,29 +472,29 @@ public enum HitboxData {
CAVE_VINES(new HexCollisionBox(1.0D, 0.0D, 1.0D, 15.0D, 16.0D, 15.0D), StateTypes.CAVE_VINES, StateTypes.CAVE_VINES_PLANT),
// Then your enum entries become:
TWISTING_VINES_BLOCK((player, item, version, data, x, y, z) ->
TWISTING_VINES_BLOCK((player, item, version, data, isTargetBlock, x, y, z) ->
getVineCollisionBox(version, false, true), StateTypes.TWISTING_VINES),
WEEPING_VINES_BLOCK((player, item, version, data, x, y, z) ->
WEEPING_VINES_BLOCK((player, item, version, data, isTargetBlock, x, y, z) ->
getVineCollisionBox(version, true, true), StateTypes.WEEPING_VINES),
TWISTING_VINES((player, item, version, data, x, y, z) ->
TWISTING_VINES((player, item, version, data, isTargetBlock, x, y, z) ->
getVineCollisionBox(version, false, false), StateTypes.TWISTING_VINES_PLANT),
WEEPING_VINES((player, item, version, data, x, y, z) ->
WEEPING_VINES((player, item, version, data, isTargetBlock, x, y, z) ->
getVineCollisionBox(version, true, false), StateTypes.WEEPING_VINES_PLANT),
TALL_PLANT(new SimpleCollisionBox(0, 0, 0, 1, 1, 1, true), StateTypes.TALL_GRASS, StateTypes.LARGE_FERN),
BAMBOO((player, item, version, data, x, y, z) -> data.getLeaves() == Leaves.LARGE
BAMBOO((player, item, version, data, isTargetBlock, x, y, z) -> data.getLeaves() == Leaves.LARGE
? new HexOffsetCollisionBox(data.getType(), 3.0, 0.0, 3.0, 13.0, 16.0, 13.0)
: new HexOffsetCollisionBox(data.getType(), 5.0, 0.0, 5.0, 11.0, 16.0, 11.0), StateTypes.BAMBOO),
BAMBOO_SAPLING((player, item, version, data, x, y, z) -> {
BAMBOO_SAPLING((player, item, version, data, isTargetBlock, x, y, z) -> {
return new HexOffsetCollisionBox(data.getType(), 4.0D, 0.0D, 4.0D, 12.0D, 12.0D, 12.0D);
}, StateTypes.BAMBOO_SAPLING),
SCAFFOLDING((player, item, version, data, x, y, z) -> {
SCAFFOLDING((player, item, version, data, isTargetBlock, x, y, z) -> {
// If is holding scaffolding or Via replacement - hay bale
if (item == StateTypes.SCAFFOLDING || version.isOlderThan(ClientVersion.V_1_14)) {
return new SimpleCollisionBox(0, 0, 0, 1, 1, 1, true);
@@ -511,7 +518,7 @@ public enum HitboxData {
return box;
}, StateTypes.SCAFFOLDING),
DRIPLEAF((player, item, version, data, x, y, z) -> {
DRIPLEAF((player, item, version, data, isTargetBlock, x, y, z) -> {
if (version.isOlderThanOrEquals(ClientVersion.V_1_16_4))
return new SimpleCollisionBox(0, 0, 0, 1, 1, 1, true);
@@ -537,7 +544,7 @@ public enum HitboxData {
}, StateTypes.BIG_DRIPLEAF),
PINK_PETALS_BLOCK((player, item, version, data, x, y, z) -> {
PINK_PETALS_BLOCK((player, item, version, data, isTargetBlock, x, y, z) -> {
if (version.isNewerThan(ClientVersion.V_1_20_2)) {
int flowerAmount = data.getFlowerAmount();
int horizontalIndex = getHorizontalID(data.getFacing());
@@ -564,10 +571,10 @@ public enum HitboxData {
} else if (version.isNewerThan(ClientVersion.V_1_12_2)) {
return CORAL_FAN.box.copy();
}
return GRASS_FERN.dynamic.fetch(player, item, version, data, x, y, z);
return GRASS_FERN.dynamic.fetch(player, item, version, data, isTargetBlock, x, y, z);
}, StateTypes.PINK_PETALS),
MANGROVE_PROPAGULE(((player, item, version, data, x, y, z) -> {
MANGROVE_PROPAGULE(((player, item, version, data, isTargetBlock, x, y, z) -> {
if (data.isHanging()) {
return new HexOffsetCollisionBox(data.getType(), 7.0, 0.0, 7.0, 9.0, 16.0, 9.0);
} else {
@@ -575,7 +582,7 @@ public enum HitboxData {
}
}), StateTypes.MANGROVE_PROPAGULE),
FROGSPAWN((player, item, version, data, x, y, z) -> {
FROGSPAWN((player, item, version, data, isTargetBlock, x, y, z) -> {
if (version.isNewerThan(ClientVersion.V_1_18_2)) {
return new HexCollisionBox(0.0D, 0.0D, 0.0D, 16.0D, 1.5D, 16.0D);
} else { // ViaVersion just replaces this with... nothing
@@ -618,7 +625,7 @@ public enum HitboxData {
return lookup.get(material);
}
public static CollisionBox getBlockHitbox(GrimPlayer player, StateType heldItem, ClientVersion version, WrappedBlockState block, int x, int y, int z) {
public static CollisionBox getBlockHitbox(GrimPlayer player, StateType heldItem, ClientVersion version, WrappedBlockState block, boolean isTargetBlock, int x, int y, int z) {
HitboxData data = getData(block.getType());
if (data == null) {
@@ -632,7 +639,7 @@ public enum HitboxData {
// Allow this class to override collision boxes when they aren't the same as regular boxes
HitBoxFactory hitBoxFactory = data.dynamic;
CollisionBox collisionBox = hitBoxFactory.fetch(player, heldItem, version, block, x, y, z);
CollisionBox collisionBox = hitBoxFactory.fetch(player, heldItem, version, block, isTargetBlock, x, y, z);
collisionBox.offset(x, y, z);
return collisionBox;
}
@@ -43,7 +43,7 @@ public class DynamicHitboxFence extends DynamicConnecting implements HitBoxFacto
}
@Override
public CollisionBox fetch(GrimPlayer player, StateType heldItem, ClientVersion version, WrappedBlockState block, int x, int y, int z) {
public CollisionBox fetch(GrimPlayer player, StateType heldItem, ClientVersion version, WrappedBlockState block, boolean isTargetBlock, int x, int y, int z) {
boolean east;
boolean north;
boolean south;
@@ -18,7 +18,7 @@ public class DynamicHitboxPane extends DynamicConnecting implements HitBoxFactor
private static final CollisionBox[] COLLISION_BOXES = makeShapes(1.0F, 1.0F, 16.0F, 0.0F, 16.0F, true, 1);
@Override
public CollisionBox fetch(GrimPlayer player, StateType item, ClientVersion version, WrappedBlockState block, int x, int y, int z) {
public CollisionBox fetch(GrimPlayer player, StateType item, ClientVersion version, WrappedBlockState block, boolean isTargetBlock, int x, int y, int z) {
boolean east, north, south, west;
// 1.13+ servers on 1.13+ clients send the full fence data
@@ -14,7 +14,7 @@ import com.github.retrooper.packetevents.protocol.world.states.type.StateType;
public class DynamicHitboxWall extends DynamicConnecting implements HitBoxFactory {
@Override
public CollisionBox fetch(GrimPlayer player, StateType heldItem, ClientVersion version, WrappedBlockState state, int x, int y, int z) {
public CollisionBox fetch(GrimPlayer player, StateType heldItem, ClientVersion version, WrappedBlockState state, boolean isTargetBlock, int x, int y, int z) {
int[] connections = getConnections(player, version, state, x, y, z);
int north = connections[0], south = connections[1], west = connections[2], east = connections[3], up = connections[4];
@@ -6,5 +6,5 @@ import com.github.retrooper.packetevents.protocol.world.states.WrappedBlockState
import com.github.retrooper.packetevents.protocol.world.states.type.StateType;
public interface HitBoxFactory {
CollisionBox fetch(GrimPlayer player, StateType heldItem, ClientVersion version, WrappedBlockState block, int x, int y, int z);
CollisionBox fetch(GrimPlayer player, StateType heldItem, ClientVersion version, WrappedBlockState block, boolean isTargetBlock, int x, int y, int z);
}