Fix hanging plants searching up instead of down. (#4766)

This commit is contained in:
Warrior 2022-04-28 17:33:45 +02:00 committed by GitHub
parent c41d2d1f39
commit 4a8630262e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 8 deletions

View File

@ -578,7 +578,7 @@ public class HerbalismManager extends SkillManager {
if (isChorusBranch(brokenBlock.getType())) {
brokenBlocks = getBrokenChorusBlocks(brokenBlock);
} else {
brokenBlocks = getBlocksBrokenAbove(brokenBlock, false);
brokenBlocks = getBlocksBrokenAboveOrBelow(brokenBlock, false, mcMMO.getMaterialMapStore().isMultiBlockHangingPlant(brokenBlock.getType()));
}
return brokenBlocks;
@ -599,9 +599,11 @@ public class HerbalismManager extends SkillManager {
* Multi-block plants are hard-coded and kept in {@link MaterialMapStore}
*
* @param originBlock The point of the "break"
* @param inclusive Whether to include the origin block
* @param below Whether to search down instead of up.
* @return A set of blocks above the target block which can be assumed to be broken
*/
private HashSet<Block> getBlocksBrokenAbove(BlockState originBlock, boolean inclusive) {
private HashSet<Block> getBlocksBrokenAboveOrBelow(BlockState originBlock, boolean inclusive, boolean below) {
HashSet<Block> brokenBlocks = new HashSet<>();
Block block = originBlock.getBlock();
@ -612,16 +614,18 @@ public class HerbalismManager extends SkillManager {
//Limit our search
int maxHeight = 512;
final BlockFace relativeFace = below ? BlockFace.DOWN : BlockFace.UP;
// Search vertically for multi-block plants, exit early if any non-multi block plants
for (int y = 0; y < maxHeight; y++) {
//TODO: Should this grab state? It would be more expensive..
Block relativeUpBlock = block.getRelative(BlockFace.UP, y);
Block relativeBlock = block.getRelative(relativeFace, y);
//Abandon our search if the block isn't multi
if(!mcMMO.getMaterialMapStore().isMultiBlockPlant(relativeUpBlock.getType()))
if (isOneBlockPlant(relativeBlock.getType()))
break;
brokenBlocks.add(relativeUpBlock);
brokenBlocks.add(relativeBlock);
}
return brokenBlocks;
@ -634,7 +638,7 @@ public class HerbalismManager extends SkillManager {
* @return true if the block is not contained in the collection of multi-block plants
*/
private boolean isOneBlockPlant(Material material) {
return !mcMMO.getMaterialMapStore().isMultiBlockPlant(material);
return !mcMMO.getMaterialMapStore().isMultiBlockPlant(material) && !mcMMO.getMaterialMapStore().isMultiBlockHangingPlant(material);
}
/**

View File

@ -24,6 +24,7 @@ public class MaterialMapStore {
private final @NotNull HashSet<String> blockCrackerWhiteList;
private final @NotNull HashSet<String> canMakeShroomyWhiteList;
private final @NotNull HashSet<String> multiBlockPlant;
private final @NotNull HashSet<String> multiBlockHangingPlant;
private final @NotNull HashSet<String> foodItemWhiteList;
private final @NotNull HashSet<String> glassBlocks;
@ -71,6 +72,7 @@ public class MaterialMapStore {
blockCrackerWhiteList = new HashSet<>();
canMakeShroomyWhiteList = new HashSet<>();
multiBlockPlant = new HashSet<>();
multiBlockHangingPlant = new HashSet<>();
foodItemWhiteList = new HashSet<>();
glassBlocks = new HashSet<>();
@ -121,6 +123,7 @@ public class MaterialMapStore {
fillBlockCrackerWhiteList();
fillShroomyWhiteList();
fillMultiBlockPlantSet();
fillMultiBlockHangingPlantSet();
fillFoodWhiteList();
fillGlassBlockWhiteList();
fillArmors();
@ -137,6 +140,10 @@ public class MaterialMapStore {
return multiBlockPlant.contains(material.getKey().getKey());
}
public boolean isMultiBlockHangingPlant(@NotNull Material material) {
return multiBlockHangingPlant.contains(material.getKey().getKey());
}
public boolean isAbilityActivationBlackListed(@NotNull Material material)
{
return abilityBlackList.contains(material.getKey().getKey());
@ -974,8 +981,12 @@ public class MaterialMapStore {
multiBlockPlant.add("large_fern");
multiBlockPlant.add("tall_grass");
multiBlockPlant.add("bamboo");
multiBlockPlant.add("weeping_vines_plant");
multiBlockPlant.add("twisted_vines_plant");
}
private void fillMultiBlockHangingPlantSet() {
multiBlockHangingPlant.add("weeping_vines_plant");
multiBlockHangingPlant.add("twisted_vines_plant");
multiBlockHangingPlant.add("cave_vines_plant");
}
private void fillShroomyWhiteList()