From 91309125e286ac1df3d7ae86ef4496b2655bd7ea Mon Sep 17 00:00:00 2001 From: nestoll Date: Tue, 28 May 2024 12:23:10 -0600 Subject: [PATCH 1/8] Update Dandelifeon to respect enchanted soil --- .../block/flower/generating/DandelifeonBlockEntity.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Xplat/src/main/java/vazkii/botania/common/block/flower/generating/DandelifeonBlockEntity.java b/Xplat/src/main/java/vazkii/botania/common/block/flower/generating/DandelifeonBlockEntity.java index cb74ba7fb7..71ea02e0d0 100644 --- a/Xplat/src/main/java/vazkii/botania/common/block/flower/generating/DandelifeonBlockEntity.java +++ b/Xplat/src/main/java/vazkii/botania/common/block/flower/generating/DandelifeonBlockEntity.java @@ -58,9 +58,9 @@ public void tickFlower() { super.tickFlower(); if (!getLevel().isClientSide) { - if (getLevel().getGameTime() % SPEED == 0 && getLevel().hasNeighborSignal(getBlockPos())) { + if ((getLevel().getGameTime() % SPEED == 0 || (getLevel().getGameTime() % (SPEED/2) == 0 && overgrowth)) && getLevel().hasNeighborSignal(getBlockPos())) { runSimulation(); - } else if ((getLevel().getGameTime() + 1) % SPEED == 0) { + } else if ((getLevel().getGameTime() + 1) % SPEED == 0 || ((getLevel().getGameTime() + 1) % (SPEED/2) == 0 && overgrowth)) { int diameter = radius * 2; for (int i = 0; i <= diameter; i++) { From 15b070b51df2278a676424f5d24172bdb129fcd9 Mon Sep 17 00:00:00 2001 From: NEstoll Date: Thu, 30 May 2024 02:00:01 -0600 Subject: [PATCH 2/8] Run spotlessApply --- .../block/flower/generating/DandelifeonBlockEntity.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Xplat/src/main/java/vazkii/botania/common/block/flower/generating/DandelifeonBlockEntity.java b/Xplat/src/main/java/vazkii/botania/common/block/flower/generating/DandelifeonBlockEntity.java index 71ea02e0d0..dedd7ed954 100644 --- a/Xplat/src/main/java/vazkii/botania/common/block/flower/generating/DandelifeonBlockEntity.java +++ b/Xplat/src/main/java/vazkii/botania/common/block/flower/generating/DandelifeonBlockEntity.java @@ -58,9 +58,9 @@ public void tickFlower() { super.tickFlower(); if (!getLevel().isClientSide) { - if ((getLevel().getGameTime() % SPEED == 0 || (getLevel().getGameTime() % (SPEED/2) == 0 && overgrowth)) && getLevel().hasNeighborSignal(getBlockPos())) { + if ((getLevel().getGameTime() % SPEED == 0 || (getLevel().getGameTime() % (SPEED / 2) == 0 && overgrowth)) && getLevel().hasNeighborSignal(getBlockPos())) { runSimulation(); - } else if ((getLevel().getGameTime() + 1) % SPEED == 0 || ((getLevel().getGameTime() + 1) % (SPEED/2) == 0 && overgrowth)) { + } else if ((getLevel().getGameTime() + 1) % SPEED == 0 || ((getLevel().getGameTime() + 1) % (SPEED / 2) == 0 && overgrowth)) { int diameter = radius * 2; for (int i = 0; i <= diameter; i++) { From 90c1089a916d179f9e1eab9bf96566acf0dcf475 Mon Sep 17 00:00:00 2001 From: NEstoll Date: Sat, 8 Jun 2024 14:27:36 -0600 Subject: [PATCH 3/8] Overgrown flowers only consider boundary cells that have/will be actively ticked --- .../common/block/block_entity/CellularBlockEntity.java | 4 ++-- .../block/flower/generating/DandelifeonBlockEntity.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Xplat/src/main/java/vazkii/botania/common/block/block_entity/CellularBlockEntity.java b/Xplat/src/main/java/vazkii/botania/common/block/block_entity/CellularBlockEntity.java index 7bc298b590..4b1c05f4ed 100644 --- a/Xplat/src/main/java/vazkii/botania/common/block/block_entity/CellularBlockEntity.java +++ b/Xplat/src/main/java/vazkii/botania/common/block/block_entity/CellularBlockEntity.java @@ -67,8 +67,8 @@ public void update(Level level) { generation = nextGeneration; } - public boolean hasPoweredParent(Level level) { - return flowerCoords != null && level.getBlockEntity(flowerCoords) instanceof DandelifeonBlockEntity && level.hasNeighborSignal(flowerCoords); + public boolean hasActiveParent(Level level) { + return flowerCoords != null && level.getBlockEntity(flowerCoords) instanceof DandelifeonBlockEntity parent && level.hasNeighborSignal(flowerCoords) && (!(level.getGameTime() % (DandelifeonBlockEntity.SPEED / 2) == 0) || parent.overgrowth); } public int getGeneration() { diff --git a/Xplat/src/main/java/vazkii/botania/common/block/flower/generating/DandelifeonBlockEntity.java b/Xplat/src/main/java/vazkii/botania/common/block/flower/generating/DandelifeonBlockEntity.java index dedd7ed954..bda33eacf7 100644 --- a/Xplat/src/main/java/vazkii/botania/common/block/flower/generating/DandelifeonBlockEntity.java +++ b/Xplat/src/main/java/vazkii/botania/common/block/flower/generating/DandelifeonBlockEntity.java @@ -186,7 +186,7 @@ public CellTable(int range, DandelifeonBlockEntity dandie) { private static int getCellGeneration(BlockPos pos, DandelifeonBlockEntity dandie, boolean onBoundary) { BlockEntity tile = dandie.getLevel().getBlockEntity(pos); if (tile instanceof CellularBlockEntity cell) { - return onBoundary ? (cell.hasPoweredParent(dandie.getLevel()) ? Cell.boundaryPunish(cell.getGeneration()) : Cell.DEAD) : cell.getGeneration(); + return onBoundary ? (cell.hasActiveParent(dandie.getLevel()) ? Cell.boundaryPunish(cell.getGeneration()) : Cell.DEAD) : cell.getGeneration(); } return Cell.DEAD; From 899ede25948c3bfd7f341367bef673fc5bcb8e80 Mon Sep 17 00:00:00 2001 From: NEstoll Date: Sat, 8 Jun 2024 15:03:11 -0600 Subject: [PATCH 4/8] Fix inverted time condition --- .../botania/common/block/block_entity/CellularBlockEntity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Xplat/src/main/java/vazkii/botania/common/block/block_entity/CellularBlockEntity.java b/Xplat/src/main/java/vazkii/botania/common/block/block_entity/CellularBlockEntity.java index 4b1c05f4ed..104106e7c5 100644 --- a/Xplat/src/main/java/vazkii/botania/common/block/block_entity/CellularBlockEntity.java +++ b/Xplat/src/main/java/vazkii/botania/common/block/block_entity/CellularBlockEntity.java @@ -68,7 +68,7 @@ public void update(Level level) { } public boolean hasActiveParent(Level level) { - return flowerCoords != null && level.getBlockEntity(flowerCoords) instanceof DandelifeonBlockEntity parent && level.hasNeighborSignal(flowerCoords) && (!(level.getGameTime() % (DandelifeonBlockEntity.SPEED / 2) == 0) || parent.overgrowth); + return flowerCoords != null && level.getBlockEntity(flowerCoords) instanceof DandelifeonBlockEntity parent && level.hasNeighborSignal(flowerCoords) && ((level.getGameTime() % DandelifeonBlockEntity.SPEED == 0) || parent.overgrowth); } public int getGeneration() { From 3c78bb9ba3f03750c8c641e1f14701d7be43a305 Mon Sep 17 00:00:00 2001 From: Nicholas Estoll Date: Wed, 19 Jun 2024 14:27:50 -0400 Subject: [PATCH 5/8] Refactor timing and boost, add shouldTick() method --- .../block/block_entity/CellularBlockEntity.java | 4 ++-- .../flower/generating/DandelifeonBlockEntity.java | 11 ++++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/Xplat/src/main/java/vazkii/botania/common/block/block_entity/CellularBlockEntity.java b/Xplat/src/main/java/vazkii/botania/common/block/block_entity/CellularBlockEntity.java index 104106e7c5..93e6ccb470 100644 --- a/Xplat/src/main/java/vazkii/botania/common/block/block_entity/CellularBlockEntity.java +++ b/Xplat/src/main/java/vazkii/botania/common/block/block_entity/CellularBlockEntity.java @@ -67,8 +67,8 @@ public void update(Level level) { generation = nextGeneration; } - public boolean hasActiveParent(Level level) { - return flowerCoords != null && level.getBlockEntity(flowerCoords) instanceof DandelifeonBlockEntity parent && level.hasNeighborSignal(flowerCoords) && ((level.getGameTime() % DandelifeonBlockEntity.SPEED == 0) || parent.overgrowth); + public boolean hasActiveParent(DandelifeonBlockEntity dandie) { + return flowerCoords != null && dandie.getLevel().getBlockEntity(flowerCoords) instanceof DandelifeonBlockEntity parent && dandie.getLevel().hasNeighborSignal(flowerCoords) && parent.overgrowthBoost == dandie.overgrowthBoost; } public int getGeneration() { diff --git a/Xplat/src/main/java/vazkii/botania/common/block/flower/generating/DandelifeonBlockEntity.java b/Xplat/src/main/java/vazkii/botania/common/block/flower/generating/DandelifeonBlockEntity.java index bda33eacf7..122a736ab4 100644 --- a/Xplat/src/main/java/vazkii/botania/common/block/flower/generating/DandelifeonBlockEntity.java +++ b/Xplat/src/main/java/vazkii/botania/common/block/flower/generating/DandelifeonBlockEntity.java @@ -26,6 +26,7 @@ public class DandelifeonBlockEntity extends GeneratingFlowerBlockEntity { public static final int RANGE = 12; public static final int SPEED = 10; + public static final int OVERGROWN_SPEED = SPEED / 2; // private static final int MAX_GENERATIONS = 100; public static final int MAX_MANA_GENERATIONS = 100; public static final int MANA_PER_GEN = 60; @@ -58,9 +59,9 @@ public void tickFlower() { super.tickFlower(); if (!getLevel().isClientSide) { - if ((getLevel().getGameTime() % SPEED == 0 || (getLevel().getGameTime() % (SPEED / 2) == 0 && overgrowth)) && getLevel().hasNeighborSignal(getBlockPos())) { + if (shouldTick(getLevel().getGameTime())) { runSimulation(); - } else if ((getLevel().getGameTime() + 1) % SPEED == 0 || ((getLevel().getGameTime() + 1) % (SPEED / 2) == 0 && overgrowth)) { + } else if (shouldTick(getLevel().getGameTime() + 1)) { int diameter = radius * 2; for (int i = 0; i <= diameter; i++) { @@ -76,6 +77,10 @@ public void tickFlower() { } } + private static boolean shouldTick(long gameTime) { + return (gameTime % SPEED == 0 || (gameTime % (OVERGROWN_SPEED) == 0 && overgrowthBoost)) && getLevel().hasNeighborSignal(getBlockPos()); + } + private void runSimulation() { var table = new CellTable(radius, this); List changes = new ArrayList<>(); @@ -186,7 +191,7 @@ public CellTable(int range, DandelifeonBlockEntity dandie) { private static int getCellGeneration(BlockPos pos, DandelifeonBlockEntity dandie, boolean onBoundary) { BlockEntity tile = dandie.getLevel().getBlockEntity(pos); if (tile instanceof CellularBlockEntity cell) { - return onBoundary ? (cell.hasActiveParent(dandie.getLevel()) ? Cell.boundaryPunish(cell.getGeneration()) : Cell.DEAD) : cell.getGeneration(); + return onBoundary ? (cell.hasActiveParent(dandie) ? Cell.boundaryPunish(cell.getGeneration()) : Cell.DEAD) : cell.getGeneration(); } return Cell.DEAD; From 475fe713eb4d80b8c588bbba90a0320e6659af5e Mon Sep 17 00:00:00 2001 From: Nicholas Estoll Date: Wed, 10 Jul 2024 13:12:50 -0400 Subject: [PATCH 6/8] overgrowthBoost can't be used outside of tick logic --- .../botania/common/block/block_entity/CellularBlockEntity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Xplat/src/main/java/vazkii/botania/common/block/block_entity/CellularBlockEntity.java b/Xplat/src/main/java/vazkii/botania/common/block/block_entity/CellularBlockEntity.java index 93e6ccb470..fdce1d4732 100644 --- a/Xplat/src/main/java/vazkii/botania/common/block/block_entity/CellularBlockEntity.java +++ b/Xplat/src/main/java/vazkii/botania/common/block/block_entity/CellularBlockEntity.java @@ -68,7 +68,7 @@ public void update(Level level) { } public boolean hasActiveParent(DandelifeonBlockEntity dandie) { - return flowerCoords != null && dandie.getLevel().getBlockEntity(flowerCoords) instanceof DandelifeonBlockEntity parent && dandie.getLevel().hasNeighborSignal(flowerCoords) && parent.overgrowthBoost == dandie.overgrowthBoost; + return flowerCoords != null && dandie.getLevel().getBlockEntity(flowerCoords) instanceof DandelifeonBlockEntity parent && dandie.getLevel().hasNeighborSignal(flowerCoords) && parent.isOnSpecialSoil() == dandie.overgrowthBoost; } public int getGeneration() { From ae52012c35d0b332efa40d8b7e3040fe97376558 Mon Sep 17 00:00:00 2001 From: Nicholas Estoll Date: Wed, 10 Jul 2024 13:30:14 -0400 Subject: [PATCH 7/8] Fix static and private --- .../botania/api/block_entity/SpecialFlowerBlockEntity.java | 2 +- .../common/block/flower/generating/DandelifeonBlockEntity.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Xplat/src/main/java/vazkii/botania/api/block_entity/SpecialFlowerBlockEntity.java b/Xplat/src/main/java/vazkii/botania/api/block_entity/SpecialFlowerBlockEntity.java index 19ced5b950..0caf6dbe20 100644 --- a/Xplat/src/main/java/vazkii/botania/api/block_entity/SpecialFlowerBlockEntity.java +++ b/Xplat/src/main/java/vazkii/botania/api/block_entity/SpecialFlowerBlockEntity.java @@ -123,7 +123,7 @@ public final void setFloating(boolean floating) { this.isFloating = floating; } - private boolean isOnSpecialSoil() { + public boolean isOnSpecialSoil() { if (isFloating()) { return false; } else { diff --git a/Xplat/src/main/java/vazkii/botania/common/block/flower/generating/DandelifeonBlockEntity.java b/Xplat/src/main/java/vazkii/botania/common/block/flower/generating/DandelifeonBlockEntity.java index 122a736ab4..abba8d3dcf 100644 --- a/Xplat/src/main/java/vazkii/botania/common/block/flower/generating/DandelifeonBlockEntity.java +++ b/Xplat/src/main/java/vazkii/botania/common/block/flower/generating/DandelifeonBlockEntity.java @@ -77,7 +77,7 @@ public void tickFlower() { } } - private static boolean shouldTick(long gameTime) { + private boolean shouldTick(long gameTime) { return (gameTime % SPEED == 0 || (gameTime % (OVERGROWN_SPEED) == 0 && overgrowthBoost)) && getLevel().hasNeighborSignal(getBlockPos()); } From d43da4ceea0d2f92ba88f7deafa4d1581847fe02 Mon Sep 17 00:00:00 2001 From: Nicholas Estoll Date: Wed, 10 Jul 2024 16:36:01 -0400 Subject: [PATCH 8/8] Fix overgrowth check for normal flowers --- .../botania/common/block/block_entity/CellularBlockEntity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Xplat/src/main/java/vazkii/botania/common/block/block_entity/CellularBlockEntity.java b/Xplat/src/main/java/vazkii/botania/common/block/block_entity/CellularBlockEntity.java index fdce1d4732..9a0ff9610c 100644 --- a/Xplat/src/main/java/vazkii/botania/common/block/block_entity/CellularBlockEntity.java +++ b/Xplat/src/main/java/vazkii/botania/common/block/block_entity/CellularBlockEntity.java @@ -68,7 +68,7 @@ public void update(Level level) { } public boolean hasActiveParent(DandelifeonBlockEntity dandie) { - return flowerCoords != null && dandie.getLevel().getBlockEntity(flowerCoords) instanceof DandelifeonBlockEntity parent && dandie.getLevel().hasNeighborSignal(flowerCoords) && parent.isOnSpecialSoil() == dandie.overgrowthBoost; + return flowerCoords != null && dandie.getLevel().getBlockEntity(flowerCoords) instanceof DandelifeonBlockEntity parent && dandie.getLevel().hasNeighborSignal(flowerCoords) && (!dandie.overgrowthBoost || parent.isOnSpecialSoil()); } public int getGeneration() {