timetracking: add compost bin time trackers (#12619)

This commit is contained in:
SirGirion
2020-10-19 21:46:14 -04:00
committed by GitHub
parent 91417aca98
commit 274df60d3c
8 changed files with 216 additions and 11 deletions

View File

@@ -36,7 +36,9 @@ public enum CropState
HARVESTABLE(ColorScheme.PROGRESS_COMPLETE_COLOR),
GROWING(ColorScheme.PROGRESS_COMPLETE_COLOR),
DISEASED(ColorScheme.PROGRESS_INPROGRESS_COLOR),
DEAD(ColorScheme.PROGRESS_ERROR_COLOR);
DEAD(ColorScheme.PROGRESS_ERROR_COLOR),
EMPTY(ColorScheme.MEDIUM_GRAY_COLOR),
FILLING(ColorScheme.PROGRESS_INPROGRESS_COLOR);
private final Color color;
}

View File

@@ -177,6 +177,12 @@ public class FarmingTabPanel extends TabContentPanel
case DEAD:
panel.getEstimate().setText("Dead");
break;
case EMPTY:
panel.getEstimate().setText("Empty");
break;
case FILLING:
panel.getEstimate().setText("Filling");
break;
}
/* Hide any fully grown weeds' progress bar. */

View File

@@ -73,7 +73,8 @@ class FarmingWorld
new FarmingPatch("North", Varbits.FARMING_4771, PatchImplementation.ALLOTMENT),
new FarmingPatch("South", Varbits.FARMING_4772, PatchImplementation.ALLOTMENT),
new FarmingPatch("", Varbits.FARMING_4773, PatchImplementation.FLOWER),
new FarmingPatch("", Varbits.FARMING_4774, PatchImplementation.HERB)
new FarmingPatch("", Varbits.FARMING_4774, PatchImplementation.HERB),
new FarmingPatch("", Varbits.FARMING_4775, PatchImplementation.COMPOST)
));
add(new FarmingRegion("Brimhaven", 11058,
@@ -85,7 +86,8 @@ class FarmingWorld
new FarmingPatch("North", Varbits.FARMING_4771, PatchImplementation.ALLOTMENT),
new FarmingPatch("South", Varbits.FARMING_4772, PatchImplementation.ALLOTMENT),
new FarmingPatch("", Varbits.FARMING_4773, PatchImplementation.FLOWER),
new FarmingPatch("", Varbits.FARMING_4774, PatchImplementation.HERB)
new FarmingPatch("", Varbits.FARMING_4774, PatchImplementation.HERB),
new FarmingPatch("", Varbits.FARMING_4775, PatchImplementation.COMPOST)
)
{
@Override
@@ -133,7 +135,8 @@ class FarmingWorld
new FarmingPatch("North West", Varbits.FARMING_4771, PatchImplementation.ALLOTMENT),
new FarmingPatch("South East", Varbits.FARMING_4772, PatchImplementation.ALLOTMENT),
new FarmingPatch("", Varbits.FARMING_4773, PatchImplementation.FLOWER),
new FarmingPatch("", Varbits.FARMING_4774, PatchImplementation.HERB)
new FarmingPatch("", Varbits.FARMING_4774, PatchImplementation.HERB),
new FarmingPatch("", Varbits.FARMING_4775, PatchImplementation.COMPOST)
)
{
@Override
@@ -167,7 +170,8 @@ class FarmingWorld
new FarmingPatch("North East", Varbits.FARMING_4771, PatchImplementation.ALLOTMENT),
new FarmingPatch("South West", Varbits.FARMING_4772, PatchImplementation.ALLOTMENT),
new FarmingPatch("", Varbits.FARMING_4773, PatchImplementation.FLOWER),
new FarmingPatch("", Varbits.FARMING_4774, PatchImplementation.HERB)
new FarmingPatch("", Varbits.FARMING_4774, PatchImplementation.HERB),
new FarmingPatch("", Varbits.FARMING_4775, PatchImplementation.COMPOST)
));
add(new FarmingRegion("Kourend", 6711,
new FarmingPatch("", Varbits.FARMING_7904, PatchImplementation.SPIRIT_TREE)
@@ -205,7 +209,8 @@ class FarmingWorld
new FarmingPatch("North West", Varbits.FARMING_4771, PatchImplementation.ALLOTMENT),
new FarmingPatch("South East", Varbits.FARMING_4772, PatchImplementation.ALLOTMENT),
new FarmingPatch("", Varbits.FARMING_4773, PatchImplementation.FLOWER),
new FarmingPatch("", Varbits.FARMING_4774, PatchImplementation.HERB)
new FarmingPatch("", Varbits.FARMING_4774, PatchImplementation.HERB),
new FarmingPatch("", Varbits.FARMING_4775, PatchImplementation.COMPOST)
));
@@ -260,6 +265,7 @@ class FarmingWorld
new FarmingPatch("", Varbits.FARMING_7906, PatchImplementation.FLOWER),
new FarmingPatch("North", Varbits.FARMING_4773, PatchImplementation.ALLOTMENT),
new FarmingPatch("South", Varbits.FARMING_4774, PatchImplementation.ALLOTMENT),
new FarmingPatch("", Varbits.FARMING_7912, PatchImplementation.GIANT_COMPOST),
new FarmingPatch("", Varbits.FARMING_7904, PatchImplementation.CACTUS),
new FarmingPatch("", Varbits.FARMING_4771, PatchImplementation.SPIRIT_TREE),
new FarmingPatch("", Varbits.FARMING_7909, PatchImplementation.FRUIT_TREE),
@@ -272,7 +278,8 @@ class FarmingWorld
new FarmingPatch("North", Varbits.FARMING_4771, PatchImplementation.ALLOTMENT),
new FarmingPatch("South", Varbits.FARMING_4772, PatchImplementation.ALLOTMENT),
new FarmingPatch("", Varbits.FARMING_4773, PatchImplementation.FLOWER),
new FarmingPatch("", Varbits.FARMING_4775, PatchImplementation.CRYSTAL_TREE)
new FarmingPatch("", Varbits.FARMING_4775, PatchImplementation.CRYSTAL_TREE),
new FarmingPatch("", Varbits.FARMING_4774, PatchImplementation.COMPOST) // TODO: Find correct varbit
));
// Finalize

View File

@@ -2603,6 +2603,182 @@ public enum PatchImplementation
}
return null;
}
},
COMPOST(Tab.SPECIAL, "Compost Bin")
{
@Override
PatchState forVarbitValue(int value)
{
if (value == 0)
{
// Compost bin[Examine] 7808
return new PatchState(Produce.EMPTY_COMPOST_BIN, CropState.EMPTY, 0);
}
if (value >= 1 && value <= 15)
{
// Compost bin[Examine,Dump] 3830
return new PatchState(Produce.COMPOST, CropState.FILLING, value - 1);
}
if (value >= 16 && value <= 30)
{
// Compost bin[Take,Examine,Dump] 19050,19051,19052,19053,19054,19055,19056,19057,19058,19059,19060,19061,19062,19063,19064
return new PatchState(Produce.COMPOST, CropState.HARVESTABLE, value - 16);
}
if (value == 31 || value == 32)
{
// Compost bin[Open,Examine,Dump] 3849,3849
return new PatchState(Produce.COMPOST, CropState.GROWING, value - 31);
}
if (value >= 33 && value <= 47)
{
// Compost bin[Examine,Dump] 19066,19067,19068,19069,19070,19071,19072,19073,19074,19075,19076,19077,19078,19079,19080
return new PatchState(Produce.SUPERCOMPOST, CropState.FILLING, value - 33); // 33 means there is 1 item
}
if (value >= 48 && value <= 62)
{
// Compost bin[Take,Examine,Dump] 19097
return new PatchState(Produce.SUPERCOMPOST, CropState.HARVESTABLE, value - 48); // 48 means there is only 1 bucket left
}
if (value == 94)
{
// Compost bin[Open,Examine,Dump] 3850
return new PatchState(Produce.COMPOST, CropState.GROWING, Produce.COMPOST.getStages() - 1);
}
if (value == 95 || value == 96)
{
// Compost bin[Open,Examine,Dump] 19082,19082
return new PatchState(Produce.SUPERCOMPOST, CropState.GROWING, value - 95);
}
if (value == 126)
{
// Compost bin[Open,Examine,Dump] 19082
return new PatchState(Produce.SUPERCOMPOST, CropState.GROWING, Produce.SUPERCOMPOST.getStages() - 1);
}
if (value >= 129 && value <= 143)
{
// Giant compost bin[Close,Examine,Dump] 19098..19111,20099
return new PatchState(Produce.ROTTEN_TOMATO, CropState.FILLING, value - 129);
}
if (value >= 144 && value <= 158)
{
// Giant compost bin[Take,Examine,Dump] 20102..20116
return new PatchState(Produce.ROTTEN_TOMATO, CropState.HARVESTABLE, value - 144);
}
if (value >= 159 && value <= 160)
{
// Giant compost bin[Open,Examine,Dump] 20100
return new PatchState(Produce.ROTTEN_TOMATO, CropState.GROWING, value - 159);
}
if (value >= 176 && value <= 190)
{
// Compost bin[Take,Examine,Dump] 30502,30503,30504,30505,30506,30507,30508,30509,30510,30511,30512,30513,30514,30515,30516
return new PatchState(Produce.ULTRACOMPOST, CropState.HARVESTABLE, value - 176);
}
return null;
}
},
GIANT_COMPOST(Tab.SPECIAL, "Giant Compost Bin")
{
@Override
PatchState forVarbitValue(int value)
{
if (value == 0)
{
// Big compost bin[Examine] 33762
return new PatchState(Produce.EMPTY_GIANT_COMPOST_BIN, CropState.EMPTY, 0);
}
if (value >= 1 && value <= 15)
{
// Big compost bin[Examine,Dump] 33763..33777
return new PatchState(Produce.GIANT_COMPOST, CropState.FILLING, value - 1);
}
if (value >= 16 && value <= 30)
{
// Big compost bin[Take,Examine,Dump] 33795..33809
return new PatchState(Produce.GIANT_COMPOST, CropState.HARVESTABLE, value - 16);
}
if (value >= 33 && value <= 47)
{
// Big compost bin[Examine,Dump] 33825..33839
return new PatchState(Produce.GIANT_SUPERCOMPOST, CropState.FILLING, value - 33);
}
if (value >= 48 && value <= 62)
{
// Big compost bin[Take,Examine,Dump] 33857..33871
return new PatchState(Produce.GIANT_SUPERCOMPOST, CropState.HARVESTABLE, value - 48);
}
if (value >= 63 && value <= 77)
{
// Big compost bin[Examine,Dump] 33778..33792
return new PatchState(Produce.GIANT_COMPOST, CropState.FILLING, 15 + value - 63);
}
if (value >= 78 && value <= 92)
{
// Giant compost bin[Take,Examine,Dump] 33810..33824
return new PatchState(Produce.GIANT_COMPOST, CropState.HARVESTABLE, 15 + value - 78);
}
if (value == 93)
{
// Giant compost bin[Open,Examine,Dump] 33794
return new PatchState(Produce.GIANT_COMPOST, CropState.GROWING, Produce.GIANT_COMPOST.getStages() - 1);
}
if (value >= 97 && value <= 99)
{
// Giant compost bin[Open,Examin,Dump] 33855,33855
return new PatchState(Produce.GIANT_SUPERCOMPOST, CropState.GROWING, value - 97); // Once closed, starts rotting (super compost)
}
if (value >= 100 && value <= 114)
{
// Giant compost bin[Take,Examine,Dump] 33872..33886
return new PatchState(Produce.GIANT_SUPERCOMPOST, CropState.HARVESTABLE, 15 + value - 100);
}
if (value >= 127 && value <= 128)
{
// Giant compost bin[Open,Examine,Dump] 33793,33793
return new PatchState(Produce.GIANT_COMPOST, CropState.GROWING, value - 127);
}
if (value >= 129 && value <= 143)
{
// Giant compost bin[Close,Examine,Dump] 33887..33901
return new PatchState(Produce.GIANT_ROTTEN_TOMATO, CropState.FILLING, value - 129);
}
if (value >= 144 && value <= 158)
{
// Giant compost bin[Take,Examine,Dump] 33919..33933
return new PatchState(Produce.GIANT_ROTTEN_TOMATO, CropState.HARVESTABLE, value - 144);
}
if (value >= 159 && value <= 160)
{
// Giant compost bin[Open,Examine,Dump] 33917,33917
return new PatchState(Produce.GIANT_ROTTEN_TOMATO, CropState.GROWING, value - 159);
}
if (value >= 161 && value <= 175)
{
// Giant compost bin[Examine,Dump] 33840..33854
return new PatchState(Produce.GIANT_SUPERCOMPOST, CropState.FILLING, 15 + value - 161); // 161 means there are 16 items
}
if (value >= 176 && value <= 205)
{
// Giant compost bin[Take,Examine,Dump] 33957..33986
return new PatchState(Produce.GIANT_ULTRACOMPOST, CropState.HARVESTABLE, value - 176);
}
if (value >= 207 && value <= 221)
{
// Giant compost bin[Take,Examine,Dump] 33934..33948
return new PatchState(Produce.GIANT_ROTTEN_TOMATO, CropState.HARVESTABLE, 15 + value - 207);
}
if (value == 222)
{
// Giant compost bin[Open,Examine,Dump] 33918
return new PatchState(Produce.GIANT_ROTTEN_TOMATO, CropState.GROWING, Produce.GIANT_ROTTEN_TOMATO.getStages() - 1);
}
if (value >= 223 && value <= 237)
{
// Giant compost bin[Close,Examine,Dump] 33902..33916
return new PatchState(Produce.GIANT_ROTTEN_TOMATO, CropState.FILLING, 15 + value - 223);
}
return null;
}
};
@Nullable

View File

@@ -35,7 +35,7 @@ class PatchState
int getStages()
{
return cropState == CropState.HARVESTABLE ? produce.getHarvestStages() : produce.getStages();
return cropState == CropState.HARVESTABLE || cropState == CropState.FILLING ? produce.getHarvestStages() : produce.getStages();
}
int getTickRate()

View File

@@ -131,7 +131,19 @@ public enum Produce
CELASTRUS("Celastrus", "Celastrus tree", PatchImplementation.CELASTRUS, ItemID.BATTLESTAFF, 160, 6, 0, 4),
REDWOOD("Redwood", "Redwood tree", PatchImplementation.REDWOOD, ItemID.REDWOOD_LOGS, 640, 11),
HESPORI("Hespori", NullItemID.NULL_23044, 640, 4, 0, 2),
CRYSTAL_TREE("Crystal tree", ItemID.CRYSTAL_SHARDS, 80, 7);
CRYSTAL_TREE("Crystal tree", ItemID.CRYSTAL_SHARDS, 80, 7),
// Compost bins
EMPTY_COMPOST_BIN("Compost Bin", PatchImplementation.COMPOST, ItemID.COMPOST_BIN, 0, 1, 0, 0), // Dummy produce for the empty state
COMPOST("Compost", PatchImplementation.COMPOST, ItemID.COMPOST, 40, 3, 0, 15),
SUPERCOMPOST("Supercompost", PatchImplementation.COMPOST, ItemID.SUPERCOMPOST, 40, 3, 0, 15),
ULTRACOMPOST("Ultracompost", PatchImplementation.COMPOST, ItemID.ULTRACOMPOST, 0, 3, 0, 15), // Ultra doesn't compost,
ROTTEN_TOMATO("Rotten Tomato", PatchImplementation.COMPOST, ItemID.ROTTEN_TOMATO, 40, 3, 0, 15),
EMPTY_GIANT_COMPOST_BIN("Giant Compost Bin", PatchImplementation.COMPOST, ItemID.COMPOST_BIN, 0, 1, 0, 0), // Dummy produce for the empty state
GIANT_COMPOST("Compost", PatchImplementation.GIANT_COMPOST, ItemID.COMPOST, 40, 3, 0, 30),
GIANT_SUPERCOMPOST("Supercompost", PatchImplementation.GIANT_COMPOST, ItemID.SUPERCOMPOST, 40, 3, 0, 30),
GIANT_ULTRACOMPOST("Ultracompost", PatchImplementation.GIANT_COMPOST, ItemID.ULTRACOMPOST, 0, 3, 0, 30), // Ultra doesn't compost
GIANT_ROTTEN_TOMATO("Rotten Tomato", PatchImplementation.GIANT_COMPOST, ItemID.ROTTEN_TOMATO, 40, 3, 0, 30);
/**
* User-visible name

View File

@@ -52,7 +52,7 @@ public class PatchImplementationTest
collector.checkThat(pfx + ": produce", s.getProduce(), notNullValue());
collector.checkThat(pfx + ": negative stage", s.getStage(), greaterThanOrEqualTo(0));
int stages = s.getProduce().getStages();
if (s.getCropState() == CropState.HARVESTABLE)
if (s.getCropState() == CropState.HARVESTABLE || s.getCropState() == CropState.FILLING)
{
stages = s.getProduce().getHarvestStages();
}
@@ -63,7 +63,8 @@ public class PatchImplementationTest
}
if (s.getCropState() == CropState.GROWING && s.getProduce() != Produce.WEEDS && s.getStage() < stages)
{
harvestStages.computeIfAbsent(s.getProduce(), k -> new boolean[s.getProduce().getStages()])[s.getStage()] = true;
final int realStages = stages;
harvestStages.computeIfAbsent(s.getProduce(), k -> new boolean[realStages])[s.getStage()] = true;
}
}
}