Skip to content

Commit a9578ae

Browse files
committed
This makes it so placing block with "Infinite Reach" triggers the corresponding bukkit events.
This is only supposed to be a temporary solution. It also doesn't fix the problem that you can't use none blocks such as buckets.
1 parent 7822d00 commit a9578ae

File tree

2 files changed

+37
-7
lines changed

2 files changed

+37
-7
lines changed

build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ plugins {
77
id("com.github.johnrengelman.shadow") version "8.1.1"
88
}
99

10-
group = "com.moulberry.com.moulberry.axiom"
11-
version = "1.0.0-SNAPSHOT"
10+
group = "com.moulberry.axiom"
11+
version = "1.1.0.1"
1212
description = "Serverside component for Axiom on Paper"
1313

1414
java {

src/main/java/com/moulberry/axiom/packet/SetBlockPacketListener.java

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
import com.moulberry.axiom.AxiomPaper;
44
import io.netty.buffer.Unpooled;
55
import net.minecraft.core.BlockPos;
6+
import net.minecraft.core.Direction;
67
import net.minecraft.core.SectionPos;
78
import net.minecraft.network.FriendlyByteBuf;
9+
import net.minecraft.network.protocol.game.ClientboundBlockUpdatePacket;
810
import net.minecraft.server.level.ServerLevel;
911
import net.minecraft.server.level.ServerPlayer;
1012
import net.minecraft.world.level.block.Block;
@@ -15,16 +17,19 @@
1517
import net.minecraft.world.level.chunk.LevelChunkSection;
1618
import net.minecraft.world.level.levelgen.Heightmap;
1719
import net.minecraft.world.level.lighting.LightEngine;
20+
import org.bukkit.Material;
1821
import org.bukkit.craftbukkit.v1_20_R1.entity.CraftPlayer;
22+
import org.bukkit.craftbukkit.v1_20_R1.event.CraftEventFactory;
1923
import org.bukkit.entity.Player;
24+
import org.bukkit.event.block.Action;
25+
import org.bukkit.event.block.BlockBreakEvent;
2026
import org.bukkit.plugin.messaging.PluginMessageListener;
2127
import org.jetbrains.annotations.NotNull;
2228
import xyz.jpenilla.reflectionremapper.ReflectionRemapper;
2329

2430
import java.lang.reflect.InvocationTargetException;
2531
import java.lang.reflect.Method;
2632
import java.util.Map;
27-
import java.util.logging.Level;
2833

2934
public class SetBlockPacketListener implements PluginMessageListener {
3035

@@ -60,6 +65,35 @@ public void onPluginMessageReceived(@NotNull String channel, @NotNull Player buk
6065

6166
ServerPlayer player = ((CraftPlayer)bukkitPlayer).getHandle();
6267

68+
Material blockMaterial = blockState.getBukkitMaterial();
69+
Action interactAction = blockMaterial == Material.AIR ? Action.LEFT_CLICK_BLOCK : Action.RIGHT_CLICK_BLOCK;
70+
BlockState oldBlockState = player.level().getBlockState(blockPos);
71+
72+
if (CraftEventFactory.callPlayerInteractEvent(player, interactAction, blockPos.below(), Direction.UP, player.getInventory().getSelected(), player.getUsedItemHand()).isCancelled()) {
73+
player.connection.send(new ClientboundBlockUpdatePacket(blockPos, oldBlockState));
74+
} else {
75+
setBlock(player, updateNeighbors, blockPos, blockState);
76+
77+
org.bukkit.block.Block bukkitBlock = bukkitPlayer.getWorld().getBlockAt(blockPos.getX(), blockPos.getY(), blockPos.getZ());
78+
79+
boolean cancelled;
80+
if (interactAction.isLeftClick()) {
81+
cancelled = !new BlockBreakEvent(bukkitBlock, bukkitPlayer).callEvent();
82+
} else {
83+
cancelled = CraftEventFactory.callBlockPlaceEvent(player.serverLevel(), player, player.getUsedItemHand(), bukkitBlock.getState(), blockPos.getX(), blockPos.getY(), blockPos.getZ()).isCancelled();
84+
}
85+
86+
if (cancelled) {
87+
setBlock(player, updateNeighbors, blockPos, oldBlockState);
88+
}
89+
}
90+
91+
if (sequenceId >= 0) {
92+
player.connection.ackBlockChangesUpTo(sequenceId);
93+
}
94+
}
95+
96+
private void setBlock(ServerPlayer player, boolean updateNeighbors, BlockPos blockPos, BlockState blockState) {
6397
if (updateNeighbors) {
6498
player.level().setBlock(blockPos, blockState, 3);
6599
} else {
@@ -147,10 +181,6 @@ public void onPluginMessageReceived(@NotNull String channel, @NotNull Player buk
147181
level.getChunkSource().getLightEngine().updateSectionStatus(SectionPos.of(cx, cy, cz), nowHasOnlyAir);
148182
}
149183
}
150-
151-
if (sequenceId >= 0) {
152-
player.connection.ackBlockChangesUpTo(sequenceId);
153-
}
154184
}
155185

156186
}

0 commit comments

Comments
 (0)