Dispenser can use cells. Closes #1948
This commit is contained in:
parent
8db5cea07c
commit
a115fbd736
9 changed files with 165 additions and 81 deletions
|
@ -78,7 +78,7 @@ import techreborn.blocks.transformers.BlockMVTransformer;
|
|||
import techreborn.client.EGui;
|
||||
import techreborn.config.TechRebornConfig;
|
||||
import techreborn.entities.EntityNukePrimed;
|
||||
import techreborn.items.ItemDynamicCell;
|
||||
import techreborn.items.DynamicCellItem;
|
||||
import techreborn.items.ItemUpgrade;
|
||||
import techreborn.items.armor.ItemQuantumSuit;
|
||||
import techreborn.utils.InitUtils;
|
||||
|
@ -147,7 +147,7 @@ public class TRContent {
|
|||
public static Item FREQUENCY_TRANSMITTER;
|
||||
public static Item SCRAP_BOX;
|
||||
public static Item MANUAL;
|
||||
public static ItemDynamicCell CELL;
|
||||
public static DynamicCellItem CELL;
|
||||
|
||||
//Quantum Suit
|
||||
public static ItemQuantumSuit QUANTUM_HELMET;
|
||||
|
|
|
@ -1,13 +1,23 @@
|
|||
package techreborn.init;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.DispenserBlock;
|
||||
import net.minecraft.block.FluidDrainable;
|
||||
import net.minecraft.block.dispenser.ItemDispenserBehavior;
|
||||
import net.minecraft.block.entity.DispenserBlockEntity;
|
||||
import net.minecraft.fluid.BaseFluid;
|
||||
import net.minecraft.fluid.Fluid;
|
||||
import net.minecraft.fluid.Fluids;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.math.BlockPointer;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Direction;
|
||||
import net.minecraft.util.math.Position;
|
||||
import net.minecraft.world.IWorld;
|
||||
import reborncore.common.crafting.RebornRecipe;
|
||||
import techreborn.config.TechRebornConfig;
|
||||
import techreborn.items.DynamicCellItem;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
@ -34,9 +44,53 @@ public class TRDispenserBehavior {
|
|||
} );
|
||||
}
|
||||
|
||||
// DispenserBlock.registerBehavior(TRContent.CELL, new ItemDispenserBehavior(){
|
||||
//
|
||||
// });
|
||||
|
||||
DispenserBlock.registerBehavior(TRContent.CELL, new ItemDispenserBehavior(){
|
||||
public ItemStack dispenseSilently(BlockPointer pointer, ItemStack stack) {
|
||||
DynamicCellItem cell = (DynamicCellItem)stack.getItem();
|
||||
IWorld iWorld = pointer.getWorld();
|
||||
BlockPos blockPos = pointer.getBlockPos().offset(pointer.getBlockState().get(DispenserBlock.FACING));
|
||||
BlockState blockState = iWorld.getBlockState(blockPos);
|
||||
Block block = blockState.getBlock();
|
||||
if (cell.getFluid(stack) == Fluids.EMPTY){
|
||||
// fill cell
|
||||
if (block instanceof FluidDrainable) {
|
||||
Fluid fluid = ((FluidDrainable)block).tryDrainFluid(iWorld, blockPos, blockState);
|
||||
if (!(fluid instanceof BaseFluid)) {
|
||||
return super.dispenseSilently(pointer, stack);
|
||||
} else {
|
||||
ItemStack filledCell = DynamicCellItem.getCellWithFluid(fluid, 1);
|
||||
if (stack.getCount() == 1) {
|
||||
stack = filledCell;
|
||||
} else {
|
||||
stack.decrement(1);
|
||||
if (((DispenserBlockEntity)pointer.getBlockEntity()).addToFirstFreeSlot(filledCell) < 0) {
|
||||
this.dispense(pointer, filledCell);
|
||||
}
|
||||
}
|
||||
return stack;
|
||||
}
|
||||
} else {
|
||||
return super.dispenseSilently(pointer, stack);
|
||||
}
|
||||
}
|
||||
else {
|
||||
// drain cell
|
||||
if (cell.placeFluid(null, pointer.getWorld(), blockPos, null, stack)) {
|
||||
ItemStack emptyCell = cell.getEmpty();
|
||||
if(stack.getCount() == 1) {
|
||||
stack = emptyCell;
|
||||
} else {
|
||||
stack.decrement(1);
|
||||
if (((DispenserBlockEntity)pointer.getBlockEntity()).addToFirstFreeSlot(emptyCell) < 0) {
|
||||
this.dispense(pointer, emptyCell);
|
||||
}
|
||||
}
|
||||
return stack;
|
||||
} else {
|
||||
return this.dispense(pointer, stack);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue