diff --git a/gradle.properties b/gradle.properties index 89fda7e2..27e93648 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ mod_id = waystones mod_name = Waystones mod_main=Waystones description=Teleport back to activated waystones. For Survival, Adventure or Servers. -version = 16.0.2 +version = 16.0.4 group = net.blay09.mods homepage=https://mods.twelveiterations.com/mc/waystones sources=https://github.com/TwelveIterationMods/Waystones diff --git a/shared/src/main/java/net/blay09/mods/waystones/api/WaystoneVisibility.java b/shared/src/main/java/net/blay09/mods/waystones/api/WaystoneVisibility.java index a79cd7dc..67335217 100644 --- a/shared/src/main/java/net/blay09/mods/waystones/api/WaystoneVisibility.java +++ b/shared/src/main/java/net/blay09/mods/waystones/api/WaystoneVisibility.java @@ -1,7 +1,69 @@ package net.blay09.mods.waystones.api; +import net.minecraft.resources.ResourceLocation; + public enum WaystoneVisibility { ACTIVATION, GLOBAL, - SHARD_ONLY + SHARD_ONLY, + SHARESTONE, + WHITE_SHARESTONE, + ORANGE_SHARESTONE, + MAGENTA_SHARESTONE, + LIGHT_BLUE_SHARESTONE, + YELLOW_SHARESTONE, + LIME_SHARESTONE, + PINK_SHARESTONE, + GRAY_SHARESTONE, + LIGHT_GRAY_SHARESTONE, + CYAN_SHARESTONE, + PURPLE_SHARESTONE, + BLUE_SHARESTONE, + BROWN_SHARESTONE, + GREEN_SHARESTONE, + RED_SHARESTONE, + BLACK_SHARESTONE; + + public static WaystoneVisibility fromWaystoneType(ResourceLocation waystoneType) { + if (WaystoneTypes.isSharestone(waystoneType)) { + return switch (waystoneType.getPath()) { + case "white_sharestone" -> WaystoneVisibility.WHITE_SHARESTONE; + case "orange_sharestone" -> WaystoneVisibility.ORANGE_SHARESTONE; + case "magenta_sharestone" -> WaystoneVisibility.MAGENTA_SHARESTONE; + case "light_blue_sharestone" -> WaystoneVisibility.LIGHT_BLUE_SHARESTONE; + case "yellow_sharestone" -> WaystoneVisibility.YELLOW_SHARESTONE; + case "lime_sharestone" -> WaystoneVisibility.LIME_SHARESTONE; + case "pink_sharestone" -> WaystoneVisibility.PINK_SHARESTONE; + case "gray_sharestone" -> WaystoneVisibility.GRAY_SHARESTONE; + case "light_gray_sharestone" -> WaystoneVisibility.LIGHT_GRAY_SHARESTONE; + case "cyan_sharestone" -> WaystoneVisibility.CYAN_SHARESTONE; + case "purple_sharestone" -> WaystoneVisibility.PURPLE_SHARESTONE; + case "blue_sharestone" -> WaystoneVisibility.BLUE_SHARESTONE; + case "brown_sharestone" -> WaystoneVisibility.BROWN_SHARESTONE; + case "green_sharestone" -> WaystoneVisibility.GREEN_SHARESTONE; + case "red_sharestone" -> WaystoneVisibility.RED_SHARESTONE; + case "black_sharestone" -> WaystoneVisibility.BLACK_SHARESTONE; + default -> WaystoneVisibility.SHARESTONE; + }; + } else if (waystoneType.equals(WaystoneTypes.WARP_PLATE)) { + return WaystoneVisibility.SHARD_ONLY; + } else if (waystoneType.equals(WaystoneTypes.LANDING_STONE)) { + return WaystoneVisibility.SHARD_ONLY; + } else { + return WaystoneVisibility.ACTIVATION; + } + } + + public int getIconX() { + return 176; + } + + public int getIconY() { + return switch (this) { + case ACTIVATION -> 32; + case GLOBAL -> 50; + case SHARD_ONLY -> 68; + default -> 86; + }; + } } diff --git a/shared/src/main/java/net/blay09/mods/waystones/client/gui/screen/WaystoneScreen.java b/shared/src/main/java/net/blay09/mods/waystones/client/gui/screen/WaystoneScreen.java index d9712145..50fd8c1c 100644 --- a/shared/src/main/java/net/blay09/mods/waystones/client/gui/screen/WaystoneScreen.java +++ b/shared/src/main/java/net/blay09/mods/waystones/client/gui/screen/WaystoneScreen.java @@ -3,6 +3,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.blay09.mods.balm.api.Balm; import net.blay09.mods.waystones.Waystones; +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.menu.WaystoneMenu; @@ -16,6 +17,7 @@ import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Inventory; import org.lwjgl.glfw.GLFW; diff --git a/shared/src/main/java/net/blay09/mods/waystones/client/gui/widget/WaystoneVisbilityButton.java b/shared/src/main/java/net/blay09/mods/waystones/client/gui/widget/WaystoneVisbilityButton.java index d66d4a2a..094270b3 100644 --- a/shared/src/main/java/net/blay09/mods/waystones/client/gui/widget/WaystoneVisbilityButton.java +++ b/shared/src/main/java/net/blay09/mods/waystones/client/gui/widget/WaystoneVisbilityButton.java @@ -8,6 +8,7 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.resources.ResourceLocation; +import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.List; @@ -32,7 +33,7 @@ public WaystoneVisbilityButton(int x, int y, WaystoneVisibility visibility, List @Override public void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float partial) { guiGraphics.blit(WAYSTONE_GUI_TEXTURES, getX(), getY(), 176 + (isHovered ? 18 : 0), 14, 18, 18); - guiGraphics.blit(WAYSTONE_GUI_TEXTURES, getX(), getY(), 176, 32 + (visibility.ordinal() * 18), 18, 18); + guiGraphics.blit(WAYSTONE_GUI_TEXTURES, getX(), getY(), visibility.getIconX(), visibility.getIconY(), 18, 18); } @Override diff --git a/shared/src/main/java/net/blay09/mods/waystones/core/WaystoneImpl.java b/shared/src/main/java/net/blay09/mods/waystones/core/WaystoneImpl.java index 050f076e..9d762166 100644 --- a/shared/src/main/java/net/blay09/mods/waystones/core/WaystoneImpl.java +++ b/shared/src/main/java/net/blay09/mods/waystones/core/WaystoneImpl.java @@ -45,16 +45,7 @@ public WaystoneImpl(ResourceLocation waystoneType, UUID waystoneUid, ResourceKey this.pos = pos; this.origin = origin; this.ownerUid = ownerUid; - - if (WaystoneTypes.isSharestone(waystoneType)) { - this.visibility = WaystoneVisibility.GLOBAL; - } else if (waystoneType.equals(WaystoneTypes.WARP_PLATE)) { - this.visibility = WaystoneVisibility.SHARD_ONLY; - } else if (waystoneType.equals(WaystoneTypes.LANDING_STONE)) { - this.visibility = WaystoneVisibility.SHARD_ONLY; - } else { - this.visibility = WaystoneVisibility.ACTIVATION; - } + this.visibility = WaystoneVisibility.fromWaystoneType(waystoneType); } @Override diff --git a/shared/src/main/java/net/blay09/mods/waystones/core/WaystonePermissionManager.java b/shared/src/main/java/net/blay09/mods/waystones/core/WaystonePermissionManager.java index 7b021220..be078ede 100644 --- a/shared/src/main/java/net/blay09/mods/waystones/core/WaystonePermissionManager.java +++ b/shared/src/main/java/net/blay09/mods/waystones/core/WaystonePermissionManager.java @@ -15,7 +15,23 @@ public class WaystonePermissionManager { - private static final Set DEFAULT_VISIBILITIES = Set.of(WaystoneVisibility.SHARD_ONLY, WaystoneVisibility.ACTIVATION); + private static final Set DEFAULT_VISIBILITIES = Set.of(WaystoneVisibility.SHARD_ONLY, WaystoneVisibility.ACTIVATION, + WaystoneVisibility.WHITE_SHARESTONE, + WaystoneVisibility.ORANGE_SHARESTONE, + WaystoneVisibility.MAGENTA_SHARESTONE, + WaystoneVisibility.LIGHT_BLUE_SHARESTONE, + WaystoneVisibility.YELLOW_SHARESTONE, + WaystoneVisibility.LIME_SHARESTONE, + WaystoneVisibility.PINK_SHARESTONE, + WaystoneVisibility.GRAY_SHARESTONE, + WaystoneVisibility.LIGHT_GRAY_SHARESTONE, + WaystoneVisibility.CYAN_SHARESTONE, + WaystoneVisibility.PURPLE_SHARESTONE, + WaystoneVisibility.BLUE_SHARESTONE, + WaystoneVisibility.BROWN_SHARESTONE, + WaystoneVisibility.GREEN_SHARESTONE, + WaystoneVisibility.RED_SHARESTONE, + WaystoneVisibility.BLACK_SHARESTONE); public static Optional mayEditWaystone(Player player, Level world, Waystone waystone) { if (skipsPermissions(player)) { diff --git a/shared/src/main/java/net/blay09/mods/waystones/menu/WaystoneMenu.java b/shared/src/main/java/net/blay09/mods/waystones/menu/WaystoneMenu.java index c4d7ac8c..5b801695 100644 --- a/shared/src/main/java/net/blay09/mods/waystones/menu/WaystoneMenu.java +++ b/shared/src/main/java/net/blay09/mods/waystones/menu/WaystoneMenu.java @@ -104,20 +104,15 @@ public Waystone getWaystone() { } public List getVisibilityOptions() { - if (WaystoneTypes.isSharestone(waystone.getWaystoneType())) { - return List.of(WaystoneVisibility.GLOBAL); - } else if (waystone.getWaystoneType().equals(WaystoneTypes.WARP_PLATE)) { - return List.of(WaystoneVisibility.SHARD_ONLY); - } else if (waystone.getWaystoneType().equals(WaystoneTypes.LANDING_STONE)) { - return List.of(WaystoneVisibility.SHARD_ONLY); - } else { - final var result = new ArrayList(); - result.add(WaystoneVisibility.ACTIVATION); + 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; } + return result; } public boolean canEdit() { diff --git a/shared/src/main/resources/assets/waystones/lang/en_us.json b/shared/src/main/resources/assets/waystones/lang/en_us.json index 5644fa91..32c94281 100644 --- a/shared/src/main/resources/assets/waystones/lang/en_us.json +++ b/shared/src/main/resources/assets/waystones/lang/en_us.json @@ -102,6 +102,23 @@ "tooltip.waystones.visibility.activation": "On Activation", "tooltip.waystones.visibility.global": "Global", "tooltip.waystones.visibility.shard_only": "Shards only", + "tooltip.waystones.visibility.white_sharestone": "White Sharestones", + "tooltip.waystones.visibility.orange_sharestone": "Orange Sharestones", + "tooltip.waystones.visibility.magenta_sharestone": "Magenta Sharestones", + "tooltip.waystones.visibility.light_blue_sharestone": "Light Blue Sharestones", + "tooltip.waystones.visibility.yellow_sharestone": "Yellow Sharestones", + "tooltip.waystones.visibility.lime_sharestone": "Lime Sharestones", + "tooltip.waystones.visibility.pink_sharestone": "Pink Sharestones", + "tooltip.waystones.visibility.gray_sharestone": "Gray Sharestones", + "tooltip.waystones.visibility.light_gray_sharestone": "Light Gray Sharestones", + "tooltip.waystones.visibility.cyan_sharestone": "Cyan Sharestones", + "tooltip.waystones.visibility.purple_sharestone": "Purple Sharestones", + "tooltip.waystones.visibility.blue_sharestone": "Blue Sharestones", + "tooltip.waystones.visibility.brown_sharestone": "Brown Sharestones", + "tooltip.waystones.visibility.green_sharestone": "Green Sharestones", + "tooltip.waystones.visibility.red_sharestone": "Red Sharestones", + "tooltip.waystones.visibility.black_sharestone": "Black Sharestones", + "tooltip.waystones.network": "Part of the %s network.", "tooltip.waystones.edit_restricted": "This waystone cannot be edited.", "stat.waystones.waystone_activated": "Waystones Activated", "waystones.untitled_waystone": "Untitled Waystone", diff --git a/shared/src/main/resources/assets/waystones/lang/es_mx.json b/shared/src/main/resources/assets/waystones/lang/es_mx.json index e99b3fac..52b18abd 100644 --- a/shared/src/main/resources/assets/waystones/lang/es_mx.json +++ b/shared/src/main/resources/assets/waystones/lang/es_mx.json @@ -143,5 +143,55 @@ "config.waystones.compatibility.displayWaystonesOnJourneyMap": "Mostrar Waystones en JourneyMap", "waystones.iconCredits": "Iconos de JoeCreates (CC-BY-SA 3.0)", "waystones.map.untitled_waystone": "Waystones sin título", - "config.jade.plugin_waystones.waystone": "Waystones" + "config.jade.plugin_waystones.waystone": "Waystones", + "item.waystones.crumbling_attuned_shard": "Fragmento Sintonizado Fragil", + "tooltip.waystones.attuned_shard.attunement_crumbling": "Sera consumido por completo la proxima vez que te telestrasportes.", + "config.waystones.xpCost.inverseXpCost.tooltip": "Establecer en true si el costo de experiencia debe invertirse, lo que significa que cuanto más corta sea la distancia, más caro será. Se puede utilizar para fomentar otros métodos de viaje a corta distancia.", + "config.waystones.xpCost.blocksPerXpLevel.tooltip": "La cantidad de bloques por requisito de nivel de experiencia. Si se establece en 500, el costo base de experiencia para viajar 1000 bloques será de 2 niveles.", + "config.waystones.xpCost.minimumBaseXpCost.tooltip": "El costo mínimo de experiencia base (puede ser superado por multiplicadores definidos a continuación).", + "config.waystones.xpCost.maximumBaseXpCost.tooltip": "El costo máximo de experiencia base (puede ser superado por multiplicadores definidos a continuación), establecer en 0 para deshabilitar todos los costos de experiencia basados en la distancia.", + "config.waystones.xpCost.xpCostPerLeashed.tooltip": "Cuánta experiencia se necesita por animal con correa para viajar contigo.", + "config.waystones.xpCost.dimensionalWarpXpCost.tooltip": "El costo base de niveles de experiencia al viajar entre dimensiones. Ignora la distancia en bloques.", + "config.waystones.xpCost.globalWaystoneXpCostMultiplier.tooltip": "El multiplicador aplicado al tiempo de reutilización al teletransportarse a una waystone global mediante el botón del inventario o la piedra de teletransporte.", + "config.waystones.xpCost.warpStoneXpCostMultiplier.tooltip": "El multiplicador aplicado al costo base de experiencia al teletransportarse usando un objeto Piedra de Teletransporte (no el bloque Waystone, Konstantin)", + "config.waystones.xpCost.sharestoneXpCostMultiplier.tooltip": "El multiplicador aplicado al costo base de experiencia al teletransportarse de una Sharestone a otra.", + "config.waystones.xpCost.waystoneXpCostMultiplier.tooltip": "El multiplicador aplicado al costo base de experiencia al teletransportarse de una Waystone a otra.", + "config.waystones.xpCost.portstoneXpCostMultiplier.tooltip": "El multiplicador aplicado al costo base de experiencia al teletransportarse desde una Portstone.", + "config.waystones.xpCost.warpPlateXpCostMultiplier.tooltip": "El multiplicador aplicado al costo base de experiencia al teletransportarse de una placa de teletransporte a otra.", + "config.waystones.xpCost.inventoryButtonXpCostMultiplier.tooltip": "El multiplicador aplicado al costo base de experiencia al teletransportarse a través del botón del inventario.", + "config.waystones.restrictions.restrictToCreative.tooltip": "Si está habilitado, solo los jugadores en modo creativo pueden colocar, editar o romper waystones. Esto NO deshabilita la receta de fabricación.", + "config.waystones.restrictions.restrictRenameToOwner.tooltip": "Si está habilitado, solo el propietario de una waystone (quien la colocó) puede cambiarle el nombre.", + "config.waystones.restrictions.generatedWaystonesUnbreakable.tooltip": "Si está habilitado, las waystones generadas en la generación del mundo no se pueden romper.", + "config.waystones.restrictions.transportLeashed.tooltip": "Si está habilitado, las criaturas con correa serán teletransportadas contigo.", + "config.waystones.restrictions.transportLeashedDimensional.tooltip": "Si se debe llevar a las criaturas con correa contigo al teletransportarte entre dimensiones.", + "config.waystones.restrictions.leashedDenyList.tooltip": "Lista de criaturas con correa que no se pueden llevar contigo al teletransportarte.", + "config.waystones.restrictions.dimensionalWarp.tooltip": "Establecer en 'ALLOW' para permitir la teletransportación dimensional en general. Establecer en 'GLOBAL_ONLY' para restringir la teletransportación dimensional a waystones globales. Establecer en 'DENY' para no permitir ninguna teletransportación dimensional.", + "config.waystones.restrictions.dimensionalWarpAllowList.tooltip": "Lista de dimensiones desde las cuales y hacia las cuales los jugadores pueden teletransportarse entre dimensiones. Si se deja vacío, se permiten todas las dimensiones excepto las que están en dimensionalWarpDenyList.", + "config.waystones.restrictions.dimensionalWarpDenyList.tooltip": "Lista de dimensiones desde las cuales y hacia las cuales los jugadores no pueden teletransportarse entre dimensiones. Solo se utiliza si dimensionalWarpAllowList está vacío.", + "config.waystones.restrictions.allowWaystoneToWaystoneTeleport.tooltip": "Establecer en true si los jugadores deben poder teletransportarse entre waystones simplemente haciendo clic derecho en una waystone.", + "config.waystones.restrictions.globalWaystoneSetupRequiresCreativeMode.tooltip": "Establecer en false para permitir que los jugadores no creativos activen waystones de forma global para todos los jugadores.", + "config.waystones.cooldowns.globalWaystoneCooldownMultiplier.tooltip": "El multiplicador aplicado al tiempo de reutilización al teletransportarse a una waystone global mediante el botón del inventario o la piedra de teletransporte.", + "config.waystones.cooldowns.warpStoneCooldown.tooltip": "El tiempo de reutilización entre usos de la piedra de teletransporte en segundos. Esto está vinculado al jugador, no al objeto, por lo que varias piedras de teletransporte comparten el mismo tiempo de reutilización.", + "config.waystones.cooldowns.warpStoneUseTime.tooltip": "El tiempo en ticks que se tarda en usar una piedra de teletransporte. Este es el tiempo de carga al mantener presionado el clic derecho.", + "config.waystones.cooldowns.scrollUseTime.tooltip": "El tiempo en ticks que se tarda en usar un pergamino. Este es el tiempo de carga al mantener presionado el clic derecho.", + "config.waystones.cooldowns.warpPlateUseTime": "Tiempo de carga de la placa de teletransporte", + "config.waystones.cooldowns.warpPlateUseTime.tooltip": "El tiempo en ticks que se tarda en usar una placa de teletransporte. Este es el tiempo que el jugador debe permanecer encima.", + "config.waystones.cooldowns.inventoryButtonCooldown.tooltip": "El tiempo de reutilización entre usos del botón del inventario en segundos.", + "config.waystones.inventoryButton.inventoryButton.tooltip": "Establecer en 'NONE' para no tener un botón del inventario. Establecer en 'NEAREST' para un botón del inventario que teletransporta a la waystone más cercana. Establecer en 'ANY' para un botón del inventario que abre el menú de selección de waystones. Establecer en el nombre de una waystone para un botón del inventario que teletransporta a una waystone específica.", + "config.waystones.inventoryButton.warpButtonX.tooltip": "La posición x del botón de teletransporte en el inventario.", + "config.waystones.inventoryButton.warpButtonY.tooltip": "La posición y del botón de teletransporte en el inventario.", + "config.waystones.inventoryButton.creativeWarpButtonX.tooltip": "La posición x del botón de teletransporte en el menú creativo.", + "config.waystones.inventoryButton.creativeWarpButtonY.tooltip": "La posición y del botón de teletransporte en el menú creativo.", + "config.waystones.worldGen.worldGenStyle.tooltip": "Establecer en 'DEFAULT' para generar solo waystones con la textura normal. Establecer en 'MOSSY' o 'SANDY' para generar todas las waystones con esa variante. Establecer en 'BIOME' para que el estilo dependa del bioma en el que se genere.", + "config.waystones.worldGen.frequency.tooltip": "Distancia aproximada en fragmentos entre waystones generadas libremente en la generación del mundo. Establecer en 0 para deshabilitar la generación.", + "config.waystones.worldGen.dimensionAllowList.tooltip": "Lista de dimensiones en las que se permiten generar waystones a través de la generación del mundo. Si se deja vacío, se utilizan todas las dimensiones excepto las que están en worldGenDimensionDenyList.", + "config.waystones.worldGen.dimensionDenyList.tooltip": "Lista de dimensiones en las que no se permiten generar waystones a través de la generación del mundo. Solo se utiliza si worldGenDimensionAllowList está vacío.", + "config.waystones.worldGen.nameGenerationMode.tooltip": "Establecer en 'PRESET_FIRST' para usar primero los nombres de la lista de nombres personalizados. Establecer en 'PRESET_ONLY' para usar solo esos nombres personalizados. Establecer en 'MIXED' para que algunas waystones usen nombres personalizados y otras nombres aleatorios.", + "config.waystones.worldGen.customWaystoneNames.tooltip": "Estos nombres se utilizarán para el modo de generación de nombres PRESET. Consulta la opción nameGenerationMode para obtener más información.", + "config.waystones.worldGen.spawnInVillages.tooltip": "Establecer en true si se deben agregar waystones a la generación de aldeas. Es posible que algunas aldeas aún se generen sin waystones.", + "config.waystones.worldGen.forceSpawnInVillages.tooltip": "Asegura que prácticamente todas las aldeas tengan una waystone, generándola lo antes posible. Además, esto significa que las waystones generalmente se ubicarán en el centro de la aldea.", + "config.waystones.client.disableTextGlow.tooltip": "Si está habilitado, la superposición de texto en las waystones ya no se mostrará siempre a pleno brillo.", + "config.waystones.compatibility.displayWaystonesOnJourneyMap.tooltip": "Si está habilitado, se crearán puntos de referencia de JourneyMap para cada waystone activada.", + "config.waystones.compatibility.preferJourneyMapIntegration": "Preferir el mod 'JourneyMap Integration'", + "config.waystones.compatibility.preferJourneyMapIntegration.tooltip": "Si está habilitado, los puntos de referencia de JourneyMap solo se crearán si no está instalado el mod 'JourneyMap Integration'." } diff --git a/shared/src/main/resources/assets/waystones/textures/gui/menu/waystone.png b/shared/src/main/resources/assets/waystones/textures/gui/menu/waystone.png index 6122c728..3c3062bc 100644 Binary files a/shared/src/main/resources/assets/waystones/textures/gui/menu/waystone.png and b/shared/src/main/resources/assets/waystones/textures/gui/menu/waystone.png differ