mirror of
				https://github.com/SquidDev-CC/CC-Tweaked
				synced 2025-10-31 05:33:00 +00:00 
			
		
		
		
	Use components for upgrade adjectives
This makes quick-and-dirty datapacks a little easier, as you can now use a hard-coded string rather than adding a language key.
This commit is contained in:
		| @@ -4,6 +4,7 @@ | |||||||
| 
 | 
 | ||||||
| package dan200.computercraft.api.pocket; | package dan200.computercraft.api.pocket; | ||||||
| 
 | 
 | ||||||
|  | import net.minecraft.network.chat.Component; | ||||||
| import net.minecraft.world.item.ItemStack; | import net.minecraft.world.item.ItemStack; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @@ -13,16 +14,20 @@ import net.minecraft.world.item.ItemStack; | |||||||
|  * One does not have to use this, but it does provide a convenient template. |  * One does not have to use this, but it does provide a convenient template. | ||||||
|  */ |  */ | ||||||
| public abstract class AbstractPocketUpgrade implements IPocketUpgrade { | public abstract class AbstractPocketUpgrade implements IPocketUpgrade { | ||||||
|     private final String adjective; |     private final Component adjective; | ||||||
|     private final ItemStack stack; |     private final ItemStack stack; | ||||||
| 
 | 
 | ||||||
|     protected AbstractPocketUpgrade(String adjective, ItemStack stack) { |     protected AbstractPocketUpgrade(Component adjective, ItemStack stack) { | ||||||
|         this.adjective = adjective; |         this.adjective = adjective; | ||||||
|         this.stack = stack; |         this.stack = stack; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     protected AbstractPocketUpgrade(String adjective, ItemStack stack) { | ||||||
|  |         this(Component.translatable(adjective), stack); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     @Override |     @Override | ||||||
|     public final String getUnlocalisedAdjective() { |     public final Component getAdjective() { | ||||||
|         return adjective; |         return adjective; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|   | |||||||
| @@ -4,6 +4,7 @@ | |||||||
| 
 | 
 | ||||||
| package dan200.computercraft.api.turtle; | package dan200.computercraft.api.turtle; | ||||||
| 
 | 
 | ||||||
|  | import net.minecraft.network.chat.Component; | ||||||
| import net.minecraft.world.item.ItemStack; | import net.minecraft.world.item.ItemStack; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @@ -14,17 +15,21 @@ import net.minecraft.world.item.ItemStack; | |||||||
|  */ |  */ | ||||||
| public abstract class AbstractTurtleUpgrade implements ITurtleUpgrade { | public abstract class AbstractTurtleUpgrade implements ITurtleUpgrade { | ||||||
|     private final TurtleUpgradeType type; |     private final TurtleUpgradeType type; | ||||||
|     private final String adjective; |     private final Component adjective; | ||||||
|     private final ItemStack stack; |     private final ItemStack stack; | ||||||
| 
 | 
 | ||||||
|     protected AbstractTurtleUpgrade(TurtleUpgradeType type, String adjective, ItemStack stack) { |     protected AbstractTurtleUpgrade(TurtleUpgradeType type, Component adjective, ItemStack stack) { | ||||||
|         this.type = type; |         this.type = type; | ||||||
|         this.adjective = adjective; |         this.adjective = adjective; | ||||||
|         this.stack = stack; |         this.stack = stack; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     protected AbstractTurtleUpgrade(TurtleUpgradeType type, String adjective, ItemStack stack) { | ||||||
|  |         this(type, Component.translatable(adjective), stack); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     @Override |     @Override | ||||||
|     public final String getUnlocalisedAdjective() { |     public final Component getAdjective() { | ||||||
|         return adjective; |         return adjective; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|   | |||||||
| @@ -13,6 +13,7 @@ import dan200.computercraft.impl.upgrades.TurtleToolSpec; | |||||||
| import net.minecraft.core.component.DataComponents; | import net.minecraft.core.component.DataComponents; | ||||||
| import net.minecraft.data.DataGenerator; | import net.minecraft.data.DataGenerator; | ||||||
| import net.minecraft.data.PackOutput; | import net.minecraft.data.PackOutput; | ||||||
|  | import net.minecraft.network.chat.Component; | ||||||
| import net.minecraft.resources.ResourceLocation; | import net.minecraft.resources.ResourceLocation; | ||||||
| import net.minecraft.tags.TagKey; | import net.minecraft.tags.TagKey; | ||||||
| import net.minecraft.world.entity.ai.attributes.Attributes; | import net.minecraft.world.entity.ai.attributes.Attributes; | ||||||
| @@ -58,7 +59,7 @@ public abstract class TurtleUpgradeDataProvider extends UpgradeDataProvider<ITur | |||||||
|     public final class ToolBuilder { |     public final class ToolBuilder { | ||||||
|         private final ResourceLocation id; |         private final ResourceLocation id; | ||||||
|         private final Item toolItem; |         private final Item toolItem; | ||||||
|         private String adjective; |         private Component adjective; | ||||||
|         private @Nullable Item craftingItem; |         private @Nullable Item craftingItem; | ||||||
|         private float damageMultiplier = TurtleToolSpec.DEFAULT_DAMAGE_MULTIPLIER; |         private float damageMultiplier = TurtleToolSpec.DEFAULT_DAMAGE_MULTIPLIER; | ||||||
|         private @Nullable TagKey<Block> breakable; |         private @Nullable TagKey<Block> breakable; | ||||||
| @@ -67,7 +68,7 @@ public abstract class TurtleUpgradeDataProvider extends UpgradeDataProvider<ITur | |||||||
| 
 | 
 | ||||||
|         ToolBuilder(ResourceLocation id, Item toolItem) { |         ToolBuilder(ResourceLocation id, Item toolItem) { | ||||||
|             this.id = id; |             this.id = id; | ||||||
|             adjective = UpgradeBase.getDefaultAdjective(id); |             adjective = Component.translatable(UpgradeBase.getDefaultAdjective(id)); | ||||||
|             this.toolItem = toolItem; |             this.toolItem = toolItem; | ||||||
|             craftingItem = null; |             craftingItem = null; | ||||||
|         } |         } | ||||||
| @@ -78,7 +79,7 @@ public abstract class TurtleUpgradeDataProvider extends UpgradeDataProvider<ITur | |||||||
|          * @param adjective The new adjective to use. |          * @param adjective The new adjective to use. | ||||||
|          * @return The tool builder, for further use. |          * @return The tool builder, for further use. | ||||||
|          */ |          */ | ||||||
|         public ToolBuilder adjective(String adjective) { |         public ToolBuilder adjective(Component adjective) { | ||||||
|             this.adjective = adjective; |             this.adjective = adjective; | ||||||
|             return this; |             return this; | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -11,6 +11,7 @@ import dan200.computercraft.api.turtle.ITurtleUpgrade; | |||||||
| import dan200.computercraft.api.turtle.TurtleSide; | import dan200.computercraft.api.turtle.TurtleSide; | ||||||
| import net.minecraft.Util; | import net.minecraft.Util; | ||||||
| import net.minecraft.core.component.DataComponentPatch; | import net.minecraft.core.component.DataComponentPatch; | ||||||
|  | import net.minecraft.network.chat.Component; | ||||||
| import net.minecraft.resources.ResourceLocation; | import net.minecraft.resources.ResourceLocation; | ||||||
| import net.minecraft.world.item.ItemStack; | import net.minecraft.world.item.ItemStack; | ||||||
| 
 | 
 | ||||||
| @@ -26,13 +27,16 @@ public interface UpgradeBase { | |||||||
|     UpgradeType<?> getType(); |     UpgradeType<?> getType(); | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * Return an unlocalised string to describe this type of computer in item names. |      * A description of this upgrade for use in item names. | ||||||
|  |      * <p> | ||||||
|  |      * This should typically be a {@linkplain Component#translatable(String) translation key}, rather than a hard coded | ||||||
|  |      * string. | ||||||
|      * <p> |      * <p> | ||||||
|      * Examples of built-in adjectives are "Wireless", "Mining" and "Crafty". |      * Examples of built-in adjectives are "Wireless", "Mining" and "Crafty". | ||||||
|      * |      * | ||||||
|      * @return The localisation key for this upgrade's adjective. |      * @return The text component for this upgrade's adjective. | ||||||
|      */ |      */ | ||||||
|     String getUnlocalisedAdjective(); |     Component getAdjective(); | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * Return an item stack representing the type of item that a computer must be crafted |      * Return an item stack representing the type of item that a computer must be crafted | ||||||
| @@ -107,7 +111,7 @@ public interface UpgradeBase { | |||||||
|      * |      * | ||||||
|      * @param id The upgrade ID. |      * @param id The upgrade ID. | ||||||
|      * @return The  generated adjective. |      * @return The  generated adjective. | ||||||
|      * @see #getUnlocalisedAdjective() |      * @see #getAdjective() | ||||||
|      */ |      */ | ||||||
|     static String getDefaultAdjective(ResourceLocation id) { |     static String getDefaultAdjective(ResourceLocation id) { | ||||||
|         return Util.makeDescriptionId("upgrade", id) + ".adjective"; |         return Util.makeDescriptionId("upgrade", id) + ".adjective"; | ||||||
|   | |||||||
| @@ -10,6 +10,8 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; | |||||||
| import dan200.computercraft.api.turtle.TurtleToolDurability; | import dan200.computercraft.api.turtle.TurtleToolDurability; | ||||||
| import net.minecraft.core.registries.BuiltInRegistries; | import net.minecraft.core.registries.BuiltInRegistries; | ||||||
| import net.minecraft.core.registries.Registries; | import net.minecraft.core.registries.Registries; | ||||||
|  | import net.minecraft.network.chat.Component; | ||||||
|  | import net.minecraft.network.chat.ComponentSerialization; | ||||||
| import net.minecraft.tags.TagKey; | import net.minecraft.tags.TagKey; | ||||||
| import net.minecraft.world.item.Item; | import net.minecraft.world.item.Item; | ||||||
| import net.minecraft.world.level.block.Block; | import net.minecraft.world.level.block.Block; | ||||||
| @@ -28,7 +30,7 @@ import java.util.Optional; | |||||||
|  * @param breakable         The items breakable by this tool. |  * @param breakable         The items breakable by this tool. | ||||||
|  */ |  */ | ||||||
| public record TurtleToolSpec( | public record TurtleToolSpec( | ||||||
|     String adjective, |     Component adjective, | ||||||
|     Optional<Item> craftItem, |     Optional<Item> craftItem, | ||||||
|     Item toolItem, |     Item toolItem, | ||||||
|     float damageMultiplier, |     float damageMultiplier, | ||||||
| @@ -39,7 +41,7 @@ public record TurtleToolSpec( | |||||||
|     public static final float DEFAULT_DAMAGE_MULTIPLIER = 3.0f; |     public static final float DEFAULT_DAMAGE_MULTIPLIER = 3.0f; | ||||||
| 
 | 
 | ||||||
|     public static final MapCodec<TurtleToolSpec> CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( |     public static final MapCodec<TurtleToolSpec> CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( | ||||||
|         Codec.STRING.fieldOf("adjective").forGetter(TurtleToolSpec::adjective), |         ComponentSerialization.CODEC.fieldOf("adjective").forGetter(TurtleToolSpec::adjective), | ||||||
|         BuiltInRegistries.ITEM.byNameCodec().optionalFieldOf("craftingItem").forGetter(TurtleToolSpec::craftItem), |         BuiltInRegistries.ITEM.byNameCodec().optionalFieldOf("craftingItem").forGetter(TurtleToolSpec::craftItem), | ||||||
|         BuiltInRegistries.ITEM.byNameCodec().fieldOf("item").forGetter(TurtleToolSpec::toolItem), |         BuiltInRegistries.ITEM.byNameCodec().fieldOf("item").forGetter(TurtleToolSpec::toolItem), | ||||||
|         Codec.FLOAT.optionalFieldOf("damageMultiplier", DEFAULT_DAMAGE_MULTIPLIER).forGetter(TurtleToolSpec::damageMultiplier), |         Codec.FLOAT.optionalFieldOf("damageMultiplier", DEFAULT_DAMAGE_MULTIPLIER).forGetter(TurtleToolSpec::damageMultiplier), | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "type": "computercraft:tool", |   "type": "computercraft:tool", | ||||||
|   "adjective": "upgrade.minecraft.diamond_axe.adjective", |   "adjective": {"translate": "upgrade.minecraft.diamond_axe.adjective"}, | ||||||
|   "damageMultiplier": 6.0, |   "damageMultiplier": 6.0, | ||||||
|   "item": "minecraft:diamond_axe" |   "item": "minecraft:diamond_axe" | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "type": "computercraft:tool", |   "type": "computercraft:tool", | ||||||
|   "adjective": "upgrade.minecraft.diamond_hoe.adjective", |   "adjective": {"translate": "upgrade.minecraft.diamond_hoe.adjective"}, | ||||||
|   "breakable": "computercraft:turtle_hoe_harvestable", |   "breakable": "computercraft:turtle_hoe_harvestable", | ||||||
|   "item": "minecraft:diamond_hoe" |   "item": "minecraft:diamond_hoe" | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| { | { | ||||||
|   "type": "computercraft:tool", |   "type": "computercraft:tool", | ||||||
|   "adjective": "upgrade.minecraft.diamond_pickaxe.adjective", |   "adjective": {"translate": "upgrade.minecraft.diamond_pickaxe.adjective"}, | ||||||
|   "item": "minecraft:diamond_pickaxe" |   "item": "minecraft:diamond_pickaxe" | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "type": "computercraft:tool", |   "type": "computercraft:tool", | ||||||
|   "adjective": "upgrade.minecraft.diamond_shovel.adjective", |   "adjective": {"translate": "upgrade.minecraft.diamond_shovel.adjective"}, | ||||||
|   "breakable": "computercraft:turtle_shovel_harvestable", |   "breakable": "computercraft:turtle_shovel_harvestable", | ||||||
|   "item": "minecraft:diamond_shovel" |   "item": "minecraft:diamond_shovel" | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "type": "computercraft:tool", |   "type": "computercraft:tool", | ||||||
|   "adjective": "upgrade.minecraft.diamond_sword.adjective", |   "adjective": {"translate": "upgrade.minecraft.diamond_sword.adjective"}, | ||||||
|   "breakable": "computercraft:turtle_sword_harvestable", |   "breakable": "computercraft:turtle_sword_harvestable", | ||||||
|   "damageMultiplier": 9.0, |   "damageMultiplier": 9.0, | ||||||
|   "item": "minecraft:diamond_sword" |   "item": "minecraft:diamond_sword" | ||||||
|   | |||||||
| @@ -9,7 +9,6 @@ import dan200.computercraft.api.ComputerCraftAPI; | |||||||
| import dan200.computercraft.api.ComputerCraftTags; | import dan200.computercraft.api.ComputerCraftTags; | ||||||
| import dan200.computercraft.api.pocket.PocketUpgradeDataProvider; | import dan200.computercraft.api.pocket.PocketUpgradeDataProvider; | ||||||
| import dan200.computercraft.api.turtle.TurtleUpgradeDataProvider; | import dan200.computercraft.api.turtle.TurtleUpgradeDataProvider; | ||||||
| import dan200.computercraft.api.upgrades.UpgradeBase; |  | ||||||
| import dan200.computercraft.core.metrics.Metric; | import dan200.computercraft.core.metrics.Metric; | ||||||
| import dan200.computercraft.core.metrics.Metrics; | import dan200.computercraft.core.metrics.Metrics; | ||||||
| import dan200.computercraft.shared.ModRegistry; | import dan200.computercraft.shared.ModRegistry; | ||||||
| @@ -22,6 +21,8 @@ import net.minecraft.core.registries.BuiltInRegistries; | |||||||
| import net.minecraft.data.CachedOutput; | import net.minecraft.data.CachedOutput; | ||||||
| import net.minecraft.data.DataProvider; | import net.minecraft.data.DataProvider; | ||||||
| import net.minecraft.data.PackOutput; | import net.minecraft.data.PackOutput; | ||||||
|  | import net.minecraft.network.chat.Component; | ||||||
|  | import net.minecraft.network.chat.contents.TranslatableContents; | ||||||
| import net.minecraft.tags.TagKey; | import net.minecraft.tags.TagKey; | ||||||
| import net.minecraft.world.item.Item; | import net.minecraft.world.item.Item; | ||||||
| 
 | 
 | ||||||
| @@ -287,8 +288,8 @@ public final class LanguageProvider implements DataProvider { | |||||||
|             BuiltInRegistries.ITEM.holders() |             BuiltInRegistries.ITEM.holders() | ||||||
|                 .filter(x -> x.key().location().getNamespace().equals(ComputerCraftAPI.MOD_ID)) |                 .filter(x -> x.key().location().getNamespace().equals(ComputerCraftAPI.MOD_ID)) | ||||||
|                 .map(x -> x.value().getDescriptionId()), |                 .map(x -> x.value().getDescriptionId()), | ||||||
|             turtleUpgrades.getGeneratedUpgrades().values().stream().map(UpgradeBase::getUnlocalisedAdjective), |             turtleUpgrades.getGeneratedUpgrades().values().stream().flatMap(x -> getTranslationKeys(x.getAdjective())), | ||||||
|             pocketUpgrades.getGeneratedUpgrades().values().stream().map(UpgradeBase::getUnlocalisedAdjective), |             pocketUpgrades.getGeneratedUpgrades().values().stream().flatMap(x -> getTranslationKeys(x.getAdjective())), | ||||||
|             Metric.metrics().values().stream().map(x -> AggregatedMetric.TRANSLATION_PREFIX + x.name() + ".name"), |             Metric.metrics().values().stream().map(x -> AggregatedMetric.TRANSLATION_PREFIX + x.name() + ".name"), | ||||||
|             ConfigSpec.serverSpec.entries().map(ConfigFile.Entry::translationKey), |             ConfigSpec.serverSpec.entries().map(ConfigFile.Entry::translationKey), | ||||||
|             ConfigSpec.clientSpec.entries().map(ConfigFile.Entry::translationKey), |             ConfigSpec.clientSpec.entries().map(ConfigFile.Entry::translationKey), | ||||||
| @@ -296,6 +297,12 @@ public final class LanguageProvider implements DataProvider { | |||||||
|         ).flatMap(x -> x); |         ).flatMap(x -> x); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     private static Stream<String> getTranslationKeys(Component component) { | ||||||
|  |         if (component.getContents() instanceof TranslatableContents contents) return Stream.of(contents.getKey()); | ||||||
|  | 
 | ||||||
|  |         return component.getSiblings().stream().flatMap(LanguageProvider::getTranslationKeys); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     private void add(String id, String text) { |     private void add(String id, String text) { | ||||||
|         Objects.requireNonNull(id, "id cannot be null"); |         Objects.requireNonNull(id, "id cannot be null"); | ||||||
|         Objects.requireNonNull(text, "text cannot be null"); |         Objects.requireNonNull(text, "text cannot be null"); | ||||||
|   | |||||||
| @@ -127,9 +127,7 @@ public class PocketComputerItem extends Item implements IMedia { | |||||||
|         var baseString = getDescriptionId(stack); |         var baseString = getDescriptionId(stack); | ||||||
|         var upgrade = getUpgrade(stack); |         var upgrade = getUpgrade(stack); | ||||||
|         if (upgrade != null) { |         if (upgrade != null) { | ||||||
|             return Component.translatable(baseString + ".upgraded", |             return Component.translatable(baseString + ".upgraded", upgrade.getAdjective()); | ||||||
|                 Component.translatable(upgrade.getUnlocalisedAdjective()) |  | ||||||
|             ); |  | ||||||
|         } else { |         } else { | ||||||
|             return super.getName(stack); |             return super.getName(stack); | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -34,18 +34,11 @@ public class TurtleItem extends AbstractComputerItem { | |||||||
|         var left = getUpgrade(stack, TurtleSide.LEFT); |         var left = getUpgrade(stack, TurtleSide.LEFT); | ||||||
|         var right = getUpgrade(stack, TurtleSide.RIGHT); |         var right = getUpgrade(stack, TurtleSide.RIGHT); | ||||||
|         if (left != null && right != null) { |         if (left != null && right != null) { | ||||||
|             return Component.translatable(baseString + ".upgraded_twice", |             return Component.translatable(baseString + ".upgraded_twice", right.getAdjective(), left.getAdjective()); | ||||||
|                 Component.translatable(right.getUnlocalisedAdjective()), |  | ||||||
|                 Component.translatable(left.getUnlocalisedAdjective()) |  | ||||||
|             ); |  | ||||||
|         } else if (left != null) { |         } else if (left != null) { | ||||||
|             return Component.translatable(baseString + ".upgraded", |             return Component.translatable(baseString + ".upgraded", left.getAdjective()); | ||||||
|                 Component.translatable(left.getUnlocalisedAdjective()) |  | ||||||
|             ); |  | ||||||
|         } else if (right != null) { |         } else if (right != null) { | ||||||
|             return Component.translatable(baseString + ".upgraded", |             return Component.translatable(baseString + ".upgraded", right.getAdjective()); | ||||||
|                 Component.translatable(right.getUnlocalisedAdjective()) |  | ||||||
|             ); |  | ||||||
|         } else { |         } else { | ||||||
|             return Component.translatable(baseString); |             return Component.translatable(baseString); | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|     "type": "computercraft:tool", |     "type": "computercraft:tool", | ||||||
|     "adjective": "upgrade.minecraft.diamond_pickaxe.adjective", |     "adjective": "Netherite", | ||||||
|     "item": "minecraft:netherite_pickaxe", |     "item": "minecraft:netherite_pickaxe", | ||||||
|     "allowEnchantments": true, |     "allowEnchantments": true, | ||||||
|     "consumeDurability": "when_enchanted" |     "consumeDurability": "when_enchanted" | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|     "type": "computercraft:tool", |     "type": "computercraft:tool", | ||||||
|     "adjective": "upgrade.minecraft.diamond_pickaxe.adjective", |     "adjective": "Wooden", | ||||||
|     "item": "minecraft:wooden_pickaxe", |     "item": "minecraft:wooden_pickaxe", | ||||||
|     "consumeDurability": "always" |     "consumeDurability": "always" | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Jonathan Coates
					Jonathan Coates