Skip to content

Commit bb768d2

Browse files
committed
整理逻辑,整理API类
1 parent 1dce0c3 commit bb768d2

16 files changed

Lines changed: 304 additions & 55 deletions

File tree

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
package com.circulation.circulation_networks.api;
2+
3+
import com.circulation.circulation_networks.api.node.IEnergySupplyNode;
4+
import com.circulation.circulation_networks.api.node.INode;
5+
import com.circulation.circulation_networks.manager.EnergyMachineManager;
6+
import com.circulation.circulation_networks.manager.NetworkManager;
7+
import com.circulation.circulation_networks.registry.RegistryEnergyHandler;
8+
import com.circulation.circulation_networks.registry.RegistryNodes;
9+
import it.unimi.dsi.fastutil.objects.ReferenceSet;
10+
import net.minecraft.tileentity.TileEntity;
11+
import net.minecraft.util.math.BlockPos;
12+
import net.minecraft.util.math.ChunkPos;
13+
import net.minecraft.world.World;
14+
15+
import javax.annotation.Nonnull;
16+
import javax.annotation.Nullable;
17+
import java.util.Collection;
18+
import java.util.Set;
19+
20+
/**
21+
* 仅作为一个API方法汇总
22+
* 这个类的方法不应该被重命名
23+
*/
24+
@SuppressWarnings("unused")
25+
public final class API {
26+
27+
/**
28+
* @param world 节点所在的世界
29+
* @param pos 节点位置
30+
* @return 可能存在的节点
31+
* 可以捕获到未被加载的区块的节点
32+
*/
33+
@Nullable
34+
public static INode getNodeAt(@Nonnull World world, @Nonnull BlockPos pos) {
35+
return NetworkManager.INSTANCE.getNodeFromPos(world, pos);
36+
}
37+
38+
/**
39+
* @return 全部可用状态的网络
40+
*/
41+
@Nonnull
42+
public static Collection<IGrid> getAllGrids() {
43+
return NetworkManager.INSTANCE.getAllGrids();
44+
}
45+
46+
/**
47+
* @param world 节点所在的世界
48+
* @param pos 被检查的位置
49+
* @return 可能可以链接这个位置上节点的所有节点
50+
*/
51+
@Nonnull
52+
public static ReferenceSet<INode> getNodesCoveringPos(@Nonnull World world, @Nonnull BlockPos pos) {
53+
return NetworkManager.INSTANCE.getNodesCoveringPosition(world, pos);
54+
}
55+
56+
/**
57+
* @param pos 目标位置
58+
* @return 可能为此位置的机器供能的所有节点
59+
*/
60+
@Nonnull
61+
public static ReferenceSet<IEnergySupplyNode> getEnergyNodes(@Nonnull World world, @Nonnull BlockPos pos) {
62+
return EnergyMachineManager.INSTANCE.getEnergyNodes(world, pos);
63+
}
64+
65+
/**
66+
* @param pos 目标位置
67+
* @return 可能为此位置的机器供能的所有节点
68+
*/
69+
@Nonnull
70+
public static ReferenceSet<IEnergySupplyNode> getEnergyNodes(@Nonnull World world, @Nonnull ChunkPos pos) {
71+
return EnergyMachineManager.INSTANCE.getEnergyNodes(world, pos);
72+
}
73+
74+
/**
75+
* @param world 节点所在的世界
76+
* @param pos 被检查的区块
77+
* @return 可能可以链接这个区块中节点的所有节点
78+
*/
79+
@Nonnull
80+
public static ReferenceSet<INode> getNodesCoveringChunk(@Nonnull World world, @Nonnull ChunkPos pos) {
81+
return NetworkManager.INSTANCE.getNodesCoveringPosition(world, pos);
82+
}
83+
84+
/**
85+
* @param world 节点所在的世界
86+
* @param chunk 节点所在的区块
87+
* @return 区块中所有的生效节点
88+
*/
89+
@Nonnull
90+
public static ReferenceSet<INode> getNodesInChunk(@Nonnull World world, @Nonnull ChunkPos chunk) {
91+
return NetworkManager.INSTANCE.getNodesInChunk(world, chunk);
92+
}
93+
94+
/**
95+
* 注册自定义的能量管理器
96+
* 只允许在postinit阶段前进行注册
97+
*/
98+
public static void registerEnergyHandler(@Nonnull IEnergyHandlerManager manager) {
99+
RegistryEnergyHandler.registerEnergyHandler(manager);
100+
}
101+
102+
/**
103+
* @param nodeClass 节点的class
104+
* @param function 从NBT中反序列化回节点的方法
105+
*/
106+
public static void registerNode(@Nonnull Class<? extends INode> nodeClass, @Nonnull RegistryNodes.DeserializationNode function) {
107+
RegistryNodes.register(nodeClass, function);
108+
}
109+
110+
/**
111+
* @param node 节点,不应该是机器节点
112+
* @return 节点所供能的所有设备
113+
* 注意:返回的设备可能包含带有IMachineNode的设备
114+
*/
115+
@Nonnull
116+
public Set<TileEntity> getMachinesSuppliedBy(IEnergySupplyNode node) {
117+
return EnergyMachineManager.INSTANCE.getMachinesSuppliedBy(node);
118+
}
119+
120+
121+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.circulation.circulation_networks.events;
2+
3+
import com.circulation.circulation_networks.api.node.INode;
4+
import lombok.Getter;
5+
import net.minecraft.tileentity.TileEntity;
6+
import net.minecraftforge.fml.common.eventhandler.Cancelable;
7+
8+
public class AddNodeEvent extends NodeEvent {
9+
10+
@Getter
11+
private final TileEntity tileEntity;
12+
13+
public AddNodeEvent(INode node, TileEntity tile) {
14+
super(node);
15+
this.tileEntity = tile;
16+
}
17+
18+
@Cancelable
19+
public static class Pre extends AddNodeEvent {
20+
21+
public Pre(INode node, TileEntity tile) {
22+
super(node, tile);
23+
}
24+
25+
@Override
26+
public boolean isCancelable() {
27+
return true;
28+
}
29+
}
30+
31+
public static class Post extends AddNodeEvent {
32+
33+
public Post(INode node, TileEntity tile) {
34+
super(node, tile);
35+
}
36+
}
37+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.circulation.circulation_networks.events;
2+
3+
import com.circulation.circulation_networks.api.node.INode;
4+
import lombok.Getter;
5+
import net.minecraftforge.fml.common.eventhandler.Event;
6+
7+
public abstract class NodeEvent extends Event {
8+
9+
@Getter
10+
private final INode node;
11+
12+
public NodeEvent(INode node) {
13+
this.node = node;
14+
}
15+
16+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.circulation.circulation_networks.events;
2+
3+
import com.circulation.circulation_networks.api.node.INode;
4+
5+
public class RemoveNodeEvent extends NodeEvent {
6+
7+
public RemoveNodeEvent(INode node) {
8+
super(node);
9+
}
10+
11+
public static class Pre extends RemoveNodeEvent {
12+
public Pre(INode node) {
13+
super(node);
14+
}
15+
}
16+
17+
public static class Post extends RemoveNodeEvent {
18+
public Post(INode node) {
19+
super(node);
20+
}
21+
}
22+
}

src/main/java/com/circulation/circulation_networks/utils/TileEntityLifeCycleEvent.java renamed to src/main/java/com/circulation/circulation_networks/events/TileEntityLifeCycleEvent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.circulation.circulation_networks.utils;
1+
package com.circulation.circulation_networks.events;
22

33
import lombok.Getter;
44
import net.minecraft.tileentity.TileEntity;

src/main/java/com/circulation/circulation_networks/manager/ChargingManager.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,21 @@
55
import com.circulation.circulation_networks.api.IGrid;
66
import com.circulation.circulation_networks.api.node.IChargingNode;
77
import com.circulation.circulation_networks.api.node.INode;
8+
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
9+
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
810
import it.unimi.dsi.fastutil.objects.Object2ObjectMap;
911
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
1012
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
1113
import it.unimi.dsi.fastutil.objects.ObjectLists;
1214
import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
1315
import it.unimi.dsi.fastutil.objects.ObjectSet;
1416
import it.unimi.dsi.fastutil.objects.ObjectSets;
15-
import it.unimi.dsi.fastutil.objects.Reference2ObjectMap;
1617
import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap;
1718
import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet;
1819
import it.unimi.dsi.fastutil.objects.ReferenceSet;
1920
import it.unimi.dsi.fastutil.objects.ReferenceSets;
2021
import net.minecraft.entity.player.EntityPlayer;
2122
import net.minecraft.util.math.ChunkPos;
22-
import net.minecraft.world.World;
2323
import net.minecraftforge.fml.common.Loader;
2424
import net.minecraftforge.fml.common.Optional;
2525

@@ -36,8 +36,8 @@ public final class ChargingManager {
3636
public static final ChargingManager INSTANCE = new ChargingManager();
3737
private static final boolean loadBaubles = Loader.isModLoaded("baubles");
3838

39-
private final Reference2ObjectMap<World, Object2ObjectMap<ChunkPos, ReferenceSet<IChargingNode>>> scopeNode = new Reference2ObjectOpenHashMap<>();
40-
private final Reference2ObjectMap<World, Object2ObjectMap<IChargingNode, ObjectSet<ChunkPos>>> nodeScope = new Reference2ObjectOpenHashMap<>();
39+
private final Int2ObjectMap<Object2ObjectMap<ChunkPos, ReferenceSet<IChargingNode>>> scopeNode = new Int2ObjectOpenHashMap<>();
40+
private final Int2ObjectMap<Object2ObjectMap<IChargingNode, ObjectSet<ChunkPos>>> nodeScope = new Int2ObjectOpenHashMap<>();
4141

4242
@Optional.Method(modid = "baubles")
4343
private static void checkBaubles(Collection<IEnergyHandler> invs, EntityPlayer player) {
@@ -128,7 +128,7 @@ public void addNode(INode node) {
128128
chunksCovered.add(chunkPos);
129129

130130
var map = scopeNode.computeIfAbsent(
131-
node.getWorld(), k -> {
131+
node.getWorld().provider.getDimension(), k -> {
132132
var m = new Object2ObjectOpenHashMap<ChunkPos, ReferenceSet<IChargingNode>>();
133133
m.defaultReturnValue(ReferenceSets.emptySet());
134134
return m;
@@ -143,7 +143,7 @@ public void addNode(INode node) {
143143
}
144144

145145
nodeScope.computeIfAbsent(
146-
node.getWorld(), k -> {
146+
node.getWorld().provider.getDimension(), k -> {
147147
var m = new Object2ObjectOpenHashMap<IChargingNode, ObjectSet<ChunkPos>>();
148148
m.defaultReturnValue(ObjectSets.emptySet());
149149
return m;

0 commit comments

Comments
 (0)