1
0
mirror of https://github.com/SquidDev-CC/CC-Tweaked synced 2025-10-22 17:37:38 +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:
Jonathan Coates
2024-04-28 20:07:15 +01:00
parent 0aca6a4dc9
commit 06ac373e83
15 changed files with 53 additions and 38 deletions

View File

@@ -4,6 +4,7 @@
package dan200.computercraft.api.pocket;
import net.minecraft.network.chat.Component;
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.
*/
public abstract class AbstractPocketUpgrade implements IPocketUpgrade {
private final String adjective;
private final Component adjective;
private final ItemStack stack;
protected AbstractPocketUpgrade(String adjective, ItemStack stack) {
protected AbstractPocketUpgrade(Component adjective, ItemStack stack) {
this.adjective = adjective;
this.stack = stack;
}
protected AbstractPocketUpgrade(String adjective, ItemStack stack) {
this(Component.translatable(adjective), stack);
}
@Override
public final String getUnlocalisedAdjective() {
public final Component getAdjective() {
return adjective;
}

View File

@@ -4,6 +4,7 @@
package dan200.computercraft.api.turtle;
import net.minecraft.network.chat.Component;
import net.minecraft.world.item.ItemStack;
@@ -14,17 +15,21 @@ import net.minecraft.world.item.ItemStack;
*/
public abstract class AbstractTurtleUpgrade implements ITurtleUpgrade {
private final TurtleUpgradeType type;
private final String adjective;
private final Component adjective;
private final ItemStack stack;
protected AbstractTurtleUpgrade(TurtleUpgradeType type, String adjective, ItemStack stack) {
protected AbstractTurtleUpgrade(TurtleUpgradeType type, Component adjective, ItemStack stack) {
this.type = type;
this.adjective = adjective;
this.stack = stack;
}
protected AbstractTurtleUpgrade(TurtleUpgradeType type, String adjective, ItemStack stack) {
this(type, Component.translatable(adjective), stack);
}
@Override
public final String getUnlocalisedAdjective() {
public final Component getAdjective() {
return adjective;
}

View File

@@ -13,6 +13,7 @@ import dan200.computercraft.impl.upgrades.TurtleToolSpec;
import net.minecraft.core.component.DataComponents;
import net.minecraft.data.DataGenerator;
import net.minecraft.data.PackOutput;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.TagKey;
import net.minecraft.world.entity.ai.attributes.Attributes;
@@ -58,7 +59,7 @@ public abstract class TurtleUpgradeDataProvider extends UpgradeDataProvider<ITur
public final class ToolBuilder {
private final ResourceLocation id;
private final Item toolItem;
private String adjective;
private Component adjective;
private @Nullable Item craftingItem;
private float damageMultiplier = TurtleToolSpec.DEFAULT_DAMAGE_MULTIPLIER;
private @Nullable TagKey<Block> breakable;
@@ -67,7 +68,7 @@ public abstract class TurtleUpgradeDataProvider extends UpgradeDataProvider<ITur
ToolBuilder(ResourceLocation id, Item toolItem) {
this.id = id;
adjective = UpgradeBase.getDefaultAdjective(id);
adjective = Component.translatable(UpgradeBase.getDefaultAdjective(id));
this.toolItem = toolItem;
craftingItem = null;
}
@@ -78,7 +79,7 @@ public abstract class TurtleUpgradeDataProvider extends UpgradeDataProvider<ITur
* @param adjective The new adjective to use.
* @return The tool builder, for further use.
*/
public ToolBuilder adjective(String adjective) {
public ToolBuilder adjective(Component adjective) {
this.adjective = adjective;
return this;
}

View File

@@ -11,6 +11,7 @@ import dan200.computercraft.api.turtle.ITurtleUpgrade;
import dan200.computercraft.api.turtle.TurtleSide;
import net.minecraft.Util;
import net.minecraft.core.component.DataComponentPatch;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.ItemStack;
@@ -26,13 +27,16 @@ public interface UpgradeBase {
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>
* 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
@@ -107,7 +111,7 @@ public interface UpgradeBase {
*
* @param id The upgrade ID.
* @return The generated adjective.
* @see #getUnlocalisedAdjective()
* @see #getAdjective()
*/
static String getDefaultAdjective(ResourceLocation id) {
return Util.makeDescriptionId("upgrade", id) + ".adjective";

View File

@@ -10,6 +10,8 @@ import com.mojang.serialization.codecs.RecordCodecBuilder;
import dan200.computercraft.api.turtle.TurtleToolDurability;
import net.minecraft.core.registries.BuiltInRegistries;
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.world.item.Item;
import net.minecraft.world.level.block.Block;
@@ -28,7 +30,7 @@ import java.util.Optional;
* @param breakable The items breakable by this tool.
*/
public record TurtleToolSpec(
String adjective,
Component adjective,
Optional<Item> craftItem,
Item toolItem,
float damageMultiplier,
@@ -39,7 +41,7 @@ public record TurtleToolSpec(
public static final float DEFAULT_DAMAGE_MULTIPLIER = 3.0f;
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().fieldOf("item").forGetter(TurtleToolSpec::toolItem),
Codec.FLOAT.optionalFieldOf("damageMultiplier", DEFAULT_DAMAGE_MULTIPLIER).forGetter(TurtleToolSpec::damageMultiplier),