From 0501d8ee09eb6c83cef1fd21f4f709cabecf1dc9 Mon Sep 17 00:00:00 2001 From: TGGamesYT Date: Sat, 28 Mar 2026 18:05:20 +0100 Subject: [PATCH] end update vol 1 --- gradle.properties | 2 +- .../dev/tggamesyt/szar/ChorusEndStone.java | 84 ++++++++++++++++++ .../tggamesyt/szar/EndSpreadableBlock.java | 77 ++++++++++++++++ .../dev/tggamesyt/szar/SmallChorusBlock.java | 18 ++++ src/main/java/dev/tggamesyt/szar/Szar.java | 32 ++++++- .../szar/mixin/ChorusFlowerBlockMixin.java | 54 +++++++++++ .../szar/mixin/ChorusPlantBlockMixin.java | 46 ++++++++++ .../szar/blockstates/chorus_endstone.json | 7 ++ .../assets/szar/blockstates/small_chorus.json | 7 ++ .../resources/assets/szar/lang/en_us.json | 5 +- .../szar/models/block/chorus_endstone.json | 8 ++ .../szar/models/block/small_chorus.json | 6 ++ .../szar/models/item/chorus_endstone.json | 3 + .../assets/szar/models/item/small_chorus.json | 6 ++ .../szar/textures/block/chorus_flower.png | Bin 0 -> 325 bytes .../textures/block/chorus_flower_dead.png | Bin 0 -> 328 bytes .../szar/textures/block/chorus_plant.png | Bin 0 -> 300 bytes .../szar/textures/block/chorus_shuffle.png | Bin 0 -> 604 bytes .../block/chorus_shuffle_topthingy.png | Bin 0 -> 664 bytes .../assets/szar/textures/block/chorus_top.png | Bin 0 -> 645 bytes .../block/chorus_top_final_ithink.png | Bin 0 -> 1209 bytes .../block/chorus_topthingy_forside.png | Bin 0 -> 823 bytes .../szar/textures/block/choruscolor.png | Bin 0 -> 904 bytes .../assets/szar/textures/block/end_stone.png | Bin 0 -> 270 bytes .../szar/textures/block/end_stone_grass.png | Bin 0 -> 1100 bytes .../block/grass_block_side_overlay.png | Bin 0 -> 177 bytes .../szar/textures/block/grass_block_top.png | Bin 0 -> 560 bytes .../textures/block/lowkey_mightuse_ts.png | Bin 0 -> 795 bytes .../szar/textures/block/small_chorus.png | Bin 0 -> 612 bytes .../data/szar/tags/blocks/endstones.json | 7 ++ .../configured_feature/small_chorus.json | 30 +++++++ .../placed_feature/small_chorus_patch.json | 9 ++ src/main/resources/szar.mixins.json | 2 + 33 files changed, 398 insertions(+), 5 deletions(-) create mode 100644 src/main/java/dev/tggamesyt/szar/ChorusEndStone.java create mode 100644 src/main/java/dev/tggamesyt/szar/EndSpreadableBlock.java create mode 100644 src/main/java/dev/tggamesyt/szar/SmallChorusBlock.java create mode 100644 src/main/java/dev/tggamesyt/szar/mixin/ChorusFlowerBlockMixin.java create mode 100644 src/main/java/dev/tggamesyt/szar/mixin/ChorusPlantBlockMixin.java create mode 100644 src/main/resources/assets/szar/blockstates/chorus_endstone.json create mode 100644 src/main/resources/assets/szar/blockstates/small_chorus.json create mode 100644 src/main/resources/assets/szar/models/block/chorus_endstone.json create mode 100644 src/main/resources/assets/szar/models/block/small_chorus.json create mode 100644 src/main/resources/assets/szar/models/item/chorus_endstone.json create mode 100644 src/main/resources/assets/szar/models/item/small_chorus.json create mode 100644 src/main/resources/assets/szar/textures/block/chorus_flower.png create mode 100644 src/main/resources/assets/szar/textures/block/chorus_flower_dead.png create mode 100644 src/main/resources/assets/szar/textures/block/chorus_plant.png create mode 100644 src/main/resources/assets/szar/textures/block/chorus_shuffle.png create mode 100644 src/main/resources/assets/szar/textures/block/chorus_shuffle_topthingy.png create mode 100644 src/main/resources/assets/szar/textures/block/chorus_top.png create mode 100644 src/main/resources/assets/szar/textures/block/chorus_top_final_ithink.png create mode 100644 src/main/resources/assets/szar/textures/block/chorus_topthingy_forside.png create mode 100644 src/main/resources/assets/szar/textures/block/choruscolor.png create mode 100644 src/main/resources/assets/szar/textures/block/end_stone.png create mode 100644 src/main/resources/assets/szar/textures/block/end_stone_grass.png create mode 100644 src/main/resources/assets/szar/textures/block/grass_block_side_overlay.png create mode 100644 src/main/resources/assets/szar/textures/block/grass_block_top.png create mode 100644 src/main/resources/assets/szar/textures/block/lowkey_mightuse_ts.png create mode 100644 src/main/resources/assets/szar/textures/block/small_chorus.png create mode 100644 src/main/resources/data/szar/tags/blocks/endstones.json create mode 100644 src/main/resources/data/szar/worldgen/configured_feature/small_chorus.json create mode 100644 src/main/resources/data/szar/worldgen/placed_feature/small_chorus_patch.json diff --git a/gradle.properties b/gradle.properties index f91597c..045cfa0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ minecraft_version=1.20.1 yarn_mappings=1.20.1+build.10 loader_version=0.18.3 # Mod Properties -mod_version=26.3.27 +mod_version=26.3.28 maven_group=dev.tggamesyt archives_base_name=szar # Dependencies diff --git a/src/main/java/dev/tggamesyt/szar/ChorusEndStone.java b/src/main/java/dev/tggamesyt/szar/ChorusEndStone.java new file mode 100644 index 0000000..dcc8f38 --- /dev/null +++ b/src/main/java/dev/tggamesyt/szar/ChorusEndStone.java @@ -0,0 +1,84 @@ +package dev.tggamesyt.szar; + +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.Fertilizable; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.util.Identifier; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.random.Random; +import net.minecraft.world.World; +import net.minecraft.world.WorldView; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.gen.feature.*; + +import java.util.List; +import java.util.Optional; + +public class ChorusEndStone extends EndSpreadableBlock implements Fertilizable { + + public ChorusEndStone(Settings settings) { + super(settings); + } + + @Override + public boolean isFertilizable(WorldView world, BlockPos pos, BlockState state, boolean isClient) { + return world.getBlockState(pos.up()).isAir(); + } + + @Override + public boolean canGrow(World world, Random random, BlockPos pos, BlockState state) { + return true; + } + + @Override + public void grow(ServerWorld world, Random random, BlockPos pos, BlockState state) { + BlockPos start = pos.up(); + + // your custom placed feature (we'll register this next) + var registry = world.getRegistryManager().get(RegistryKeys.PLACED_FEATURE); + + var smallChorusFeature = registry.getEntry(Szar.SMALL_CHORUS_PLACED); + + outer: + for (int i = 0; i < 128; i++) { + BlockPos target = start; + + for (int j = 0; j < i / 16; j++) { + target = target.add( + random.nextInt(3) - 1, + (random.nextInt(3) - 1) * random.nextInt(3) / 2, + random.nextInt(3) - 1 + ); + + if (!world.getBlockState(target.down()).isOf(this) + || world.getBlockState(target).isFullCube(world, target)) { + continue outer; + } + } + + BlockState targetState = world.getBlockState(target); + + if (targetState.isAir()) { + + // 🌟 Rare: spawn chorus flower (~1/12 chance) + if (random.nextInt(12) == 0) { + world.setBlockState(target, Blocks.CHORUS_FLOWER.getDefaultState()); + continue; + } + + // 🌿 Common: spawn your custom feature + if (smallChorusFeature.isPresent()) { + smallChorusFeature.get().value().generateUnregistered( + world, + world.getChunkManager().getChunkGenerator(), + random, + target + ); + } + } + } + } +} diff --git a/src/main/java/dev/tggamesyt/szar/EndSpreadableBlock.java b/src/main/java/dev/tggamesyt/szar/EndSpreadableBlock.java new file mode 100644 index 0000000..74e4701 --- /dev/null +++ b/src/main/java/dev/tggamesyt/szar/EndSpreadableBlock.java @@ -0,0 +1,77 @@ +package dev.tggamesyt.szar; + +import net.minecraft.block.*; +import net.minecraft.registry.tag.FluidTags; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.util.math.random.Random; +import net.minecraft.world.WorldView; +import net.minecraft.world.chunk.light.ChunkLightProvider; + +public abstract class EndSpreadableBlock extends SnowyBlock { + + protected EndSpreadableBlock(Settings settings) { + super(settings); + } + + private static boolean canSurvive(BlockState state, WorldView world, BlockPos pos) { + BlockPos up = pos.up(); + BlockState upState = world.getBlockState(up); + + if (upState.isOf(Blocks.SNOW) && upState.get(SnowBlock.LAYERS) == 1) { + return true; + } + + if (upState.getFluidState().getLevel() == 8) { + return false; + } + + int opacity = ChunkLightProvider.getRealisticOpacity( + world, state, pos, upState, up, Direction.UP, + upState.getOpacity(world, up) + ); + + return opacity < world.getMaxLightLevel(); + } + + private static boolean canSpread(BlockState state, WorldView world, BlockPos pos) { + BlockPos up = pos.up(); + return canSurvive(state, world, pos) + && !world.getFluidState(up).isIn(FluidTags.WATER); + } + + @Override + public void randomTick(BlockState state, ServerWorld world, BlockPos pos, Random random) { + + // ❌ Decay (like grass → dirt) + if (!canSurvive(state, world, pos)) { + world.setBlockState(pos, Blocks.END_STONE.getDefaultState()); + return; + } + + // 🌱 Spread + if (world.getLightLevel(pos.up()) >= 9) { + BlockState spreadState = this.getDefaultState(); + + for (int i = 0; i < 4; i++) { + BlockPos target = pos.add( + random.nextInt(3) - 1, + random.nextInt(5) - 3, + random.nextInt(3) - 1 + ); + + if (world.getBlockState(target).isOf(Blocks.END_STONE) + && canSpread(spreadState, world, target)) { + + world.setBlockState( + target, + spreadState.with(SNOWY, + world.getBlockState(target.up()).isOf(Blocks.SNOW) + ) + ); + } + } + } + } +} \ No newline at end of file diff --git a/src/main/java/dev/tggamesyt/szar/SmallChorusBlock.java b/src/main/java/dev/tggamesyt/szar/SmallChorusBlock.java new file mode 100644 index 0000000..d32e0e0 --- /dev/null +++ b/src/main/java/dev/tggamesyt/szar/SmallChorusBlock.java @@ -0,0 +1,18 @@ +package dev.tggamesyt.szar; + +import net.minecraft.block.BlockState; +import net.minecraft.block.PlantBlock; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.BlockView; + +public class SmallChorusBlock extends PlantBlock { + + public SmallChorusBlock(Settings settings) { + super(settings); + } + + @Override + protected boolean canPlantOnTop(BlockState floor, BlockView world, BlockPos pos) { + return floor.isOf(Szar.CHORUS_ENDSTONE); + } +} \ No newline at end of file diff --git a/src/main/java/dev/tggamesyt/szar/Szar.java b/src/main/java/dev/tggamesyt/szar/Szar.java index 4d4391b..206e989 100644 --- a/src/main/java/dev/tggamesyt/szar/Szar.java +++ b/src/main/java/dev/tggamesyt/szar/Szar.java @@ -386,6 +386,9 @@ public class Szar implements ModInitializer { entries.add(Szar.BEAN); entries.add(Szar.CAN_OF_BEANS); entries.add(Szar.ALMOND_WATER); + // end update + entries.add(Szar.CHORUS_ENDSTONE_ITEM); + entries.add(Szar.SMALL_CHORUS_ITEM); // blueprint stuff entries.add(BlueprintBlocks.BLUEPRINT); entries.add(BlueprintBlocks.BLUEPRINT_DOOR_ITEM); @@ -1026,7 +1029,7 @@ public class Szar implements ModInitializer { }); CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> { dispatcher.register( - LiteralArgumentBuilder.literal("szar") + LiteralArgumentBuilder.literal(MOD_ID) .requires(context -> context.hasPermissionLevel(2)) // /szar ny @@ -1444,7 +1447,30 @@ public class Szar implements ModInitializer { public static final Identifier CHESS_CLOSE_SCREEN = new Identifier(MOD_ID, "chess_close"); public static final Map chessActivePlayers = new java.util.HashMap<>(); - + public static final RegistryKey> SMALL_CHORUS_CONFIGURED = + RegistryKey.of(RegistryKeys.CONFIGURED_FEATURE, new Identifier(MOD_ID, "small_chorus")); + public static final RegistryKey SMALL_CHORUS_PLACED = + RegistryKey.of(RegistryKeys.PLACED_FEATURE, new Identifier(MOD_ID, "small_chorus_patch")); + public static final Block CHORUS_ENDSTONE = Registry.register( + Registries.BLOCK, + new Identifier(MOD_ID, "chorus_endstone"), + new Block(FabricBlockSettings.copyOf(Blocks.END_STONE)) + ); + public static final Item CHORUS_ENDSTONE_ITEM = Registry.register( + Registries.ITEM, + new Identifier(MOD_ID, "chorus_endstone"), + new BlockItem(CHORUS_ENDSTONE, new FabricItemSettings()) + ); + public static final Block SMALL_CHORUS = Registry.register( + Registries.BLOCK, + new Identifier(MOD_ID, "small_chorus"), + new SmallChorusBlock(FabricBlockSettings.copyOf(Blocks.GRASS)) + ); + public static final Item SMALL_CHORUS_ITEM = Registry.register( + Registries.ITEM, + new Identifier(MOD_ID, "small_chorus"), + new BlockItem(SMALL_CHORUS, new FabricItemSettings()) + ); // Blocks public static final TrackerBlock TRACKER_BLOCK = Registry.register( Registries.BLOCK, new Identifier(MOD_ID, "tracker"), @@ -2532,7 +2558,7 @@ public class Szar implements ModInitializer { MinecraftServer server = serverPlayer.getServer(); if (server == null) return; - if (!advancement.equals("szar")) { + if (!advancement.equals(MOD_ID)) { grantAdvancement(player, "szar"); } diff --git a/src/main/java/dev/tggamesyt/szar/mixin/ChorusFlowerBlockMixin.java b/src/main/java/dev/tggamesyt/szar/mixin/ChorusFlowerBlockMixin.java new file mode 100644 index 0000000..a4fbeb7 --- /dev/null +++ b/src/main/java/dev/tggamesyt/szar/mixin/ChorusFlowerBlockMixin.java @@ -0,0 +1,54 @@ +package dev.tggamesyt.szar.mixin; + +import dev.tggamesyt.szar.Szar; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.ChorusFlowerBlock; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.registry.tag.TagKey; +import net.minecraft.util.Identifier; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.WorldView; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(ChorusFlowerBlock.class) +public abstract class ChorusFlowerBlockMixin { + + @Unique + private static final TagKey ENDSTONES = + TagKey.of(RegistryKeys.BLOCK, new Identifier(Szar.MOD_ID, "endstones")); + + /** + * 🔥 Redirect EVERY BlockState.isOf call inside ChorusFlowerBlock + * and replace END_STONE checks with tag checks + */ + @Redirect( + method = { + "canPlaceAt", + "randomTick", + "generate*", + "scheduledTick" + }, + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/block/BlockState;isOf(Lnet/minecraft/block/Block;)Z" + ) + ) + private boolean replaceEndStoneChecks(BlockState state, Block block) { + + // Replace ONLY END_STONE checks + if (block == Blocks.END_STONE) { + return state.isIn(ENDSTONES); + } + + // Everything else stays vanilla + return state.isOf(block); + } +} \ No newline at end of file diff --git a/src/main/java/dev/tggamesyt/szar/mixin/ChorusPlantBlockMixin.java b/src/main/java/dev/tggamesyt/szar/mixin/ChorusPlantBlockMixin.java new file mode 100644 index 0000000..4181394 --- /dev/null +++ b/src/main/java/dev/tggamesyt/szar/mixin/ChorusPlantBlockMixin.java @@ -0,0 +1,46 @@ +package dev.tggamesyt.szar.mixin; + +import dev.tggamesyt.szar.Szar; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.ChorusPlantBlock; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.registry.tag.TagKey; +import net.minecraft.util.Identifier; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(ChorusPlantBlock.class) +public abstract class ChorusPlantBlockMixin { + + @Unique + private static final TagKey ENDSTONES = + TagKey.of(RegistryKeys.BLOCK, new Identifier(Szar.MOD_ID, "endstones")); + + /** + * 🔥 Replace ALL END_STONE checks in ChorusPlantBlock + */ + @Redirect( + method = { + "withConnectionProperties", + "getStateForNeighborUpdate", + "canPlaceAt" + }, + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/block/BlockState;isOf(Lnet/minecraft/block/Block;)Z" + ) + ) + private boolean replaceEndStoneChecks(BlockState state, Block block) { + + // Replace END_STONE with your tag + if (block == Blocks.END_STONE) { + return state.isIn(ENDSTONES); + } + + return state.isOf(block); + } +} \ No newline at end of file diff --git a/src/main/resources/assets/szar/blockstates/chorus_endstone.json b/src/main/resources/assets/szar/blockstates/chorus_endstone.json new file mode 100644 index 0000000..f359c52 --- /dev/null +++ b/src/main/resources/assets/szar/blockstates/chorus_endstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "szar:block/chorus_endstone" + } + } +} diff --git a/src/main/resources/assets/szar/blockstates/small_chorus.json b/src/main/resources/assets/szar/blockstates/small_chorus.json new file mode 100644 index 0000000..07a1be5 --- /dev/null +++ b/src/main/resources/assets/szar/blockstates/small_chorus.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "szar:block/small_chorus" + } + } +} diff --git a/src/main/resources/assets/szar/lang/en_us.json b/src/main/resources/assets/szar/lang/en_us.json index ac7d9c3..8e28c9b 100644 --- a/src/main/resources/assets/szar/lang/en_us.json +++ b/src/main/resources/assets/szar/lang/en_us.json @@ -198,5 +198,8 @@ "block.szar.blueprint_trapdoor": "Blueprint Trapdoor", "block.szar.blueprint_wall": "Blueprint Wall", "block.szar.blueprint_fence": "Blueprint Fence", - "item.szar.blueprint": "Blueprint" + "item.szar.blueprint": "Blueprint", + + "block.szar.chorus_endstone": "Chorus EndStone", + "block.szar.small_chorus": "Small Chorus" } diff --git a/src/main/resources/assets/szar/models/block/chorus_endstone.json b/src/main/resources/assets/szar/models/block/chorus_endstone.json new file mode 100644 index 0000000..bf03cf3 --- /dev/null +++ b/src/main/resources/assets/szar/models/block/chorus_endstone.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "side": "szar:block/end_stone_grass", + "bottom": "szar:block/end_stone", + "top": "szar:block/chorus_top" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/szar/models/block/small_chorus.json b/src/main/resources/assets/szar/models/block/small_chorus.json new file mode 100644 index 0000000..af80304 --- /dev/null +++ b/src/main/resources/assets/szar/models/block/small_chorus.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cross", + "textures": { + "cross": "szar:block/small_chorus" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/szar/models/item/chorus_endstone.json b/src/main/resources/assets/szar/models/item/chorus_endstone.json new file mode 100644 index 0000000..7f03a4a --- /dev/null +++ b/src/main/resources/assets/szar/models/item/chorus_endstone.json @@ -0,0 +1,3 @@ +{ + "parent": "szar:block/chorus_endstone" +} diff --git a/src/main/resources/assets/szar/models/item/small_chorus.json b/src/main/resources/assets/szar/models/item/small_chorus.json new file mode 100644 index 0000000..3590cc8 --- /dev/null +++ b/src/main/resources/assets/szar/models/item/small_chorus.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "szar:block/small_chorus" + } +} diff --git a/src/main/resources/assets/szar/textures/block/chorus_flower.png b/src/main/resources/assets/szar/textures/block/chorus_flower.png new file mode 100644 index 0000000000000000000000000000000000000000..d075807262694d2e356362c1697c9de6f1458d99 GIT binary patch literal 325 zcmV-L0lNN)P)ovTHRST&bv+Ynk68VJwYVD0|}HQqLm{>d{crl zac3fviHrEt&STVEy$5?!@E+ioe1nkSCCT=G;da8{N&9>EZkIn5e)6vgfscc|7a4&c X!rG@VAshWd00000NkvXXu0mjfvOkZQ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/szar/textures/block/chorus_flower_dead.png b/src/main/resources/assets/szar/textures/block/chorus_flower_dead.png new file mode 100644 index 0000000000000000000000000000000000000000..21f315521ed84dbadbb0907dfc8c72040cfc6a07 GIT binary patch literal 328 zcmV-O0k{5%P)~U0000u56NQ%7)C0JJ-+p4f+3^d03JSw8=Td~OEd^v yz_cguT1;10GMQ;W&VMTTW%=Bl5&afi48R`-2=my;QzjVz0000dt;JrVsvyg#+qZX_G&GrpH9cw`C0f~b}wUcVlqY=BQZ5G6~~{C zGjIL%y6Y&X-%dkPYrGW~mlv5J)^4@4NW*HTitE93HokMOk@5Wx`ypO*URYX4#KB;Y ziDFnt*n7VhM_-PzSmWl1&n~judPg?Ou z7as&4v?tROF|su2UUXgMhmkuh$w>x0==|(t0wjC%=bz6f8mgE{0BH5~e*cZaEJ zdeys1w@HA^EIGe^oTquf7^=bI%f%=*f@rzWOq0Wphk=c=*I~3g=H0HzSCFJwA=MvI31X#iAY>g^!+8vHNZ}$l^_DHk^9sC(B!%wC5pxg3iZRK>!MK_#hIxA^&WfiCQaMQhoI2fjVAXu-1nE z4igr|Xdzx7*JiO`1ssVxxjJiMaA44YNM-|xsi?Nr^|*_WXrcYtIbDv$jobmC0#!jE zpM`Opkx6TigKem9(AwM;GZ6I-04k96>QlQ;iQ4YBk#EWh8wGI&OK@ytOy}!7wIo~Q z{HhrQ0S*0FQR7YD{2+#TfJnw%%!ULNctOkoBsujYWv0*@(wOn|=(J5G5{uYmICDpf zkdfh;HzjgCh~L5R%*RFFj9>>s^p6r-aJ6kr%Fe0}$u zkp6tzvM=Tu0q=lmFlW5@*S~0nq6{Q*d9Ca*4^lj!9mh;Dh3ZYWn{+A-c_cv0ml5+N y@ykGuJ$qE200030|2|~()c^nh21!IgR09Bo{%&-CserKn0000GdhhS9?(Err+xy$ATmSgu(ZBtE^RK^N{nO2pfB61jd+&eV{r&a5f4+J48Uz8V zs=|7;#%8@i9L1QY8EKMYnkKYui!cfi#SvJ$*=*4FJ)$Urh(JXIyqcy#Racmo+l9_P z5-f~DXrKn1rYTOR6NX{HJkJKA$Kr^lYv7lgs4C}Tb`cRPE>9)8zJvE31QQixS%%~B z2u-sTs){_%?aeL(3SDR&w%aYnakP$wi?0y@tkQlu9IB8zFB5V!!tIB*GiGxP(LbLLq1)J=V! z`{D(eunTo}ZD&lPFfzYrWZShErxC`$1r9VZNfOZEBu&hZKm!XGfmlONL z`uXn@L^b1c#c~?9O7wm($QCAatJ*E~^rh zN3&_>f@Pre<#0Hhr$7KMf*=58Fm?P#vY0^Y^%?}H$wg6ES_w#2{{a91|NpVlB8~t6 f00v1!K~w_(R!wNJF$70800000NkvXXu0mjf=C>ov literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/szar/textures/block/chorus_top_final_ithink.png b/src/main/resources/assets/szar/textures/block/chorus_top_final_ithink.png new file mode 100644 index 0000000000000000000000000000000000000000..499a9f7ea91966c2ea12067dad9ca074d6962bcd GIT binary patch literal 1209 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc4egmB5hW46K32*3xq68y`AMmI6}bgK)eHls47YguJQ{>uF6ifOi{PD zbs{}UK3djZt>nqvW6s4qD1-ZCERRDRmN*N_31y=g{ z<>lpi<;HsXMd|v6mX?v90`zGE;%B09k2gXakl<5wp<;IRwdJb`TMuUx6%m z$bfQqQ^frZEayeLuqc@$dQf|9<_N^?U#Om9M25 zH2QA5EjyEDyvfz=dTGw~=w0iaHIIIjKdv*~TdbQkDEsW=$I3UA9)EZ+;pe?MyViJ4 zYT31_va&L9pS`;E36Eo(+qZ9Db3OanXUlulDKf`76f5fL(*ABti_YVGEU?zJJLh2C zw)4-w2`BR$KYskq{rkZptj8q${QLsA#q0$Xmb$P@HRzmPv3iz8-%H>Atzyq*eeYf{ z;SKUS=XX9rZ~BSP-Nk#ppZS)i;(16ZTEI>5afy#a8<78{w*R}FB5R_=qdkvbzU(yd zow%;NC9%V>EoDwZ&(C-U>Sc*>){f9EbZoOV*enGeHW$S}FTpm&K$(Yom*+;uykGHJYN=>?ditNZ zzi!Ve`wZJQ>1cjR+OS4tnXyUk;bk{2gzy#$3A+kPQ#KH9B_%G(ABG;lm*{~;Uzx}Yv{r>lm&{lz_ zUF$X;do*{sv21>Re#P^N=H});YQk%_N+biFWpHf4)@84)ZmnCIDZOTE$uec%pgo^^ z+?1c3-(Sba{mcLY$j3J%yL!}$Bi4~a~AGgx$uARZ=0Bint+J{KEkt< zfkJ`89nMXrP1E*1&N<)je3xB(zu-5&Z}`d12|xIHAfBV`Bfh`6&rfrw{Oacwzx;8@ z&vIw{@Y^9j-ah8nzpnY->K;GOopa`NI#DPTun<~6BpiXJY8aRUM59qy0}It^6I4bFlgOdCbkt;p5{2O}z=3oc}0*J+8 zxWB)LVHg;X$4De*bA@67U9$_>B|}wJNRotPG6}P1f-wd|H&CnA(9&D5EK98Ocs)p^ zQh0cH083}mpevKj&uy(r*(%kR&Q7KnM-$~NY8lv8)qgW`43e}(rg6fi82x>tX9RqxJ3nS6M``f#K zIJU?56#FC=NDc`b8yg~!;!;p~t$;jHEEeH#I3P(9nBLUk@p#bd^+Y8^|LN%ov)}?G z=_XFp0dgiKGy5hQjRyF1=EU{&bx`>Pk)-_BPn{sQQQ+ZdD0)wTsq}OzEjBANcI+;H z2g)!WjUmqIWbB+TVxPH`62R@V@XM8PuYjPUjD?yi_vUS1ZC zlw}#We{S*o{0!>1fZftTx>Z#L8S3%z5lm>Cc|4!b3l^PD2OXmWdt{41v^bm1g8EK} z>E-1G6pZXmC-xrz00960hO=bF00006NklGg002ovPDHLkV1m^= BcR>IE literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/szar/textures/block/choruscolor.png b/src/main/resources/assets/szar/textures/block/choruscolor.png new file mode 100644 index 0000000000000000000000000000000000000000..20b4e4ece3ab988ad530fca4821ccaa25651e571 GIT binary patch literal 904 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc4egmB5hW46K32*3xq68y`AMmI6}bgK)eHls47YguJQ{>uF6ifOi{PD zbs{}UK3djZt>nqvW6s4qD1-ZCERRDRmN*N_31y=g{ z<>lpi<;HsXMd|v6mX?v90`zGE;%B09k2gXakl<5wp<;IRwdJb`TMuUx6%m z$bfGE`O46*Rfot!vnsR2iey@K8S9n)_E`!Dwj%j+0qGXH#Kn>5W0lpQ=>{an^LB{Ts5!uMKf literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/szar/textures/block/end_stone.png b/src/main/resources/assets/szar/textures/block/end_stone.png new file mode 100644 index 0000000000000000000000000000000000000000..6d747c02c6051c4607e240fc2131a99d55e6370c GIT binary patch literal 270 zcmV+p0rCEcP)$M3tmq;zqKKoK1)bib{`<% ztyf#7MWMAP8|RiSP?+0DgY6BCibB5wHUT>qCCl<8Ho_}Q{Wcuj*GqJfzxKegKBQAu U_KDyd9{>OV07*qoM6N<$f@`64Bme*a literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/szar/textures/block/end_stone_grass.png b/src/main/resources/assets/szar/textures/block/end_stone_grass.png new file mode 100644 index 0000000000000000000000000000000000000000..1a115fe1ab597aca233410ef7a6ab63032c2a887 GIT binary patch literal 1100 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc4egmB5hW46K32*3xq68y`AMmI6}bgK)eHls47YguJQ{>uF6ifOi{PD zbs{}UK3djZt>nqvW6s4qD1-ZCERRDRmN*N_31y=g{ z<>lpi<;HsXMd|v6mX?v90`zGE;%B09k2gXakl<5wp<;IRwdJb`TMuUx6%m z$bf6?9eZ3^4- z$d}Rc?$v&uSNv{gcy#@qd0TJi{&KHvW2CkqLjNz=AqmA{3kc{{Mu`kci2_`WytE#S6{9E*2!zCUcY{Q$GUDi z3%L)k4l_R!eA=$`lf-9#pO}2|<%=nsKT3K|`cV1X(tE0^R4<$Vy*rM# z@83MZbDL$s)i)b{elqvJ&v~XxVV*}_-Ia>7u&Cd$nwX1M) zn1A`DY`I9_^YgqV}JO}&OvT+(4zLn{_U>|-?eY4n%g84%L61wJA!mAD2%NqnNyS2jJc-0xQ zYA&C&y!yf0r{0Tvf^%0^hb`TY9hH`IVW)J)xI pa>%ss+NU_t>>uVjpVHL7$lsi7@I2V>(Lqp__H^}gS?83{1ONhrx>EoE literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/szar/textures/block/grass_block_side_overlay.png b/src/main/resources/assets/szar/textures/block/grass_block_side_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..4abf8fc4efaa5eea84a4db90bce788a64cf5134c GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`6`n4RAr}5`dpB|&P~dU-o9!NW zCnSI+Je^&<-r#MlVAKos3WbkP^*W`JJ{*FuE^Hicme%kj^H?tZVqZ{F a;u3qFzb=TqFti5f1_n=8KbLh*2~7YRf<%7+ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/szar/textures/block/grass_block_top.png b/src/main/resources/assets/szar/textures/block/grass_block_top.png new file mode 100644 index 0000000000000000000000000000000000000000..eaa7e458f702c46fe6eb7d58efdd091cca089530 GIT binary patch literal 560 zcmV-00?+-4P)nJC=}8J zv-|z7b5;sF3}>C>1NIICKE7TrnZl0ogeHsw8QL_1h<1j;1Rw`G(-?#g41*1YAbr1I z3xz_`jW;x6;(rg&30)#gsQADch=huFo?#Y=M1+ohGJw&JJyQf74p=Lc(Hahib;dh) znn)!~VMU*#k(iQ5kSJmZ=j495TuKTx$Ylda;GMwfzd#XMJ&L4_kkE+J1c?hnG16N( yEF4rx9#hfG{@H>z05dwG5;T%S-EWC!Q4gw0000o*coiw z#&KN}6EfIohCyH;BrL4!*RGOErwt^P$&gH?urpbj0vZnb)ZVY+e-@~fB;n*i#l+HS zuO>0^t$X($)2>$OHJhXyhtO{m`AxD@If5@=APzw~@|J%?1^Ro;Y`HA47!nC&1f4u3 zIf`z*2I)z3@@Oz18uZBIf5Kf@rd_LobdfzdM`Ldfa|CR;Z?UOrMWE_Tg3+Kd+5Y;$Q zUc_5DFXPD=aydC&1g$|jmnT;`#lgV=TAV5I2fe@u8+1F^wscV{v~F`u7EG(U&^gAHGAPK|phTjqc7T4nMp?kHAny0%jIg&=7I4)}BAp*39ZI{(^>> zK-fe7X?lJ9a9W%1OvL$l0n2ztFH_~nKQ>zVWB*4RR5tkr00960-f-D+00006Nkl4)r literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/szar/textures/block/small_chorus.png b/src/main/resources/assets/szar/textures/block/small_chorus.png new file mode 100644 index 0000000000000000000000000000000000000000..da6be8ed24e9afd41b56a0325b142d3f83a51c5d GIT binary patch literal 612 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc4egmB5hW46K32*3xq68y`AMmI6}bgK)eHls47YguJQ{>uF6ifOi{PD zbs{}UK3djZt>nqvW6s4qD1-ZCERRDRmN*N_31y=g{ z<>lpi<;HsXMd|v6mX?v90`zGE;%B09k2gXakl<5wp<;IRwdJb`TMuUx6%m z$bf6AcnLnR7Zjvltkp+D*8GZ>AptMYX4^pUXO@geCyKu*nes literal 0 HcmV?d00001 diff --git a/src/main/resources/data/szar/tags/blocks/endstones.json b/src/main/resources/data/szar/tags/blocks/endstones.json new file mode 100644 index 0000000..e0c0efa --- /dev/null +++ b/src/main/resources/data/szar/tags/blocks/endstones.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:end_stone", + "szar:chorus_endstone" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/szar/worldgen/configured_feature/small_chorus.json b/src/main/resources/data/szar/worldgen/configured_feature/small_chorus.json new file mode 100644 index 0000000..45d9fe5 --- /dev/null +++ b/src/main/resources/data/szar/worldgen/configured_feature/small_chorus.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:random_patch", + "config": { + "feature": { + "feature": { + "type": "minecraft:simple_block", + "config": { + "to_place": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "szar:small_chorus_block" + } + } + } + }, + "placement": [ + { + "type": "minecraft:block_predicate_filter", + "predicate": { + "type": "minecraft:matching_blocks", + "blocks": "minecraft:air" + } + } + ] + }, + "tries": 32, + "xz_spread": 7, + "y_spread": 3 + } +} \ No newline at end of file diff --git a/src/main/resources/data/szar/worldgen/placed_feature/small_chorus_patch.json b/src/main/resources/data/szar/worldgen/placed_feature/small_chorus_patch.json new file mode 100644 index 0000000..0204271 --- /dev/null +++ b/src/main/resources/data/szar/worldgen/placed_feature/small_chorus_patch.json @@ -0,0 +1,9 @@ +{ + "feature": "szar:small_chorus", + "placement": [ + { "type": "minecraft:count", "count": 5 }, + { "type": "minecraft:in_square" }, + { "type": "minecraft:heightmap", "heightmap": "WORLD_SURFACE_WG" }, + { "type": "minecraft:biome" } + ] +} \ No newline at end of file diff --git a/src/main/resources/szar.mixins.json b/src/main/resources/szar.mixins.json index ff148ac..96eb005 100644 --- a/src/main/resources/szar.mixins.json +++ b/src/main/resources/szar.mixins.json @@ -4,6 +4,8 @@ "package": "dev.tggamesyt.szar.mixin", "compatibilityLevel": "JAVA_17", "mixins": [ + "ChorusFlowerBlockMixin", + "ChorusPlantBlockMixin", "CraftingScreenHandlerMixin", "CraftingScreenHandlerMixin2", "EntityCollisionMixin",