forked from jzitnik/twodcraft
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.SpriteLoader;
|
||||||
import cz.jzitnik.game.annotations.BlockRegistry;
|
import cz.jzitnik.game.annotations.BlockRegistry;
|
||||||
|
import cz.jzitnik.game.annotations.ResetDataOnMine;
|
||||||
import cz.jzitnik.game.entities.Block;
|
import cz.jzitnik.game.entities.Block;
|
||||||
import cz.jzitnik.game.entities.items.ItemType;
|
import cz.jzitnik.game.entities.items.ItemType;
|
||||||
|
import cz.jzitnik.game.logic.services.grass.GrassDirtData;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
@ResetDataOnMine
|
||||||
@BlockRegistry("dirt")
|
@BlockRegistry("dirt")
|
||||||
public class DirtBlock extends Block {
|
public class DirtBlock extends Block {
|
||||||
public DirtBlock() {
|
public DirtBlock() {
|
||||||
super("dirt", SpriteLoader.SPRITES.DIRT, 1, ItemType.SHOVEL, new ArrayList<>());
|
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.SpriteLoader;
|
||||||
import cz.jzitnik.game.annotations.BlockRegistry;
|
import cz.jzitnik.game.annotations.BlockRegistry;
|
||||||
|
import cz.jzitnik.game.annotations.ResetDataOnMine;
|
||||||
import cz.jzitnik.game.entities.Block;
|
import cz.jzitnik.game.entities.Block;
|
||||||
import cz.jzitnik.game.entities.items.ItemType;
|
import cz.jzitnik.game.entities.items.ItemType;
|
||||||
|
import cz.jzitnik.game.logic.services.grass.GrassDirtData;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
@ResetDataOnMine
|
||||||
@BlockRegistry(value = "grass", drops = "dirt")
|
@BlockRegistry(value = "grass", drops = "dirt")
|
||||||
public class GrassBlock extends Block {
|
public class GrassBlock extends Block {
|
||||||
public GrassBlock() {
|
public GrassBlock() {
|
||||||
super("grass", SpriteLoader.SPRITES.GRASS, 1, ItemType.SHOVEL, new ArrayList<>());
|
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
|
// Dirt
|
||||||
if (world[y - 1][x].stream()
|
if (world[y - 1][x].stream()
|
||||||
.allMatch(block -> block.isGhost() || block.isMob() || block.getBlockId().equals("air"))
|
.allMatch(block -> block.isGhost() || block.isMob() || block.getBlockId().equals("air"))
|
||||||
&& random.nextInt(3) < 1 && isGrassBesides(world, x, y)) {
|
&& isGrassBesides(world, x, y)) {
|
||||||
world[y][x].removeIf(block -> block.getBlockId().equals("dirt"));
|
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"));
|
world[y][x].add(ItemBlockSupplier.getBlock("grass"));
|
||||||
|
} else {
|
||||||
|
dirtData.increaseAge();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
} else if (blocks.stream().anyMatch(block -> block.getBlockId().equals("grass"))) {
|
} else if (blocks.stream().anyMatch(block -> block.getBlockId().equals("grass"))) {
|
||||||
// Grass
|
// Grass
|
||||||
if (!world[y - 1][x].stream()
|
if (!world[y - 1][x].stream()
|
||||||
.allMatch(block -> block.isGhost() || block.isMob() || block.getBlockId().equals("air"))
|
.allMatch(block -> block.isGhost() || block.isMob() || block.getBlockId().equals("air"))) {
|
||||||
&& random.nextInt(3) < 1) {
|
var grass = blocks.stream().filter(i -> i.getBlockId().equals("grass")).findFirst().get();
|
||||||
world[y][x].removeIf(block -> block.getBlockId().equals("grass"));
|
var grassData = (GrassDirtData) grass.getData();
|
||||||
|
if (grassData.getAge() == 9) {
|
||||||
|
world[y][x].remove(grass);
|
||||||
world[y][x].add(ItemBlockSupplier.getBlock("dirt"));
|
world[y][x].add(ItemBlockSupplier.getBlock("dirt"));
|
||||||
|
} else {
|
||||||
|
grassData.increaseAge();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user