diff --git a/docs/ENERGY_SYSTEM.md b/docs/ENERGY_SYSTEM.md index 1dc9859..33c9bb4 100644 --- a/docs/ENERGY_SYSTEM.md +++ b/docs/ENERGY_SYSTEM.md @@ -12,7 +12,7 @@ An Energy Provider provides energy to the Energy Receivers in its network. An Energy Provider can also be an Energy Receiver. An Energy Provider can only provide energy to an Energy provider that is in the same dimension and is at most 64 blocks away. ## Network Chip -The Network Chip is used to create and manipulate networks. To add an Energy Receiver to a network, right-click it with the network's Network Chip. To add an Energy Provider to a network, right-click it with the Network Chip, the Network Chip will be removed from your inventory. If a block is both an Energy Receiver and an Energy Provider, shift-right-click it to add it as an Energy Receiver to the network, and right-click it to add it as an Energy Provider to the network. To duplicate a Network Chip combine it with a [Circuit Board](ITEMS.md#user-content-circuit-board) in a crafting area. +The Network Chip is used to create and manipulate networks. To add an Energy Receiver to a network, use it with the Network Chip. To add an Energy Provider to a network, use it with the Network Chip, the Network Chip will be removed from your inventory. If a block is both an Energy Receiver and an Energy Provider, use it while sneaking to add it as an Energy Receiver to the network, and use it to add it as an Energy Provider to the network. To duplicate a Network Chip combine it with a [Circuit Board](ITEMS.md#user-content-circuit-board) in a crafting area. ## Switch The Switch block is used to selectively activate different devices. It is an Energy Provider and an Energy Receiver. If it is receiving a Redstone signal it will propagate all the Energy Receivers in its sub-network to the Energy Providers in its main-network. \ No newline at end of file diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/battery/BatteryCoreBlock.java b/src/main/java/com/thebrokenrail/energonrelics/block/battery/BatteryCoreBlock.java index d392acd..dc0e107 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/block/battery/BatteryCoreBlock.java +++ b/src/main/java/com/thebrokenrail/energonrelics/block/battery/BatteryCoreBlock.java @@ -3,6 +3,7 @@ package com.thebrokenrail.energonrelics.block.battery; import com.thebrokenrail.energonrelics.EnergonRelics; import com.thebrokenrail.energonrelics.block.entity.battery.BatteryCoreBlockEntity; import com.thebrokenrail.energonrelics.block.util.SimpleBlockWithEntity; +import com.thebrokenrail.energonrelics.item.MultimeterItem; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -15,7 +16,6 @@ import net.minecraft.block.entity.BlockEntityType; import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; -import net.minecraft.text.LiteralText; import net.minecraft.text.Text; import net.minecraft.text.TranslatableText; import net.minecraft.util.Formatting; @@ -40,7 +40,7 @@ public class BatteryCoreBlock extends SimpleBlockWithEntity { @Environment(EnvType.CLIENT) public void appendTooltip(ItemStack stack, BlockView world, List tooltip, TooltipContext options) { super.appendTooltip(stack, world, tooltip, options); - tooltip.add(new TranslatableText("text." + EnergonRelics.NAMESPACE + ".battery_core_tooltip", new LiteralText(String.valueOf(stack.getOrCreateTag().getCompound("BlockEntityTag").getInt("Energy")))).formatted(Formatting.GRAY)); + tooltip.add(new TranslatableText("text." + EnergonRelics.NAMESPACE + ".battery_core_tooltip", MultimeterItem.format(stack.getOrCreateTag().getCompound("BlockEntityTag").getLong("Energy")).formatted(Formatting.GRAY)).formatted(Formatting.GRAY)); } @Override diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/entity/SwitchBlockEntity.java b/src/main/java/com/thebrokenrail/energonrelics/block/entity/SwitchBlockEntity.java index 1304c9c..3ce128e 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/block/entity/SwitchBlockEntity.java +++ b/src/main/java/com/thebrokenrail/energonrelics/block/entity/SwitchBlockEntity.java @@ -2,6 +2,7 @@ package com.thebrokenrail.energonrelics.block.entity; import com.thebrokenrail.energonrelics.block.SwitchBlock; import com.thebrokenrail.energonrelics.energy.core.EnergyReceiverBlockEntity; +import com.thebrokenrail.energonrelics.energy.core.util.Action; import net.minecraft.block.entity.BlockEntityType; public class SwitchBlockEntity extends EnergyReceiverBlockEntity { @@ -19,7 +20,17 @@ public class SwitchBlockEntity extends EnergyReceiverBlockEntity { } @Override - protected boolean isEnergyProviderActive() { + protected void handlePropagatedAction(Action.PropagatedAction action) { + super.handlePropagatedAction(action); + // Propagate Action To Energy Providers + if (isActive() && !hasSent(action)) { + propagateAction(action); + } else { + action.pay(0); + } + } + + private boolean isActive() { return getCachedState().get(SwitchBlock.POWERED); } } diff --git a/src/main/java/com/thebrokenrail/energonrelics/energy/core/EnergyReceiverBlockEntity.java b/src/main/java/com/thebrokenrail/energonrelics/energy/core/EnergyReceiverBlockEntity.java index bde8c3a..aea66ee 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/energy/core/EnergyReceiverBlockEntity.java +++ b/src/main/java/com/thebrokenrail/energonrelics/energy/core/EnergyReceiverBlockEntity.java @@ -27,6 +27,10 @@ public abstract class EnergyReceiverBlockEntity extends EnergyProviderBlockEntit private final List sent = new ArrayList<>(); + protected boolean hasSent(Action.PropagatedAction action) { + return sent.contains(action); + } + protected void propagateAction(Action.PropagatedAction action) { sent.add(action); @@ -89,17 +93,6 @@ public abstract class EnergyReceiverBlockEntity extends EnergyProviderBlockEntit return previousTotalCost; } - @Override - protected void handlePropagatedAction(Action.PropagatedAction action) { - super.handlePropagatedAction(action); - // Propagate Action To Energy Providers - if (isEnergyProviderActive() && !sent.contains(action)) { - propagateAction(action); - } else { - action.pay(0); - } - } - @Override public CompoundTag toTag(CompoundTag tag) { super.toTag(tag); @@ -117,10 +110,6 @@ public abstract class EnergyReceiverBlockEntity extends EnergyProviderBlockEntit } } - protected boolean isEnergyProviderActive() { - throw new UnsupportedOperationException(); - } - protected abstract void energyTick(); public void toggle(int network) { diff --git a/src/main/java/com/thebrokenrail/energonrelics/item/MultimeterItem.java b/src/main/java/com/thebrokenrail/energonrelics/item/MultimeterItem.java index 2c6179e..556e77e 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/item/MultimeterItem.java +++ b/src/main/java/com/thebrokenrail/energonrelics/item/MultimeterItem.java @@ -25,7 +25,7 @@ public class MultimeterItem extends Item { MutableText getExtra(); } - private Text numberToText(long value) { + public static MutableText format(long value) { String str; if (value >= Long.MAX_VALUE) { str = "\u221e"; @@ -46,7 +46,7 @@ public class MultimeterItem extends Item { Text separator = new TranslatableText("text." + EnergonRelics.NAMESPACE + ".multimeter_separator").formatted(Formatting.YELLOW); if (entity instanceof EnergyGenerator) { if (!world.isClient() && context.getPlayer() != null) { - text.append(new TranslatableText("text." + EnergonRelics.NAMESPACE + ".energy_available", numberToText(((EnergyGenerator) entity).getDisplayEnergy())).formatted(Formatting.YELLOW)); + text.append(new TranslatableText("text." + EnergonRelics.NAMESPACE + ".energy_available", format(((EnergyGenerator) entity).getDisplayEnergy())).formatted(Formatting.YELLOW)); } success = true; } @@ -55,7 +55,7 @@ public class MultimeterItem extends Item { if (success) { text.append(separator); } - text.append(new TranslatableText("text." + EnergonRelics.NAMESPACE + ".energy_required", numberToText(((EnergyReceiverBlockEntity) entity).getTotalCost())).formatted(Formatting.YELLOW)); + text.append(new TranslatableText("text." + EnergonRelics.NAMESPACE + ".energy_required", format(((EnergyReceiverBlockEntity) entity).getTotalCost())).formatted(Formatting.YELLOW)); } success = true; } diff --git a/src/main/java/com/thebrokenrail/energonrelics/item/NetworkChipItem.java b/src/main/java/com/thebrokenrail/energonrelics/item/NetworkChipItem.java index 3376bfd..cf16976 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/item/NetworkChipItem.java +++ b/src/main/java/com/thebrokenrail/energonrelics/item/NetworkChipItem.java @@ -13,6 +13,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.ItemUsageContext; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.world.ServerWorld; +import net.minecraft.text.LiteralText; import net.minecraft.text.Text; import net.minecraft.text.TranslatableText; import net.minecraft.util.ActionResult; @@ -71,7 +72,7 @@ public class NetworkChipItem extends Item { super.appendTooltip(stack, world, tooltip, context); int id = getID(stack); if (id != -1) { - tooltip.add(new TranslatableText("item." + EnergonRelics.NAMESPACE + ".network_chip.tooltip", String.valueOf(id)).formatted(Formatting.GRAY)); + tooltip.add(new TranslatableText("item." + EnergonRelics.NAMESPACE + ".network_chip.tooltip", new LiteralText(String.valueOf(id)).formatted(Formatting.GRAY)).formatted(Formatting.GRAY)); } }