@@ -82,8 +82,8 @@ public void onClientTick(final TileMultiblockMachineController ctrl) {
8282 var world = ctrl .getWorld ();
8383 if (world .getWorldTime () % (1200 / MinuteScale ) == 0 ){
8484 var data = ctrl .getCustomDataTag ();
85- var energyStored = data .getString ("energyStored" ).isEmpty () ? "0" : data .getString ("energyStored" );
86- getEnergyInfo (world ,ctrl .getPos ()).addFirst (energyStored );
85+ var energyStored = data .getString ("energyStored" ).isEmpty () ? "0" : data .getString ("energyStored" );
86+ getEnergyInfo (world , ctrl .getPos ()).addFirst (energyStored );
8787 }
8888 }
8989
@@ -110,6 +110,7 @@ public void SInit(DynamicMachine machine){
110110 ctrl .getCustomDataTag ().setBoolean ("wireless" ,false );
111111 }
112112 });
113+
113114 var inputThreadName = "梦之收集者" ;
114115 machine .addCoreThread (FactoryRecipeThread .createCoreThread (inputThreadName ));
115116 var outputThreadName = "梦之释放者" ;
@@ -125,12 +126,11 @@ public void SInit(DynamicMachine machine){
125126 .addPreCheckHandler (event -> {
126127 var ctrl = event .getController ();
127128 var data = ctrl .getCustomDataTag ();
128- var speed = Math .max (1.0f ,data .getFloat ("speed" ));
129- var energy = data .hasKey ("energyStored" ) ? "0" : data .getString ("energyStored" );
130129 if (data .getBoolean ("wireless" )){
131130 event .setFailed ("当前处于通量模式" );
132131 return ;
133132 }
133+ var speed = Math .max (1.0f ,data .getFloat ("speed" ));
134134 if (!canExtract (data , speed )) {
135135 event .setFailed ("内部能量储量不足!" );
136136 return ;
@@ -142,6 +142,7 @@ public void SInit(DynamicMachine machine){
142142 var data = ctrl .getCustomDataTag ();
143143 var speed = Math .max (1.0f ,data .getFloat ("speed" ));
144144 extractEnergy (data , speed , defaultTransferAmount );
145+ ctrl .markNoUpdateSync ();
145146 })
146147 .setParallelized (false )
147148 .addRecipeTooltip ("由梦之收集者运行。" , "在智能数据接口处修改速度。" )
@@ -172,6 +173,7 @@ public void SInit(DynamicMachine machine){
172173 var data = ctrl .getCustomDataTag ();
173174 var speed = Math .max (1.0f ,data .getFloat ("speed" ));
174175 receiveEnergy (data , speed ,defaultTransferAmount );
176+ ctrl .markNoUpdateSync ();
175177 })
176178 .setParallelized (false )
177179 .addRecipeTooltip ("由梦之释放者运行。" , "在智能数据接口处修改速度。" )
@@ -222,10 +224,12 @@ private static boolean canExtract(NBTTagCompound nbt,float speed){
222224 * 将能量存储进控制器内部。
223225 */
224226 public static void receiveEnergy (NBTTagCompound nbt ,float speed ,long defaultTransferAmount ) {
225- var energyStored = getEnergyStored (nbt );
226- var sz = getBigInt ((long ) (speed * defaultTransferAmount ));
227+ synchronized (nbt ) {
228+ var energyStored = getEnergyStored (nbt );
229+ var sz = getBigInt ((long ) (speed * defaultTransferAmount ));
230+ nbt .setString ("energyStored" , energyStored .add (sz ).toString ());
231+ }
227232
228- nbt .setString ("energyStored" ,energyStored .add (sz ).toString ());
229233 if (ENERGY_STORED_CACHE .size () > 3000 ) {
230234 ENERGY_STORED_CACHE .clear ();
231235 }
@@ -235,10 +239,12 @@ public static void receiveEnergy(NBTTagCompound nbt,float speed,long defaultTran
235239 * 提取控制器内部能量至能量输出仓。
236240 */
237241 public static void extractEnergy (NBTTagCompound nbt ,float speed ,long defaultTransferAmount ) {
238- var energyStored = getEnergyStored (nbt );
239- var sz = getBigInt ((long ) (speed * defaultTransferAmount ));
242+ synchronized (nbt ) {
243+ var energyStored = getEnergyStored (nbt );
244+ var sz = getBigInt ((long ) (speed * defaultTransferAmount ));
245+ nbt .setString ("energyStored" ,energyStored .subtract (sz ).toString ());
246+ }
240247
241- nbt .setString ("energyStored" ,energyStored .subtract (sz ).toString ());
242248 if (ENERGY_STORED_CACHE .size () > 3000 ) {
243249 ENERGY_STORED_CACHE .clear ();
244250 }
@@ -262,6 +268,7 @@ public static BigInteger getEnergyStored(IMachineController ctrl){
262268 @ ZenMethod
263269 public static void receiveEnergy (IMachineController ctrl ,float speed ,long amount ){
264270 receiveEnergy (ctrl .getController ().getCustomDataTag (),speed ,amount );
271+ ctrl .getController ().markNoUpdateSync ();
265272 }
266273
267274 /**
@@ -273,6 +280,7 @@ public static void receiveEnergy(IMachineController ctrl,float speed,long amount
273280 @ ZenMethod
274281 public static void extractEnergy (IMachineController ctrl ,float speed ,long amount ){
275282 extractEnergy (ctrl .getController ().getCustomDataTag (),speed ,amount );
283+ ctrl .getController ().markNoUpdateSync ();
276284 }
277285
278286 @ ZenMethod
0 commit comments