77import codechicken .lib .vec .Matrix4 ;
88import gregtech .api .capability .GregtechTileCapabilities ;
99import gregtech .api .capability .IActiveOutputSide ;
10+ import gregtech .api .capability .impl .FluidHandlerProxy ;
1011import gregtech .api .capability .impl .FluidTankList ;
12+ import gregtech .api .cover .ICoverable ;
1113import gregtech .api .gui .GuiTextures ;
1214import gregtech .api .gui .ModularUI ;
1315import gregtech .api .gui .ModularUI .Builder ;
2830import net .minecraft .util .NonNullList ;
2931import net .minecraft .util .ResourceLocation ;
3032import net .minecraft .util .math .MathHelper ;
33+ import net .minecraft .util .text .TextComponentTranslation ;
3134import net .minecraft .world .World ;
3235import net .minecraftforge .common .capabilities .Capability ;
3336import net .minecraftforge .fluids .FluidRegistry ;
3437import net .minecraftforge .fluids .FluidStack ;
3538import net .minecraftforge .fluids .FluidTank ;
39+ import net .minecraftforge .fluids .capability .CapabilityFluidHandler ;
40+ import net .minecraftforge .fluids .capability .IFluidHandler ;
3641import net .minecraftforge .items .ItemStackHandler ;
3742import org .apache .commons .lang3 .ArrayUtils ;
3843import org .apache .commons .lang3 .tuple .Pair ;
@@ -49,7 +54,8 @@ public class MetaTileEntityQuantumTank extends MetaTileEntity implements ITiered
4954 private final ItemStackHandler containerInventory ;
5055 private boolean autoOutputFluids ;
5156 private EnumFacing outputFacing ;
52- private final boolean allowInputFromOutputSide = true ;
57+ private boolean allowInputFromOutputSide = true ;
58+ protected IFluidHandler outputFluidInventory ;
5359
5460 public MetaTileEntityQuantumTank (ResourceLocation metaTileEntityId , int tier , int maxFluidCapacity ) {
5561 super (metaTileEntityId );
@@ -71,6 +77,7 @@ protected void initializeInventory() {
7177 this .fluidInventory = fluidTank ;
7278 this .importFluids = new FluidTankList (false , fluidTank );
7379 this .exportFluids = new FluidTankList (false , fluidTank );
80+ this .outputFluidInventory = new FluidHandlerProxy (new FluidTankList (false ), exportFluids );
7481 }
7582
7683 @ Override
@@ -153,11 +160,6 @@ protected FluidTankList createExportFluidHandler() {
153160 return new FluidTankList (false , fluidTank );
154161 }
155162
156- @ Override
157- public boolean hasFrontFacing () {
158- return false ;
159- }
160-
161163 @ Override
162164 public void renderMetaTileEntity (CCRenderState renderState , Matrix4 translation , IVertexOperation [] pipeline ) {
163165 Textures .VOLTAGE_CASINGS [tier ].render (renderState , translation , ArrayUtils .add (pipeline ,
@@ -223,6 +225,14 @@ public EnumFacing getOutputFacing() {
223225 return outputFacing == null ? EnumFacing .SOUTH : outputFacing ;
224226 }
225227
228+ @ Override
229+ public void setFrontFacing (EnumFacing frontFacing ) {
230+ super .setFrontFacing (EnumFacing .UP );
231+ if (this .outputFacing == null ) {
232+ //set initial output facing as opposite to front
233+ setOutputFacing (frontFacing .getOpposite ());
234+ }
235+ }
226236
227237 @ Override
228238 public boolean isAutoOutputItems () {
@@ -235,7 +245,7 @@ public boolean isAutoOutputFluids() {
235245
236246 @ Override
237247 public boolean isAllowInputFromOutputSide () {
238- return true ;
248+ return allowInputFromOutputSide ;
239249 }
240250
241251 @ Override
@@ -279,22 +289,24 @@ public <T> T getCapability(Capability<T> capability, EnumFacing side) {
279289 }
280290 return null ;
281291 }
282- return super .getCapability (capability , side );
283-
284- }
292+ else if (capability == CapabilityFluidHandler .FLUID_HANDLER_CAPABILITY ) {
293+ IFluidHandler fluidHandler = (side == getOutputFacing () && !isAllowInputFromOutputSide ()) ? outputFluidInventory : fluidInventory ;
294+ if (fluidHandler .getTankProperties ().length > 0 ) {
295+ return CapabilityFluidHandler .FLUID_HANDLER_CAPABILITY .cast (fluidHandler );
296+ }
285297
286- @ Override
287- public boolean canPlaceCoverOnSide (EnumFacing side ) {
288- //Done to prevent loops as output always acts as input
289- if (side == getOutputFacing ()) {
290- return false ;
298+ return null ;
291299 }
292- return true ;
300+ return super .getCapability (capability , side );
301+
293302 }
294303
295304 @ Override
296305 public boolean onWrenchClick (EntityPlayer playerIn , EnumHand hand , EnumFacing facing , CuboidRayTraceResult hitResult ) {
297306 if (!playerIn .isSneaking ()) {
307+ if (getOutputFacing () == facing || getFrontFacing () == facing ) {
308+ return false ;
309+ }
298310 if (!getWorld ().isRemote ) {
299311 setOutputFacing (facing );
300312 }
@@ -303,14 +315,35 @@ public boolean onWrenchClick(EntityPlayer playerIn, EnumHand hand, EnumFacing fa
303315 return super .onWrenchClick (playerIn , hand , facing , hitResult );
304316 }
305317
318+ @ Override
319+ public boolean onScrewdriverClick (EntityPlayer playerIn , EnumHand hand , EnumFacing facing , CuboidRayTraceResult hitResult ) {
320+ EnumFacing hitFacing = ICoverable .determineGridSideHit (hitResult );
321+ if (facing == getOutputFacing () || (hitFacing == getOutputFacing () && playerIn .isSneaking ())) {
322+ if (!getWorld ().isRemote ) {
323+ if (isAllowInputFromOutputSide ()) {
324+ setAllowInputFromOutputSide (false );
325+ playerIn .sendMessage (new TextComponentTranslation ("gregtech.machine.basic.input_from_output_side.disallow" ));
326+ } else {
327+ setAllowInputFromOutputSide (true );
328+ playerIn .sendMessage (new TextComponentTranslation ("gregtech.machine.basic.input_from_output_side.allow" ));
329+ }
330+ }
331+ return true ;
332+ }
333+ return super .onScrewdriverClick (playerIn , hand , facing , hitResult );
334+ }
306335
336+ public void setAllowInputFromOutputSide (boolean allowInputFromOutputSide ) {
337+ this .allowInputFromOutputSide = allowInputFromOutputSide ;
338+ if (!getWorld ().isRemote ) {
339+ markDirty ();
340+ }
341+ }
307342 public void setAutoOutputFluids (boolean autoOutputFluids ) {
308343 this .autoOutputFluids = autoOutputFluids ;
309344 if (!getWorld ().isRemote ) {
310345 writeCustomData (102 , buf -> buf .writeBoolean (autoOutputFluids ));
311346 markDirty ();
312347 }
313348 }
314-
315-
316349}
0 commit comments