Skip to content

Commit 1bfae45

Browse files
wizjanyJoo200lenis0012Brokkonaut
authored
Merge pull request #2089 from EngineHub/feat/mc-1.21
* Fix compilation for MC 1.21. Nothing tested yet. * Update Materials.java with 1.21 tags and materials * Fix ItemStack conversion on block place on MC 1.21 (#2093) * Fix ItemStack conversion on block place This issue is present in 1.21 because some materials do not convert 1:1 to item types. This throws an exception in the ItemStack constructor. Example: WALL_TORCH is a valid block but not a valid item, only TORCH is a valid item. So, use the item in hand instead, creating a copy with quantity set to 1, for issueing the use item event. * Use ItemStack as-is. Closes #2092. * Fix ItemStack conversion for spigot compatibility * Special handling for WindCharges * Do not call as a bulk event, because it has to check every blocks type * WindCharge -> AbstractWindCharge * Fix UseBlockFlag for multiple uses at the same time, add windburst-flag * Cleanup code * Handle vaults as use, crafters as chest-access. --------- Co-authored-by: Joo200 <github@joo200.de> Co-authored-by: Lennart <1535717+lenis0012@users.noreply.github.com> Co-authored-by: Brokkonaut <hannos17@gmx.de>
2 parents ead1e1b + b269d7e commit 1bfae45

File tree

9 files changed

+102
-80
lines changed

9 files changed

+102
-80
lines changed

worldguard-bukkit/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ configurations {
2020

2121
dependencies {
2222
"api"(project(":worldguard-core"))
23-
"compileOnly"("io.papermc.paper:paper-api:1.20.6-R0.1-SNAPSHOT")
24-
"runtimeOnly"("org.spigotmc:spigot-api:1.20.6-R0.1-SNAPSHOT") {
23+
"compileOnly"("io.papermc.paper:paper-api:1.21-R0.1-SNAPSHOT")
24+
"runtimeOnly"("org.spigotmc:spigot-api:1.21-R0.1-SNAPSHOT") {
2525
exclude("junit", "junit")
2626
}
2727
"api"("com.sk89q.worldedit:worldedit-bukkit:${Versions.WORLDEDIT}") { isTransitive = false }

worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/BukkitUtil.java

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -55,23 +55,6 @@ public static int getPotionEffectBits(ItemStack item) {
5555
return item.getDurability() & 0x3F;
5656
}
5757

58-
/**
59-
* Get a blacklist target for the given block.
60-
*
61-
* @param block the block
62-
* @param effectiveMaterial The effective material, if different
63-
* @return a target
64-
*/
65-
public static Target createTarget(Block block, Material effectiveMaterial) {
66-
checkNotNull(block);
67-
checkNotNull(block.getType());
68-
if (block.getType() == effectiveMaterial) {
69-
return createTarget(block.getType());
70-
} else {
71-
return createTarget(effectiveMaterial);
72-
}
73-
}
74-
7558
/**
7659
* Get a blacklist target for the given block.
7760
*

worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/BlacklistListener.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ public void onBreakBlock(final BreakBlockEvent event) {
9696
event.filter(target -> {
9797
if (!wcfg.getBlacklist().check(
9898
new BlockBreakBlacklistEvent(localPlayer, BukkitAdapter.asBlockVector(target),
99-
createTarget(target.getBlock(), event.getEffectiveMaterial())), false, false)) {
99+
createTarget(target.getBlock())), false, false)) {
100100
return false;
101101
} else if (!wcfg.getBlacklist().check(
102102
new ItemDestroyWithBlacklistEvent(localPlayer, BukkitAdapter.asBlockVector(target),
@@ -124,7 +124,7 @@ public void onPlaceBlock(final PlaceBlockEvent event) {
124124

125125
final LocalPlayer localPlayer = getPlugin().wrapPlayer(player);
126126
event.filter(target -> wcfg.getBlacklist().check(new BlockPlaceBlacklistEvent(
127-
localPlayer, BukkitAdapter.asBlockVector(target), createTarget(target.getBlock(), event.getEffectiveMaterial())), false, false));
127+
localPlayer, BukkitAdapter.asBlockVector(target), createTarget(target.getBlock())), false, false));
128128
}
129129

130130
@EventHandler(ignoreCancelled = true)
@@ -143,7 +143,7 @@ public void onUseBlock(final UseBlockEvent event) {
143143

144144
final LocalPlayer localPlayer = getPlugin().wrapPlayer(player);
145145
event.filter(target -> wcfg.getBlacklist().check(new BlockInteractBlacklistEvent(
146-
localPlayer, BukkitAdapter.asBlockVector(target), createTarget(target.getBlock(), event.getEffectiveMaterial())), false, false));
146+
localPlayer, BukkitAdapter.asBlockVector(target), createTarget(target.getBlock())), false, false));
147147
}
148148

149149
@EventHandler(ignoreCancelled = true)

worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/BuildPermissionListener.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,12 +101,14 @@ public void onUseBlock(final UseBlockEvent event) {
101101

102102
if (rootCause instanceof Player) {
103103
final Player player = (Player) rootCause;
104-
final Material material = event.getEffectiveMaterial();
105104

106-
if (!hasBuildPermission(player, "block." + material.name().toLowerCase() + ".interact")
107-
&& !hasBuildPermission(player, "block.interact." + material.name().toLowerCase())) {
105+
boolean blocked = event.filter(loc -> {
106+
String blacklistName = loc.getBlock().getType().name().toLowerCase();
107+
return hasBuildPermission(player, "block." + blacklistName + ".interact") ||
108+
hasBuildPermission(player, "block.interact." + blacklistName);
109+
}, true);
110+
if (blocked && !event.isSilent()) {
108111
tellErrorMessage(player, event.getWorld());
109-
event.setCancelled(true);
110112
}
111113
}
112114
}

worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
import org.bukkit.block.data.BlockData;
6666
import org.bukkit.block.data.Waterlogged;
6767
import org.bukkit.block.data.type.Dispenser;
68+
import org.bukkit.entity.AbstractWindCharge;
6869
import org.bukkit.entity.AreaEffectCloud;
6970
import org.bukkit.entity.Creeper;
7071
import org.bukkit.entity.Entity;
@@ -218,8 +219,8 @@ public void onBlockPlace(BlockPlaceEvent event) {
218219
Events.fireToCancel(event, new BreakBlockEvent(event, create(event.getPlayer()), previousState.getLocation(), previousState.getType()));
219220
}
220221

221-
if (!event.isCancelled()) {
222-
ItemStack itemStack = new ItemStack(event.getBlockPlaced().getType(), 1);
222+
ItemStack itemStack = event.getItemInHand();
223+
if (!event.isCancelled() && itemStack.getType() != Material.AIR) {
223224
Events.fireToCancel(event, new UseItemEvent(event, create(event.getPlayer()), event.getPlayer().getWorld(), itemStack));
224225
}
225226

@@ -357,6 +358,13 @@ public void onEntityChangeBlock(EntityChangeBlockEvent event) {
357358
@EventHandler(ignoreCancelled = true)
358359
public void onEntityExplode(EntityExplodeEvent event) {
359360
Entity entity = event.getEntity();
361+
if (entity instanceof AbstractWindCharge) {
362+
UseBlockEvent useEvent = new UseBlockEvent(event, create(entity), event.getLocation().getWorld(), event.blockList(), Material.AIR);
363+
useEvent.getRelevantFlags().add(Flags.WIND_CHARGE_BURST);
364+
useEvent.setSilent(true);
365+
Events.fireBulkEventToCancel(event, useEvent);
366+
return;
367+
}
360368
Events.fireBulkEventToCancel(event, new BreakBlockEvent(event, create(entity), event.getLocation().getWorld(), event.blockList(), Material.AIR));
361369
if (entity instanceof Creeper) {
362370
Cause.untrackParentCause(entity);

worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/RegionProtectionListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,13 +244,13 @@ public void onUseBlock(final UseBlockEvent event) {
244244
if (!isRegionSupportEnabled(event.getWorld())) return; // Region support disabled
245245
if (isWhitelisted(event.getCause(), event.getWorld(), false)) return; // Whitelisted cause
246246

247-
final Material type = event.getEffectiveMaterial();
248247
final RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery();
249248
final RegionAssociable associable = createRegionAssociable(event.getCause());
250249

251250
event.filter((Predicate<Location>) target -> {
252251
boolean canUse;
253252
String what;
253+
final Material type = target.getBlock().getType();
254254

255255
/* Saplings, etc. */
256256
if (Materials.isConsideredBuildingIfUsed(type)) {

0 commit comments

Comments
 (0)