Skip to content

Commit a065f90

Browse files
author
Circulate233
committed
修复梦之能量端口的一些问题
1 parent 5dcaf51 commit a065f90

File tree

3 files changed

+48
-16
lines changed

3 files changed

+48
-16
lines changed

src/main/java/github/kasuminova/novaeng/common/handler/DreamEnergyPortHandler.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ public void setCtrlPos(BlockPos ctrlPos) {
2929

3030
@Override
3131
public void onCycleStart() {
32-
3332
}
3433

3534
@Override
@@ -49,9 +48,12 @@ public void addToBuffer(long energy) {
4948
}
5049
}
5150

51+
boolean init = true;
52+
5253
public long removeFromBuffer(long energy) {
5354
long a = Math.min(Math.min(energy, this.getBuffer()), Math.max(Long.MAX_VALUE - this.removed,0));
54-
if (a <= 0L) {
55+
if (a <= 0L || init) {
56+
init = false;
5557
return 0L;
5658
} else {
5759
DreamEnergyCore.extractEnergy(getCtrl(),1,a);

src/main/java/github/kasuminova/novaeng/common/machine/DreamEnergyCore.java

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

src/main/java/github/kasuminova/novaeng/common/util/RecipePrimerEx.java

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
11
package github.kasuminova.novaeng.common.util;
22

33
import crafttweaker.annotations.ZenRegister;
4+
import crafttweaker.api.data.IData;
5+
import crafttweaker.api.minecraft.CraftTweakerMC;
46
import github.kasuminova.novaeng.mixin.util.NovaRAB;
57
import hellfirepvp.modularmachinery.common.crafting.helper.ComponentRequirement;
68
import hellfirepvp.modularmachinery.common.crafting.helper.ComponentSelectorTag;
79
import hellfirepvp.modularmachinery.common.crafting.requirement.RequirementItem;
810
import hellfirepvp.modularmachinery.common.integration.crafttweaker.RecipePrimer;
11+
import net.minecraft.nbt.NBTTagCompound;
12+
import net.minecraft.nbt.NBTTagList;
13+
import net.minecraft.nbt.NBTTagString;
14+
import net.minecraft.util.text.translation.I18n;
915
import stanhebben.zenscript.annotations.ZenExpansion;
1016
import stanhebben.zenscript.annotations.ZenMethod;
1117

@@ -26,10 +32,8 @@ public static RecipePrimer setItemTags(final RecipePrimer primer, final String t
2632
for (ComponentRequirement<?, ?> component : primer.getComponents()) {
2733
if (component instanceof RequirementItem) {
2834
switch (component.getActionType()) {
29-
case OUTPUT:
30-
if (isInput) continue;
31-
case INPUT:
32-
if (!isInput) continue;
35+
case OUTPUT -> {if (isInput) continue;}
36+
case INPUT -> {if (!isInput) continue;}
3337
}
3438
var tag = new ComponentSelectorTag(tagName);
3539
component.setTag(tag);
@@ -44,4 +48,22 @@ public static RecipePrimer setMultipleParallelized(final RecipePrimer primer, fi
4448
return primer;
4549
}
4650

51+
@ZenMethod
52+
public static RecipePrimer setLore(final RecipePrimer primer,String... key){
53+
primer.setPreViewNBT(getData(key));
54+
return primer;
55+
}
56+
57+
private static IData getData(String... key){
58+
var nbt = new NBTTagCompound();
59+
var nbt1 = new NBTTagCompound();
60+
var list = new NBTTagList();
61+
for (String s : key) {
62+
list.appendTag(new NBTTagString(I18n.translateToLocalFormatted(s)));
63+
}
64+
nbt1.setTag("Lore",list);
65+
nbt.setTag("display",nbt1);
66+
return CraftTweakerMC.getIData(nbt);
67+
}
68+
4769
}

0 commit comments

Comments
 (0)