Skip to content

Commit 129ae6c

Browse files
committed
Merge branch 'version/7.0.x'
# Conflicts: # gradle.properties
2 parents b67fd01 + 44d0735 commit 129ae6c

File tree

17 files changed

+92
-212
lines changed

17 files changed

+92
-212
lines changed

CHANGELOG.md

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,19 @@
11
# Changelog
22

3-
## 7.0.8 (beta)
3+
## 7.0.8
44
* Add support for MC 1.19
55
* Add skulk-growth flag and config option
6-
* Fix possible error when using Paper's entity origin API.
6+
* Add copper-fade flag
7+
* Add data packs to report output
8+
* Add protection for allay inventory slot
9+
* Categorize allay item pickups under item-pickup flag
10+
* Categorize dragon egg interaction (teleporting) as building
11+
* Ignore most NPC-based actions for Player events
12+
* Optimize handling of tamed animals where the owner was offline (Paper only)
13+
* Optimize additional InventoryHolder accesses (Paper only)
14+
* Fix an exception that occurred when plugins created portals with non-player entities
15+
* Fix possible error when using Paper's entity origin API
16+
* Update bstats and squirrelid libs
717

818
## 7.0.7
919
* Add rock-growth flag for budding amethyst and pointed dripstone.

config/checkstyle/import-control.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
<allow pkg="io.papermc.lib"/>
3232
<allow pkg="com.destroystokyo.paper"/>
3333
<allow pkg="io.papermc.paper"/>
34-
<allow pkg="co.aikar.timings.lib" />
3534
<allow pkg="org.spigotmc" />
3635
</subpackage>
3736

worldguard-bukkit/build.gradle.kts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,6 @@ repositories {
1212
name = "paper"
1313
url = uri("https://repo.papermc.io/repository/maven-public/")
1414
}
15-
maven {
16-
name = "aikar-timings"
17-
url = uri("https://repo.aikar.co/nexus/content/groups/aikar/")
18-
}
1915
}
2016

2117
configurations {
@@ -33,7 +29,6 @@ dependencies {
3329
"compileOnly"("com.sk89q:commandbook:2.3") { isTransitive = false }
3430
"shadeOnly"("io.papermc:paperlib:1.0.8")
3531
"shadeOnly"("org.bstats:bstats-bukkit:3.0.1")
36-
"shadeOnly"("co.aikar:minecraft-timings:1.0.4")
3732
}
3833

3934
tasks.named<Copy>("processResources") {

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ public class BukkitConfigurationManager extends YamlConfigurationManager {
3737

3838
private boolean hasCommandBookGodMode;
3939
boolean extraStats;
40-
boolean timedSessionHandlers;
4140

4241
/**
4342
* Construct the object.
@@ -57,7 +56,6 @@ public Collection<BukkitWorldConfiguration> getWorldConfigs() {
5756
public void load() {
5857
super.load();
5958
this.extraStats = getConfig().getBoolean("custom-metrics-charts", true);
60-
this.timedSessionHandlers = getConfig().getBoolean("extra-timings.session-handlers", true);
6159
}
6260

6361
@Override

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,6 @@ public void load() {
139139
sessionManager = new BukkitSessionManager();
140140
configuration = new BukkitConfigurationManager(WorldGuardPlugin.inst());
141141
configuration.load();
142-
sessionManager.setUsingTimings(configuration.timedSessionHandlers);
143142
regionContainer = new BukkitRegionContainer(WorldGuardPlugin.inst());
144143
regionContainer.initialize();
145144
debugHandler = new BukkitDebugHandler(WorldGuardPlugin.inst());

worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/cause/Cause.java

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@
2727
import com.sk89q.worldguard.bukkit.util.Entities;
2828
import io.papermc.lib.PaperLib;
2929
import org.bukkit.Bukkit;
30+
import org.bukkit.OfflinePlayer;
3031
import org.bukkit.block.Block;
32+
import org.bukkit.entity.AnimalTamer;
3133
import org.bukkit.entity.AreaEffectCloud;
3234
import org.bukkit.entity.Creature;
3335
import org.bukkit.entity.Entity;
@@ -107,6 +109,12 @@ public boolean isKnown() {
107109
return false;
108110
}
109111

112+
if (object instanceof Tameable tameable && tameable.isTamed()) {
113+
// if they're tamed but also the root cause, the owner is offline
114+
// otherwise the owner will be the root cause (and known)
115+
return false;
116+
}
117+
110118
if (object instanceof TNTPrimed || object instanceof Vehicle) {
111119
if (!PaperLib.isPaper()) {
112120
return false;
@@ -300,9 +308,24 @@ private void addAll(@Nullable Object... element) {
300308
} else if (o instanceof AreaEffectCloud) {
301309
indirect = true;
302310
addAll(((AreaEffectCloud) o).getSource());
303-
} else if (o instanceof Tameable) {
311+
} else if (o instanceof Tameable tameable) {
304312
indirect = true;
305-
addAll(((Tameable) o).getOwner());
313+
if (PaperLib.isPaper()) {
314+
UUID ownerId = tameable.getOwnerUniqueId();
315+
if (ownerId != null) {
316+
Player owner = Bukkit.getPlayer(ownerId);
317+
if (owner != null) {
318+
addAll(owner);
319+
}
320+
}
321+
} else {
322+
// this will cause offline player loads if the player is offline
323+
// too bad for spigot users
324+
AnimalTamer owner = tameable.getOwner();
325+
if (owner instanceof OfflinePlayer player) {
326+
addAll(player.getPlayer()); // player object if online, else null
327+
}
328+
}
306329
} else if (o instanceof Creature && ((Creature) o).getTarget() != null) {
307330
indirect = true;
308331
addAll(((Creature) o).getTarget());

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@
113113
import org.bukkit.event.entity.EntityDeathEvent;
114114
import org.bukkit.event.entity.EntityExplodeEvent;
115115
import org.bukkit.event.entity.EntityInteractEvent;
116+
import org.bukkit.event.entity.EntityPickupItemEvent;
116117
import org.bukkit.event.entity.EntityTameEvent;
117118
import org.bukkit.event.entity.EntityUnleashEvent;
118119
import org.bukkit.event.entity.ExpBottleEvent;
@@ -919,6 +920,12 @@ public void onPlayerPickupItem(PlayerPickupItemEvent event) {
919920
pickupDebounce.debounce(event.getPlayer(), item, event, new DestroyEntityEvent(event, create(event.getPlayer()), event.getItem()));
920921
}
921922

923+
@EventHandler(ignoreCancelled = true)
924+
public void onEntityPickupItem(EntityPickupItemEvent event) {
925+
Item item = event.getItem();
926+
pickupDebounce.debounce(event.getEntity(), item, event, new DestroyEntityEvent(event, create(event.getEntity()), event.getItem()));
927+
}
928+
922929
@EventHandler(ignoreCancelled = true)
923930
public void onPlayerDropItem(PlayerDropItemEvent event) {
924931
Events.fireToCancel(event, new SpawnEntityEvent(event, create(event.getPlayer()), event.getItemDrop()));

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@
2828
import io.papermc.lib.PaperLib;
2929
import org.bukkit.Bukkit;
3030
import org.bukkit.Location;
31+
import org.bukkit.entity.AbstractHorse;
3132
import org.bukkit.entity.Entity;
32-
import org.bukkit.entity.Horse;
3333
import org.bukkit.entity.LivingEntity;
3434
import org.bukkit.entity.Player;
3535
import org.bukkit.event.EventHandler;
@@ -99,7 +99,7 @@ public void onPlayerMove(PlayerMoveEvent event) {
9999
moveType = MoveType.GLIDE;
100100
} else if (event.getPlayer().isSwimming()) {
101101
moveType = MoveType.SWIM;
102-
} else if (event.getPlayer().getVehicle() != null && event.getPlayer().getVehicle() instanceof Horse) {
102+
} else if (event.getPlayer().getVehicle() != null && event.getPlayer().getVehicle() instanceof AbstractHorse) {
103103
moveType = MoveType.RIDE;
104104
}
105105
com.sk89q.worldedit.util.Location weLocation = session.testMoveTo(localPlayer, BukkitAdapter.adapt(to), moveType);

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

Lines changed: 36 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,17 @@
2525
import com.sk89q.worldguard.WorldGuard;
2626
import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration;
2727
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
28+
import com.sk89q.worldguard.bukkit.cause.Cause;
2829
import com.sk89q.worldguard.bukkit.util.Entities;
30+
import com.sk89q.worldguard.bukkit.util.InteropUtils;
2931
import com.sk89q.worldguard.config.ConfigurationManager;
3032
import com.sk89q.worldguard.config.WorldConfiguration;
3133
import com.sk89q.worldguard.protection.ApplicableRegionSet;
34+
import com.sk89q.worldguard.protection.FailedLoadRegionSet;
3235
import com.sk89q.worldguard.protection.association.RegionAssociable;
3336
import com.sk89q.worldguard.protection.flags.Flags;
3437
import com.sk89q.worldguard.protection.flags.StateFlag;
38+
import com.sk89q.worldguard.protection.flags.StateFlag.State;
3539
import com.sk89q.worldguard.protection.managers.RegionManager;
3640
import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
3741
import com.sk89q.worldguard.protection.regions.RegionQuery;
@@ -653,35 +657,46 @@ public void onCreatureSpawn(CreatureSpawnEvent event) {
653657
public void onCreatePortal(PortalCreateEvent event) {
654658
WorldConfiguration wcfg = getWorldConfig(event.getWorld());
655659

656-
if (wcfg.regionNetherPortalProtection
660+
if (wcfg.useRegions && wcfg.regionNetherPortalProtection
657661
&& event.getReason() == PortalCreateEvent.CreateReason.NETHER_PAIR
658662
&& !event.getBlocks().isEmpty()) {
659663
final com.sk89q.worldedit.world.World world = BukkitAdapter.adapt(event.getWorld());
660-
final RegionManager regionManager = WorldGuard.getInstance().getPlatform().getRegionContainer()
661-
.get(world);
662-
if (regionManager == null) return;
663-
LocalPlayer associable = null;
664-
if (event.getEntity() instanceof Player player) {
665-
associable = getPlugin().wrapPlayer(player);
666-
if (WorldGuard.getInstance().getPlatform().getSessionManager().hasBypass(associable, world)) {
664+
final Cause cause = Cause.create(event.getEntity());
665+
LocalPlayer localPlayer = null;
666+
if (cause.getRootCause() instanceof Player player) {
667+
if (wcfg.fakePlayerBuildOverride && InteropUtils.isFakePlayer(player)) {
668+
return;
669+
}
670+
localPlayer = getPlugin().wrapPlayer(player);
671+
if (WorldGuard.getInstance().getPlatform().getSessionManager().hasBypass(localPlayer, world)) {
667672
return;
668673
}
669674
}
670-
BlockVector3 min = null;
671-
BlockVector3 max = null;
672-
for (BlockState block : event.getBlocks()) {
673-
BlockVector3 loc = BlockVector3.at(block.getX(), block.getY(), block.getZ());
674-
min = min == null ? loc : loc.getMinimum(min);
675-
max = max == null ? loc : loc.getMaximum(max);
676-
}
677-
ProtectedCuboidRegion target = new ProtectedCuboidRegion("__portal_check", true, min, max);
678-
final ApplicableRegionSet regions = regionManager.getApplicableRegions(target);
679-
if (!regions.testState(associable, Flags.BUILD, Flags.BLOCK_PLACE)) {
680-
if (associable != null) {
675+
final RegionManager regionManager = WorldGuard.getInstance().getPlatform().getRegionContainer()
676+
.get(world);
677+
ApplicableRegionSet regions;
678+
if (regionManager == null) {
679+
regions = FailedLoadRegionSet.getInstance();
680+
} else {
681+
BlockVector3 min = null;
682+
BlockVector3 max = null;
683+
for (BlockState block : event.getBlocks()) {
684+
BlockVector3 loc = BlockVector3.at(block.getX(), block.getY(), block.getZ());
685+
min = min == null ? loc : loc.getMinimum(min);
686+
max = max == null ? loc : loc.getMaximum(max);
687+
}
688+
ProtectedCuboidRegion target = new ProtectedCuboidRegion("__portal_check", true, min, max);
689+
regions = regionManager.getApplicableRegions(target);
690+
}
691+
final RegionAssociable associable = createRegionAssociable(cause);
692+
final State buildState = StateFlag.denyToNone(regions.queryState(associable, Flags.BUILD));
693+
if (!StateFlag.test(buildState, regions.queryState(associable, Flags.BLOCK_BREAK))
694+
|| !StateFlag.test(buildState, regions.queryState(associable, Flags.BLOCK_PLACE))) {
695+
if (localPlayer != null && !cause.isIndirect()) {
681696
// NB there is no way to cancel the teleport without PTA (since PlayerPortal doesn't have block info)
682697
// removing PTA was a mistake
683-
String message = regions.queryValue(associable, Flags.DENY_MESSAGE);
684-
RegionProtectionListener.formatAndSendDenyMessage("create portals", associable, message);
698+
String message = regions.queryValue(localPlayer, Flags.DENY_MESSAGE);
699+
RegionProtectionListener.formatAndSendDenyMessage("create portals", localPlayer, message);
685700
}
686701
event.setCancelled(true);
687702
}

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -258,13 +258,11 @@ private void handleBlockRightClick(PlayerInteractEvent event) {
258258
}
259259

260260
if (wcfg.useRegions) {
261-
//Block placedIn = block.getRelative(event.getBlockFace());
262-
ApplicableRegionSet set =
263-
WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().getApplicableRegions(BukkitAdapter.adapt(block.getLocation()));
264-
//ApplicableRegionSet placedInSet = plugin.getRegionContainer().createQuery().getApplicableRegions(placedIn.getLocation());
265261
LocalPlayer localPlayer = getPlugin().wrapPlayer(player);
266262

267263
if (item != null && item.getType().getKey().toString().equals(wcfg.regionWand) && getPlugin().hasPermission(player, "worldguard.region.wand")) {
264+
ApplicableRegionSet set = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery()
265+
.getApplicableRegions(BukkitAdapter.adapt(block.getLocation()), RegionQuery.QueryOption.SORT);
268266
if (set.size() > 0) {
269267
player.sendMessage(ChatColor.YELLOW + "Can you build? " + (set.testState(localPlayer, Flags.BUILD) ? "Yes" : "No"));
270268

0 commit comments

Comments
 (0)