timetracking: add compost bin time trackers (#12619)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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. */
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user