diff --git a/src/main/java/com/xekr/ironstars/IronStarsUtil.java b/src/main/java/com/xekr/ironstars/IronStarsUtil.java index eb8eb43..60df885 100644 --- a/src/main/java/com/xekr/ironstars/IronStarsUtil.java +++ b/src/main/java/com/xekr/ironstars/IronStarsUtil.java @@ -3,6 +3,10 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import java.util.Random; + public class IronStarsUtil { public static final Gson GSON = new GsonBuilder().setPrettyPrinting().create(); + + public static final Random RANDOM = new Random(); } diff --git a/src/main/java/com/xekr/ironstars/blocks/entity/AbstractEfficiencyBlockEntity.java b/src/main/java/com/xekr/ironstars/blocks/entity/AbstractEFFBlockEntity.java similarity index 68% rename from src/main/java/com/xekr/ironstars/blocks/entity/AbstractEfficiencyBlockEntity.java rename to src/main/java/com/xekr/ironstars/blocks/entity/AbstractEFFBlockEntity.java index c336840..92f2d36 100644 --- a/src/main/java/com/xekr/ironstars/blocks/entity/AbstractEfficiencyBlockEntity.java +++ b/src/main/java/com/xekr/ironstars/blocks/entity/AbstractEFFBlockEntity.java @@ -5,7 +5,9 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraftforge.common.capabilities.Capability; @@ -13,13 +15,17 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -@Deprecated //TODO 先写着, 写完再去掉 -public abstract class AbstractEfficiencyBlockEntity extends BlockEntity { +import java.util.Collections; +import java.util.List; +import java.util.UUID; + +public abstract class AbstractEFFBlockEntity extends BlockEntity { private int lazyTickCounter = 0; - @Nullable private BlockPos source; + @Nullable private UUID netId = null; + private List sources = Collections.emptyList(); - protected AbstractEfficiencyBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { + protected AbstractEFFBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { super(type, pos, state); } @@ -43,7 +49,17 @@ public void load(CompoundTag pTag) { protected void saveAdditional(CompoundTag pTag) { } - public abstract int getGeneratedEfficiency(); + public UUID getNetwork() { + return this.netId; + } + + public boolean hasNetwork() { + return this.netId != null; + } + + public abstract boolean isSourceMachine(); + + public abstract int getMachineEfficiency(); public abstract boolean canOutput(@Nullable Direction side); diff --git a/src/main/java/com/xekr/ironstars/efficiency/EFFNetwork.java b/src/main/java/com/xekr/ironstars/efficiency/EFFNetwork.java new file mode 100644 index 0000000..b028a3a --- /dev/null +++ b/src/main/java/com/xekr/ironstars/efficiency/EFFNetwork.java @@ -0,0 +1,35 @@ +package com.xekr.ironstars.efficiency; + +import com.xekr.ironstars.IronStarsUtil; +import com.xekr.ironstars.blocks.entity.AbstractEFFBlockEntity; +import net.minecraft.util.Mth; + +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.UUID; + +public class EFFNetwork { + private static final Map NETWORK = new HashMap<>(); + + private final UUID id; + private final Map sources = new HashMap<>(); + private final Map members = new LinkedHashMap<>(); + + private EFFNetwork(AbstractEFFBlockEntity blockEntity) { + this.id = Mth.createInsecureUUID(IronStarsUtil.RANDOM); + this.sources.put(blockEntity, blockEntity.getMachineEfficiency()); + } + + public static EFFNetwork create(AbstractEFFBlockEntity blockEntity) { + if (blockEntity.hasNetwork() || !blockEntity.isSourceMachine()) return null; + EFFNetwork network = new EFFNetwork(blockEntity); + NETWORK.put(network.id, network); + return network; + } + + + + + +} diff --git a/src/main/java/com/xekr/ironstars/efficiency/EfficiencyNetwork.java b/src/main/java/com/xekr/ironstars/efficiency/EfficiencyNetwork.java deleted file mode 100644 index d24dc6c..0000000 --- a/src/main/java/com/xekr/ironstars/efficiency/EfficiencyNetwork.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.xekr.ironstars.efficiency; - -public class EfficiencyNetwork { -}