diff --git a/src/main/java/de/jottyfan/minecraft/block/EmptyLavahoarder.java b/src/main/java/de/jottyfan/minecraft/block/EmptyLavahoarder.java deleted file mode 100644 index 2c29ada..0000000 --- a/src/main/java/de/jottyfan/minecraft/block/EmptyLavahoarder.java +++ /dev/null @@ -1,125 +0,0 @@ -package de.jottyfan.minecraft.block; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Random; -import java.util.Set; - -import net.minecraft.core.BlockPos; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.util.RandomSource; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.storage.loot.LootParams.Builder; - -/** - * - * @author jotty - * - */ -public class EmptyLavahoarder extends Block { - - public EmptyLavahoarder(Properties properties) { - super(properties); - } - - @Override - protected List getDrops(BlockState state, Builder params) { - List list = new ArrayList<>(); - list.add(new ItemStack(QuicklyBlocks.EMPTYLAVAHOARDER)); - return list; - } - - @Override - protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { - boolean found = Lavahoarder.suckLava(level, pos.north()); - found = found || Lavahoarder.suckLava(level, pos.south()); - found = found || Lavahoarder.suckLava(level, pos.east()); - found = found || Lavahoarder.suckLava(level, pos.west()); - found = found || Lavahoarder.suckLava(level, pos.above()); - found = found || Lavahoarder.suckLava(level, pos.below()); - if (found) { - level.setBlock(pos, QuicklyBlocks.LAVAHOARDER.defaultBlockState(), 2); - level.scheduleTick(pos, QuicklyBlocks.LAVAHOARDER, 1); - } else { - level.scheduleTick(pos, this, 1); - } - } - - private static final String stringOf(BlockPos pos) { - StringBuilder buf = new StringBuilder(); - buf.append(pos.getX()).append(":"); - buf.append(pos.getY()).append(":"); - buf.append(pos.getZ()); - return buf.toString(); - } - - private static final BlockPos blockPosOf(String s) { - if (s.contains(":")) { - String[] parts = s.split(":"); - if (parts.length > 2) { - Integer x = Integer.valueOf(parts[0]); - Integer y = Integer.valueOf(parts[1]); - Integer z = Integer.valueOf(parts[2]); - return new BlockPos(x, y, z); - } else { - return null; - } - } else { - return null; - } - } - - private void findAllAttachedLavaBlocks(Set list, BlockPos pos, Level level, Integer counter) { - if (counter < 1) { - return; - } else if (Blocks.LAVA.equals(level.getBlockState(pos).getBlock())) { - String p = stringOf(pos); - if (!list.contains(p)) { - list.add(p); - findAllAttachedLavaBlocks(list, pos.above(), level, counter - 1); - findAllAttachedLavaBlocks(list, pos.below(), level, counter - 1); - findAllAttachedLavaBlocks(list, pos.north(), level, counter - 1); - findAllAttachedLavaBlocks(list, pos.south(), level, counter - 1); - findAllAttachedLavaBlocks(list, pos.east(), level, counter - 1); - findAllAttachedLavaBlocks(list, pos.west(), level, counter - 1); - } - } - } - - @Override - protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { - Set positions = new HashSet<>(); - Integer counter = 8; // TODO: make it level up - able - findAllAttachedLavaBlocks(positions, pos.above(), level, counter); - findAllAttachedLavaBlocks(positions, pos.below(), level, counter); - findAllAttachedLavaBlocks(positions, pos.north(), level, counter); - findAllAttachedLavaBlocks(positions, pos.south(), level, counter); - findAllAttachedLavaBlocks(positions, pos.east(), level, counter); - findAllAttachedLavaBlocks(positions, pos.west(), level, counter); - Integer amount = positions.size(); - for (String p : positions) { - level.setBlock(blockPosOf(p), Blocks.AIR.defaultBlockState(), 2); - } - if (amount > 0) { - level.setBlock(pos, QuicklyBlocks.LAVAHOARDER.defaultBlockState(), 2); - level.scheduleTick(pos, QuicklyBlocks.LAVAHOARDER, 1); - int count = 0; - Random random = new Random(); - for (int i = 0; i < amount; i++) { - if (random.nextFloat() < 0.0125) { - count++; - } - } - if (count > 0) { - Lavahoarder.spawnRandomItems(level, pos.above(), count); - } - } else { - level.scheduleTick(pos, this, 1); - } - } -} diff --git a/src/main/java/de/jottyfan/minecraft/block/Lavahoarder.java b/src/main/java/de/jottyfan/minecraft/block/Lavahoarder.java index e5e0363..a647423 100644 --- a/src/main/java/de/jottyfan/minecraft/block/Lavahoarder.java +++ b/src/main/java/de/jottyfan/minecraft/block/Lavahoarder.java @@ -1,8 +1,10 @@ package de.jottyfan.minecraft.block; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Random; +import java.util.Set; import de.jottyfan.minecraft.item.QuicklyItems; import net.minecraft.core.BlockPos; @@ -18,6 +20,8 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.level.storage.loot.LootParams.Builder; import net.minecraft.world.phys.BlockHitResult; @@ -28,8 +32,16 @@ import net.minecraft.world.phys.BlockHitResult; */ public class Lavahoarder extends Block { + public static final BooleanProperty FILLED = BooleanProperty.create("filled"); + public Lavahoarder(Properties properties) { super(properties); + registerDefaultState(stateDefinition.any().setValue(FILLED, false)); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(FILLED); } @Override @@ -88,12 +100,16 @@ public class Lavahoarder extends Block { @Override protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { - suckLava(level, pos.north()); - suckLava(level, pos.south()); - suckLava(level, pos.east()); - suckLava(level, pos.west()); - suckLava(level, pos.above()); - suckLava(level, pos.below()); + boolean any = false; + any = any || suckLava(level, pos.north()); + any = any || suckLava(level, pos.south()); + any = any || suckLava(level, pos.east()); + any = any || suckLava(level, pos.west()); + any = any || suckLava(level, pos.above()); + any = any || suckLava(level, pos.below()); + if (any && !level.getBlockState(pos).getValue(Lavahoarder.FILLED)) { + level.setBlockAndUpdate(pos, QuicklyBlocks.LAVAHOARDER.defaultBlockState().setValue(Lavahoarder.FILLED, true)); + } level.scheduleTick(pos, this, 1); } @@ -113,15 +129,85 @@ public class Lavahoarder extends Block { level.addFreshEntity(new ItemEntity(level, pos.getX(), pos.getY(), pos.getZ(), lavaBucketStack)); } spawnRandomItems(level, pos, 2); - level.setBlock(pos, QuicklyBlocks.EMPTYLAVAHOARDER.defaultBlockState(), 2); + level.setBlockAndUpdate(pos, QuicklyBlocks.LAVAHOARDER.defaultBlockState()); // sets filled = false level.scheduleTick(pos, this, 1); } } return InteractionResult.SUCCESS; // forbid to empty the just filled lava bucket } + private static final String stringOf(BlockPos pos) { + StringBuilder buf = new StringBuilder(); + buf.append(pos.getX()).append(":"); + buf.append(pos.getY()).append(":"); + buf.append(pos.getZ()); + return buf.toString(); + } + + private void findAllAttachedLavaBlocks(Set list, BlockPos pos, Level level, Integer counter) { + if (counter < 1) { + return; + } else if (Blocks.LAVA.equals(level.getBlockState(pos).getBlock())) { + String p = stringOf(pos); + if (!list.contains(p)) { + list.add(p); + findAllAttachedLavaBlocks(list, pos.above(), level, counter - 1); + findAllAttachedLavaBlocks(list, pos.below(), level, counter - 1); + findAllAttachedLavaBlocks(list, pos.north(), level, counter - 1); + findAllAttachedLavaBlocks(list, pos.south(), level, counter - 1); + findAllAttachedLavaBlocks(list, pos.east(), level, counter - 1); + findAllAttachedLavaBlocks(list, pos.west(), level, counter - 1); + } + } + } + + private static final BlockPos blockPosOf(String s) { + if (s.contains(":")) { + String[] parts = s.split(":"); + if (parts.length > 2) { + Integer x = Integer.valueOf(parts[0]); + Integer y = Integer.valueOf(parts[1]); + Integer z = Integer.valueOf(parts[2]); + return new BlockPos(x, y, z); + } else { + return null; + } + } else { + return null; + } + } + @Override protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { - level.scheduleTick(pos, this, 1); + Set positions = new HashSet<>(); + Integer counter = 8; // TODO: make it level up - able + findAllAttachedLavaBlocks(positions, pos.above(), level, counter); + findAllAttachedLavaBlocks(positions, pos.below(), level, counter); + findAllAttachedLavaBlocks(positions, pos.north(), level, counter); + findAllAttachedLavaBlocks(positions, pos.south(), level, counter); + findAllAttachedLavaBlocks(positions, pos.east(), level, counter); + findAllAttachedLavaBlocks(positions, pos.west(), level, counter); + Integer amount = positions.size(); + for (String p : positions) { + level.setBlockAndUpdate(blockPosOf(p), Blocks.AIR.defaultBlockState()); + } + if (amount > 0) { + if (!level.getBlockState(pos).getValue(Lavahoarder.FILLED)) { + level.setBlockAndUpdate(pos, QuicklyBlocks.LAVAHOARDER.defaultBlockState().setValue(FILLED, true)); + } + level.scheduleTick(pos, QuicklyBlocks.LAVAHOARDER, 1); + int count = 0; + Random random = new Random(); + for (int i = 0; i < amount; i++) { + if (random.nextFloat() < 0.0125) { + count++; + } + } + if (count > 0) { + Lavahoarder.spawnRandomItems(level, pos.above(), count); + } + } else { + level.scheduleTick(pos, this, 1); + } } } diff --git a/src/main/java/de/jottyfan/minecraft/block/QuicklyBlocks.java b/src/main/java/de/jottyfan/minecraft/block/QuicklyBlocks.java index 5fccc21..faefcde 100644 --- a/src/main/java/de/jottyfan/minecraft/block/QuicklyBlocks.java +++ b/src/main/java/de/jottyfan/minecraft/block/QuicklyBlocks.java @@ -41,9 +41,7 @@ public class QuicklyBlocks { public static final Block CANOLAPLANT = registerBlock("blockcanolaplant", Properties.ofFullCopy(Blocks.WHEAT), properties -> new BlockPlant(properties, "canolaseed", "canola")); public static final Block LAVAHOARDER = registerBlock("lavahoarder", - Properties.of().strength(2.5f).lightLevel(_ -> 15), properties -> new Lavahoarder(properties)); - public static final Block EMPTYLAVAHOARDER = registerBlock("emptylavahoarder", Properties.of().strength(2.5f), - properties -> new EmptyLavahoarder(properties)); + Properties.of().strength(2.5f).lightLevel(state -> state.getValue(Lavahoarder.FILLED) ? 15 : 0), properties -> new Lavahoarder(properties)); public static final Block QUICKIEPOWDER = registerBlock("blockquickiepowder", properties -> new BlockDrops(properties, new ItemStack(QuicklyItems.QUICKIEPOWDER, 9))); public static final Block SPEEDPOWDER = registerBlock("blockspeedpowder", @@ -79,9 +77,6 @@ public class QuicklyBlocks { public static final Block SULFORBLOCK = registerBlock("blocksulfor", properties -> new BlockOre(properties.strength(1.5f), null, new ItemStack(QuicklyItems.SULFOR, 9))); - // TODO: merge lavahoarder and emptylavahoarder into one block using a - // BooleanProperty for the lava fill state - private static final Block registerBlock(String name, Properties properties) { return QuicklyBlocks.registerBlock(name, properties, p -> new Block(p)); } @@ -115,11 +110,11 @@ public class QuicklyBlocks { block.accept(OREDEEPSLATESULFOR); block.accept(OREDEEPSLATESPEEDPOWDER); block.accept(ORENETHERSULFOR); - block.accept(EMPTYLAVAHOARDER); block.accept(SPEEDPOWDER); block.accept(QUICKIEPOWDER); block.accept(MONSTERHOARDER); block.accept(ITEMHOARDER); + block.accept(LAVAHOARDER); block.accept(DRILL); block.accept(STACKER); block.accept(SALPETERBLOCK); diff --git a/src/main/resources/assets/quickly/blockstates/emptylavahoarder.json b/src/main/resources/assets/quickly/blockstates/emptylavahoarder.json deleted file mode 100644 index 70bd5f3..0000000 --- a/src/main/resources/assets/quickly/blockstates/emptylavahoarder.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "quickly:block/emptylavahoarder" - } - } -} diff --git a/src/main/resources/assets/quickly/blockstates/lavahoarder.json b/src/main/resources/assets/quickly/blockstates/lavahoarder.json index ca3eb46..0278748 100644 --- a/src/main/resources/assets/quickly/blockstates/lavahoarder.json +++ b/src/main/resources/assets/quickly/blockstates/lavahoarder.json @@ -1,7 +1,6 @@ { "variants": { - "": { - "model": "quickly:block/lavahoarder" - } + "filled=true": { "model": "quickly:block/lavahoarder" }, + "filled=false": { "model": "quickly:block/emptylavahoarder" } } } diff --git a/src/main/resources/assets/quickly/items/emptylavahoarder.json b/src/main/resources/assets/quickly/items/emptylavahoarder.json deleted file mode 100644 index de34f8d..0000000 --- a/src/main/resources/assets/quickly/items/emptylavahoarder.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "model": { - "type": "minecraft:model", - "model": "quickly:block/emptylavahoarder" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/quickly/items/lavahoarder.json b/src/main/resources/assets/quickly/items/lavahoarder.json index 8ae6db3..de34f8d 100644 --- a/src/main/resources/assets/quickly/items/lavahoarder.json +++ b/src/main/resources/assets/quickly/items/lavahoarder.json @@ -1,6 +1,6 @@ { "model": { "type": "minecraft:model", - "model": "quickly:block/lavahoarder" + "model": "quickly:block/emptylavahoarder" } } \ No newline at end of file diff --git a/src/main/resources/assets/quickly/lang/de_de.json b/src/main/resources/assets/quickly/lang/de_de.json index 58467e4..a6f32a1 100644 --- a/src/main/resources/assets/quickly/lang/de_de.json +++ b/src/main/resources/assets/quickly/lang/de_de.json @@ -1,17 +1,4 @@ { - "item.quickly.speedpowderaxe": "Fluchtpulveraxt", - "item.quickly.speedpowderpickaxe": "Fluchtpulverspitzhacke", - "item.quickly.speedpowdershovel": "Fluchtpulverschaufel", - "item.quickly.speedpowderhoe": "Fluchtpulverfeldhacke", - "item.quickly.speedpowderwaterhoe": "bewässerte Fluchtpulverfeldhacke", - "item.quickly.speedpowdershears": "Fluchtpulverschere", - "item.quickly.quickiepowderaxe": "Eilpulveraxt", - "item.quickly.quickiepowderpickaxe": "Eilpulverspitzhacke", - "item.quickly.quickiepowdershovel": "Eilpulverschaufel", - "item.quickly.quickiepowderhoe": "Eilpulverfeldhacke", - "item.quickly.quickiepowderwaterhoe": "bewässerte Eilpulverfeldhacke", - "item.quickly.quickiepowdershears": "Eilpulverschere", - "info.block.drillfuel": "Ladung: %s Bohrungen", "info.block.itemhoarder": "enthält: %s", "info.block.monsterhoarder": "Radius: %s, Brenndauer: %s Ticks", @@ -36,10 +23,9 @@ "item.quickly.cottonseed": "Baumwollsaat", "item.quickly.dirtsalpeter": "Salpetererde", "item.quickly.drill": "Bohrer", - "item.quickly.emptylavahoarder": "Lavasauger", "item.quickly.itemhoarder": "Itemsauger", "item.quickly.kelpbundle": "Seegrassbündel", - "item.quickly.lavahoarder": "voller Lavasauger", + "item.quickly.lavahoarder": "Lavasauger", "item.quickly.magnifier": "Lupe", "item.quickly.monsterhoarder": "Monstersauger", "item.quickly.oredeepslatespeedpowder": "Eilpulvertiefengesteinerz", @@ -54,12 +40,24 @@ "item.quickly.oxidizedcopperpowder": "oxidiertes Kupferpulver", "item.quickly.quickieingot": "Eilpulverbarren", "item.quickly.quickiepowder": "Eilpulver", + "item.quickly.quickiepowderaxe": "Eilaxt", + "item.quickly.quickiepowderpickaxe": "Eilspitzhacke", + "item.quickly.quickiepowdershovel": "Eilschaufel", + "item.quickly.quickiepowderhoe": "Eilfeldhacke", + "item.quickly.quickiepowdershears": "Eilschere", + "item.quickly.quickiepowderwaterhoe": "bewässerte Eilfeldhacke", "item.quickly.rawturquoise": "rohes Türkis", "item.quickly.rotten_flesh_stripes": "geschnittenes Gammelfleisch", "item.quickly.salpeter": "Salpeter", "item.quickly.sandsalpeter": "Salpetersand", "item.quickly.speedingot": "Fluchtpulverbarren", "item.quickly.speedpowder": "Fluchtpulver", + "item.quickly.speedpowderaxe": "Fluchtaxt", + "item.quickly.speedpowderpickaxe": "Fluchtspitzhacke", + "item.quickly.speedpowdershovel": "Fluchtschaufel", + "item.quickly.speedpowderhoe": "Fluchtfeldhacke", + "item.quickly.speedpowdershears": "Fluchtschere", + "item.quickly.speedpowderwaterhoe": "bewässerte Fluchtfeldhacke", "item.quickly.stub": "Stummel", "item.quickly.sulfor": "Schwefel", "item.quickly.turquoise_boots": "Türkisschuhe", diff --git a/src/main/resources/assets/quickly/lang/en_us.json b/src/main/resources/assets/quickly/lang/en_us.json index fcb62bb..aa46731 100644 --- a/src/main/resources/assets/quickly/lang/en_us.json +++ b/src/main/resources/assets/quickly/lang/en_us.json @@ -1,17 +1,4 @@ { - "item.quickly.speedpowderaxe": "speedpowder axe", - "item.quickly.speedpowderpickaxe": "speedpowder pickaxe", - "item.quickly.speedpowdershovel": "speedpowder shovel", - "item.quickly.speedpowderhoe": "speedpowder hoe", - "item.quickly.speedpowderwaterhoe": "watered speedpowder hoe", - "item.quickly.speedpowdershears": "speedpowder shears", - "item.quickly.quickiepowderaxe": "hurrypowder axe", - "item.quickly.quickiepowderpickaxe": "hurrypowder pickaxe", - "item.quickly.quickiepowdershovel": "hurrypowder shovel", - "item.quickly.quickiepowderhoe": "hurrypowder hoe", - "item.quickly.quickiepowderwaterhoe": "watered hurrypowder hoe", - "item.quickly.quickiepowdershears": "hurrypowder shears", - "info.block.drillfuel": "Load: %s drills", "info.block.itemhoarder": "contains: %s", "info.block.monsterhoarder": "radius: %s, burn ticks: %s", @@ -36,10 +23,9 @@ "item.quickly.cottonseed": "cotton seed", "item.quickly.dirtsalpeter": "salpeter dirt", "item.quickly.drill": "drill", - "item.quickly.emptylavahoarder": "lava hoarder", "item.quickly.itemhoarder": "item hoarder", "item.quickly.kelpbundle": "kelp bundle", - "item.quickly.lavahoarder": "filled lava hoarder", + "item.quickly.lavahoarder": "lava hoarder", "item.quickly.magnifier": "magnifier", "item.quickly.monsterhoarder": "monster hoarder", "item.quickly.oredeepslatespeedpowder": "speed poweder deepslate ore", @@ -54,12 +40,24 @@ "item.quickly.oxidizedcopperpowder": "oxidized copper powder", "item.quickly.quickieingot": "quickie powder ingot", "item.quickly.quickiepowder": "quickie powder", + "item.quickly.quickiepowderaxe": "hurry axe", + "item.quickly.quickiepowderhoe": "hurry hoe", + "item.quickly.quickiepowderpickaxe": "hurry pickaxe", + "item.quickly.quickiepowdershears": "hurry shears", + "item.quickly.quickiepowdershovel": "hurry shovel", + "item.quickly.quickiepowderwaterhoe": "watered hurry hoe", "item.quickly.rawturquoise": "raw turquoise", "item.quickly.rotten_flesh_stripes": "rotton flesh stripes", "item.quickly.salpeter": "salpeter", "item.quickly.sandsalpeter": "salpeter sand", "item.quickly.speedingot": "speed powder ingot", "item.quickly.speedpowder": "speed powder", + "item.quickly.speedpowderaxe": "speed axe", + "item.quickly.speedpowderhoe": "speed hoe", + "item.quickly.speedpowderpickaxe": "speed pickaxe", + "item.quickly.speedpowdershears": "speed shears", + "item.quickly.speedpowdershovel": "speed shovel", + "item.quickly.speedpowderwaterhoe": "watered speed hoe", "item.quickly.stub": "stub", "item.quickly.sulfor": "sulfor", "item.quickly.turquoise_boots": "turquoise boots", diff --git a/src/main/resources/assets/quickly/models/item/emptylavahoarder.json b/src/main/resources/assets/quickly/models/item/emptylavahoarder.json deleted file mode 100644 index 4710ac3..0000000 --- a/src/main/resources/assets/quickly/models/item/emptylavahoarder.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "quickly:block/emptylavahoarder", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/data/quickly/recipe/shaped_emptylavahoarder.json b/src/main/resources/data/quickly/recipe/shaped_lavahoarder.json similarity index 85% rename from src/main/resources/data/quickly/recipe/shaped_emptylavahoarder.json rename to src/main/resources/data/quickly/recipe/shaped_lavahoarder.json index 937d92a..da50067 100644 --- a/src/main/resources/data/quickly/recipe/shaped_emptylavahoarder.json +++ b/src/main/resources/data/quickly/recipe/shaped_lavahoarder.json @@ -11,7 +11,7 @@ "b": "minecraft:bucket" }, "result": { - "id": "quickly:emptylavahoarder", + "id": "quickly:lavahoarder", "count": 1 } } \ No newline at end of file