Skip to content

Commit a5ea511

Browse files
committed
Fix UseBlockFlag for multiple uses at the same time, add windburst-flag
1 parent 8329879 commit a5ea511

File tree

7 files changed

+16
-49
lines changed

7 files changed

+16
-49
lines changed

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: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,6 @@
152152

153153
import javax.annotation.Nullable;
154154
import java.util.ArrayList;
155-
import java.util.Iterator;
156155
import java.util.List;
157156
import java.util.stream.Collectors;
158157

@@ -360,16 +359,10 @@ public void onEntityChangeBlock(EntityChangeBlockEvent event) {
360359
public void onEntityExplode(EntityExplodeEvent event) {
361360
Entity entity = event.getEntity();
362361
if (entity instanceof AbstractWindCharge) {
363-
Iterator<Block> it = event.blockList().iterator();
364-
while (it.hasNext()) {
365-
Block block = it.next();
366-
UseBlockEvent useEvent = new UseBlockEvent(event, create(entity), block);
367-
useEvent.setSilent(true);
368-
Bukkit.getServer().getPluginManager().callEvent(useEvent);
369-
if (useEvent.isCancelled()) {
370-
it.remove();
371-
}
372-
}
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);
373366
return;
374367
}
375368
Events.fireBulkEventToCancel(event, new BreakBlockEvent(event, create(entity), event.getLocation().getWorld(), event.blockList(), Material.AIR));

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

Lines changed: 2 additions & 2 deletions
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)) {
@@ -278,7 +278,7 @@ public void onUseBlock(final UseBlockEvent event) {
278278
what = "sleep";
279279

280280
/* Respawn Anchors */
281-
} else if(type == Material.RESPAWN_ANCHOR) {
281+
} else if(target.getBlock().getType() == Material.RESPAWN_ANCHOR) {
282282
canUse = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event, Flags.INTERACT, Flags.RESPAWN_ANCHORS));
283283
what = "use anchors";
284284

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

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
import org.bukkit.World;
4545
import org.bukkit.block.Block;
4646
import org.bukkit.block.BlockState;
47-
import org.bukkit.entity.AbstractWindCharge;
4847
import org.bukkit.entity.ArmorStand;
4948
import org.bukkit.entity.Creeper;
5049
import org.bukkit.entity.EnderCrystal;
@@ -523,16 +522,6 @@ public void onEntityExplode(EntityExplodeEvent event) {
523522
}
524523
}
525524
}
526-
} else if (ent instanceof AbstractWindCharge) {
527-
if (wcfg.useRegions) {
528-
for (Block block : event.blockList()) {
529-
if (!WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().getApplicableRegions(BukkitAdapter.adapt(block.getLocation())).testState(null, Flags.WIND_CHARGE_BURST)) {
530-
event.blockList().clear();
531-
event.setCancelled(true);
532-
return;
533-
}
534-
}
535-
}
536525
} else {
537526
// unhandled entity
538527
if (wcfg.blockOtherExplosions) {

worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/Materials.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -835,7 +835,6 @@ private static void putMaterialTag(Tag<Material> tag, Integer value) {
835835

836836
MATERIAL_FLAGS.put(Material.ARMADILLO_SCUTE, 0);
837837
MATERIAL_FLAGS.put(Material.WOLF_ARMOR, 0);
838-
MATERIAL_FLAGS.put(Material.WIND_CHARGE, 0);
839838

840839
// 1.21
841840
MATERIAL_FLAGS.put(Material.CHISELED_TUFF, 0);
@@ -876,6 +875,7 @@ private static void putMaterialTag(Tag<Material> tag, Integer value) {
876875
MATERIAL_FLAGS.put(Material.VAULT, 0);
877876
MATERIAL_FLAGS.put(Material.OMINOUS_BOTTLE, 0);
878877
MATERIAL_FLAGS.put(Material.BREEZE_ROD, 0);
878+
MATERIAL_FLAGS.put(Material.WIND_CHARGE, 0);
879879

880880
putMaterialTag(Tag.SHULKER_BOXES, MODIFIED_ON_RIGHT);
881881
putMaterialTag(Tag.ITEMS_BOATS, 0);

0 commit comments

Comments
 (0)