66import gregtech .api .GTValues ;
77import gregtech .api .gui .GuiTextures ;
88import gregtech .api .gui .ModularUI ;
9+ import gregtech .api .gui .widgets .SituationWidget ;
910import gregtech .api .gui .widgets .SlotWidget ;
1011import gregtech .api .metatileentity .MetaTileEntity ;
1112import gregtech .api .metatileentity .MetaTileEntityHolder ;
3334import javax .annotation .Nullable ;
3435import java .util .List ;
3536
37+ import static gregtech .api .situation .Situations .*;
38+
3639public class MetaTileEntityFisher extends TieredMetaTileEntity {
3740
3841 private static final int WATER_CHECK_SIZE = 25 ;
@@ -62,7 +65,8 @@ protected ModularUI createUI(EntityPlayer entityPlayer) {
6265 18 + 18 * rowSize + 94 )
6366 .label (10 , 5 , getMetaFullName ())
6467 .widget (new SlotWidget (importItems , 0 , 18 , 18 , true , true )
65- .setBackgroundTexture (GuiTextures .SLOT , GuiTextures .STRING_SLOT_OVERLAY ));
68+ .setBackgroundTexture (GuiTextures .SLOT , GuiTextures .STRING_SLOT_OVERLAY ))
69+ .widget (new SituationWidget (19 ,38 ,16 ,16 ,this ::getSituation ));
6670
6771 for (int y = 0 ; y < rowSize ; y ++) {
6872 for (int x = 0 ; x < rowSize ; x ++) {
@@ -80,32 +84,41 @@ protected ModularUI createUI(EntityPlayer entityPlayer) {
8084 public void update () {
8185 super .update ();
8286 ItemStack baitStack = importItems .getStackInSlot (0 );
83- if (!getWorld ().isRemote && energyContainer .getEnergyStored () >= energyAmountPerFish && getTimer () % fishingTicks == 0L && !baitStack .isEmpty ()) {
84- WorldServer world = (WorldServer ) this .getWorld ();
85- int waterCount = 0 ;
86- int edgeSize = (int ) Math .sqrt (WATER_CHECK_SIZE );
87- for (int x = 0 ; x < edgeSize ; x ++){
88- for (int z = 0 ; z < edgeSize ; z ++){
89- BlockPos waterCheckPos = getPos ().down ().add (x - edgeSize / 2 , 0 , z - edgeSize / 2 );
90- if (world .getBlockState (waterCheckPos ).getBlock () instanceof BlockLiquid &&
91- world .getBlockState (waterCheckPos ).getMaterial () == Material .WATER ) {
92- waterCount ++;
87+ if (!getWorld ().isRemote ) {
88+ if (baitStack .isEmpty ()) {
89+ setSituation (IDLE );
90+ } else if (energyContainer .getEnergyStored () < energyAmountPerFish ) {
91+ setSituation (INSUFFICIENT_POWER_TO_START );
92+ } else if (getTimer () % fishingTicks == 0L ) {
93+ setSituation (WORKING );
94+ WorldServer world = (WorldServer ) this .getWorld ();
95+ int waterCount = 0 ;
96+ int edgeSize = (int ) Math .sqrt (WATER_CHECK_SIZE );
97+ for (int x = 0 ; x < edgeSize ; x ++) {
98+ for (int z = 0 ; z < edgeSize ; z ++) {
99+ BlockPos waterCheckPos = getPos ().down ().add (x - edgeSize / 2 , 0 , z - edgeSize / 2 );
100+ if (world .getBlockState (waterCheckPos ).getBlock () instanceof BlockLiquid &&
101+ world .getBlockState (waterCheckPos ).getMaterial () == Material .WATER ) {
102+ waterCount ++;
103+ }
93104 }
94105 }
95- }
96- if (waterCount == WATER_CHECK_SIZE ) {
97- LootTable table = world .getLootTableManager ().getLootTableFromLocation (LootTableList .GAMEPLAY_FISHING );
98- NonNullList <ItemStack > itemStacks = NonNullList .create ();
99- itemStacks .addAll (table .generateLootForPools (world .rand , new LootContext .Builder (world ).build ()));
100- if (addItemsToItemHandler (exportItems , true , itemStacks )) {
101- addItemsToItemHandler (exportItems , false , itemStacks );
102- energyContainer .removeEnergy (energyAmountPerFish );
103- baitStack .shrink (1 );
106+ if (waterCount == WATER_CHECK_SIZE ) {
107+ LootTable table = world .getLootTableManager ().getLootTableFromLocation (LootTableList .GAMEPLAY_FISHING );
108+ NonNullList <ItemStack > itemStacks = NonNullList .create ();
109+ itemStacks .addAll (table .generateLootForPools (world .rand , new LootContext .Builder (world ).build ()));
110+ if (addItemsToItemHandler (exportItems , true , itemStacks )) {
111+ addItemsToItemHandler (exportItems , false , itemStacks );
112+ energyContainer .removeEnergy (energyAmountPerFish );
113+ baitStack .shrink (1 );
114+ }
115+ } else {
116+ setSituation (WATER_CHECK_FAILED );
104117 }
105118 }
106- }
107- if (! getWorld (). isRemote && getTimer () % 5 == 0 ) {
108- pushItemsIntoNearbyHandlers ( getFrontFacing ());
119+ if ( getTimer () % 5 == 0 ) {
120+ pushItemsIntoNearbyHandlers ( getFrontFacing ());
121+ }
109122 }
110123 }
111124
0 commit comments