feat: New grass growing logic using age
This commit is contained in:
parent
1cd8648a2a
commit
dd7f1c041f
@ -2,14 +2,18 @@ package cz.jzitnik.game.entities.items.registry.blocks;
|
||||
|
||||
import cz.jzitnik.game.SpriteLoader;
|
||||
import cz.jzitnik.game.annotations.BlockRegistry;
|
||||
import cz.jzitnik.game.annotations.ResetDataOnMine;
|
||||
import cz.jzitnik.game.entities.Block;
|
||||
import cz.jzitnik.game.entities.items.ItemType;
|
||||
import cz.jzitnik.game.logic.services.grass.GrassDirtData;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
@ResetDataOnMine
|
||||
@BlockRegistry("dirt")
|
||||
public class DirtBlock extends Block {
|
||||
public DirtBlock() {
|
||||
super("dirt", SpriteLoader.SPRITES.DIRT, 1, ItemType.SHOVEL, new ArrayList<>());
|
||||
setData(new GrassDirtData());
|
||||
}
|
||||
}
|
||||
|
@ -2,14 +2,18 @@ package cz.jzitnik.game.entities.items.registry.blocks;
|
||||
|
||||
import cz.jzitnik.game.SpriteLoader;
|
||||
import cz.jzitnik.game.annotations.BlockRegistry;
|
||||
import cz.jzitnik.game.annotations.ResetDataOnMine;
|
||||
import cz.jzitnik.game.entities.Block;
|
||||
import cz.jzitnik.game.entities.items.ItemType;
|
||||
import cz.jzitnik.game.logic.services.grass.GrassDirtData;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
@ResetDataOnMine
|
||||
@BlockRegistry(value = "grass", drops = "dirt")
|
||||
public class GrassBlock extends Block {
|
||||
public GrassBlock() {
|
||||
super("grass", SpriteLoader.SPRITES.GRASS, 1, ItemType.SHOVEL, new ArrayList<>());
|
||||
setData(new GrassDirtData());
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,16 @@
|
||||
package cz.jzitnik.game.logic.services.grass;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public class GrassDirtData implements Serializable {
|
||||
private int age = 0;
|
||||
|
||||
public void increaseAge() {
|
||||
age++;
|
||||
}
|
||||
}
|
@ -32,17 +32,29 @@ public class GrassGrowingLogic implements CustomLogicInterface {
|
||||
// Dirt
|
||||
if (world[y - 1][x].stream()
|
||||
.allMatch(block -> block.isGhost() || block.isMob() || block.getBlockId().equals("air"))
|
||||
&& random.nextInt(3) < 1 && isGrassBesides(world, x, y)) {
|
||||
world[y][x].removeIf(block -> block.getBlockId().equals("dirt"));
|
||||
world[y][x].add(ItemBlockSupplier.getBlock("grass"));
|
||||
&& isGrassBesides(world, x, y)) {
|
||||
var dirt = blocks.stream().filter(i -> i.getBlockId().equals("dirt")).findFirst().get();
|
||||
var dirtData = (GrassDirtData) dirt.getData();
|
||||
if (dirtData.getAge() == 9) {
|
||||
world[y][x].remove(dirt);
|
||||
world[y][x].add(ItemBlockSupplier.getBlock("grass"));
|
||||
} else {
|
||||
dirtData.increaseAge();
|
||||
}
|
||||
|
||||
}
|
||||
} else if (blocks.stream().anyMatch(block -> block.getBlockId().equals("grass"))) {
|
||||
// Grass
|
||||
if (!world[y - 1][x].stream()
|
||||
.allMatch(block -> block.isGhost() || block.isMob() || block.getBlockId().equals("air"))
|
||||
&& random.nextInt(3) < 1) {
|
||||
world[y][x].removeIf(block -> block.getBlockId().equals("grass"));
|
||||
world[y][x].add(ItemBlockSupplier.getBlock("dirt"));
|
||||
.allMatch(block -> block.isGhost() || block.isMob() || block.getBlockId().equals("air"))) {
|
||||
var grass = blocks.stream().filter(i -> i.getBlockId().equals("grass")).findFirst().get();
|
||||
var grassData = (GrassDirtData) grass.getData();
|
||||
if (grassData.getAge() == 9) {
|
||||
world[y][x].remove(grass);
|
||||
world[y][x].add(ItemBlockSupplier.getBlock("dirt"));
|
||||
} else {
|
||||
grassData.increaseAge();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user