mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-12-29 00:16:27 +01:00
Buffing the Buffers
- Fixed large amounts of output in crushing wheels getting voided due to its buffer capacity - Fixed basin processing running constant recipe lookups while backed up #1911 - Fixed mixer retracting after every operation when auto-output is active
This commit is contained in:
parent
7ed7b957dd
commit
352f213429
14 changed files with 113 additions and 63 deletions
|
@ -426,17 +426,17 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j
|
||||||
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
|
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
|
||||||
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
|
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
|
||||||
e1d3c02695cbd2ee7bbede97f72941835634a3a5 assets/create/lang/en_ud.json
|
e1d3c02695cbd2ee7bbede97f72941835634a3a5 assets/create/lang/en_ud.json
|
||||||
c75657997c7adf06fd12020aacc9465605563183 assets/create/lang/en_us.json
|
7628f0328198a4100dc938de4c4ea8f792473a85 assets/create/lang/en_us.json
|
||||||
94f26bdaf8d1a39c25c4da551530696d4ff8b24c assets/create/lang/unfinished/de_de.json
|
54c93de1ca876299fc34dc593580aeed5748aa15 assets/create/lang/unfinished/de_de.json
|
||||||
51ed1df10b8afcf27f9dcdae3bca80d05740d450 assets/create/lang/unfinished/es_es.json
|
51ed1df10b8afcf27f9dcdae3bca80d05740d450 assets/create/lang/unfinished/es_es.json
|
||||||
47bf5a31dfd8530a0db9813a56b762cf3129ddc6 assets/create/lang/unfinished/es_mx.json
|
72e1a89ef45c530eaab6f27b4d2dd447775b5d0a assets/create/lang/unfinished/es_mx.json
|
||||||
8bc26af581f714ea54f6e1a89ee2cbac917bf7df assets/create/lang/unfinished/fr_fr.json
|
0da959961c4bde45bcef869bc9bd58eac1d3bd40 assets/create/lang/unfinished/fr_fr.json
|
||||||
e1c11002170d4c0acb9ef442c41ea04b99d20440 assets/create/lang/unfinished/it_it.json
|
ba963b9db50f0ea57dee1a93664aacf2dc44eec5 assets/create/lang/unfinished/it_it.json
|
||||||
caa45f4ae4e4e9b338999b7975767dc33e569881 assets/create/lang/unfinished/ja_jp.json
|
caa45f4ae4e4e9b338999b7975767dc33e569881 assets/create/lang/unfinished/ja_jp.json
|
||||||
aaa8ecc84b853cc8a93f8d5812f22beefaf48266 assets/create/lang/unfinished/ko_kr.json
|
aaa8ecc84b853cc8a93f8d5812f22beefaf48266 assets/create/lang/unfinished/ko_kr.json
|
||||||
9e32f7de0acff6ee4ee6bfa5beb5a4c103cdcb0a assets/create/lang/unfinished/nl_nl.json
|
2046b5e7c9904f6ac07d7f9b94fd80a52a1f5721 assets/create/lang/unfinished/nl_nl.json
|
||||||
70f552fe3bd0365d9f1f339032bc598bc0ff9026 assets/create/lang/unfinished/pl_pl.json
|
70f552fe3bd0365d9f1f339032bc598bc0ff9026 assets/create/lang/unfinished/pl_pl.json
|
||||||
83422c331b7c670d1dc8450e0b02a6443fc8ca1b assets/create/lang/unfinished/pt_br.json
|
427a0252a5f3d5282ab572c6b06638117ed68760 assets/create/lang/unfinished/pt_br.json
|
||||||
f12de6d61ff3f634e5af7485230032202ce0f9de assets/create/lang/unfinished/ru_ru.json
|
f12de6d61ff3f634e5af7485230032202ce0f9de assets/create/lang/unfinished/ru_ru.json
|
||||||
75c32bf33d907d0575d05ad575566d50bc78c1c9 assets/create/lang/unfinished/zh_cn.json
|
75c32bf33d907d0575d05ad575566d50bc78c1c9 assets/create/lang/unfinished/zh_cn.json
|
||||||
32a411bf248dae1eeb8a3e7d9450e5c1b9cd0b59 assets/create/lang/unfinished/zh_tw.json
|
32a411bf248dae1eeb8a3e7d9450e5c1b9cd0b59 assets/create/lang/unfinished/zh_tw.json
|
||||||
|
@ -1699,7 +1699,7 @@ d080b1b25e5bc8baf5aee68691b08c7f12ece3b0 assets/create/models/item/windmill_bear
|
||||||
a80fb25a0b655e76be986b5b49fcb0f03461a1ab assets/create/models/item/zinc_nugget.json
|
a80fb25a0b655e76be986b5b49fcb0f03461a1ab assets/create/models/item/zinc_nugget.json
|
||||||
b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json
|
b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json
|
||||||
58880e397902f8ca5b3b59ed4423e626109ddc4c assets/create/sounds.json
|
58880e397902f8ca5b3b59ed4423e626109ddc4c assets/create/sounds.json
|
||||||
5d0cc4c0255dc241e61c173b31ddca70c88d08e4 data/create/advancements/aesthetics.json
|
0f1b4b980afba9bf2caf583b88e261bba8b10313 data/create/advancements/aesthetics.json
|
||||||
187921fa131b06721bfaf63f2623a28c141aae9a data/create/advancements/andesite_alloy.json
|
187921fa131b06721bfaf63f2623a28c141aae9a data/create/advancements/andesite_alloy.json
|
||||||
0ea2db7173b5be28b289ea7c9a6a0cf5805c60c7 data/create/advancements/andesite_casing.json
|
0ea2db7173b5be28b289ea7c9a6a0cf5805c60c7 data/create/advancements/andesite_casing.json
|
||||||
83c046bd200623933545c9e4326f782fb02c87fa data/create/advancements/arm_blaze_burner.json
|
83c046bd200623933545c9e4326f782fb02c87fa data/create/advancements/arm_blaze_burner.json
|
||||||
|
|
|
@ -1765,7 +1765,7 @@
|
||||||
"create.ponder.empty_blaze_burner.text_3": "You now have an ideal heat source for various machines",
|
"create.ponder.empty_blaze_burner.text_3": "You now have an ideal heat source for various machines",
|
||||||
"create.ponder.empty_blaze_burner.text_4": "For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel",
|
"create.ponder.empty_blaze_burner.text_4": "For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel",
|
||||||
"create.ponder.empty_blaze_burner.text_5": "The flame can be transformed using a soul-infused item",
|
"create.ponder.empty_blaze_burner.text_5": "The flame can be transformed using a soul-infused item",
|
||||||
"create.ponder.empty_blaze_burner.text_6": "However, these are not suitable for industrial heating",
|
"create.ponder.empty_blaze_burner.text_6": "However, without a blaze they are not suitable for industrial heating",
|
||||||
|
|
||||||
"create.ponder.encased_fluid_pipe.header": "Encasing Fluid Pipes",
|
"create.ponder.encased_fluid_pipe.header": "Encasing Fluid Pipes",
|
||||||
"create.ponder.encased_fluid_pipe.text_1": "Copper Casing can be used to decorate Fluid Pipes",
|
"create.ponder.encased_fluid_pipe.text_1": "Copper Casing can be used to decorate Fluid Pipes",
|
||||||
|
|
|
@ -1766,7 +1766,7 @@
|
||||||
"create.ponder.empty_blaze_burner.text_3": "UNLOCALIZED: You now have an ideal heat source for various machines",
|
"create.ponder.empty_blaze_burner.text_3": "UNLOCALIZED: You now have an ideal heat source for various machines",
|
||||||
"create.ponder.empty_blaze_burner.text_4": "UNLOCALIZED: For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel",
|
"create.ponder.empty_blaze_burner.text_4": "UNLOCALIZED: For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel",
|
||||||
"create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item",
|
"create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item",
|
||||||
"create.ponder.empty_blaze_burner.text_6": "UNLOCALIZED: However, these are not suitable for industrial heating",
|
"create.ponder.empty_blaze_burner.text_6": "UNLOCALIZED: However, without a blaze they are not suitable for industrial heating",
|
||||||
|
|
||||||
"create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes",
|
"create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes",
|
||||||
"create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes",
|
"create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes",
|
||||||
|
|
|
@ -1766,7 +1766,7 @@
|
||||||
"create.ponder.empty_blaze_burner.text_3": "UNLOCALIZED: You now have an ideal heat source for various machines",
|
"create.ponder.empty_blaze_burner.text_3": "UNLOCALIZED: You now have an ideal heat source for various machines",
|
||||||
"create.ponder.empty_blaze_burner.text_4": "UNLOCALIZED: For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel",
|
"create.ponder.empty_blaze_burner.text_4": "UNLOCALIZED: For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel",
|
||||||
"create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item",
|
"create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item",
|
||||||
"create.ponder.empty_blaze_burner.text_6": "UNLOCALIZED: However, these are not suitable for industrial heating",
|
"create.ponder.empty_blaze_burner.text_6": "UNLOCALIZED: However, without a blaze they are not suitable for industrial heating",
|
||||||
|
|
||||||
"create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes",
|
"create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes",
|
||||||
"create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes",
|
"create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes",
|
||||||
|
|
|
@ -1766,7 +1766,7 @@
|
||||||
"create.ponder.empty_blaze_burner.text_3": "UNLOCALIZED: You now have an ideal heat source for various machines",
|
"create.ponder.empty_blaze_burner.text_3": "UNLOCALIZED: You now have an ideal heat source for various machines",
|
||||||
"create.ponder.empty_blaze_burner.text_4": "UNLOCALIZED: For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel",
|
"create.ponder.empty_blaze_burner.text_4": "UNLOCALIZED: For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel",
|
||||||
"create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item",
|
"create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item",
|
||||||
"create.ponder.empty_blaze_burner.text_6": "UNLOCALIZED: However, these are not suitable for industrial heating",
|
"create.ponder.empty_blaze_burner.text_6": "UNLOCALIZED: However, without a blaze they are not suitable for industrial heating",
|
||||||
|
|
||||||
"create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes",
|
"create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes",
|
||||||
"create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes",
|
"create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes",
|
||||||
|
|
|
@ -1766,7 +1766,7 @@
|
||||||
"create.ponder.empty_blaze_burner.text_3": "UNLOCALIZED: You now have an ideal heat source for various machines",
|
"create.ponder.empty_blaze_burner.text_3": "UNLOCALIZED: You now have an ideal heat source for various machines",
|
||||||
"create.ponder.empty_blaze_burner.text_4": "UNLOCALIZED: For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel",
|
"create.ponder.empty_blaze_burner.text_4": "UNLOCALIZED: For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel",
|
||||||
"create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item",
|
"create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item",
|
||||||
"create.ponder.empty_blaze_burner.text_6": "UNLOCALIZED: However, these are not suitable for industrial heating",
|
"create.ponder.empty_blaze_burner.text_6": "UNLOCALIZED: However, without a blaze they are not suitable for industrial heating",
|
||||||
|
|
||||||
"create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes",
|
"create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes",
|
||||||
"create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes",
|
"create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes",
|
||||||
|
|
|
@ -1766,7 +1766,7 @@
|
||||||
"create.ponder.empty_blaze_burner.text_3": "UNLOCALIZED: You now have an ideal heat source for various machines",
|
"create.ponder.empty_blaze_burner.text_3": "UNLOCALIZED: You now have an ideal heat source for various machines",
|
||||||
"create.ponder.empty_blaze_burner.text_4": "UNLOCALIZED: For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel",
|
"create.ponder.empty_blaze_burner.text_4": "UNLOCALIZED: For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel",
|
||||||
"create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item",
|
"create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item",
|
||||||
"create.ponder.empty_blaze_burner.text_6": "UNLOCALIZED: However, these are not suitable for industrial heating",
|
"create.ponder.empty_blaze_burner.text_6": "UNLOCALIZED: However, without a blaze they are not suitable for industrial heating",
|
||||||
|
|
||||||
"create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes",
|
"create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes",
|
||||||
"create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes",
|
"create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes",
|
||||||
|
|
|
@ -1766,7 +1766,7 @@
|
||||||
"create.ponder.empty_blaze_burner.text_3": "UNLOCALIZED: You now have an ideal heat source for various machines",
|
"create.ponder.empty_blaze_burner.text_3": "UNLOCALIZED: You now have an ideal heat source for various machines",
|
||||||
"create.ponder.empty_blaze_burner.text_4": "UNLOCALIZED: For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel",
|
"create.ponder.empty_blaze_burner.text_4": "UNLOCALIZED: For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel",
|
||||||
"create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item",
|
"create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item",
|
||||||
"create.ponder.empty_blaze_burner.text_6": "UNLOCALIZED: However, these are not suitable for industrial heating",
|
"create.ponder.empty_blaze_burner.text_6": "UNLOCALIZED: However, without a blaze they are not suitable for industrial heating",
|
||||||
|
|
||||||
"create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes",
|
"create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes",
|
||||||
"create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes",
|
"create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes",
|
||||||
|
|
|
@ -28,8 +28,8 @@
|
||||||
"trigger": "create:bracket_apply",
|
"trigger": "create:bracket_apply",
|
||||||
"conditions": {
|
"conditions": {
|
||||||
"accepted_entries": [
|
"accepted_entries": [
|
||||||
"create:large_cogwheel",
|
"create:cogwheel",
|
||||||
"create:cogwheel"
|
"create:large_cogwheel"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -197,7 +197,9 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity {
|
||||||
finished = true;
|
finished = true;
|
||||||
running = false;
|
running = false;
|
||||||
|
|
||||||
if (onBasin() && matchBasinRecipe(currentRecipe))
|
if (onBasin() && matchBasinRecipe(currentRecipe)
|
||||||
|
&& getBasin().filter(BasinTileEntity::canContinueProcessing)
|
||||||
|
.isPresent())
|
||||||
startProcessingBasin();
|
startProcessingBasin();
|
||||||
|
|
||||||
pressedItems.clear();
|
pressedItems.clear();
|
||||||
|
|
|
@ -60,9 +60,12 @@ public abstract class BasinOperatingTileEntity extends KineticTileEntity {
|
||||||
if (getSpeed() == 0)
|
if (getSpeed() == 0)
|
||||||
return true;
|
return true;
|
||||||
if (isRunning())
|
if (isRunning())
|
||||||
return false;
|
return true;
|
||||||
if (world == null || world.isRemote)
|
if (world == null || world.isRemote)
|
||||||
return true;
|
return true;
|
||||||
|
if (!getBasin().filter(BasinTileEntity::canContinueProcessing)
|
||||||
|
.isPresent())
|
||||||
|
return true;
|
||||||
|
|
||||||
List<IRecipe<?>> recipes = getMatchingRecipes();
|
List<IRecipe<?>> recipes = getMatchingRecipes();
|
||||||
if (recipes.isEmpty())
|
if (recipes.isEmpty())
|
||||||
|
@ -98,6 +101,7 @@ public abstract class BasinOperatingTileEntity extends KineticTileEntity {
|
||||||
if (!optionalBasin.isPresent())
|
if (!optionalBasin.isPresent())
|
||||||
return;
|
return;
|
||||||
BasinTileEntity basin = optionalBasin.get();
|
BasinTileEntity basin = optionalBasin.get();
|
||||||
|
boolean wasEmpty = basin.canContinueProcessing();
|
||||||
if (!BasinRecipe.apply(basin, currentRecipe))
|
if (!BasinRecipe.apply(basin, currentRecipe))
|
||||||
return;
|
return;
|
||||||
Optional<ITriggerable> processedRecipeTrigger = getProcessedRecipeTrigger();
|
Optional<ITriggerable> processedRecipeTrigger = getProcessedRecipeTrigger();
|
||||||
|
@ -106,7 +110,7 @@ public abstract class BasinOperatingTileEntity extends KineticTileEntity {
|
||||||
basin.inputTank.sendDataImmediately();
|
basin.inputTank.sendDataImmediately();
|
||||||
|
|
||||||
// Continue mixing
|
// Continue mixing
|
||||||
if (matchBasinRecipe(currentRecipe)) {
|
if (wasEmpty && matchBasinRecipe(currentRecipe)) {
|
||||||
continueWithPreviousRecipe();
|
continueWithPreviousRecipe();
|
||||||
sendData();
|
sendData();
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,6 +88,7 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
||||||
List<Direction> disabledSpoutputs;
|
List<Direction> disabledSpoutputs;
|
||||||
Direction preferredSpoutput;
|
Direction preferredSpoutput;
|
||||||
protected List<ItemStack> spoutputBuffer;
|
protected List<ItemStack> spoutputBuffer;
|
||||||
|
protected List<FluidStack> spoutputFluidBuffer;
|
||||||
|
|
||||||
public static final int OUTPUT_ANIMATION_TIME = 10;
|
public static final int OUTPUT_ANIMATION_TIME = 10;
|
||||||
List<IntAttached<ItemStack>> visualizedOutputItems;
|
List<IntAttached<ItemStack>> visualizedOutputItems;
|
||||||
|
@ -114,6 +115,7 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
||||||
disabledSpoutputs = new ArrayList<>();
|
disabledSpoutputs = new ArrayList<>();
|
||||||
preferredSpoutput = null;
|
preferredSpoutput = null;
|
||||||
spoutputBuffer = new ArrayList<>();
|
spoutputBuffer = new ArrayList<>();
|
||||||
|
spoutputFluidBuffer = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -152,6 +154,8 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
||||||
ListNBT disabledList = compound.getList("DisabledSpoutput", NBT.TAG_STRING);
|
ListNBT disabledList = compound.getList("DisabledSpoutput", NBT.TAG_STRING);
|
||||||
disabledList.forEach(d -> disabledSpoutputs.add(Direction.valueOf(((StringNBT) d).getString())));
|
disabledList.forEach(d -> disabledSpoutputs.add(Direction.valueOf(((StringNBT) d).getString())));
|
||||||
spoutputBuffer = NBTHelper.readItemList(compound.getList("Overflow", NBT.TAG_COMPOUND));
|
spoutputBuffer = NBTHelper.readItemList(compound.getList("Overflow", NBT.TAG_COMPOUND));
|
||||||
|
spoutputFluidBuffer = NBTHelper.readCompoundList(compound.getList("FluidOverflow", NBT.TAG_COMPOUND),
|
||||||
|
FluidStack::loadFluidStackFromNBT);
|
||||||
|
|
||||||
if (!clientPacket)
|
if (!clientPacket)
|
||||||
return;
|
return;
|
||||||
|
@ -175,6 +179,8 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
||||||
disabledSpoutputs.forEach(d -> disabledList.add(StringNBT.of(d.name())));
|
disabledSpoutputs.forEach(d -> disabledList.add(StringNBT.of(d.name())));
|
||||||
compound.put("DisabledSpoutput", disabledList);
|
compound.put("DisabledSpoutput", disabledList);
|
||||||
compound.put("Overflow", NBTHelper.writeItemList(spoutputBuffer));
|
compound.put("Overflow", NBTHelper.writeItemList(spoutputBuffer));
|
||||||
|
compound.put("FluidOverflow",
|
||||||
|
NBTHelper.writeCompoundList(spoutputFluidBuffer, fs -> fs.writeToNBT(new CompoundNBT())));
|
||||||
|
|
||||||
if (!clientPacket)
|
if (!clientPacket)
|
||||||
return;
|
return;
|
||||||
|
@ -280,11 +286,11 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
||||||
ingredientRotation.setValue(ingredientRotation.getValue() + ingredientRotationSpeed.getValue());
|
ingredientRotation.setValue(ingredientRotation.getValue() + ingredientRotationSpeed.getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!spoutputBuffer.isEmpty() && !world.isRemote)
|
if ((!spoutputBuffer.isEmpty() || !spoutputFluidBuffer.isEmpty()) && !world.isRemote)
|
||||||
tryClearingSpoutputOverflow();
|
tryClearingSpoutputOverflow();
|
||||||
|
|
||||||
if (!contentsChanged)
|
if (!contentsChanged)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
contentsChanged = false;
|
contentsChanged = false;
|
||||||
getOperator().ifPresent(te -> te.basinChecker.scheduleUpdate());
|
getOperator().ifPresent(te -> te.basinChecker.scheduleUpdate());
|
||||||
|
|
||||||
|
@ -308,15 +314,22 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
||||||
Direction direction = blockState.get(BasinBlock.FACING);
|
Direction direction = blockState.get(BasinBlock.FACING);
|
||||||
TileEntity te = world.getTileEntity(pos.down()
|
TileEntity te = world.getTileEntity(pos.down()
|
||||||
.offset(direction));
|
.offset(direction));
|
||||||
|
|
||||||
FilteringBehaviour filter = null;
|
FilteringBehaviour filter = null;
|
||||||
InvManipulationBehaviour inserter = null;
|
InvManipulationBehaviour inserter = null;
|
||||||
if (te != null) {
|
if (te != null) {
|
||||||
filter = TileEntityBehaviour.get(world, te.getPos(), FilteringBehaviour.TYPE);
|
filter = TileEntityBehaviour.get(world, te.getPos(), FilteringBehaviour.TYPE);
|
||||||
inserter = TileEntityBehaviour.get(world, te.getPos(), InvManipulationBehaviour.TYPE);
|
inserter = TileEntityBehaviour.get(world, te.getPos(), InvManipulationBehaviour.TYPE);
|
||||||
}
|
}
|
||||||
|
|
||||||
IItemHandler targetInv = te == null ? null
|
IItemHandler targetInv = te == null ? null
|
||||||
: te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, direction.getOpposite())
|
: te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, direction.getOpposite())
|
||||||
.orElse(inserter == null ? null : inserter.getInventory());
|
.orElse(inserter == null ? null : inserter.getInventory());
|
||||||
|
|
||||||
|
IFluidHandler targetTank = te == null ? null
|
||||||
|
: te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, direction.getOpposite())
|
||||||
|
.orElse(null);
|
||||||
|
|
||||||
boolean update = false;
|
boolean update = false;
|
||||||
|
|
||||||
for (Iterator<ItemStack> iterator = spoutputBuffer.iterator(); iterator.hasNext();) {
|
for (Iterator<ItemStack> iterator = spoutputBuffer.iterator(); iterator.hasNext();) {
|
||||||
|
@ -329,9 +342,8 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (targetInv == null) {
|
if (targetInv == null)
|
||||||
return;
|
break;
|
||||||
}
|
|
||||||
if (!ItemHandlerHelper.insertItemStacked(targetInv, itemStack, true)
|
if (!ItemHandlerHelper.insertItemStacked(targetInv, itemStack, true)
|
||||||
.isEmpty())
|
.isEmpty())
|
||||||
continue;
|
continue;
|
||||||
|
@ -344,6 +356,34 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
||||||
visualizedOutputItems.add(IntAttached.withZero(itemStack));
|
visualizedOutputItems.add(IntAttached.withZero(itemStack));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (Iterator<FluidStack> iterator = spoutputFluidBuffer.iterator(); iterator.hasNext();) {
|
||||||
|
FluidStack fluidStack = iterator.next();
|
||||||
|
|
||||||
|
if (direction == Direction.DOWN) {
|
||||||
|
iterator.remove();
|
||||||
|
update = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (targetTank == null)
|
||||||
|
break;
|
||||||
|
|
||||||
|
for (boolean simulate : Iterate.trueAndFalse) {
|
||||||
|
FluidAction action = simulate ? FluidAction.SIMULATE : FluidAction.EXECUTE;
|
||||||
|
int fill = targetTank instanceof SmartFluidTankBehaviour.InternalFluidHandler
|
||||||
|
? ((SmartFluidTankBehaviour.InternalFluidHandler) targetTank).forceFill(fluidStack.copy(), action)
|
||||||
|
: targetTank.fill(fluidStack.copy(), action);
|
||||||
|
if (fill != fluidStack.getAmount())
|
||||||
|
break;
|
||||||
|
if (simulate)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
update = true;
|
||||||
|
iterator.remove();
|
||||||
|
visualizedOutputFluids.add(IntAttached.withZero(fluidStack));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (update) {
|
if (update) {
|
||||||
notifyChangeOfContents();
|
notifyChangeOfContents();
|
||||||
sendData();
|
sendData();
|
||||||
|
@ -407,6 +447,10 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
||||||
return 256;
|
return 256;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean canContinueProcessing() {
|
||||||
|
return spoutputBuffer.isEmpty() && spoutputFluidBuffer.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
public boolean acceptOutputs(List<ItemStack> outputItems, List<FluidStack> outputFluids, boolean simulate) {
|
public boolean acceptOutputs(List<ItemStack> outputItems, List<FluidStack> outputFluids, boolean simulate) {
|
||||||
outputInventory.allowInsertion();
|
outputInventory.allowInsertion();
|
||||||
outputTank.allowInsertion();
|
outputTank.allowInsertion();
|
||||||
|
@ -420,52 +464,54 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
||||||
BlockState blockState = getBlockState();
|
BlockState blockState = getBlockState();
|
||||||
if (!(blockState.getBlock() instanceof BasinBlock))
|
if (!(blockState.getBlock() instanceof BasinBlock))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
Direction direction = blockState.get(BasinBlock.FACING);
|
Direction direction = blockState.get(BasinBlock.FACING);
|
||||||
|
if (direction != Direction.DOWN) {
|
||||||
IItemHandler targetInv = null;
|
|
||||||
IFluidHandler targetTank = null;
|
TileEntity te = world.getTileEntity(pos.down()
|
||||||
TileEntity te = null;
|
|
||||||
|
|
||||||
InvManipulationBehaviour inserter = null;
|
|
||||||
|
|
||||||
if (direction == Direction.DOWN) {
|
|
||||||
// No output basin, gather locally
|
|
||||||
targetInv = outputInventory;
|
|
||||||
targetTank = outputTank.getCapability()
|
|
||||||
.orElse(null);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
// Output basin, try moving items to it
|
|
||||||
if (!spoutputBuffer.isEmpty())
|
|
||||||
return false;
|
|
||||||
te = world.getTileEntity(pos.down()
|
|
||||||
.offset(direction));
|
.offset(direction));
|
||||||
if (te == null)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
inserter = TileEntityBehaviour.get(world, te.getPos(), InvManipulationBehaviour.TYPE);
|
InvManipulationBehaviour inserter =
|
||||||
targetInv = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, direction.getOpposite())
|
te == null ? null : TileEntityBehaviour.get(world, te.getPos(), InvManipulationBehaviour.TYPE);
|
||||||
|
IItemHandler targetInv = te == null ? null
|
||||||
|
: te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, direction.getOpposite())
|
||||||
.orElse(inserter == null ? null : inserter.getInventory());
|
.orElse(inserter == null ? null : inserter.getInventory());
|
||||||
targetTank = te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, direction.getOpposite())
|
IFluidHandler targetTank = te == null ? null
|
||||||
|
: te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, direction.getOpposite())
|
||||||
.orElse(null);
|
.orElse(null);
|
||||||
|
if (!outputItems.isEmpty() && targetInv == null)
|
||||||
|
return false;
|
||||||
|
if (!outputFluids.isEmpty() && targetTank == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (simulate)
|
||||||
|
return true;
|
||||||
|
for (ItemStack itemStack : outputItems) {
|
||||||
|
if (itemStack.hasContainerItem() && itemStack.getContainerItem()
|
||||||
|
.isItemEqual(itemStack))
|
||||||
|
continue;
|
||||||
|
spoutputBuffer.add(itemStack.copy());
|
||||||
|
}
|
||||||
|
for (FluidStack fluidStack : outputFluids)
|
||||||
|
spoutputFluidBuffer.add(fluidStack.copy());
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IItemHandler targetInv = outputInventory;
|
||||||
|
IFluidHandler targetTank = outputTank.getCapability()
|
||||||
|
.orElse(null);
|
||||||
|
|
||||||
if (targetInv == null && !outputItems.isEmpty())
|
if (targetInv == null && !outputItems.isEmpty())
|
||||||
return false;
|
return false;
|
||||||
FilteringBehaviour filter = world == null || te == null ? null : TileEntityBehaviour.get(world, te.getPos(), FilteringBehaviour.TYPE);
|
|
||||||
for (ItemStack itemStack : outputItems) {
|
for (ItemStack itemStack : outputItems) {
|
||||||
// Catalyst items are never consumed
|
// Catalyst items are never consumed
|
||||||
if (itemStack.hasContainerItem() && itemStack.getContainerItem()
|
if (itemStack.hasContainerItem() && itemStack.getContainerItem()
|
||||||
.isItemEqual(itemStack))
|
.isItemEqual(itemStack))
|
||||||
continue;
|
continue;
|
||||||
|
if (!ItemHandlerHelper.insertItemStacked(targetInv, itemStack.copy(), simulate)
|
||||||
if (simulate || direction == Direction.DOWN) {
|
.isEmpty())
|
||||||
if (!ItemHandlerHelper.insertItemStacked(targetInv, itemStack.copy(), simulate)
|
return false;
|
||||||
.isEmpty() || (filter != null && !filter.test(itemStack)))
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
spoutputBuffer.add(itemStack.copy());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (outputFluids.isEmpty())
|
if (outputFluids.isEmpty())
|
||||||
|
@ -480,8 +526,6 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
||||||
: targetTank.fill(fluidStack.copy(), action);
|
: targetTank.fill(fluidStack.copy(), action);
|
||||||
if (fill != fluidStack.getAmount())
|
if (fill != fluidStack.getAmount())
|
||||||
return false;
|
return false;
|
||||||
else if (!simulate)
|
|
||||||
visualizedOutputFluids.add(IntAttached.withZero(fluidStack));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -14,7 +14,7 @@ public class ProcessingInventory extends ItemStackHandler {
|
||||||
private boolean limit;
|
private boolean limit;
|
||||||
|
|
||||||
public ProcessingInventory(Consumer<ItemStack> callback) {
|
public ProcessingInventory(Consumer<ItemStack> callback) {
|
||||||
super(10);
|
super(16);
|
||||||
this.callback = callback;
|
this.callback = callback;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -638,10 +638,10 @@ public class ProcessingScenes {
|
||||||
.pointAt(util.vector.blockSurface(center.east()
|
.pointAt(util.vector.blockSurface(center.east()
|
||||||
.up(), Direction.UP))
|
.up(), Direction.UP))
|
||||||
.placeNearTarget();
|
.placeNearTarget();
|
||||||
scene.idle(70);
|
scene.idle(80);
|
||||||
scene.overlay.showText(60)
|
scene.overlay.showText(90)
|
||||||
.colored(PonderPalette.RED)
|
.colored(PonderPalette.RED)
|
||||||
.text("However, these are not suitable for industrial heating")
|
.text("However, without a blaze they are not suitable for industrial heating")
|
||||||
.pointAt(util.vector.blockSurface(center.east()
|
.pointAt(util.vector.blockSurface(center.east()
|
||||||
.up(), Direction.UP))
|
.up(), Direction.UP))
|
||||||
.placeNearTarget();
|
.placeNearTarget();
|
||||||
|
|
Loading…
Reference in a new issue