11LIBRARY ( {
22 name : "StorageInterface" ,
3- version : 10 ,
3+ version : 12 ,
44 shared : true ,
55 api : "CoreEngine"
66} ) ;
@@ -97,6 +97,7 @@ var NativeContainerInterface = /** @class */ (function () {
9797/// <reference path="Storage.ts" />
9898var TileEntityInterface = /** @class */ ( function ( ) {
9999 function TileEntityInterface ( tileEntity ) {
100+ this . liquidUnitRatio = 1 ;
100101 this . isNativeContainer = false ;
101102 this . tileEntity = tileEntity ;
102103 this . container = tileEntity . container ;
@@ -224,7 +225,7 @@ var TileEntityInterface = /** @class */ (function () {
224225 var slotData = this . slots [ name ] ;
225226 if ( slotData . output ) {
226227 var item = this . container . getSlot ( name ) ;
227- if ( item . id > 0 && this . isValidSlotSide ( slotData . side , side ) && ( ! slotData . canOutput || slotData . canOutput ( item , side , this . tileEntity ) ) ) {
228+ if ( this . isValidSlotSide ( slotData . side , side ) && ( ! slotData . canOutput || slotData . canOutput ( item , side , this . tileEntity ) ) ) {
228229 slotNames . push ( name ) ;
229230 }
230231 }
@@ -237,26 +238,25 @@ var TileEntityInterface = /** @class */ (function () {
237238 }
238239 } ;
239240 TileEntityInterface . prototype . canReceiveLiquid = function ( liquid , side ) {
240- return this . tileEntity . liquidStorage . getLimit ( liquid ) < LIQUID_STORAGE_MAX_LIMIT ;
241+ return this . getInputTank ( side ) . getLimit ( liquid ) < LIQUID_STORAGE_MAX_LIMIT ;
241242 } ;
242243 TileEntityInterface . prototype . canTransportLiquid = function ( liquid , side ) {
243- return this . tileEntity . liquidStorage . getLimit ( liquid ) < LIQUID_STORAGE_MAX_LIMIT ;
244+ return true ;
244245 } ;
245- TileEntityInterface . prototype . addLiquid = function ( liquid , amount ) {
246- var liquidStorage = this . getLiquidStorage ( "input" ) ;
246+ TileEntityInterface . prototype . receiveLiquid = function ( liquidStorage , liquid , amount ) {
247247 var storedLiquid = liquidStorage . getLiquidStored ( ) ;
248248 if ( ! storedLiquid || storedLiquid == liquid ) {
249- return liquidStorage . addLiquid ( liquid , amount ) ;
249+ return amount - liquidStorage . addLiquid ( liquid , amount / this . liquidUnitRatio ) * this . liquidUnitRatio ;
250250 }
251- return amount ;
251+ return 0 ;
252252 } ;
253- TileEntityInterface . prototype . getLiquid = function ( liquid , amount ) {
254- return this . getLiquidStorage ( "output" ) . getLiquid ( liquid , amount ) ;
253+ TileEntityInterface . prototype . extractLiquid = function ( liquidStorage , liquid , amount ) {
254+ return liquidStorage . getLiquid ( liquid , amount / this . liquidUnitRatio ) * this . liquidUnitRatio ;
255255 } ;
256- TileEntityInterface . prototype . getLiquidStored = function ( storageName ) {
257- return this . getLiquidStorage ( storageName ) . getLiquidStored ( ) ;
256+ TileEntityInterface . prototype . getInputTank = function ( side ) {
257+ return this . tileEntity . liquidStorage ;
258258 } ;
259- TileEntityInterface . prototype . getLiquidStorage = function ( storageName ) {
259+ TileEntityInterface . prototype . getOutputTank = function ( side ) {
260260 return this . tileEntity . liquidStorage ;
261261 } ;
262262 return TileEntityInterface ;
@@ -371,7 +371,7 @@ var StorageInterface;
371371 return new NativeContainerInterface ( nativeTileEntity ) ;
372372 }
373373 var tileEntity = World . getTileEntity ( x , y , z , region ) ;
374- if ( tileEntity && tileEntity . container ) {
374+ if ( tileEntity && tileEntity . container && tileEntity . __initialized ) {
375375 return new TileEntityInterface ( tileEntity ) ;
376376 }
377377 return null ;
@@ -380,7 +380,7 @@ var StorageInterface;
380380 /** Returns storage interface for TileEntity with liquid storage */
381381 function getLiquidStorage ( region , x , y , z ) {
382382 var tileEntity = World . getTileEntity ( x , y , z , region ) ;
383- if ( tileEntity && tileEntity . liquidStorage ) {
383+ if ( tileEntity && tileEntity . __initialized ) {
384384 return new TileEntityInterface ( tileEntity ) ;
385385 }
386386 return null ;
@@ -501,7 +501,7 @@ var StorageInterface;
501501 for ( var _i = 0 , slots_4 = slots ; _i < slots_4 . length ; _i ++ ) {
502502 var name = slots_4 [ _i ] ;
503503 var slot = outputStorage . getSlot ( name ) ;
504- if ( slot . id > 0 ) {
504+ if ( slot . id !== 0 ) {
505505 var added = inputStorage . addItem ( slot , inputSide , maxCount - count ) ;
506506 if ( added > 0 ) {
507507 count += added ;
@@ -521,18 +521,25 @@ var StorageInterface;
521521 * @maxAmount max amount of liquid that can be transfered
522522 * @inputStorage storage to input liquid
523523 * @outputStorage storage to extract liquid
524- * @inputSide block side of input storage which is receiving liquid
524+ * @inputSide block side of input storage which is receiving
525+ * @returns left liquid amount
525526 */
526527 function extractLiquid ( liquid , maxAmount , inputStorage , outputStorage , inputSide ) {
527- var outputSide = inputSide ^ 1 ;
528528 if ( ! ( inputStorage instanceof TileEntityInterface ) ) { // reverse compatibility
529529 inputStorage = new TileEntityInterface ( inputStorage ) ;
530530 }
531- if ( ! liquid ) {
532- liquid = outputStorage . getLiquidStored ( "output" ) ;
533- }
534- if ( liquid && outputStorage . canTransportLiquid ( liquid , outputSide ) ) {
535- return transportLiquid ( liquid , maxAmount , outputStorage , inputStorage , outputSide ) ;
531+ var outputSide = inputSide ^ 1 ;
532+ var inputTank = inputStorage . getInputTank ( inputSide ) ;
533+ var outputTank = outputStorage . getOutputTank ( outputSide ) ;
534+ if ( ! inputTank || ! outputTank )
535+ return 0 ;
536+ if ( ! liquid )
537+ liquid = outputTank . getLiquidStored ( ) ;
538+ if ( liquid && outputStorage . canTransportLiquid ( liquid , outputSide ) && inputStorage . canReceiveLiquid ( liquid , inputSide ) && ! inputTank . isFull ( liquid ) ) {
539+ var amount = Math . min ( outputTank . getAmount ( liquid ) * outputStorage . liquidUnitRatio , maxAmount ) ;
540+ amount = inputStorage . receiveLiquid ( inputTank , liquid , amount ) ;
541+ outputStorage . extractLiquid ( outputTank , liquid , amount ) ;
542+ return amount ;
536543 }
537544 return 0 ;
538545 }
@@ -542,10 +549,15 @@ var StorageInterface;
542549 if ( ! ( outputStorage instanceof TileEntityInterface ) ) { // reverse compatibility
543550 outputStorage = new TileEntityInterface ( outputStorage ) ;
544551 }
545- if ( inputStorage . canReceiveLiquid ( liquid , outputSide ^ 1 ) ) {
546- var amount = outputStorage . getLiquid ( liquid , maxAmount ) ;
547- amount = inputStorage . addLiquid ( liquid , amount ) ;
548- outputStorage . getLiquid ( liquid , - amount ) ;
552+ var inputSide = outputSide ^ 1 ;
553+ var inputTank = inputStorage . getInputTank ( inputSide ) ;
554+ var outputTank = outputStorage . getOutputTank ( outputSide ) ;
555+ if ( ! inputTank || ! outputTank )
556+ return 0 ;
557+ if ( inputStorage . canReceiveLiquid ( liquid , inputSide ) && ! inputTank . isFull ( liquid ) ) {
558+ var amount = Math . min ( outputTank . getAmount ( liquid ) * outputStorage . liquidUnitRatio , maxAmount ) ;
559+ amount = inputStorage . receiveLiquid ( inputTank , liquid , amount ) ;
560+ outputStorage . extractLiquid ( outputTank , liquid , amount ) ;
549561 return amount ;
550562 }
551563 return 0 ;
0 commit comments