From 97d81d990d5379d223c7ce5ced3f66c61f934292 Mon Sep 17 00:00:00 2001 From: Blake Rain Date: Sat, 20 Jan 2024 11:40:51 +0000 Subject: [PATCH 01/10] fix: remove redundant call to 'saveAdditional' --- .../banutama/utamacraft/block/entity/InsolatorBlockEntity.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/net/banutama/utamacraft/block/entity/InsolatorBlockEntity.java b/src/main/java/net/banutama/utamacraft/block/entity/InsolatorBlockEntity.java index 50e8526..82a2376 100644 --- a/src/main/java/net/banutama/utamacraft/block/entity/InsolatorBlockEntity.java +++ b/src/main/java/net/banutama/utamacraft/block/entity/InsolatorBlockEntity.java @@ -136,7 +136,6 @@ public class InsolatorBlockEntity extends BlockEntity implements MenuProvider { nbt.putInt("progress", progress); nbt.putInt("ticks", ticks); nbt.putBoolean("active", active); - super.saveAdditional(nbt); } @Override -- 2.45.2 From 47d4db8573f3fa23a5a39d1375706b1502abf53f Mon Sep 17 00:00:00 2001 From: Blake Rain Date: Sat, 20 Jan 2024 11:41:07 +0000 Subject: [PATCH 02/10] feat: add recipe for `utamacraft:awareness_block` --- .../utamacraft/recipes/awareness_block.json | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/main/resources/data/utamacraft/recipes/awareness_block.json diff --git a/src/main/resources/data/utamacraft/recipes/awareness_block.json b/src/main/resources/data/utamacraft/recipes/awareness_block.json new file mode 100644 index 0000000..b6d1643 --- /dev/null +++ b/src/main/resources/data/utamacraft/recipes/awareness_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": ["iii", "tet", "tpt"], + "key": { + "i": { + "item": "minecraft:iron_ingot" + }, + "e": { + "item": "minecraft:eye_of_ender" + }, + "t": { + "item": "utamacraft:tungsten_ingot" + }, + "p": { + "item": "untamacraft:pcb" + } + }, + "result": { + "item": "utamacraft:awareness_block", + "count": 1 + } +} -- 2.45.2 From cbba546e19c409e3ca2253deffbcef669f53cda0 Mon Sep 17 00:00:00 2001 From: Blake Rain Date: Sat, 20 Jan 2024 11:46:49 +0000 Subject: [PATCH 03/10] feat: add energy storage to awareness block --- .../block/entity/AwarenessBlockEntity.java | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/src/main/java/net/banutama/utamacraft/block/entity/AwarenessBlockEntity.java b/src/main/java/net/banutama/utamacraft/block/entity/AwarenessBlockEntity.java index 5723540..d4e6463 100644 --- a/src/main/java/net/banutama/utamacraft/block/entity/AwarenessBlockEntity.java +++ b/src/main/java/net/banutama/utamacraft/block/entity/AwarenessBlockEntity.java @@ -1,11 +1,93 @@ package net.banutama.utamacraft.block.entity; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import net.banutama.utamacraft.util.ModEnergyStorage; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.minecraftforge.common.util.LazyOptional; public class AwarenessBlockEntity extends BlockEntity { + private static final int ENERGY_REQUIRED = 32; + + private final ModEnergyStorage energy = new ModEnergyStorage(60000, 256) { + @Override + public void onEnergyChanged() { + setChanged(); + AwarenessBlockEntity.this.sendUpdate(); + } + }; + + private final LazyOptional energyOptional = LazyOptional.of(() -> energy); + public AwarenessBlockEntity(BlockPos pos, BlockState state) { super(ModBlockEntities.AWARENESS_BLOCK.get(), pos, state); } + + @Override + public @NotNull LazyOptional getCapability(@NotNull Capability cap, @Nullable Direction side) { + if (cap == ForgeCapabilities.ENERGY) { + return energyOptional.cast(); + } + + return super.getCapability(cap, side); + } + + @Override + public void invalidateCaps() { + super.invalidateCaps(); + energyOptional.invalidate(); + } + + @Override + protected void saveAdditional(@NotNull CompoundTag nbt) { + super.saveAdditional(nbt); + nbt.put("energy", energy.serializeNBT()); + } + + @Override + public void load(@NotNull CompoundTag nbt) { + super.load(nbt); + energy.deserializeNBT(nbt.getCompound("energy")); + } + + @Override + public @NotNull CompoundTag getUpdateTag() { + CompoundTag nbt = super.getUpdateTag(); + saveAdditional(nbt); + return nbt; + } + + @Override + @Nullable + public Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + private void sendUpdate() { + setChanged(); + + if (this.level != null) { + this.level.sendBlockUpdated(this.worldPosition, getBlockState(), getBlockState(), Block.UPDATE_ALL); + } + } + + public boolean deductEnergyUse() { + if (energy.getMaxEnergyStored() >= ENERGY_REQUIRED) { + energy.extractEnergy(ENERGY_REQUIRED, false); + return true; + } + + return false; + } } -- 2.45.2 From bdcc8549d33e8f4e2a9514d57b5e848311bc56f9 Mon Sep 17 00:00:00 2001 From: Blake Rain Date: Sat, 20 Jan 2024 11:47:41 +0000 Subject: [PATCH 04/10] feat: add radius to energy use --- .../utamacraft/block/entity/AwarenessBlockEntity.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/banutama/utamacraft/block/entity/AwarenessBlockEntity.java b/src/main/java/net/banutama/utamacraft/block/entity/AwarenessBlockEntity.java index d4e6463..84ab80f 100644 --- a/src/main/java/net/banutama/utamacraft/block/entity/AwarenessBlockEntity.java +++ b/src/main/java/net/banutama/utamacraft/block/entity/AwarenessBlockEntity.java @@ -82,9 +82,10 @@ public class AwarenessBlockEntity extends BlockEntity { } } - public boolean deductEnergyUse() { - if (energy.getMaxEnergyStored() >= ENERGY_REQUIRED) { - energy.extractEnergy(ENERGY_REQUIRED, false); + public boolean deductEnergyUse(int radius) { + int cost = radius * ENERGY_REQUIRED; + if (energy.getMaxEnergyStored() >= cost) { + energy.extractEnergy(cost, false); return true; } -- 2.45.2 From 8b1a286595f4ff405ff43a0f23e11e791ca30843 Mon Sep 17 00:00:00 2001 From: Blake Rain Date: Sat, 20 Jan 2024 12:07:15 +0000 Subject: [PATCH 05/10] fix: incorrect item name in recipe --- src/main/resources/data/utamacraft/recipes/awareness_block.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/data/utamacraft/recipes/awareness_block.json b/src/main/resources/data/utamacraft/recipes/awareness_block.json index b6d1643..d3fcbe5 100644 --- a/src/main/resources/data/utamacraft/recipes/awareness_block.json +++ b/src/main/resources/data/utamacraft/recipes/awareness_block.json @@ -6,7 +6,7 @@ "item": "minecraft:iron_ingot" }, "e": { - "item": "minecraft:eye_of_ender" + "item": "minecraft:ender_eye" }, "t": { "item": "utamacraft:tungsten_ingot" -- 2.45.2 From f7dd4841f2534404ff335f936185daa44d62ab5a Mon Sep 17 00:00:00 2001 From: Blake Rain Date: Sat, 20 Jan 2024 13:41:26 +0000 Subject: [PATCH 06/10] fix: incorrect item name in recipe --- src/main/resources/data/utamacraft/recipes/awareness_block.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/data/utamacraft/recipes/awareness_block.json b/src/main/resources/data/utamacraft/recipes/awareness_block.json index d3fcbe5..d14b378 100644 --- a/src/main/resources/data/utamacraft/recipes/awareness_block.json +++ b/src/main/resources/data/utamacraft/recipes/awareness_block.json @@ -12,7 +12,7 @@ "item": "utamacraft:tungsten_ingot" }, "p": { - "item": "untamacraft:pcb" + "item": "utamacraft:pcb" } }, "result": { -- 2.45.2 From fc6070e7e7ff8cdf8de2da12535d41ba7503ad64 Mon Sep 17 00:00:00 2001 From: Blake Rain Date: Sat, 20 Jan 2024 13:41:45 +0000 Subject: [PATCH 07/10] feat: add energy requirement to awareness block --- .../block/entity/AwarenessBlockEntity.java | 24 +++--- .../peripheral/AwarenessBlockPeripheral.java | 85 ++++++++++++++++++- .../utamacraft/util/ModEnergyStorage.java | 4 + .../banutama/utamacraft/util/WorldScan.java | 59 +++++++++++-- 4 files changed, 154 insertions(+), 18 deletions(-) diff --git a/src/main/java/net/banutama/utamacraft/block/entity/AwarenessBlockEntity.java b/src/main/java/net/banutama/utamacraft/block/entity/AwarenessBlockEntity.java index 84ab80f..62b7a1a 100644 --- a/src/main/java/net/banutama/utamacraft/block/entity/AwarenessBlockEntity.java +++ b/src/main/java/net/banutama/utamacraft/block/entity/AwarenessBlockEntity.java @@ -4,6 +4,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import net.banutama.utamacraft.util.ModEnergyStorage; +import net.banutama.utamacraft.util.WorldScan.Side; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; @@ -20,7 +21,16 @@ import net.minecraftforge.common.util.LazyOptional; public class AwarenessBlockEntity extends BlockEntity { private static final int ENERGY_REQUIRED = 32; - private final ModEnergyStorage energy = new ModEnergyStorage(60000, 256) { + public static int getCost(int radius, Side side) { + int blocks = (int) Math.pow(radius * 2, 3); + if (side != Side.All) { + blocks >>= 1; + } + + return blocks * ENERGY_REQUIRED; + } + + private final ModEnergyStorage energy = new ModEnergyStorage(60000, 256, 256000) { @Override public void onEnergyChanged() { setChanged(); @@ -58,7 +68,7 @@ public class AwarenessBlockEntity extends BlockEntity { @Override public void load(@NotNull CompoundTag nbt) { super.load(nbt); - energy.deserializeNBT(nbt.getCompound("energy")); + energy.deserializeNBT(nbt.get("energy")); } @Override @@ -81,14 +91,4 @@ public class AwarenessBlockEntity extends BlockEntity { this.level.sendBlockUpdated(this.worldPosition, getBlockState(), getBlockState(), Block.UPDATE_ALL); } } - - public boolean deductEnergyUse(int radius) { - int cost = radius * ENERGY_REQUIRED; - if (energy.getMaxEnergyStored() >= cost) { - energy.extractEnergy(cost, false); - return true; - } - - return false; - } } diff --git a/src/main/java/net/banutama/utamacraft/integrations/computercraft/peripheral/AwarenessBlockPeripheral.java b/src/main/java/net/banutama/utamacraft/integrations/computercraft/peripheral/AwarenessBlockPeripheral.java index 2dbdea2..349f1b1 100644 --- a/src/main/java/net/banutama/utamacraft/integrations/computercraft/peripheral/AwarenessBlockPeripheral.java +++ b/src/main/java/net/banutama/utamacraft/integrations/computercraft/peripheral/AwarenessBlockPeripheral.java @@ -14,6 +14,7 @@ import dan200.computercraft.api.lua.MethodResult; import net.banutama.utamacraft.block.entity.AwarenessBlockEntity; import net.banutama.utamacraft.util.LuaConverter; import net.banutama.utamacraft.util.WorldScan; +import net.banutama.utamacraft.util.WorldScan.Side; import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.Level; @@ -21,6 +22,7 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.minecraftforge.energy.IEnergyStorage; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.registries.ForgeRegistries; @@ -35,6 +37,43 @@ public class AwarenessBlockPeripheral extends BasePeripheral { this(new BlockEntityPeripheralOwner(blockEntity)); } + private AwarenessBlockEntity getBlock() { + if (!(owner instanceof BlockEntityPeripheralOwner blockOwner)) { + return null; + } + + BlockEntity blockEntity = blockOwner.getBlockEntity(); + if (!(blockEntity instanceof AwarenessBlockEntity block)) { + return null; + } + + return block; + } + + @LuaFunction(mainThread = true) + public final int getEnergy() { + return getBlock().getCapability(ForgeCapabilities.ENERGY).map(IEnergyStorage::getEnergyStored).orElse(0); + } + + @LuaFunction(mainThread = true) + public final int getEnergyCapacity() { + return getBlock().getCapability(ForgeCapabilities.ENERGY).map(IEnergyStorage::getMaxEnergyStored).orElse(0); + } + + @LuaFunction(mainThread = true) + public final @NotNull MethodResult getCost(@NotNull IArguments arguments) throws LuaException { + int radius = arguments.getInt(0); + if (radius < 1) { + return MethodResult.of(null, "Radius must be greater than zero"); + } + + String sideString = arguments.optString(1, "all"); + Side side = parseSide(sideString); + + int cost = AwarenessBlockEntity.getCost(radius, side); + return MethodResult.of(cost); + } + @LuaFunction(mainThread = true) public final @NotNull MethodResult scan(@NotNull IArguments arguments) throws LuaException { int radius = arguments.getInt(0); @@ -42,6 +81,9 @@ public class AwarenessBlockPeripheral extends BasePeripheral { return MethodResult.of(null, "Radius must be greater than zero"); } + String sideString = arguments.optString(1, "all"); + Side side = parseSide(sideString); + if (!(owner instanceof BlockEntityPeripheralOwner blockOwner)) { return MethodResult.of(null, "Owner of this AwarenessBlockPeripheral is not a BlockEntityPeripheralOwner"); } @@ -52,6 +94,18 @@ public class AwarenessBlockPeripheral extends BasePeripheral { "Owner of this AwarenessBlockEntity has a BlockEntityProviderOwner with a BlockEntity that is not an AwarenessBlockEntity"); } + IEnergyStorage energy = block.getCapability(ForgeCapabilities.ENERGY).orElse(null); + if (energy == null) { + return MethodResult.of(null, "BlockEntity does not have an IEnergyStorage capability"); + } + + int energyCost = AwarenessBlockEntity.getCost(radius, side); + int energyUsed = energy.extractEnergy(energyCost, false); + + if (energyUsed != energyCost) { + return MethodResult.of(null, String.format("Not enough energy available: %d/%d", energyUsed, energyCost)); + } + Level level = blockEntity.getLevel(); BlockPos origin = blockEntity.getBlockPos(); @@ -66,15 +120,44 @@ public class AwarenessBlockPeripheral extends BasePeripheral { } List> blocks = new ArrayList<>(); - WorldScan.scanBlocks(level, origin, radius, (state, pos) -> { + WorldScan.scanBlocks(level, origin, radius, side, (state, pos) -> { blocks.add(describeBlock(level, origin, state, pos)); }); + { + Map energyMap = new HashMap<>(); + energyMap.put("used", energyUsed); + energyMap.put("cost", energyCost); + result.put("energy", energyMap); + } + result.put("blocks", blocks); + result.put("side", sideString); return MethodResult.of(result); } + private static Side parseSide(String sideString) throws LuaException { + switch (sideString) { + case "all": + return Side.All; + case "up": + return Side.Up; + case "down": + return Side.Down; + case "north": + return Side.North; + case "east": + return Side.East; + case "south": + return Side.South; + case "west": + return Side.West; + default: + throw new LuaException("Invalid side"); + } + } + private static HashMap describeBlock(Level level, BlockPos origin, BlockState state, BlockPos pos) { HashMap blockInfo = new HashMap<>(5); diff --git a/src/main/java/net/banutama/utamacraft/util/ModEnergyStorage.java b/src/main/java/net/banutama/utamacraft/util/ModEnergyStorage.java index 1de5b76..eebb670 100644 --- a/src/main/java/net/banutama/utamacraft/util/ModEnergyStorage.java +++ b/src/main/java/net/banutama/utamacraft/util/ModEnergyStorage.java @@ -7,6 +7,10 @@ public abstract class ModEnergyStorage extends EnergyStorage { super(capacity, maxTransfer); } + public ModEnergyStorage(int capacity, int maxReceive, int maxExtract) { + super(capacity, maxReceive, maxExtract); + } + @Override public int extractEnergy(int maxExtract, boolean simulate) { int extracted = super.extractEnergy(maxExtract, simulate); diff --git a/src/main/java/net/banutama/utamacraft/util/WorldScan.java b/src/main/java/net/banutama/utamacraft/util/WorldScan.java index 26f588c..c80cb6a 100644 --- a/src/main/java/net/banutama/utamacraft/util/WorldScan.java +++ b/src/main/java/net/banutama/utamacraft/util/WorldScan.java @@ -2,20 +2,67 @@ package net.banutama.utamacraft.util; import java.util.function.BiConsumer; +import com.mojang.logging.LogUtils; + import net.minecraft.core.BlockPos; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.structure.BoundingBox; public class WorldScan { - public static void scanBlocks(Level level, BlockPos origin, int r, - BiConsumer consumer) { + public enum Side { + All, Up, Down, North, East, South, West + } + + // Generate a bounding box for the given origin, radius and block side. + private static BoundingBox getScanBounds(BlockPos origin, int r, Side side) { int ox = origin.getX(); int oy = origin.getY(); int oz = origin.getZ(); - for (int x = ox - r; x <= ox + r; ++x) { - for (int y = oy - r; y <= oy + r; ++y) { - for (int z = oz - r; z <= oz + r; ++z) { + int x1 = ox - r; + int y1 = oy - r; + int z1 = oz - r; + + int x2 = ox + r; + int y2 = oy + r; + int z2 = oz + r; + + switch (side) { + case Up: + y1 = oy; + break; + case Down: + y2 = oy; + break; + case North: + z1 = oz; + break; + case East: + x2 = ox; + break; + case South: + z2 = oz; + break; + case West: + x1 = ox; + break; + default: + break; + } + + return new BoundingBox(x1, y1, z1, x2, y2, z2); + } + + public static void scanBlocks(Level level, BlockPos origin, int r, Side side, + BiConsumer consumer) { + BoundingBox bounds = getScanBounds(origin, r, side); + int total = 0; + + for (int x = bounds.minX(); x < bounds.maxX(); ++x) { + for (int y = bounds.minY(); y < bounds.maxY(); ++y) { + for (int z = bounds.minZ(); z < bounds.maxZ(); ++z) { + total += 1; BlockPos pos = new BlockPos(x, y, z); BlockState state = level.getBlockState(pos); @@ -25,5 +72,7 @@ public class WorldScan { } } } + + LogUtils.getLogger().info("Scanned {} blocks", total); } } -- 2.45.2 From c21e62e0edc17db33040e12d90ad214820b1da4c Mon Sep 17 00:00:00 2001 From: Blake Rain Date: Sat, 20 Jan 2024 13:46:26 +0000 Subject: [PATCH 08/10] chore: bump version --- gradle.properties | 2 +- updates.json | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/gradle.properties b/gradle.properties index b897d5c..8d2f15e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -56,7 +56,7 @@ mod_name=Utamacraft Mod # The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default. mod_license=MIT License # The mod version. See https://semver.org/ -mod_version=0.2.4-1.19 +mod_version=0.2.5-1.19 # The group ID for the mod. It is only important when publishing as an artifact to a Maven repository. # This should match the base package used for the mod sources. # See https://maven.apache.org/guides/mini/guide-naming-conventions.html diff --git a/updates.json b/updates.json index ae096b1..6bfda69 100644 --- a/updates.json +++ b/updates.json @@ -1,6 +1,7 @@ { "homepage": "https://git.blakerain.com/bans-minecraft/utamacraft", "1.19.2": { + "0.2.5-1.19": "Add the awareness block peripheral", "0.2.4-1.19": "Add some fixes and new textures", "0.2.3-1.19": "Add CC peripheral for Insolator", "0.2.2-1.19": "Fix bugs with Insolator", @@ -11,7 +12,7 @@ "0.0.1-1.19": "Initial release" }, "promos": { - "1.19.2-latest": "0.2.4-1.19", - "1.19.2-recommended": "0.2.4-1.19" + "1.19.2-latest": "0.2.5-1.19", + "1.19.2-recommended": "0.2.5-1.19" } } -- 2.45.2 From 8f1239ffd4b530ebc483fde5dc8381f8f7a075e3 Mon Sep 17 00:00:00 2001 From: Blake Rain Date: Sat, 20 Jan 2024 15:04:24 +0000 Subject: [PATCH 09/10] fix: relax excessive cost-per-block for awareness block --- .../banutama/utamacraft/block/entity/AwarenessBlockEntity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/banutama/utamacraft/block/entity/AwarenessBlockEntity.java b/src/main/java/net/banutama/utamacraft/block/entity/AwarenessBlockEntity.java index 62b7a1a..471092d 100644 --- a/src/main/java/net/banutama/utamacraft/block/entity/AwarenessBlockEntity.java +++ b/src/main/java/net/banutama/utamacraft/block/entity/AwarenessBlockEntity.java @@ -19,7 +19,7 @@ import net.minecraftforge.common.capabilities.ForgeCapabilities; import net.minecraftforge.common.util.LazyOptional; public class AwarenessBlockEntity extends BlockEntity { - private static final int ENERGY_REQUIRED = 32; + private static final int ENERGY_REQUIRED = 4; public static int getCost(int radius, Side side) { int blocks = (int) Math.pow(radius * 2, 3); -- 2.45.2 From cfa44db6612cd0489c1dee54b73dc73dfd0c9932 Mon Sep 17 00:00:00 2001 From: Blake Rain Date: Sat, 20 Jan 2024 15:05:14 +0000 Subject: [PATCH 10/10] chore: bump version to 0.2.6 --- gradle.properties | 2 +- updates.json | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/gradle.properties b/gradle.properties index 8d2f15e..68e4229 100644 --- a/gradle.properties +++ b/gradle.properties @@ -56,7 +56,7 @@ mod_name=Utamacraft Mod # The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default. mod_license=MIT License # The mod version. See https://semver.org/ -mod_version=0.2.5-1.19 +mod_version=0.2.6-1.19 # The group ID for the mod. It is only important when publishing as an artifact to a Maven repository. # This should match the base package used for the mod sources. # See https://maven.apache.org/guides/mini/guide-naming-conventions.html diff --git a/updates.json b/updates.json index 6bfda69..3008774 100644 --- a/updates.json +++ b/updates.json @@ -1,6 +1,7 @@ { "homepage": "https://git.blakerain.com/bans-minecraft/utamacraft", "1.19.2": { + "0.2.6-1.19": "Fix the excessive cost of the awareness block", "0.2.5-1.19": "Add the awareness block peripheral", "0.2.4-1.19": "Add some fixes and new textures", "0.2.3-1.19": "Add CC peripheral for Insolator", @@ -12,7 +13,7 @@ "0.0.1-1.19": "Initial release" }, "promos": { - "1.19.2-latest": "0.2.5-1.19", - "1.19.2-recommended": "0.2.5-1.19" + "1.19.2-latest": "0.2.6-1.19", + "1.19.2-recommended": "0.2.6-1.19" } } -- 2.45.2