Snippets
Created by
Adam Walker
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | package com.hrznstudio.gadgetry.block;
import com.hrznstudio.titanium.annotation.Save;
import com.hrznstudio.titanium.api.IFactory;
import com.hrznstudio.titanium.block.BlockTileBase;
import com.hrznstudio.titanium.block.tile.TilePowered;
import com.hrznstudio.titanium.block.tile.progress.PosProgressBar;
import com.hrznstudio.titanium.inventory.PosInvHandler;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityFurnace;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.energy.CapabilityEnergy;
import net.minecraftforge.energy.IEnergyStorage;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
public class BlockGenerator extends BlockTileBase<BlockGenerator.TileGenerator> {
public static final BlockGenerator BLOCK = new BlockGenerator();
public BlockGenerator() {
super("generator", Properties.create(Material.IRON), TileGenerator.class);
}
@Override
public IFactory<TileGenerator> getTileEntityFactory() {
return TileGenerator::new;
}
public static class TileGenerator extends TilePowered {
@Save
private PosProgressBar progressBar;
@Save
private PosInvHandler inputSlot;
@Save
private boolean burning;
@Save
private int amount;
public TileGenerator() {
super(BLOCK);
addProgressBar(
progressBar = new PosProgressBar(0, 52, 300)
.setOnFinishWork(() -> {
burning = false;
amount = 0;
}).setCanIncrease(tileEntity -> {
if (!burning) {
ItemStack input = inputSlot.getStackInSlot(0);
int burntime = getItemBurnTime(input);
if (burntime > 0) {
burning = true;
amount = burntime / 20;
input.shrink(1);
}
}
return burning;
}).setCanReset(tileEntity -> !burning)
.setOnTickWork(() -> {
getEnergyStorage().receiveEnergy(amount, false);
List<IEnergyStorage> energyStorages = new ArrayList<>();
for (EnumFacing facing : EnumFacing.values()) {
TileEntity tile = world.getTileEntity(pos.offset(facing));
if (tile != null) {
LazyOptional<IEnergyStorage> energy = tile.getCapability(CapabilityEnergy.ENERGY, facing.getOpposite());
if (energy.isPresent())
energyStorages.add(energy.orElseThrow(NullPointerException::new));
}
}
if (!energyStorages.isEmpty()) {
int amount = (int) Math.floor(40 / (double) energyStorages.size());
energyStorages.forEach(iEnergyStorage -> iEnergyStorage.receiveEnergy(getEnergyStorage().extractEnergy(amount, false), false));
}
})
);
this.addInventory(
inputSlot = new PosInvHandler("input", 0, 0, 1)
.setTile(this)
.setInputFilter((stack, integer) -> TileEntityFurnace.isItemFuel(stack))
);
}
private static int getItemBurnTime(ItemStack stack) {
if (stack.isEmpty()) {
return 0;
} else {
Item item = stack.getItem();
int ret = stack.getBurnTime();
return net.minecraftforge.event.ForgeEventFactory.getItemBurnTime(stack, ret == -1 ? TileEntityFurnace.getBurnTimes().getOrDefault(item, 0) : ret);
}
}
@Override
public boolean onActivated(EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
openGui(playerIn);
return true;
}
}
}
|
Comments (0)
You can clone a snippet to your computer for local editing. Learn more.