diff --git a/common/src/main/java/net/blay09/mods/waystones/block/entity/WarpPlateBlockEntity.java b/common/src/main/java/net/blay09/mods/waystones/block/entity/WarpPlateBlockEntity.java index 2b40f4ff..535a49a7 100644 --- a/common/src/main/java/net/blay09/mods/waystones/block/entity/WarpPlateBlockEntity.java +++ b/common/src/main/java/net/blay09/mods/waystones/block/entity/WarpPlateBlockEntity.java @@ -6,6 +6,7 @@ import net.blay09.mods.waystones.api.WaystoneTypes; import net.blay09.mods.waystones.api.error.WaystoneTeleportError; import net.blay09.mods.waystones.block.WarpPlateBlock; +import net.blay09.mods.waystones.component.ModComponents; import net.blay09.mods.waystones.config.WaystonesConfig; import net.blay09.mods.waystones.core.*; import net.blay09.mods.waystones.menu.WarpPlateMenu; @@ -15,6 +16,7 @@ import net.minecraft.ChatFormatting; import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; +import net.minecraft.core.component.DataComponentMap; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.RegistryFriendlyByteBuf; @@ -23,6 +25,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; import net.minecraft.util.Mth; +import net.minecraft.util.Unit; import net.minecraft.world.MenuProvider; import net.minecraft.world.Nameable; import net.minecraft.world.effect.MobEffectInstance; @@ -77,6 +80,14 @@ protected ResourceLocation getWaystoneType() { return WaystoneTypes.WARP_PLATE; } + @Override + protected void collectImplicitComponents(DataComponentMap.Builder builder) { + super.collectImplicitComponents(builder); + if (isCompletedFirstAttunement()) { + builder.set(ModComponents.warpPlateCompletedFirstAttunement.get(), Unit.INSTANCE); + } + } + @Override public void saveAdditional(CompoundTag tag, HolderLookup.Provider provider) { super.saveAdditional(tag, provider); diff --git a/common/src/main/java/net/blay09/mods/waystones/block/entity/WaystoneBlockEntityBase.java b/common/src/main/java/net/blay09/mods/waystones/block/entity/WaystoneBlockEntityBase.java index 1d31f054..c8d59909 100644 --- a/common/src/main/java/net/blay09/mods/waystones/block/entity/WaystoneBlockEntityBase.java +++ b/common/src/main/java/net/blay09/mods/waystones/block/entity/WaystoneBlockEntityBase.java @@ -19,6 +19,7 @@ import net.minecraft.core.HolderLookup; import net.minecraft.core.NonNullList; import net.minecraft.core.RegistryAccess; +import net.minecraft.core.component.DataComponentMap; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; import net.minecraft.nbt.Tag; @@ -108,6 +109,11 @@ public void loadAdditional(CompoundTag compound, HolderLookup.Provider provider) completedFirstAttunement = compound.getBoolean("CompletedFirstAttunement"); } + @Override + protected void collectImplicitComponents(DataComponentMap.Builder builder) { + builder.set(ModComponents.waystone.get(), waystone.isValid() ? waystone.getWaystoneUid() : waystoneUid); + } + @Override public void writeUpdateTag(CompoundTag tag) { tag.put("Waystone", WaystoneImpl.write(getWaystone(), new CompoundTag(), level.registryAccess())); diff --git a/common/src/main/java/net/blay09/mods/waystones/client/gui/screen/WaystoneScreen.java b/common/src/main/java/net/blay09/mods/waystones/client/gui/screen/WaystoneScreen.java index 50fd8c1c..9dc9acb3 100644 --- a/common/src/main/java/net/blay09/mods/waystones/client/gui/screen/WaystoneScreen.java +++ b/common/src/main/java/net/blay09/mods/waystones/client/gui/screen/WaystoneScreen.java @@ -6,6 +6,7 @@ import net.blay09.mods.waystones.api.WaystoneTypes; import net.blay09.mods.waystones.client.gui.widget.ITooltipProvider; import net.blay09.mods.waystones.client.gui.widget.WaystoneVisbilityButton; +import net.blay09.mods.waystones.core.WaystoneVisibilities; import net.blay09.mods.waystones.menu.WaystoneMenu; import net.blay09.mods.waystones.network.message.EditWaystoneMessage; import net.minecraft.client.Minecraft; @@ -65,7 +66,8 @@ public void init() { setInitialFocus(textField); } - visibilityButton = new WaystoneVisbilityButton(leftPos + 9, topPos + 8, oldVisibility, menu.getVisibilityOptions(), menu.canEdit()); + final var visibilityOptions = WaystoneVisibilities.getVisibilityOptions(Minecraft.getInstance().player, waystone); + visibilityButton = new WaystoneVisbilityButton(leftPos + 9, topPos + 8, oldVisibility, visibilityOptions, menu.canEdit()); addRenderableWidget(visibilityButton); } diff --git a/common/src/main/java/net/blay09/mods/waystones/core/WaystoneVisibilities.java b/common/src/main/java/net/blay09/mods/waystones/core/WaystoneVisibilities.java new file mode 100644 index 00000000..265f814a --- /dev/null +++ b/common/src/main/java/net/blay09/mods/waystones/core/WaystoneVisibilities.java @@ -0,0 +1,22 @@ +package net.blay09.mods.waystones.core; + +import net.blay09.mods.waystones.api.Waystone; +import net.blay09.mods.waystones.api.WaystoneVisibility; +import net.minecraft.world.entity.player.Player; + +import java.util.ArrayList; +import java.util.List; + +public class WaystoneVisibilities { + public static List getVisibilityOptions(Player player, Waystone waystone) { + final var result = new ArrayList(); + final var baseVisibility = WaystoneVisibility.fromWaystoneType(waystone.getWaystoneType()); + result.add(baseVisibility); + if (baseVisibility == WaystoneVisibility.ACTIVATION) { + if (WaystonePermissionManager.isAllowedVisibility(WaystoneVisibility.GLOBAL) || WaystonePermissionManager.skipsPermissions(player)) { + result.add(WaystoneVisibility.GLOBAL); + } + } + return result; + } +} diff --git a/common/src/main/java/net/blay09/mods/waystones/menu/WaystoneMenu.java b/common/src/main/java/net/blay09/mods/waystones/menu/WaystoneMenu.java index cf71c513..70d58fe1 100644 --- a/common/src/main/java/net/blay09/mods/waystones/menu/WaystoneMenu.java +++ b/common/src/main/java/net/blay09/mods/waystones/menu/WaystoneMenu.java @@ -1,10 +1,8 @@ package net.blay09.mods.waystones.menu; import net.blay09.mods.waystones.api.Waystone; -import net.blay09.mods.waystones.api.WaystoneVisibility; import net.blay09.mods.waystones.block.entity.WaystoneBlockEntityBase; import net.blay09.mods.waystones.core.WaystoneImpl; -import net.blay09.mods.waystones.core.WaystonePermissionManager; import net.minecraft.core.BlockPos; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; @@ -16,9 +14,6 @@ import net.minecraft.world.inventory.Slot; import net.minecraft.world.item.ItemStack; -import java.util.ArrayList; -import java.util.List; - public class WaystoneMenu extends AbstractContainerMenu { public record Data(BlockPos pos, Waystone waystone, boolean canEdit) { @@ -33,7 +28,6 @@ public record Data(BlockPos pos, Waystone waystone, boolean canEdit) { WaystoneMenu.Data::canEdit, WaystoneMenu.Data::new); - private final Player player; private final Waystone waystone; private final WaystoneBlockEntityBase blockEntity; private final ContainerData containerData; @@ -41,7 +35,6 @@ public record Data(BlockPos pos, Waystone waystone, boolean canEdit) { public WaystoneMenu(int windowId, Waystone waystone, WaystoneBlockEntityBase blockEntity, ContainerData containerData, Inventory playerInventory, boolean canEdit) { super(ModMenus.waystoneSettings.get(), windowId); - this.player = playerInventory.player; this.waystone = waystone; this.blockEntity = blockEntity; this.containerData = containerData; @@ -117,18 +110,6 @@ public Waystone getWaystone() { return waystone; } - public List getVisibilityOptions() { - final var result = new ArrayList(); - final var baseVisibility = WaystoneVisibility.fromWaystoneType(waystone.getWaystoneType()); - result.add(baseVisibility); - if (baseVisibility == WaystoneVisibility.ACTIVATION) { - if (WaystonePermissionManager.isAllowedVisibility(WaystoneVisibility.GLOBAL) || WaystonePermissionManager.skipsPermissions(player)) { - result.add(WaystoneVisibility.GLOBAL); - } - } - return result; - } - public boolean canEdit() { return canEdit; } diff --git a/common/src/main/java/net/blay09/mods/waystones/network/message/EditWaystoneMessage.java b/common/src/main/java/net/blay09/mods/waystones/network/message/EditWaystoneMessage.java index 6fa244f5..0fcff42a 100644 --- a/common/src/main/java/net/blay09/mods/waystones/network/message/EditWaystoneMessage.java +++ b/common/src/main/java/net/blay09/mods/waystones/network/message/EditWaystoneMessage.java @@ -4,7 +4,6 @@ import net.blay09.mods.waystones.api.WaystoneVisibility; import net.blay09.mods.waystones.config.WaystonesConfig; import net.blay09.mods.waystones.core.*; -import net.blay09.mods.waystones.menu.WaystoneMenu; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; @@ -49,14 +48,11 @@ public static void handle(ServerPlayer player, EditWaystoneMessage message) { return; } - if (!(player.containerMenu instanceof WaystoneMenu settingsMenu)) { - return; - } - var visibility = message.visibility; - if (!settingsMenu.getVisibilityOptions().contains(message.visibility)) { + final var visibilityOptions = WaystoneVisibilities.getVisibilityOptions(player, waystone); + if (!visibilityOptions.contains(message.visibility)) { Waystones.logger.warn("{} tried to edit a waystone with an invalid visibility {}", player.getName().getString(), message.visibility); - visibility = settingsMenu.getVisibilityOptions().get(0); + visibility = visibilityOptions.getFirst(); } if (!WaystonePermissionManager.isAllowedVisibility(visibility) && !WaystonePermissionManager.skipsPermissions(player)) { diff --git a/forge/build.gradle b/forge/build.gradle index 8d1b747f..6bf9f78e 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -1,6 +1,6 @@ plugins { id 'multiloader-loader' - id 'net.minecraftforge.gradle' version '[6.0,6.2)' + id 'net.minecraftforge.gradle' version '[6.0.25,6.2)' id 'org.spongepowered.mixin' id 'net.darkhax.curseforgegradle' id "com.modrinth.minotaur"