From a3320a947061cfbb1d1a46becefb86b6683c8dda Mon Sep 17 00:00:00 2001 From: Jeremiah Winsley Date: Sat, 11 Dec 2021 08:57:01 -0500 Subject: [PATCH] Allow breaking a pylon if it has no owner --- .../permutated/pylons/block/AbstractPylonBlock.java | 11 +++++------ .../net/permutated/pylons/tile/AbstractPylonTile.java | 8 +++++++- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/permutated/pylons/block/AbstractPylonBlock.java b/src/main/java/net/permutated/pylons/block/AbstractPylonBlock.java index f280e9f..9e45995 100644 --- a/src/main/java/net/permutated/pylons/block/AbstractPylonBlock.java +++ b/src/main/java/net/permutated/pylons/block/AbstractPylonBlock.java @@ -39,7 +39,6 @@ import net.permutated.pylons.util.TranslationKey; import javax.annotation.Nullable; -import java.util.Objects; import java.util.Optional; public abstract class AbstractPylonBlock extends Block implements EntityBlock { @@ -70,8 +69,8 @@ public VoxelShape getShape(BlockState blockState, BlockGetter reader, BlockPos p * @param player the player * @return the result */ - public static boolean isPylonOwner(@Nullable BlockEntity blockEntity, Player player) { - return (blockEntity instanceof AbstractPylonTile tile && Objects.equals(tile.getOwner(), player.getUUID())) || player.hasPermissions(2); + public static boolean canAccessPylon(@Nullable BlockEntity blockEntity, Player player) { + return (blockEntity instanceof AbstractPylonTile tile && tile.canAccess(player)); } @Nullable @@ -106,7 +105,7 @@ public void destroy(LevelAccessor world, BlockPos blockPos, BlockState blockStat public static void onBlockBreakEvent(BlockEvent.BreakEvent event) { BlockEntity tileEntity = event.getWorld().getBlockEntity(event.getPos()); - if (!isPylonOwner(tileEntity, event.getPlayer())) { + if (!canAccessPylon(tileEntity, event.getPlayer())) { event.setCanceled(true); } } @@ -115,7 +114,7 @@ public static void onBlockBreakEvent(BlockEvent.BreakEvent event) { @SuppressWarnings("java:S1874") // deprecated method from super class public float getDestroyProgress(BlockState state, Player player, BlockGetter getter, BlockPos blockPos) { BlockEntity blockEntity = getter.getBlockEntity(blockPos); - if (isPylonOwner(blockEntity, player)) { + if (canAccessPylon(blockEntity, player)) { int i = net.minecraftforge.common.ForgeHooks.isCorrectToolForDrops(state, player) ? 30 : 100; return player.getDigSpeed(state, blockPos) / 2.0F / i; } @@ -160,7 +159,7 @@ public AbstractContainerMenu createMenu(int i, Inventory playerInventory, Player } }; - if (isPylonOwner(tileEntity, player)) { + if (canAccessPylon(tileEntity, player)) { NetworkHooks.openGui((ServerPlayer) player, containerProvider, pylonTile::updateContainer); } else { return InteractionResult.FAIL; diff --git a/src/main/java/net/permutated/pylons/tile/AbstractPylonTile.java b/src/main/java/net/permutated/pylons/tile/AbstractPylonTile.java index 5f34a7a..fc82381 100644 --- a/src/main/java/net/permutated/pylons/tile/AbstractPylonTile.java +++ b/src/main/java/net/permutated/pylons/tile/AbstractPylonTile.java @@ -7,6 +7,7 @@ import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; import net.minecraft.world.Containers; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; @@ -23,6 +24,7 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; +import java.util.Objects; import java.util.UUID; public abstract class AbstractPylonTile extends BlockEntity { @@ -76,6 +78,10 @@ public void setOwner(UUID owner) { this.setChanged(); } + public boolean canAccess(Player player) { + return Objects.equals(player.getUUID(), owner) || owner == null || player.hasPermissions(2); + } + private long lastTicked = 0L; public boolean canTick(final int every) { @@ -108,7 +114,7 @@ protected static void dropItems(@Nullable Level world, BlockPos pos, IItemHandle } public String getOwnerName() { - String lastKnown = UsernameCache.getLastKnownUsername(owner); + String lastKnown = owner == null ? null : UsernameCache.getLastKnownUsername(owner); return StringUtils.defaultString(lastKnown, Constants.UNKNOWN); }