persist turtle upgrade information inside turtle item
This commit is contained in:
parent
84bbc321c4
commit
04f7640cd2
|
@ -105,12 +105,12 @@ private static List<TurtleItem> turtleItems() {
|
|||
*/
|
||||
private void turtleUpgrades(Consumer<FinishedRecipe> add) {
|
||||
for (var turtleItem : turtleItems()) {
|
||||
var base = turtleItem.create(-1, null, -1, null, null, 0, null);
|
||||
var base = turtleItem.create(-1, null, -1, null, null, 0, null, null, null);
|
||||
|
||||
var nameId = turtleItem.getFamily().name().toLowerCase(Locale.ROOT);
|
||||
|
||||
for (var upgrade : turtleUpgrades.getGeneratedUpgrades()) {
|
||||
var result = turtleItem.create(-1, null, -1, null, upgrade, -1, null);
|
||||
var result = turtleItem.create(-1, null, -1, null, upgrade, -1, null, null, null);
|
||||
ShapedRecipeBuilder
|
||||
.shaped(RecipeCategory.REDSTONE, result.getItem())
|
||||
.group(String.format("%s:turtle_%s", ComputerCraftAPI.MOD_ID, nameId))
|
||||
|
@ -189,7 +189,7 @@ private void turtleOverlays(Consumer<FinishedRecipe> add) {
|
|||
|
||||
private void turtleOverlay(Consumer<FinishedRecipe> add, String overlay, Consumer<ShapelessRecipeBuilder> build) {
|
||||
for (var turtleItem : turtleItems()) {
|
||||
var base = turtleItem.create(-1, null, -1, null, null, 0, null);
|
||||
var base = turtleItem.create(-1, null, -1, null, null, 0, null, null, null);
|
||||
|
||||
var nameId = turtleItem.getFamily().name().toLowerCase(Locale.ROOT);
|
||||
var group = "%s:turtle_%s_overlay".formatted(ComputerCraftAPI.MOD_ID, nameId);
|
||||
|
|
|
@ -444,9 +444,9 @@ public static CreativeModeTab.Builder registerCreativeTab(CreativeModeTab.Builde
|
|||
}
|
||||
|
||||
private static void addTurtle(CreativeModeTab.Output out, TurtleItem turtle) {
|
||||
out.accept(turtle.create(-1, null, -1, null, null, 0, null));
|
||||
out.accept(turtle.create(-1, null, -1, null, null, 0, null, null, null));
|
||||
TurtleUpgrades.getVanillaUpgrades()
|
||||
.map(x -> turtle.create(-1, null, -1, null, x, 0, null))
|
||||
.map(x -> turtle.create(-1, null, -1, null, x, 0, null, null, null))
|
||||
.forEach(out::accept);
|
||||
}
|
||||
|
||||
|
|
|
@ -56,7 +56,7 @@ public static List<ItemStack> getExtraStacks() {
|
|||
for (var turtleSupplier : TURTLES) {
|
||||
var turtle = turtleSupplier.get();
|
||||
for (var upgrade : TurtleUpgrades.instance().getUpgrades()) {
|
||||
upgradeItems.add(turtle.create(-1, null, -1, null, upgrade, 0, null));
|
||||
upgradeItems.add(turtle.create(-1, null, -1, null, upgrade, 0, null, null, null));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -219,7 +219,8 @@ private static ItemStack turtleWith(ItemStack stack, @Nullable ITurtleUpgrade le
|
|||
var item = (TurtleItem) stack.getItem();
|
||||
return item.create(
|
||||
item.getComputerID(stack), item.getLabel(stack), item.getColour(stack),
|
||||
left, right, item.getFuelLevel(stack), item.getOverlay(stack)
|
||||
left, right, item.getFuelLevel(stack), item.getOverlay(stack),
|
||||
null, null
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -271,8 +272,8 @@ List<T> getRecipes() {
|
|||
var turtleItem = turtleSupplier.get();
|
||||
recipes.add(turtle(
|
||||
ingredient, // Right upgrade, recipe on left
|
||||
Ingredient.of(turtleItem.create(-1, null, -1, null, null, 0, null)),
|
||||
turtleItem.create(-1, null, -1, null, turtle, 0, null)
|
||||
Ingredient.of(turtleItem.create(-1, null, -1, null, null, 0, null, null, null)),
|
||||
turtleItem.create(-1, null, -1, null, turtle, 0, null, null, null)
|
||||
));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -129,6 +129,10 @@ public void setPlacedBy(Level world, BlockPos pos, BlockState state, @Nullable L
|
|||
// Set Upgrades
|
||||
for (var side : TurtleSide.values()) {
|
||||
turtle.getAccess().setUpgrade(side, item.getUpgrade(stack, side));
|
||||
var updateData = item.getUpgradeData(stack, side);
|
||||
if (updateData != null && !updateData.isEmpty()) {
|
||||
turtle.getAccess().getUpgradeNBTData(side).merge(updateData);
|
||||
}
|
||||
}
|
||||
|
||||
turtle.getAccess().setFuelLevel(item.getFuelLevel(stack));
|
||||
|
@ -162,7 +166,8 @@ protected ItemStack getItem(AbstractComputerBlockEntity tile) {
|
|||
return TurtleItem.create(
|
||||
turtle.getComputerID(), turtle.getLabel(), access.getColour(), turtle.getFamily(),
|
||||
access.getUpgrade(TurtleSide.LEFT), access.getUpgrade(TurtleSide.RIGHT),
|
||||
access.getFuelLevel(), turtle.getOverlay()
|
||||
access.getFuelLevel(), turtle.getOverlay(),
|
||||
access.getUpgradeNBTData(TurtleSide.LEFT), access.getUpgradeNBTData(TurtleSide.RIGHT)
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
import dan200.computercraft.shared.computer.items.AbstractComputerItem;
|
||||
import dan200.computercraft.shared.turtle.blocks.TurtleBlock;
|
||||
import net.minecraft.core.cauldron.CauldronInteraction;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.InteractionResult;
|
||||
|
@ -33,13 +34,14 @@ public TurtleItem(TurtleBlock block, Properties settings) {
|
|||
public static ItemStack create(
|
||||
int id, @Nullable String label, int colour, ComputerFamily family,
|
||||
@Nullable ITurtleUpgrade leftUpgrade, @Nullable ITurtleUpgrade rightUpgrade,
|
||||
int fuelLevel, @Nullable ResourceLocation overlay
|
||||
int fuelLevel, @Nullable ResourceLocation overlay,
|
||||
@Nullable CompoundTag leftUpgradeData, @Nullable CompoundTag rightUpdateData
|
||||
) {
|
||||
return switch (family) {
|
||||
case NORMAL ->
|
||||
ModRegistry.Items.TURTLE_NORMAL.get().create(id, label, colour, leftUpgrade, rightUpgrade, fuelLevel, overlay);
|
||||
ModRegistry.Items.TURTLE_NORMAL.get().create(id, label, colour, leftUpgrade, rightUpgrade, fuelLevel, overlay, leftUpgradeData, rightUpdateData);
|
||||
case ADVANCED ->
|
||||
ModRegistry.Items.TURTLE_ADVANCED.get().create(id, label, colour, leftUpgrade, rightUpgrade, fuelLevel, overlay);
|
||||
ModRegistry.Items.TURTLE_ADVANCED.get().create(id, label, colour, leftUpgrade, rightUpgrade, fuelLevel, overlay, leftUpgradeData, rightUpdateData);
|
||||
default -> ItemStack.EMPTY;
|
||||
};
|
||||
}
|
||||
|
@ -47,7 +49,8 @@ public static ItemStack create(
|
|||
public ItemStack create(
|
||||
int id, @Nullable String label, int colour,
|
||||
@Nullable ITurtleUpgrade leftUpgrade, @Nullable ITurtleUpgrade rightUpgrade,
|
||||
int fuelLevel, @Nullable ResourceLocation overlay
|
||||
int fuelLevel, @Nullable ResourceLocation overlay,
|
||||
@Nullable CompoundTag leftUpgradeData, @Nullable CompoundTag rightUpdateData
|
||||
) {
|
||||
// Build the stack
|
||||
var stack = new ItemStack(this);
|
||||
|
@ -61,10 +64,18 @@ public ItemStack create(
|
|||
stack.getOrCreateTag().putString(NBT_LEFT_UPGRADE, leftUpgrade.getUpgradeID().toString());
|
||||
}
|
||||
|
||||
if (leftUpgradeData != null && !leftUpgradeData.isEmpty()) {
|
||||
stack.getOrCreateTag().put(NBT_LEFT_UPGRADE_DATA, leftUpgradeData);
|
||||
}
|
||||
|
||||
if (rightUpgrade != null) {
|
||||
stack.getOrCreateTag().putString(NBT_RIGHT_UPGRADE, rightUpgrade.getUpgradeID().toString());
|
||||
}
|
||||
|
||||
if (rightUpdateData != null && !rightUpdateData.isEmpty()) {
|
||||
stack.getOrCreateTag().put(NBT_RIGHT_UPGRADE_DATA, rightUpdateData);
|
||||
}
|
||||
|
||||
return stack;
|
||||
}
|
||||
|
||||
|
@ -118,7 +129,8 @@ public ItemStack withFamily(ItemStack stack, ComputerFamily family) {
|
|||
getComputerID(stack), getLabel(stack),
|
||||
getColour(stack), family,
|
||||
getUpgrade(stack, TurtleSide.LEFT), getUpgrade(stack, TurtleSide.RIGHT),
|
||||
getFuelLevel(stack), getOverlay(stack)
|
||||
getFuelLevel(stack), getOverlay(stack),
|
||||
getUpgradeData(stack, TurtleSide.LEFT), getUpgradeData(stack, TurtleSide.RIGHT)
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -130,6 +142,14 @@ public ItemStack withFamily(ItemStack stack, ComputerFamily family) {
|
|||
return tag.contains(key) ? TurtleUpgrades.instance().get(tag.getString(key)) : null;
|
||||
}
|
||||
|
||||
public @Nullable CompoundTag getUpgradeData(ItemStack stack, TurtleSide side) {
|
||||
var tag = stack.getTag();
|
||||
if (tag == null) return null;
|
||||
|
||||
var key = side == TurtleSide.LEFT ? NBT_LEFT_UPGRADE_DATA : NBT_RIGHT_UPGRADE_DATA;
|
||||
return tag.contains(key) ? tag.getCompound(key) : null;
|
||||
}
|
||||
|
||||
public @Nullable ResourceLocation getOverlay(ItemStack stack) {
|
||||
var tag = stack.getTag();
|
||||
return tag != null && tag.contains(NBT_OVERLAY) ? new ResourceLocation(tag.getString(NBT_OVERLAY)) : null;
|
||||
|
|
|
@ -41,7 +41,9 @@ private static ItemStack make(ItemStack stack, ResourceLocation overlay) {
|
|||
turtle.getUpgrade(stack, TurtleSide.LEFT),
|
||||
turtle.getUpgrade(stack, TurtleSide.RIGHT),
|
||||
turtle.getFuelLevel(stack),
|
||||
overlay
|
||||
overlay,
|
||||
turtle.getUpgradeData(stack, TurtleSide.LEFT),
|
||||
turtle.getUpgradeData(stack, TurtleSide.RIGHT)
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ protected ItemStack convert(IComputerItem item, ItemStack stack) {
|
|||
var computerID = item.getComputerID(stack);
|
||||
var label = item.getLabel(stack);
|
||||
|
||||
return TurtleItem.create(computerID, label, -1, getFamily(), null, null, 0, null);
|
||||
return TurtleItem.create(computerID, label, -1, getFamily(), null, null, 0, null, null, null);
|
||||
}
|
||||
|
||||
public static class Serializer extends ComputerFamilyRecipe.Serializer<TurtleRecipe> {
|
||||
|
|
|
@ -30,7 +30,7 @@ public boolean canCraftInDimensions(int x, int y) {
|
|||
|
||||
@Override
|
||||
public ItemStack getResultItem(RegistryAccess registryAccess) {
|
||||
return ModRegistry.Items.TURTLE_NORMAL.get().create(-1, null, -1, null, null, 0, null);
|
||||
return ModRegistry.Items.TURTLE_NORMAL.get().create(-1, null, -1, null, null, 0, null, null, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -125,7 +125,10 @@ public ItemStack assemble(CraftingContainer inventory, RegistryAccess registryAc
|
|||
var fuelLevel = itemTurtle.getFuelLevel(turtle);
|
||||
var colour = itemTurtle.getColour(turtle);
|
||||
var overlay = itemTurtle.getOverlay(turtle);
|
||||
return itemTurtle.create(computerID, label, colour, upgrades[0], upgrades[1], fuelLevel, overlay);
|
||||
return itemTurtle.create(
|
||||
computerID, label, colour, upgrades[0], upgrades[1], fuelLevel, overlay,
|
||||
itemTurtle.getUpgradeData(turtle, TurtleSide.LEFT), itemTurtle.getUpgradeData(turtle, TurtleSide.RIGHT)
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
Loading…
Reference in New Issue