diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..fb10d2e --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,71 @@ +name: publish + +on: + release: + types: + - published + +jobs: + build: + strategy: + matrix: + java: [ 21 ] + runs-on: ubuntu-22.04 + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Validate gradle wrapper + uses: gradle/wrapper-validation-action@v2 + - name: Setup JDK ${{ matrix.java }} + uses: actions/setup-java@v4 + with: + java-version: ${{ matrix.java }} + distribution: 'microsoft' + - name: Make gradle wrapper executable + run: chmod +x ./gradlew + - name: Build + run: ./gradlew build + - name: Merge Jars + run: ./gradlew mergeJars + - uses: BrycensRanch/read-properties-action@v1 + id: props + with: + file: gradle.properties + all: true + + - name: Publish + uses: Kir-Antipov/mc-publish@v3.3.0 + with: + modrinth-id: ${{ steps.props.outputs.modrinth_id }} + modrinth-token: ${{ secrets.MODRINTH_TOKEN }} + curseforge-id: ${{ steps.props.outputs.curseforge_id }} + curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }} + + files: | + Merged/${{ steps.props.outputs.mod_id }}-${{ github.event.release.tag_name }}.jar + + name: ${{ github.event.release.tag_name }} + version: ${{ github.event.release.tag_name }} + + version-type: beta + loaders: | + fabric + neoforge + + game-versions: ${{ steps.props.outputs.minecraft_version_range_fabric }} + game-version-filter: releases + + dependencies: | + cloth-config + + java: | + 21 + + retry-attempts: 0 + fail-mode: skip + + - name: Upload assets to GitHub + uses: AButler/upload-release-assets@v3.0 + with: + files: "Merged/${{ steps.props.outputs.mod_id }}-${{ github.event.release.tag_name }}.jar;${{ steps.props.outputs.mod_id }}-fabric/build/libs/${{ steps.props.outputs.mod_id }}-fabric-${{ github.event.release.tag_name }}.jar;${{ steps.props.outputs.mod_id }}-fabric/build/libs/${{ steps.props.outputs.mod_id }}-fabric-${{ github.event.release.tag_name }}-sources.jar;${{ steps.props.outputs.mod_id }}-neoforge/build/libs/${{ steps.props.outputs.mod_id }}-neoforge-${{ github.event.release.tag_name }}.jar;${{ steps.props.outputs.mod_id }}-neoforge/build/libs/${{ steps.props.outputs.mod_id }}-neoforge-${{ github.event.release.tag_name }}-sources.jar" + repo-token: ${{ secrets.GH_TOKEN }} diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..69867a8 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,100 @@ +import net.fabricmc.loom.api.LoomGradleExtensionAPI + +plugins { + java + id("architectury-plugin") version "3.4-SNAPSHOT" + id("dev.architectury.loom") version "1.7-SNAPSHOT" apply false + id("io.github.pacifistmc.forgix") version "1.2.9" +} + +architectury { + minecraft = rootProject.property("minecraft_version").toString() +} + +forgix { + group = "ru.pinkgoosik.winterly" + mergedJarName = "winterly-${rootProject.property("mod_version").toString()}.jar" +} + +subprojects { + apply(plugin = "dev.architectury.loom") + apply(plugin = "architectury-plugin") + + val loom = project.extensions.getByName("loom") + loom.silentMojangMappingsLicense() + + dependencies { + "minecraft"("com.mojang:minecraft:${rootProject.property("minecraft_version")}") + + // The template comes with Mojang mappings, but you may use other mappings such as Yarn and Quilt if you want. + @Suppress("UnstableApiUsage") + "mappings"(loom.layered { + officialMojangMappings() + parchment("org.parchmentmc.data:parchment-${rootProject.property("minecraft_version")}:${rootProject.property("parchment_version")}@zip") + }) + } + + tasks.processResources { + val expandProps = mapOf( + "name" to rootProject.property("mod_name"), + "version" to rootProject.property("mod_version"), + "description" to rootProject.property("mod_description"), + "mod_id" to rootProject.property("mod_id"), + "homepage_url" to rootProject.property("homepage_url"), + "sources_url" to rootProject.property("sources_url"), + "issue_tracker_url" to rootProject.property("issue_tracker_url"), + "license" to rootProject.property("license"), + "minecraft_version" to rootProject.property("minecraft_version"), + "minecraft_version_range" to rootProject.property("minecraft_version_range"), + "minecraft_version_range_fabric" to rootProject.property("minecraft_version_range_fabric"), + "fabric_loader_version" to rootProject.property("fabric_loader_version"), + "fabric_version" to rootProject.property("fabric_api_version"), + "neoforge_version" to rootProject.property("neoforge_version"), + "neoforge_version_range" to rootProject.property("neoforge_version_range") + ) + + inputs.properties(expandProps) + + filesMatching(listOf("pack.mcmeta", "fabric.mod.json", "META-INF/neoforge.mods.toml", "*.mixins.json")) { + expand(expandProps) + } + } +} + +allprojects { + apply(plugin = "java") + apply(plugin = "architectury-plugin") + apply(plugin = "maven-publish") + + base.archivesName.set(rootProject.property("archives_base_name").toString()) + version = rootProject.property("mod_version").toString() + group = rootProject.property("maven_group").toString() + + repositories { + // Add repositories to retrieve artifacts from in here. + // You should only use this when depending on other mods because + // Loom adds the essential maven repositories to download Minecraft and libraries from automatically. + // See https://docs.gradle.org/current/userguide/declaring_repositories.html + // for more information about repositories. + + maven("https://maven.neoforged.net/releases/") { + name = "NeoForged" + } + + maven("https://maven.parchmentmc.org") { + name = "ParchmentMC" + } + } + + tasks.withType { + options.encoding = "UTF-8" + options.release = 21 + } + + java { + withSourcesJar() + + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 + } +} diff --git a/winterly-common/build.gradle.kts b/winterly-common/build.gradle.kts new file mode 100644 index 0000000..e7d4ea2 --- /dev/null +++ b/winterly-common/build.gradle.kts @@ -0,0 +1,18 @@ +architectury { + val enabled_platforms: String by rootProject + common(enabled_platforms.split(",")) +} + +loom { + accessWidenerPath.set(file("src/main/resources/${project(":winterly-common").property("mod_id")}.accesswidener")) +} + +dependencies { + // We depend on fabric loader here to use the fabric @Environment annotations and get the mixin dependencies + // Do NOT use other classes from fabric loader + modImplementation("net.fabricmc:fabric-loader:${rootProject.property("fabric_loader_version")}") + modCompileOnly("me.shedaniel.cloth:cloth-config-fabric:${rootProject.property("cloth_config")}") { exclude("net.fabricmc.fabric-api") } + + // Remove the next line if you don't want to depend on the API + //modApi("dev.architectury:architectury:${rootProject.property("architectury_version")}") +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/Winterly.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/Winterly.java new file mode 100644 index 0000000..138a313 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/Winterly.java @@ -0,0 +1,18 @@ +package ru.pinkgoosik.winterly; + +import net.minecraft.resources.ResourceLocation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import ru.pinkgoosik.winterly.config.WinterlyClothConfig; +import ru.pinkgoosik.winterly.config.WinterlyConfig; + +public class Winterly { + public static final String MOD_ID = "winterly"; + public static final Logger LOGGER = LoggerFactory.getLogger("Winterly"); + public static WinterlyConfig config = WinterlyClothConfig.init(); + + public static ResourceLocation id(String path) { + return ResourceLocation.fromNamespaceAndPath(MOD_ID, path); + } + +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/CommonFrozenFlowerBlock.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/CommonFrozenFlowerBlock.java new file mode 100644 index 0000000..43275d9 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/CommonFrozenFlowerBlock.java @@ -0,0 +1,177 @@ +package ru.pinkgoosik.winterly.block; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.RandomSource; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.LightLayer; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.block.state.properties.IntegerProperty; +import net.minecraft.world.level.pathfinder.PathComputationType; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.Nullable; +import ru.pinkgoosik.winterly.data.CachedFlowers; +import ru.pinkgoosik.winterly.registry.CommonWinterlyBlocks; + +import java.util.Objects; + +@SuppressWarnings("NullableProblems") +public class CommonFrozenFlowerBlock extends Block { + public static final IntegerProperty LAYERS = IntegerProperty.create("layers", 0, 8); + public static final BooleanProperty PERSISTENT = BlockStateProperties.PERSISTENT; + + protected static final VoxelShape[] LAYERS_TO_SHAPE = new VoxelShape[] { + Block.box(5.0, 0.0, 5.0, 11.0, 10.0, 11.0), + Block.box(0.0, 0.0, 0.0, 16.0, 2.0, 16.0), + Block.box(0.0, 0.0, 0.0, 16.0, 4.0, 16.0), + Block.box(0.0, 0.0, 0.0, 16.0, 6.0, 16.0), + Block.box(0.0, 0.0, 0.0, 16.0, 8.0, 16.0), + Block.box(0.0, 0.0, 0.0, 16.0, 10.0, 16.0), + Block.box(0.0, 0.0, 0.0, 16.0, 12.0, 16.0), + Block.box(0.0, 0.0, 0.0, 16.0, 14.0, 16.0), + Block.box(0.0, 0.0, 0.0, 16.0, 16.0, 16.0) + }; + + public CommonFrozenFlowerBlock(Properties settings) { + super(settings); + this.registerDefaultState(this.stateDefinition.any().setValue(LAYERS, 0).setValue(PERSISTENT, false)); + } + + @Override + public SoundType getSoundType(BlockState state) { + if(state.getValue(LAYERS) == 0) { + return SoundType.GRASS; + } + else { + return SoundType.SNOW; + } + } + + @Override + protected boolean isPathfindable(BlockState state, PathComputationType type) { + if(type.equals(PathComputationType.LAND)) { + return state.getValue(LAYERS) < 5; + } + else return false; + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { + return LAYERS_TO_SHAPE[state.getValue(LAYERS)]; + } + + @Override + public VoxelShape getCollisionShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { + if(state.getValue(LAYERS).equals(0) || state.getValue(LAYERS).equals(1)) { + return Shapes.empty(); + } + else { + return LAYERS_TO_SHAPE[state.getValue(LAYERS) - 1]; + } + } + + @Override + public VoxelShape getBlockSupportShape(BlockState state, BlockGetter world, BlockPos pos) { + return LAYERS_TO_SHAPE[state.getValue(LAYERS)]; + } + + @Override + public VoxelShape getVisualShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { + return LAYERS_TO_SHAPE[state.getValue(LAYERS)]; + } + + @Override + public boolean useShapeForLightOcclusion(BlockState state) { + return true; + } + + @Override + public float getShadeBrightness(BlockState state, BlockGetter world, BlockPos pos) { + return state.getValue(LAYERS) == 8 ? 0.2F : 1.0F; + } + + @Override + public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { + BlockPos down = pos.below(); + return this.canPlantOnTop(world.getBlockState(down)); + } + + protected boolean canPlantOnTop(BlockState floor) { + return floor.is(BlockTags.DIRT) || floor.is(Blocks.FARMLAND); + } + + @Override + public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor world, BlockPos pos, BlockPos neighborPos) { + return !state.canSurvive(world, pos) ? Blocks.AIR.defaultBlockState() : super.updateShape(state, direction, neighborState, world, pos, neighborPos); + } + + @Override + public void randomTick(BlockState state, ServerLevel world, BlockPos pos, RandomSource random) { + if (world.getBrightness(LightLayer.BLOCK, pos) > 11) { + dropResources(state, world, pos); + if(state.getValue(LAYERS) != 0) { + var cachedFlower = CachedFlowers.getFlower(world, pos); + world.setBlockAndUpdate(pos, Objects.requireNonNullElse(cachedFlower, this).defaultBlockState()); + } + } + } + + @Override + public void destroy(LevelAccessor world, BlockPos pos, BlockState state) { + super.destroy(world, pos, state); + + if(state.getValue(LAYERS) != 0 && world instanceof ServerLevel server) { + var cachedFlower = CachedFlowers.getFlower(server, pos); + world.setBlock(pos, Objects.requireNonNullElse(cachedFlower, this).defaultBlockState(), Block.UPDATE_ALL); + } + } + + @Override + public boolean canBeReplaced(BlockState state, BlockPlaceContext context) { + int layers = state.getValue(LAYERS); + + if(layers == 8) { + return false; + } + if(context.getItemInHand().is(Blocks.SNOW.asItem())) { + if(layers == 0) { + return true; + } + else { + return context.getClickedFace() == Direction.UP; + } + } + return false; + } + + @Nullable + @Override + public BlockState getStateForPlacement(BlockPlaceContext ctx) { + BlockState state = ctx.getLevel().getBlockState(ctx.getClickedPos()); + if(state.is(Blocks.SNOW) || state.is(CommonWinterlyBlocks.FROZEN_GRASS)) { + return defaultBlockState().setValue(LAYERS, 1).setValue(PERSISTENT, true); + } + else { + return super.getStateForPlacement(ctx); + } + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(LAYERS); + builder.add(PERSISTENT); + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/CommonFrozenGrassBlock.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/CommonFrozenGrassBlock.java new file mode 100644 index 0000000..f642965 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/CommonFrozenGrassBlock.java @@ -0,0 +1,59 @@ +package ru.pinkgoosik.winterly.block; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LightLayer; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.SnowLayerBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; + +public class CommonFrozenGrassBlock extends SnowLayerBlock { + public static final BooleanProperty PERSISTENT = BlockStateProperties.PERSISTENT; + + public CommonFrozenGrassBlock(Properties settings) { + super(settings); + this.registerDefaultState(this.stateDefinition.any().setValue(LAYERS, 1).setValue(PERSISTENT, false)); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + super.createBlockStateDefinition(builder); + builder.add(PERSISTENT); + } + + @Override + public boolean canBeReplaced(BlockState state, BlockPlaceContext context) { + int layers = state.getValue(LAYERS); + + if(layers == 8 || context.getItemInHand().is(this.asItem())) { + return false; + } + if(context.getItemInHand().is(Blocks.SNOW.asItem())) { + return context.getClickedFace() == Direction.UP; + } + + return layers == 1; + } + + @Override + public void randomTick(BlockState state, ServerLevel world, BlockPos pos, RandomSource random) { + if (world.getBrightness(LightLayer.BLOCK, pos) > 11) { + dropResources(state, world, pos); + world.setBlockAndUpdate(pos, Blocks.SHORT_GRASS.defaultBlockState()); + } + } + + @Override + public void destroy(LevelAccessor world, BlockPos pos, BlockState state) { + super.destroy(world, pos, state); + world.setBlock(pos, Blocks.SHORT_GRASS.defaultBlockState(), Block.UPDATE_ALL); + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/GarlandLightsBlock.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/GarlandLightsBlock.java new file mode 100644 index 0000000..b555ec0 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/GarlandLightsBlock.java @@ -0,0 +1,81 @@ +package ru.pinkgoosik.winterly.block; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.Nullable; + +@SuppressWarnings("NullableProblems") +public class GarlandLightsBlock extends Block { + public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING; + + private static final VoxelShape EAST_SHAPE = box(0, 3, 0, 1, 13, 16); + private static final VoxelShape WEST_SHAPE = box(15, 3, 0, 16, 13, 16); + private static final VoxelShape SOUTH_SHAPE = box(0, 3, 0, 16, 13, 1); + private static final VoxelShape NORTH_SHAPE = box(0, 3, 15, 16, 13, 16); + + public GarlandLightsBlock(Properties settings) { + super(settings); + this.registerDefaultState(defaultBlockState().setValue(FACING, Direction.NORTH)); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { + return switch (state.getValue(FACING)) { + case NORTH -> NORTH_SHAPE; + case SOUTH -> SOUTH_SHAPE; + case WEST -> WEST_SHAPE; + default -> EAST_SHAPE; + }; + } + + @Override + public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { + Direction direction = state.getValue(FACING); + return this.canPlaceOn(world, pos.relative(direction.getOpposite())); + } + + private boolean canPlaceOn(BlockGetter world, BlockPos pos) { + BlockState state = world.getBlockState(pos); + return !state.isAir(); + } + + @Nullable + @Override + public BlockState getStateForPlacement(BlockPlaceContext ctx) { + if (!ctx.replacingClickedOnBlock()) { + BlockState state = ctx.getLevel().getBlockState(ctx.getClickedPos().relative(ctx.getClickedFace().getOpposite())); + if (state.is(this) && state.getValue(FACING) == ctx.getClickedFace()) { + return null; + } + } + + BlockState state = this.defaultBlockState(); + LevelReader world = ctx.getLevel(); + BlockPos pos = ctx.getClickedPos(); + + for(Direction direction : ctx.getNearestLookingDirections()) { + if (direction.getAxis().isHorizontal()) { + state = state.setValue(FACING, direction.getOpposite()); + if (state.canSurvive(world, pos)) { + return state; + } + } + } + return null; + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(FACING); + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/GiftBoxBlock.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/GiftBoxBlock.java new file mode 100644 index 0000000..5b984b8 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/GiftBoxBlock.java @@ -0,0 +1,133 @@ +package ru.pinkgoosik.winterly.block; + +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.Component; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.ItemInteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.EntityBlock; +import net.minecraft.world.level.block.ShulkerBoxBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.Nullable; +import ru.pinkgoosik.winterly.Winterly; +import ru.pinkgoosik.winterly.block.entity.GiftBoxBlockEntity; +import ru.pinkgoosik.winterly.block.entity.GiftBoxBlockEntityData; + +import java.util.List; + +@SuppressWarnings("NullableProblems") +public class GiftBoxBlock extends Block implements EntityBlock { + public static final VoxelShape SHAPE = box(4, 0, 4, 12, 8, 12); + + public GiftBoxBlock(Properties settings) { + super(settings); + } + + @Nullable + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new GiftBoxBlockEntity(pos, state); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { + return GiftBoxBlock.SHAPE; + } + +// @Override +// public void setPlacedBy(Level world, BlockPos pos, BlockState state, @Nullable LivingEntity placer, ItemStack stack) { +// super.setPlacedBy(world, pos, state, placer, stack); +// +// if(world.getBlockEntity(pos) instanceof GiftBoxBlockEntityData entity) { +// entity.load(stack.getOrCreateTag()); +// } +// } + +// @Override +// public BlockState playerWillDestroy(Level world, BlockPos pos, BlockState state, Player player) { +// super.playerWillDestroy(world, pos, state, player); +// +// if(!world.isClientSide && world.getBlockEntity(pos) instanceof GiftBoxBlockEntityData entity) { +// ItemStack stack = player.getItemInHand(InteractionHand.MAIN_HAND); +// if(!EnchantmentHelper.getEnchantments(stack).containsKey(Enchantments.SILK_TOUCH)) { +// if(entity.getStacks().isEmpty()) { +// popResource(world, pos, new ItemStack(this.asItem())); +// } +// else { +// entity.getStacks().forEach(st -> popResource(world, pos, st)); +// } +// } +// else { +// ItemStack box = new ItemStack(this); +// +// if(!entity.getStacks().isEmpty()) { +// var nbt = new CompoundTag(); +// entity.saveAdditional(nbt); +// box.setTag(nbt); +// } +// popResource(world, pos, box); +// } +// } +// return state; +// } + + + @Override + protected ItemInteractionResult useItemOn(ItemStack stack, BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hitResult) { + if(!level.isClientSide && level.getBlockEntity(pos) instanceof GiftBoxBlockEntityData entity) { + + if(!stack.isEmpty() && entity.getStacks().size() < Winterly.config.getGiftBoxCapacity()) { + if(stack.getItem() instanceof BlockItem blockItem) { + if(blockItem.getBlock() instanceof ShulkerBoxBlock || blockItem.getBlock() instanceof GiftBoxBlock) { + return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; + } + } + entity.getStacks().add(stack.copy()); + player.setItemInHand(hand, ItemStack.EMPTY); + level.playSound(null, pos, SoundEvents.BUNDLE_INSERT, SoundSource.BLOCKS, 1, 1); + return ItemInteractionResult.SUCCESS; + } + } + return super.useItemOn(stack, state, level, pos, player, hand, hitResult); + } + + @Override + public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { + super.appendHoverText(stack, context, tooltipComponents, tooltipFlag); + +// if(stack.getOrCreateTag().contains("giftBoxData")) { +// var gift = GiftBoxData.fromNbt(stack.getOrCreateTag().getCompound("giftBoxData")); +// +// gift.stacks.forEach(st -> { +// String name = Language.getInstance().getOrDefault(st.getDescriptionId()); +// tooltip.add(Component.nullToEmpty("- " + name + " x" + st.getCount()).toFlatList(Style.EMPTY.withColor(ChatFormatting.GRAY)).get(0)); +// }); +// } +// else { +// Language lang = Language.getInstance(); +// String key = "description.winterly.gift_box."; +// +// for(int i = 0; i <= 32; i++) { +// if(lang.has(key + i)) { +// tooltip.add(Component.translatable(key + i).toFlatList(Style.EMPTY.withColor(ChatFormatting.GRAY)).get(0)); +// } +// if(!lang.has(key + (i + 1))) { +// break; +// } +// } +// } + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/IcicleBlock.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/IcicleBlock.java new file mode 100644 index 0000000..c166e56 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/IcicleBlock.java @@ -0,0 +1,119 @@ +package ru.pinkgoosik.winterly.block; + +import net.minecraft.ChatFormatting; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.block.SimpleWaterloggedBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.material.Fluids; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.Nullable; +import ru.pinkgoosik.winterly.registry.CommonWinterlyBlocks; + +import java.util.List; + +@SuppressWarnings("NullableProblems") +public class IcicleBlock extends Block implements SimpleWaterloggedBlock { + public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; + public static final DirectionProperty FACING = BlockStateProperties.FACING; + + public static final VoxelShape NORTH_SHAPE = box(3, 3, 9, 13, 13, 16); + public static final VoxelShape SOUTH_SHAPE = box(3, 3, 0, 13, 13, 7); + public static final VoxelShape EAST_SHAPE = box(0, 3, 3, 7, 13, 13); + public static final VoxelShape WEST_SHAPE = box(13, 3, 3, 16, 13, 13); + public static final VoxelShape UP_SHAPE = box(3, 0, 3, 13, 7, 13); + public static final VoxelShape DOWN_SHAPE = box(3, 9, 3, 13, 16, 13); + + public IcicleBlock(Properties settings) { + super(settings); + this.registerDefaultState(this.defaultBlockState().setValue(WATERLOGGED, Boolean.FALSE).setValue(FACING, Direction.DOWN)); + } + + @Override + public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { + Direction direction = state.getValue(FACING); + BlockPos blockPos = pos.relative(direction.getOpposite()); + BlockState blockState = world.getBlockState(blockPos); + return !blockState.isAir() && !blockState.is(this); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { + Direction direction = state.getValue(FACING); + return switch (direction) { + case NORTH -> NORTH_SHAPE; + case SOUTH -> SOUTH_SHAPE; + case EAST -> EAST_SHAPE; + case WEST -> WEST_SHAPE; + case DOWN -> DOWN_SHAPE; + default -> UP_SHAPE; + }; + } + + @Override + public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor world, BlockPos pos, BlockPos neighborPos) { + if (state.getValue(WATERLOGGED)) { + world.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world)); + } + return direction == state.getValue(FACING).getOpposite() && !state.canSurvive(world, pos) + ? Blocks.AIR.defaultBlockState() + : super.updateShape(state, direction, neighborState, world, pos, neighborPos); + } + + @Nullable + @Override + public BlockState getStateForPlacement(BlockPlaceContext ctx) { + LevelAccessor world = ctx.getLevel(); + BlockPos pos = ctx.getClickedPos(); + return this.defaultBlockState() + .setValue(WATERLOGGED, world.getFluidState(pos).getType() == Fluids.WATER) + .setValue(FACING, ctx.getClickedFace()); + } + + @Override + public BlockState rotate(BlockState state, Rotation rotation) { + return state.setValue(FACING, rotation.rotate(state.getValue(FACING))); + } + + @Override + public BlockState mirror(BlockState state, Mirror mirror) { + return state.rotate(mirror.getRotation(state.getValue(FACING))); + } + + @Override + public FluidState getFluidState(BlockState state) { + return state.getValue(WATERLOGGED) ? Fluids.WATER.getSource(false) : super.getFluidState(state); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(WATERLOGGED, FACING); + } + + + @Override + public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltip, TooltipFlag tooltipFlag) { + if(this.equals(CommonWinterlyBlocks.ICICLE)) { + tooltip.add(Component.translatable("tag.winterly.placeable").withStyle(ChatFormatting.GRAY)); + } + super.appendHoverText(stack, context, tooltip, tooltipFlag); + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/SnowballWallBlock.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/SnowballWallBlock.java new file mode 100644 index 0000000..eaaf5b2 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/SnowballWallBlock.java @@ -0,0 +1,41 @@ +package ru.pinkgoosik.winterly.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +@SuppressWarnings("NullableProblems") +public class SnowballWallBlock extends HorizontalDirectionalBlock { + private static final VoxelShape SHAPE = box(4, 0, 4, 12, 12, 12); + + public SnowballWallBlock(Properties settings) { + super(settings); + } + + @Override + protected MapCodec codec() { + return null; + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { + return SHAPE; + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext ctx) { + return this.defaultBlockState().setValue(FACING, ctx.getHorizontalDirection().getOpposite()); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(FACING); + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/SnowguyBlock.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/SnowguyBlock.java new file mode 100644 index 0000000..5187fb2 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/SnowguyBlock.java @@ -0,0 +1,54 @@ +package ru.pinkgoosik.winterly.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.ChatFormatting; +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +import java.util.List; + +@SuppressWarnings("NullableProblems") +public class SnowguyBlock extends HorizontalDirectionalBlock { + public static final VoxelShape SHAPE = box(4, 0, 4, 12, 14, 12); + + public SnowguyBlock(Properties settings) { + super(settings); + } + + @Override + protected MapCodec codec() { + return null; + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { + return SHAPE; + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext ctx) { + return this.defaultBlockState().setValue(FACING, ctx.getHorizontalDirection().getOpposite()); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(FACING); + } + + @Override + public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltip, TooltipFlag tooltipFlag) { + tooltip.add(Component.translatable("tag.winterly.placeable").withStyle(ChatFormatting.GRAY)); + super.appendHoverText(stack, context, tooltip, tooltipFlag); + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/base/BasePaneBlock.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/base/BasePaneBlock.java new file mode 100644 index 0000000..0161264 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/base/BasePaneBlock.java @@ -0,0 +1,10 @@ +package ru.pinkgoosik.winterly.block.base; + +import net.minecraft.world.level.block.IronBarsBlock; + +public class BasePaneBlock extends IronBarsBlock { + + public BasePaneBlock(Properties settings) { + super(settings); + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/base/BaseStairsBlock.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/base/BaseStairsBlock.java new file mode 100644 index 0000000..e17782d --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/base/BaseStairsBlock.java @@ -0,0 +1,11 @@ +package ru.pinkgoosik.winterly.block.base; + +import net.minecraft.world.level.block.StairBlock; +import net.minecraft.world.level.block.state.BlockState; + +public class BaseStairsBlock extends StairBlock { + + public BaseStairsBlock(BlockState base, Properties settings) { + super(base, settings); + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/entity/GiftBoxBlockEntity.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/entity/GiftBoxBlockEntity.java new file mode 100644 index 0000000..b3fb202 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/entity/GiftBoxBlockEntity.java @@ -0,0 +1,39 @@ +package ru.pinkgoosik.winterly.block.entity; + +import net.minecraft.core.HolderLookup; +import ru.pinkgoosik.winterly.data.GiftBoxData; +import ru.pinkgoosik.winterly.registry.CommonWinterlyBlockEntities; + +import java.util.ArrayList; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; + +public class GiftBoxBlockEntity extends BlockEntity implements GiftBoxBlockEntityData { + public ArrayList stacks = new ArrayList<>(); + + public GiftBoxBlockEntity(BlockPos pos, BlockState state) { + super(CommonWinterlyBlockEntities.GIFT_BOX_BLOCK_ENTITY, pos, state); + } + + @Override + public ArrayList getStacks() { + return this.stacks; + } + + @Override + public void saveAdditional(CompoundTag tag, HolderLookup.Provider registries) { + super.saveAdditional(tag, registries); + tag.put("giftBoxData", GiftBoxData.toNbt(this)); + } + + @Override + public void loadAdditional(CompoundTag tag, HolderLookup.Provider registries) { + super.loadAdditional(tag, registries); + var data = GiftBoxData.fromNbt(tag.getCompound("giftBoxData")); + this.stacks = data.stacks; + } + +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/entity/GiftBoxBlockEntityData.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/entity/GiftBoxBlockEntityData.java new file mode 100644 index 0000000..8a100e5 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/block/entity/GiftBoxBlockEntityData.java @@ -0,0 +1,13 @@ +package ru.pinkgoosik.winterly.block.entity; + +import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.item.ItemStack; + +import java.util.ArrayList; + +public interface GiftBoxBlockEntityData { + ArrayList getStacks(); + void saveAdditional(CompoundTag nbt, HolderLookup.Provider registries); + void loadAdditional(CompoundTag nbt, HolderLookup.Provider registries); +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/client/WinterlyModelLayers.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/client/WinterlyModelLayers.java new file mode 100644 index 0000000..af04a8f --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/client/WinterlyModelLayers.java @@ -0,0 +1,13 @@ +package ru.pinkgoosik.winterly.client; + +import net.minecraft.client.model.geom.ModelLayerLocation; +import ru.pinkgoosik.winterly.Winterly; + +public class WinterlyModelLayers { + public static final ModelLayerLocation SANTA_HAT_LAYER = of("santa_hat"); + public static final ModelLayerLocation SCARF_LAYER = of("scarf"); + + private static ModelLayerLocation of(String name){ + return new ModelLayerLocation(Winterly.id(name), "main"); + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/client/model/SantaHatModel.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/client/model/SantaHatModel.java new file mode 100644 index 0000000..63a816a --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/client/model/SantaHatModel.java @@ -0,0 +1,40 @@ +package ru.pinkgoosik.winterly.client.model; + +import com.google.common.collect.ImmutableList; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.model.*; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.CubeListBuilder; +import net.minecraft.client.model.geom.builders.LayerDefinition; +import net.minecraft.client.model.geom.builders.MeshDefinition; +import net.minecraft.client.model.geom.builders.PartDefinition; +import net.minecraft.client.renderer.RenderType; + +public class SantaHatModel extends Model { + public final ModelPart hat; + + public SantaHatModel(ModelPart root) { + super(RenderType::entityCutoutNoCull); + this.hat = root.getChild("hat"); + } + + public static LayerDefinition getTexturedModelData() { + MeshDefinition modelData = new MeshDefinition(); + PartDefinition modelPartData = modelData.getRoot(); + + PartDefinition hat = modelPartData.addOrReplaceChild("hat", CubeListBuilder.create().texOffs(27, 14).addBox(-4.0F, -8.0F, 7.0F, 3.0F, 3.0F, 3.0F), PartPose.offset(0.0F, 24.0F, 0.0F)); + + hat.addOrReplaceChild("cube_1", CubeListBuilder.create().texOffs(0, 27).addBox(-3.0F, -5.0F, 0.0F, 6.0F, 4.0F, 8.0F), PartPose.offsetAndRotation(0.0F, -8.0F, 0.0F, -0.3491F, 0.0F, 0.0F)); + hat.addOrReplaceChild("cube_2", CubeListBuilder.create().texOffs(0, 14).addBox(-4.5F, -3.0F, -3.5F, 9.0F, 4.0F, 9.0F), PartPose.offsetAndRotation(0.0F, -8.0F, 0.0F, -0.5236F, 0.0F, 0.0F)); + hat.addOrReplaceChild("cube_3", CubeListBuilder.create().texOffs(0, 0).addBox(-5.5F, 0.0F, -4.5F, 11.0F, 3.0F, 11.0F), PartPose.offsetAndRotation(0.0F, -8.0F, 0.0F, -0.2618F, 0.0F, 0.0F)); + + return LayerDefinition.create(modelData, 64, 64); + } + + @Override + public void renderToBuffer(PoseStack poseStack, VertexConsumer buffer, int packedLight, int packedOverlay, int color) { + ImmutableList.of(this.hat).forEach((part) -> part.render(poseStack, buffer, packedLight, packedOverlay, color)); + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/client/model/ScarfModel.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/client/model/ScarfModel.java new file mode 100644 index 0000000..f3ea970 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/client/model/ScarfModel.java @@ -0,0 +1,39 @@ +package ru.pinkgoosik.winterly.client.model; + +import com.google.common.collect.ImmutableList; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.model.*; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.CubeDeformation; +import net.minecraft.client.model.geom.builders.CubeListBuilder; +import net.minecraft.client.model.geom.builders.LayerDefinition; +import net.minecraft.client.model.geom.builders.MeshDefinition; +import net.minecraft.client.model.geom.builders.PartDefinition; +import net.minecraft.client.renderer.RenderType; + +public class ScarfModel extends Model { + public final ModelPart scarf; + + public ScarfModel(ModelPart root) { + super(RenderType::entityCutoutNoCull); + this.scarf = root.getChild("scarf"); + } + + public static LayerDefinition getTexturedModelData() { + MeshDefinition modelData = new MeshDefinition(); + PartDefinition modelPartData = modelData.getRoot(); + + PartDefinition scarf = modelPartData.addOrReplaceChild("scarf", CubeListBuilder.create().texOffs(0, 0).addBox(-5.0F, -1.0F, -5.0F, 10.0F, 3.0F, 10.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 24.0F, 0.0F)); + scarf.addOrReplaceChild("back_hanger", CubeListBuilder.create().texOffs(0, 13).addBox(-5.0F, 3.0F, 3.0F, 5.0F, 16.0F, 0.0F, new CubeDeformation(0.0F)), PartPose.rotation(0.3491F, 0.0F, 0.0F)); + scarf.addOrReplaceChild("front_hanger", CubeListBuilder.create().texOffs(0, 13).addBox(-1.0F, 2.0F, -4.0F, 5.0F, 16.0F, 0.0F, new CubeDeformation(0.0F)), PartPose.rotation(0.0F, -0.2618F, 0.0F)); + + return LayerDefinition.create(modelData, 64, 64); + } + + @Override + public void renderToBuffer(PoseStack poseStack, VertexConsumer buffer, int packedLight, int packedOverlay, int color) { + ImmutableList.of(this.scarf).forEach((part) -> part.render(poseStack, buffer, packedLight, packedOverlay, color)); + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/client/model/WinterlyModels.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/client/model/WinterlyModels.java new file mode 100644 index 0000000..5230ff9 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/client/model/WinterlyModels.java @@ -0,0 +1,15 @@ +package ru.pinkgoosik.winterly.client.model; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.geom.ModelLayerLocation; +import net.minecraft.client.model.geom.ModelPart; +import ru.pinkgoosik.winterly.client.WinterlyModelLayers; + +public class WinterlyModels { + public static final ScarfModel SCARF_MODEL = new ScarfModel(getModelPart(WinterlyModelLayers.SCARF_LAYER)); + public static final SantaHatModel SANTA_HAT_MODEL = new SantaHatModel(getModelPart(WinterlyModelLayers.SANTA_HAT_LAYER)); + + public static ModelPart getModelPart(ModelLayerLocation layer){ + return Minecraft.getInstance().getEntityModels().bakeLayer(layer); + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/client/render/DecorationFeatureRenderer.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/client/render/DecorationFeatureRenderer.java new file mode 100644 index 0000000..cdd4060 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/client/render/DecorationFeatureRenderer.java @@ -0,0 +1,26 @@ +package ru.pinkgoosik.winterly.client.render; + +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.model.HumanoidModel; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.client.renderer.entity.layers.RenderLayer; +import net.minecraft.world.entity.LivingEntity; +import ru.pinkgoosik.winterly.extension.DecoratedMob; + +public class DecorationFeatureRenderer> extends RenderLayer { + + public DecorationFeatureRenderer(RenderLayerParent context) { + super(context); + } + + @Override + public void render(PoseStack matrices, MultiBufferSource vertexConsumers, int light, T entity, float limbAngle, float limbDistance, float tickDelta, float animationProgress, float headYaw, float headPitch) { + if(entity instanceof DecoratedMob decorated) { + if(decorated.winterly$decorated()) { + MobDecorationRenderer renderer = MobDecorationRenderers.getRenderer(decorated.winterly$getIndex()); + renderer.render(this.getParentModel(), matrices, vertexConsumers, light, entity, limbAngle, limbDistance, tickDelta, animationProgress, headYaw, headPitch); + } + } + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/client/render/MobDecorationRenderer.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/client/render/MobDecorationRenderer.java new file mode 100644 index 0000000..85c9181 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/client/render/MobDecorationRenderer.java @@ -0,0 +1,16 @@ +package ru.pinkgoosik.winterly.client.render; + +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.model.HumanoidModel; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.world.entity.LivingEntity; + +public abstract class MobDecorationRenderer { + public final String texture; + + public MobDecorationRenderer(String texture) { + this.texture = texture; + } + + abstract public void render(HumanoidModel contextModel, PoseStack matrices, MultiBufferSource vertexConsumers, int light, LivingEntity entity, float limbAngle, float limbDistance, float tickDelta, float animationProgress, float headYaw, float headPitch); +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/client/render/MobDecorationRenderers.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/client/render/MobDecorationRenderers.java new file mode 100644 index 0000000..79018fd --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/client/render/MobDecorationRenderers.java @@ -0,0 +1,37 @@ +package ru.pinkgoosik.winterly.client.render; + +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; + +import java.util.ArrayList; +import java.util.List; + +@Environment(EnvType.CLIENT) +public class MobDecorationRenderers { + public static final List LIST = new ArrayList<>(); + + public static void init() { + scarf("red_scarf"); + scarf("green_scarf"); + scarf("blue_scarf"); + + santaHat("red_santa_hat"); + santaHat("blue_santa_hat"); + } + + private static void scarf(String texture) { + LIST.add(new ScarfRenderer(texture)); + } + + private static void santaHat(String texture) { + LIST.add(new SantaHatRenderer(texture)); + } + + public static MobDecorationRenderer getRenderer(int index){ + try { + return MobDecorationRenderers.LIST.get(index); + }catch (IndexOutOfBoundsException e) { + return MobDecorationRenderers.LIST.get(MobDecorationRenderers.LIST.size() - 1); + } + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/client/render/SantaHatRenderer.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/client/render/SantaHatRenderer.java new file mode 100644 index 0000000..02de0ce --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/client/render/SantaHatRenderer.java @@ -0,0 +1,25 @@ +package ru.pinkgoosik.winterly.client.render; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.model.HumanoidModel; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.world.entity.LivingEntity; +import ru.pinkgoosik.winterly.Winterly; +import ru.pinkgoosik.winterly.client.model.WinterlyModels; + +public class SantaHatRenderer extends MobDecorationRenderer { + + public SantaHatRenderer(String texture) { + super(texture); + } + + @Override + public void render(HumanoidModel contextModel, PoseStack matrices, MultiBufferSource vertexConsumers, int light, LivingEntity entity, float limbAngle, float limbDistance, float tickDelta, float animationProgress, float headYaw, float headPitch) { + WinterlyModels.SANTA_HAT_MODEL.hat.copyFrom(contextModel.head); + VertexConsumer vertexConsumer = vertexConsumers.getBuffer(RenderType.entityCutout(Winterly.id("textures/entity/" + texture + ".png"))); + WinterlyModels.SANTA_HAT_MODEL.renderToBuffer(matrices, vertexConsumer, light, OverlayTexture.NO_OVERLAY); + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/client/render/ScarfRenderer.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/client/render/ScarfRenderer.java new file mode 100644 index 0000000..4018769 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/client/render/ScarfRenderer.java @@ -0,0 +1,25 @@ +package ru.pinkgoosik.winterly.client.render; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.model.HumanoidModel; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.world.entity.LivingEntity; +import ru.pinkgoosik.winterly.Winterly; +import ru.pinkgoosik.winterly.client.model.WinterlyModels; + +public class ScarfRenderer extends MobDecorationRenderer { + + public ScarfRenderer(String texture) { + super(texture); + } + + @Override + public void render(HumanoidModel contextModel, PoseStack matrices, MultiBufferSource vertexConsumers, int light, LivingEntity entity, float limbAngle, float limbDistance, float tickDelta, float animationProgress, float headYaw, float headPitch) { + WinterlyModels.SCARF_MODEL.scarf.copyFrom(contextModel.body); + VertexConsumer vertexConsumer = vertexConsumers.getBuffer(RenderType.entityCutout(Winterly.id("textures/entity/" + texture + ".png"))); + WinterlyModels.SCARF_MODEL.renderToBuffer(matrices, vertexConsumer, light, OverlayTexture.NO_OVERLAY); + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/config/WinterlyClientConfig.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/config/WinterlyClientConfig.java new file mode 100644 index 0000000..b4b7a63 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/config/WinterlyClientConfig.java @@ -0,0 +1,77 @@ +package ru.pinkgoosik.winterly.config; + +import me.shedaniel.autoconfig.AutoConfig; +import me.shedaniel.clothconfig2.api.ConfigBuilder; +import me.shedaniel.clothconfig2.api.ConfigCategory; +import me.shedaniel.clothconfig2.api.ConfigEntryBuilder; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.Component; +import ru.pinkgoosik.winterly.Winterly; + +@Environment(EnvType.CLIENT) +public class WinterlyClientConfig { + + public static Screen buildScreen(Screen parent) { + ConfigBuilder configBuilder = ConfigBuilder.create().setParentScreen(parent).setTitle(text("title")); + configBuilder.setSavingRunnable(() -> AutoConfig.getConfigHolder(WinterlyClothConfig.class).save()); + ConfigCategory general = configBuilder.getOrCreateCategory(text("general")); + ConfigEntryBuilder entryBuilder = configBuilder.entryBuilder(); + WinterlyClientConfig.setupEntries(general, entryBuilder); + return configBuilder.build(); + } + + public static void setupEntries(ConfigCategory category, ConfigEntryBuilder builder) { + var config = Winterly.config; + + category.addEntry(builder.startIntField(text("option.max_gift_box_capacity"), config.maxGiftBoxCapacity) + .setDefaultValue(3) + .setSaveConsumer(newValue -> config.maxGiftBoxCapacity = newValue) + .build()); + +// category.addEntry(builder.startBooleanToggle(text("option.update_checker_enabled"), config.updateCheckerEnabled) +// .setDefaultValue(true) +// .setSaveConsumer(newValue -> config.updateCheckerEnabled = newValue) +// .build()); + + category.addEntry(builder.startBooleanToggle(text("option.generate_underground_icicles"), config.generateUndergroundIcicles) + .setDefaultValue(true) + .setSaveConsumer(newValue -> config.generateUndergroundIcicles = newValue) + .build()); + + category.addEntry(builder.startBooleanToggle(text("option.generate_cryomarble"), config.generateCryomarble) + .setDefaultValue(true) + .setSaveConsumer(newValue -> config.generateCryomarble = newValue) + .build()); + + category.addEntry(builder.startBooleanToggle(text("option.generate_frozen_grass"), config.generateFrozenGrass) + .setDefaultValue(true) + .setSaveConsumer(newValue -> config.generateFrozenGrass = newValue) + .build()); + + category.addEntry(builder.startBooleanToggle(text("option.generate_frozen_flowers"), config.generateFrozenFlowers) + .setDefaultValue(true) + .setSaveConsumer(newValue -> config.generateFrozenFlowers = newValue) + .build()); + + category.addEntry(builder.startBooleanToggle(text("option.mob_decorations.enabled"), config.mobDecorations.enabled) + .setDefaultValue(true) + .setSaveConsumer(newValue -> config.mobDecorations.enabled = newValue) + .build()); + + category.addEntry(builder.startBooleanToggle(text("option.mob_decorations.only_in_winter"), config.mobDecorations.onlyInWinter) + .setDefaultValue(true) + .setSaveConsumer(newValue -> config.mobDecorations.onlyInWinter = newValue) + .build()); + + category.addEntry(builder.startIntSlider(text("option.mob_decorations.chance"), config.mobDecorations.chance, 0, 100) + .setDefaultValue(15) + .setSaveConsumer(newValue -> config.mobDecorations.chance = newValue) + .build()); + } + + private static Component text(String key) { + return Component.translatable("config.winterly." + key); + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/config/WinterlyClothConfig.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/config/WinterlyClothConfig.java new file mode 100644 index 0000000..48b92a6 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/config/WinterlyClothConfig.java @@ -0,0 +1,16 @@ +package ru.pinkgoosik.winterly.config; + +import me.shedaniel.autoconfig.AutoConfig; +import me.shedaniel.autoconfig.ConfigData; +import me.shedaniel.autoconfig.annotation.Config; +import me.shedaniel.autoconfig.serializer.GsonConfigSerializer; + +@Config(name = "winterly") +public class WinterlyClothConfig extends WinterlyConfig implements ConfigData { + + public static WinterlyClothConfig init() { + AutoConfig.register(WinterlyClothConfig.class, GsonConfigSerializer::new); + return AutoConfig.getConfigHolder(WinterlyClothConfig.class).getConfig(); + } + +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/config/WinterlyConfig.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/config/WinterlyConfig.java new file mode 100644 index 0000000..892c78a --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/config/WinterlyConfig.java @@ -0,0 +1,22 @@ +package ru.pinkgoosik.winterly.config; + +public class WinterlyConfig { + public int maxGiftBoxCapacity = 3; + public boolean updateCheckerEnabled = true; + public boolean generateUndergroundIcicles = true; + public boolean generateCryomarble = true; + public boolean generateFrozenGrass = true; + public boolean generateFrozenFlowers = true; + public MobDecorationsConfig mobDecorations = new MobDecorationsConfig(); + + public int getGiftBoxCapacity() { + return Math.max(1, maxGiftBoxCapacity); + } + + public static class MobDecorationsConfig { + public boolean enabled = true; + public boolean onlyInWinter = true; + public int chance = 15; + } + +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/data/CachedFlowers.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/data/CachedFlowers.java new file mode 100644 index 0000000..2387d27 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/data/CachedFlowers.java @@ -0,0 +1,49 @@ +package ru.pinkgoosik.winterly.data; + +import org.jetbrains.annotations.Nullable; + +import java.util.LinkedHashMap; +import java.util.Map; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; + +public class CachedFlowers { + public static CachedFlowers instance = new CachedFlowers(); + + public Map, Map> data = new LinkedHashMap<>(); + + public static Block getFlower(Level world, BlockPos pos) { + return instance.getFlowerImpl(world, pos); + } + + @Nullable + public Block getFlowerImpl(Level world, BlockPos pos) { + var map = data.get(world.dimension()); + if(map != null) { + return map.get(pos); + } + else { + var newMap = new LinkedHashMap(); + data.put(world.dimension(), newMap); + return null; + } + } + + public static void cacheFlower(Level world, BlockPos pos, Block flower) { + instance.cacheFlowerImpl(world, pos, flower); + } + + public void cacheFlowerImpl(Level world, BlockPos pos, Block flower) { + var map = data.get(world.dimension()); + if(map != null) { + map.put(pos, flower); + } + else { + var newMap = new LinkedHashMap(); + newMap.put(pos, flower); + data.put(world.dimension(), newMap); + } + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/data/GiftBoxData.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/data/GiftBoxData.java new file mode 100644 index 0000000..a03a708 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/data/GiftBoxData.java @@ -0,0 +1,58 @@ +package ru.pinkgoosik.winterly.data; + +import net.minecraft.core.component.DataComponentMap; +import net.minecraft.core.component.DataComponents; +import net.minecraft.world.item.component.CustomData; + +import java.util.ArrayList; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; +import ru.pinkgoosik.winterly.block.entity.GiftBoxBlockEntityData; + +public class GiftBoxData { + public ArrayList stacks = new ArrayList<>(); + + public static GiftBoxData fromNbt(CompoundTag nbt) { + GiftBoxData gift = new GiftBoxData(); + + int size = nbt.getInt("size"); + for(int i = 0; i < size; i++) { + CompoundTag entryNbt = nbt.getCompound(String.valueOf(i)); + + var item = BuiltInRegistries.ITEM.getOptional(ResourceLocation.parse(entryNbt.getString("item"))); + if(item.isPresent()) { + ItemStack temp = new ItemStack(item.get(), entryNbt.getInt("count")); + + if(entryNbt.contains("nbt")) { + temp.applyComponents(DataComponentMap.builder().set(DataComponents.CUSTOM_DATA, CustomData.of((CompoundTag) entryNbt.get("nbt"))).build()); + } + + gift.stacks.add(temp); + } + } + + return gift; + } + + public static CompoundTag toNbt(GiftBoxBlockEntityData entity) { + CompoundTag nbt = new CompoundTag(); + nbt.putInt("size", entity.getStacks().size()); + + for(int i = 0; i < entity.getStacks().size(); i++) { + ItemStack stack = entity.getStacks().get(i); + CompoundTag entryNbt = new CompoundTag(); + entryNbt.putString("item", BuiltInRegistries.ITEM.getKey(stack.getItem()).toString()); + + if(stack.getComponents().has(DataComponents.CUSTOM_DATA)) { + entryNbt.put("nbt", stack.getComponents().get(DataComponents.CUSTOM_DATA).copyTag()); + } + + entryNbt.putInt("count", stack.getCount()); + + nbt.put(Integer.toString(i), entryNbt); + } + return nbt; + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/extension/DecoratedMob.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/extension/DecoratedMob.java new file mode 100644 index 0000000..8ec3376 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/extension/DecoratedMob.java @@ -0,0 +1,6 @@ +package ru.pinkgoosik.winterly.extension; + +public interface DecoratedMob { + boolean winterly$decorated(); + int winterly$getIndex(); +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/item/CommonSantaHatItem.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/item/CommonSantaHatItem.java new file mode 100644 index 0000000..b343107 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/item/CommonSantaHatItem.java @@ -0,0 +1,24 @@ +package ru.pinkgoosik.winterly.item; + +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import java.util.List; + +public class CommonSantaHatItem extends Item { + public final String color; + + public CommonSantaHatItem(Item.Properties settings, String color) { + super(settings); + this.color = color; + } + + @Override + public void appendHoverText(ItemStack stack, TooltipContext context, List tooltip, TooltipFlag tooltipFlag) { + tooltip.add(Component.translatable("tag.winterly.cosmetic").withStyle(ChatFormatting.GRAY)); + tooltip.add(Component.nullToEmpty(" ")); + super.appendHoverText(stack, context, tooltip, tooltipFlag); + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/item/CommonScarfItem.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/item/CommonScarfItem.java new file mode 100644 index 0000000..9b3fbe6 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/item/CommonScarfItem.java @@ -0,0 +1,25 @@ +package ru.pinkgoosik.winterly.item; + +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; + +import java.util.List; + +public class CommonScarfItem extends Item { + public final String color; + + public CommonScarfItem(Item.Properties settings, String color) { + super(settings); + this.color = color; + } + + @Override + public void appendHoverText(ItemStack stack, TooltipContext context, List tooltip, TooltipFlag tooltipFlag) { + tooltip.add(Component.translatable("tag.winterly.cosmetic").withStyle(ChatFormatting.GRAY)); + tooltip.add(Component.nullToEmpty(" ")); + super.appendHoverText(stack, context, tooltip, tooltipFlag); + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/item/tool/CryomarbleAxeItem.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/item/tool/CryomarbleAxeItem.java new file mode 100644 index 0000000..700cefd --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/item/tool/CryomarbleAxeItem.java @@ -0,0 +1,22 @@ +package ru.pinkgoosik.winterly.item.tool; + +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.AxeItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Tier; + +public class CryomarbleAxeItem extends AxeItem { + + public CryomarbleAxeItem(Tier tier, Properties properties) { + super(tier, properties); + } + + @Override + public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) { + target.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, 60, 0)); + return super.hurtEnemy(stack, target, attacker); + } +} + diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/item/tool/CryomarbleHoeItem.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/item/tool/CryomarbleHoeItem.java new file mode 100644 index 0000000..80bfdb6 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/item/tool/CryomarbleHoeItem.java @@ -0,0 +1,21 @@ +package ru.pinkgoosik.winterly.item.tool; + +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.HoeItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Tier; + +public class CryomarbleHoeItem extends HoeItem { + + public CryomarbleHoeItem(Tier tier, Properties properties) { + super(tier, properties); + } + + @Override + public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) { + target.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, 60, 0)); + return super.hurtEnemy(stack, target, attacker); + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/item/tool/CryomarblePickaxeItem.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/item/tool/CryomarblePickaxeItem.java new file mode 100644 index 0000000..cdb8b86 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/item/tool/CryomarblePickaxeItem.java @@ -0,0 +1,22 @@ +package ru.pinkgoosik.winterly.item.tool; + +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.PickaxeItem; +import net.minecraft.world.item.Tier; + +public class CryomarblePickaxeItem extends PickaxeItem { + + public CryomarblePickaxeItem(Tier tier, Properties properties) { + super(tier, properties); + } + + @Override + public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) { + target.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, 60, 0)); + return super.hurtEnemy(stack, target, attacker); + } +} + diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/item/tool/CryomarbleShovelItem.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/item/tool/CryomarbleShovelItem.java new file mode 100644 index 0000000..d110d06 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/item/tool/CryomarbleShovelItem.java @@ -0,0 +1,22 @@ +package ru.pinkgoosik.winterly.item.tool; + +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ShovelItem; +import net.minecraft.world.item.Tier; + +public class CryomarbleShovelItem extends ShovelItem { + + public CryomarbleShovelItem(Tier tier, Properties properties) { + super(tier, properties); + } + + @Override + public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) { + target.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, 60, 0)); + return super.hurtEnemy(stack, target, attacker); + } +} + diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/item/tool/CryomarbleSwordItem.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/item/tool/CryomarbleSwordItem.java new file mode 100644 index 0000000..4d265c3 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/item/tool/CryomarbleSwordItem.java @@ -0,0 +1,21 @@ +package ru.pinkgoosik.winterly.item.tool; + +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.SwordItem; +import net.minecraft.world.item.Tier; + +public class CryomarbleSwordItem extends SwordItem { + + public CryomarbleSwordItem(Tier tier, Properties properties) { + super(tier, properties); + } + + @Override + public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) { + target.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, 60, 0)); + return super.hurtEnemy(stack, target, attacker); + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/mixin/WinterlyMixins.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/mixin/WinterlyMixins.java new file mode 100644 index 0000000..0d8acec --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/mixin/WinterlyMixins.java @@ -0,0 +1,46 @@ +package ru.pinkgoosik.winterly.mixin; + +import org.objectweb.asm.tree.ClassNode; +import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; +import org.spongepowered.asm.mixin.extensibility.IMixinInfo; + +import java.util.List; +import java.util.Set; + +public class WinterlyMixins implements IMixinConfigPlugin { + + @Override + public void onLoad(String mixinPackage) { + + } + + @Override + public String getRefMapperConfig() { + return null; + } + + @Override + public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { + return true; + } + + @Override + public void acceptTargets(Set myTargets, Set otherTargets) { + + } + + @Override + public List getMixins() { + return null; + } + + @Override + public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + + } + + @Override + public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/mixin/common/BlockStateMixin.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/mixin/common/BlockStateMixin.java new file mode 100644 index 0000000..327671f --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/mixin/common/BlockStateMixin.java @@ -0,0 +1,58 @@ +package ru.pinkgoosik.winterly.mixin.common; + +import com.mojang.serialization.MapCodec; +import it.unimi.dsi.fastutil.objects.Reference2ObjectArrayMap; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateHolder; +import net.minecraft.world.level.block.state.properties.Property; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import ru.pinkgoosik.winterly.block.CommonFrozenFlowerBlock; +import ru.pinkgoosik.winterly.registry.CommonWinterlyBlocks; + +@Mixin(BlockBehaviour.BlockStateBase.class) +public abstract class BlockStateMixin extends StateHolder { + + protected BlockStateMixin(Block owner, Reference2ObjectArrayMap, Comparable> values, MapCodec propertiesCodec) { + super(owner, values, propertiesCodec); + } + + @Shadow + public abstract boolean is(Block block); + + @Shadow + @Final + private float destroySpeed; + + @Inject(method = "getDestroySpeed", at = @At("HEAD"), cancellable = true) + void getHardness(BlockGetter world, BlockPos pos, CallbackInfoReturnable cir) { + if(is(CommonWinterlyBlocks.FROZEN_FLOWER)) { + if(getValue(CommonFrozenFlowerBlock.LAYERS) == 0) { + cir.setReturnValue(0.0F); + } + else { + cir.setReturnValue(destroySpeed); + } + } + } + + @Inject(method = "requiresCorrectToolForDrops", at = @At("HEAD"), cancellable = true) + void isToolRequired(CallbackInfoReturnable cir) { + if(is(CommonWinterlyBlocks.FROZEN_FLOWER)) { + if(getValue(CommonFrozenFlowerBlock.LAYERS) == 0) { + cir.setReturnValue(false); + } + else { + cir.setReturnValue(true); + } + } + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/mixin/common/FreezeTopLayerMixin.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/mixin/common/FreezeTopLayerMixin.java new file mode 100644 index 0000000..c5b94c1 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/mixin/common/FreezeTopLayerMixin.java @@ -0,0 +1,58 @@ +package ru.pinkgoosik.winterly.mixin.common; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.LightLayer; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.FlowerBlock; +import net.minecraft.world.level.block.SnowyDirtBlock; +import net.minecraft.world.level.block.TallFlowerBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.SnowAndFreezeFeature; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; +import ru.pinkgoosik.winterly.Winterly; +import ru.pinkgoosik.winterly.block.CommonFrozenFlowerBlock; +import ru.pinkgoosik.winterly.registry.CommonWinterlyBlocks; + +@Mixin(SnowAndFreezeFeature.class) +public abstract class FreezeTopLayerMixin { + + @Redirect(method = "place", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/biome/Biome;shouldSnow(Lnet/minecraft/world/level/LevelReader;Lnet/minecraft/core/BlockPos;)Z")) + boolean canSetIce(Biome biome, LevelReader view, BlockPos pos) { + + if(!biome.warmEnoughToRain(pos) && (pos.getY() >= view.getMinBuildHeight() && pos.getY() < view.getMaxBuildHeight() && view.getBrightness(LightLayer.BLOCK, pos) < 10)) { + BlockState state = view.getBlockState(pos); + if(view instanceof WorldGenLevel world) { + + if (Winterly.config.generateFrozenGrass && (state.is(Blocks.SHORT_GRASS) || state.is(Blocks.FERN) || state.is(Blocks.LARGE_FERN) || state.is(Blocks.TALL_GRASS))) { + world.setBlock(pos, CommonWinterlyBlocks.FROZEN_GRASS.defaultBlockState(), 3); + BlockState floor = world.getBlockState(pos.below()); + if (floor.hasProperty(SnowyDirtBlock.SNOWY)) { + world.setBlock(pos.below(), floor.setValue(SnowyDirtBlock.SNOWY, Boolean.TRUE), 2); + } + if(state.is(Blocks.LARGE_FERN) || state.is(Blocks.TALL_GRASS)) { + world.setBlock(pos.above(), Blocks.AIR.defaultBlockState(), 2); + } + return false; + } + else if(Winterly.config.generateFrozenFlowers && (state.getBlock() instanceof FlowerBlock || state.getBlock() instanceof TallFlowerBlock)) { + world.setBlock(pos, CommonWinterlyBlocks.FROZEN_FLOWER.defaultBlockState().setValue(CommonFrozenFlowerBlock.LAYERS, 1), 3); + BlockState floor = world.getBlockState(pos.below()); + if (floor.hasProperty(SnowyDirtBlock.SNOWY)) { + world.setBlock(pos.below(), floor.setValue(SnowyDirtBlock.SNOWY, Boolean.TRUE), 2); + } + if(state.getBlock() instanceof TallFlowerBlock) { + world.setBlock(pos.above(), Blocks.AIR.defaultBlockState(), 2); + } + return false; + } + } + } + + return biome.shouldSnow(view, pos); + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/mixin/common/MiningToolItemMixin.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/mixin/common/MiningToolItemMixin.java new file mode 100644 index 0000000..a559922 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/mixin/common/MiningToolItemMixin.java @@ -0,0 +1,44 @@ +package ru.pinkgoosik.winterly.mixin.common; + +import net.minecraft.world.item.DiggerItem; +import org.spongepowered.asm.mixin.Mixin; + +@Mixin(DiggerItem.class) +public abstract class MiningToolItemMixin { + +// @Shadow +// @Final +// private TagKey blocks; +// +// @Shadow +// @Final +// protected float speed; +// +// @Inject(method = "isCorrectToolForDrops", at = @At("HEAD"), cancellable = true) +// void isSuitableFor(BlockState state, CallbackInfoReturnable cir) { +// if(blocks.equals(BlockTags.MINEABLE_WITH_SHOVEL)) { +// if(state.is(CommonWinterlyBlocks.FROZEN_FLOWER)) { +// if(state.getValue(CommonFrozenFlowerBlock.LAYERS) != 0) { +// cir.setReturnValue(true); +// } +// else { +// cir.setReturnValue(false); +// } +// } +// } +// } +// +// @Inject(method = "getDestroySpeed", at = @At("HEAD"), cancellable = true) +// void getMiningSpeedMultiplier(ItemStack stack, BlockState state, CallbackInfoReturnable cir) { +// if(blocks.equals(BlockTags.MINEABLE_WITH_SHOVEL)) { +// if(state.is(CommonWinterlyBlocks.FROZEN_FLOWER)) { +// if(state.getValue(CommonFrozenFlowerBlock.LAYERS) != 0) { +// cir.setReturnValue(speed); +// } +// else { +// cir.setReturnValue(1.0F); +// } +// } +// } +// } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/mixin/common/ServerWorldMixin.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/mixin/common/ServerWorldMixin.java new file mode 100644 index 0000000..509a84d --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/mixin/common/ServerWorldMixin.java @@ -0,0 +1,42 @@ +package ru.pinkgoosik.winterly.mixin.common; + +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.LightLayer; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.FlowerBlock; +import net.minecraft.world.level.block.state.BlockState; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; +import ru.pinkgoosik.winterly.Winterly; +import ru.pinkgoosik.winterly.block.CommonFrozenFlowerBlock; +import ru.pinkgoosik.winterly.data.CachedFlowers; +import ru.pinkgoosik.winterly.registry.CommonWinterlyBlocks; + +@Mixin(ServerLevel.class) +public abstract class ServerWorldMixin { + + @Redirect(method = "tickPrecipitation", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/biome/Biome;shouldSnow(Lnet/minecraft/world/level/LevelReader;Lnet/minecraft/core/BlockPos;)Z")) + boolean canSetSnow(Biome biome, LevelReader view, BlockPos pos) { + + if(!biome.warmEnoughToRain(pos) && (pos.getY() >= view.getMinBuildHeight() && pos.getY() < view.getMaxBuildHeight() && view.getBrightness(LightLayer.BLOCK, pos) < 10)) { + BlockState state = view.getBlockState(pos); + if(view instanceof Level world) { + if (state.is(Blocks.SHORT_GRASS) && Winterly.config.generateFrozenGrass) { + world.setBlockAndUpdate(pos, CommonWinterlyBlocks.FROZEN_GRASS.defaultBlockState()); + return false; + } + else if(state.getBlock() instanceof FlowerBlock && Winterly.config.generateFrozenFlowers) { + world.setBlockAndUpdate(pos, CommonWinterlyBlocks.FROZEN_FLOWER.defaultBlockState().setValue(CommonFrozenFlowerBlock.LAYERS, 1)); + CachedFlowers.cacheFlower(((Level) view), pos, state.getBlock()); + return false; + } + } + } + return biome.shouldSnow(view, pos); + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/mixin/common/SkeletonExtension.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/mixin/common/SkeletonExtension.java new file mode 100644 index 0000000..51a7848 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/mixin/common/SkeletonExtension.java @@ -0,0 +1,80 @@ +package ru.pinkgoosik.winterly.mixin.common; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.SpawnGroupData; +import net.minecraft.world.entity.monster.AbstractSkeleton; +import net.minecraft.world.entity.monster.Skeleton; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; +import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import ru.pinkgoosik.winterly.Winterly; +import ru.pinkgoosik.winterly.extension.DecoratedMob; +import ru.pinkgoosik.winterly.util.HolidayUtils; + +@Mixin(Skeleton.class) +public abstract class SkeletonExtension extends AbstractSkeleton implements DecoratedMob { + private static final EntityDataAccessor winterly$DECORATED = SynchedEntityData.defineId(Skeleton.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor winterly$INDEX = SynchedEntityData.defineId(Skeleton.class, EntityDataSerializers.INT); + + protected SkeletonExtension(EntityType entityType, Level world) { + super(entityType, world); + } + + @Override + public boolean winterly$decorated() { + return getEntityData().get(winterly$DECORATED); + } + + @Override + public int winterly$getIndex() { + return getEntityData().get(winterly$INDEX); + } + + @Inject(method = "defineSynchedData", at = @At("TAIL")) + void initData(SynchedEntityData.Builder builder, CallbackInfo ci) { + builder.define(winterly$DECORATED, false); + builder.define(winterly$INDEX, 0); + } + + @Inject(method = "addAdditionalSaveData", at = @At("TAIL")) + void write(CompoundTag nbt, CallbackInfo ci) { + nbt.putBoolean("WinterlyDecorated", getEntityData().get(winterly$DECORATED)); + nbt.putInt("WinterlyIndex", getEntityData().get(winterly$INDEX)); + } + + @Inject(method = "readAdditionalSaveData", at = @At("TAIL")) + void read(CompoundTag nbt, CallbackInfo ci) { + getEntityData().set(winterly$DECORATED, nbt.getBoolean("WinterlyDecorated")); + getEntityData().set(winterly$INDEX, nbt.getInt("WinterlyIndex")); + } + + @Nullable + @Override + public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnType, @Nullable SpawnGroupData spawnGroupData) { + spawnGroupData = super.finalizeSpawn(level, difficulty, spawnType, spawnGroupData); + + if(!spawnType.equals(MobSpawnType.SPAWNER) && !spawnType.equals(MobSpawnType.CHUNK_GENERATION)) { + if(Winterly.config.mobDecorations.enabled && HolidayUtils.isWinterHolidays() || !Winterly.config.mobDecorations.onlyInWinter) { + if(!this.level().dimension().equals(Level.NETHER)) { + int chance = Winterly.config.mobDecorations.chance; + if(chance > 0 && Math.random() < (double)chance / 100) { + getEntityData().set(winterly$DECORATED, true); + getEntityData().set(winterly$INDEX, level.getRandom().nextInt(5)); + } + } + } + } + return spawnGroupData; + } + +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/mixin/common/SnowBlockMixin.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/mixin/common/SnowBlockMixin.java new file mode 100644 index 0000000..861f245 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/mixin/common/SnowBlockMixin.java @@ -0,0 +1,37 @@ +package ru.pinkgoosik.winterly.mixin.common; + +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.FlowerBlock; +import net.minecraft.world.level.block.SnowLayerBlock; +import net.minecraft.world.level.block.state.BlockState; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import ru.pinkgoosik.winterly.block.CommonFrozenFlowerBlock; +import ru.pinkgoosik.winterly.block.CommonFrozenGrassBlock; +import ru.pinkgoosik.winterly.registry.CommonWinterlyBlocks; + +@Mixin(SnowLayerBlock.class) +public abstract class SnowBlockMixin { + + @Inject(method = "getStateForPlacement", at = @At("HEAD"), cancellable = true) + void getPlacementState(BlockPlaceContext ctx, CallbackInfoReturnable cir) { + BlockState state = ctx.getLevel().getBlockState(ctx.getClickedPos()); + if(state.is(CommonWinterlyBlocks.FROZEN_GRASS)) { + int layers = state.getValue(SnowLayerBlock.LAYERS); + cir.setReturnValue(state.setValue(SnowLayerBlock.LAYERS, Math.min(8, layers + 1)).setValue(CommonFrozenGrassBlock.PERSISTENT, true)); + } + else if(state.is(CommonWinterlyBlocks.FROZEN_FLOWER)) { + int layers = state.getValue(CommonFrozenFlowerBlock.LAYERS); + cir.setReturnValue(state.setValue(CommonFrozenFlowerBlock.LAYERS, Math.min(8, layers + 1)).setValue(CommonFrozenGrassBlock.PERSISTENT, true)); + } + else if(state.is(Blocks.SHORT_GRASS)) { + cir.setReturnValue(CommonWinterlyBlocks.FROZEN_GRASS.defaultBlockState().setValue(CommonFrozenGrassBlock.PERSISTENT, true)); + } + else if(state.getBlock() instanceof FlowerBlock) { + cir.setReturnValue(CommonWinterlyBlocks.FROZEN_FLOWER.defaultBlockState().setValue(CommonFrozenFlowerBlock.LAYERS, 1).setValue(CommonFrozenFlowerBlock.PERSISTENT, true)); + } + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/mixin/common/SnowyBlockMixin.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/mixin/common/SnowyBlockMixin.java new file mode 100644 index 0000000..f5fe5d4 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/mixin/common/SnowyBlockMixin.java @@ -0,0 +1,21 @@ +package ru.pinkgoosik.winterly.mixin.common; + +import net.minecraft.world.level.block.SnowyDirtBlock; +import net.minecraft.world.level.block.state.BlockState; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import ru.pinkgoosik.winterly.block.CommonFrozenFlowerBlock; +import ru.pinkgoosik.winterly.registry.CommonWinterlyBlocks; + +@Mixin(SnowyDirtBlock.class) +public abstract class SnowyBlockMixin { + + @Inject(method = "isSnowySetting", at = @At("HEAD"), cancellable = true) + private static void iSnow(BlockState state, CallbackInfoReturnable cir) { + if(state.is(CommonWinterlyBlocks.FROZEN_FLOWER) && state.getValue(CommonFrozenFlowerBlock.LAYERS) >= 1) { + cir.setReturnValue(true); + } + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/mixin/common/SpreadableBlockMixin.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/mixin/common/SpreadableBlockMixin.java new file mode 100644 index 0000000..6582f10 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/mixin/common/SpreadableBlockMixin.java @@ -0,0 +1,23 @@ +package ru.pinkgoosik.winterly.mixin.common; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.SpreadingSnowyDirtBlock; +import net.minecraft.world.level.block.state.BlockState; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import ru.pinkgoosik.winterly.registry.CommonWinterlyBlocks; + +@Mixin(SpreadingSnowyDirtBlock.class) +public abstract class SpreadableBlockMixin { + + @Inject(method = "canBeGrass", at = @At("HEAD"), cancellable = true) + private static void canSurvive(BlockState state, LevelReader world, BlockPos pos, CallbackInfoReturnable cir) { + BlockState up = world.getBlockState(pos.above()); + if(up.is(CommonWinterlyBlocks.FROZEN_GRASS) || up.is(CommonWinterlyBlocks.FROZEN_FLOWER)) { + cir.setReturnValue(true); + } + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/mixin/common/ZombieExtension.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/mixin/common/ZombieExtension.java new file mode 100644 index 0000000..24e32e5 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/mixin/common/ZombieExtension.java @@ -0,0 +1,77 @@ +package ru.pinkgoosik.winterly.mixin.common; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.SpawnGroupData; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.entity.monster.Zombie; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import ru.pinkgoosik.winterly.Winterly; +import ru.pinkgoosik.winterly.extension.DecoratedMob; +import ru.pinkgoosik.winterly.util.HolidayUtils; + +@Mixin(Zombie.class) +public abstract class ZombieExtension extends Monster implements DecoratedMob { + private static final EntityDataAccessor winterly$DECORATED = SynchedEntityData.defineId(Zombie.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor winterly$INDEX = SynchedEntityData.defineId(Zombie.class, EntityDataSerializers.INT); + + protected ZombieExtension(EntityType entityType, Level world) { + super(entityType, world); + } + + @Override + public boolean winterly$decorated() { + return getEntityData().get(winterly$DECORATED); + } + + @Override + public int winterly$getIndex() { + return getEntityData().get(winterly$INDEX); + } + + @Inject(method = "defineSynchedData", at = @At("TAIL")) + void initData(SynchedEntityData.Builder builder, CallbackInfo ci) { + builder.define(winterly$DECORATED, false); + builder.define(winterly$INDEX, 0); + } + + @Inject(method = "addAdditionalSaveData", at = @At("TAIL")) + void write(CompoundTag nbt, CallbackInfo ci) { + nbt.putBoolean("WinterlyDecorated", getEntityData().get(winterly$DECORATED)); + nbt.putInt("WinterlyIndex", getEntityData().get(winterly$INDEX)); + } + + @Inject(method = "readAdditionalSaveData", at = @At("TAIL")) + void read(CompoundTag nbt, CallbackInfo ci) { + getEntityData().set(winterly$DECORATED, nbt.getBoolean("WinterlyDecorated")); + getEntityData().set(winterly$INDEX, nbt.getInt("WinterlyIndex")); + } + + @Inject(method = "finalizeSpawn", at = @At("RETURN")) + void finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnType, SpawnGroupData spawnGroupData, CallbackInfoReturnable cir) { + if(!spawnType.equals(MobSpawnType.SPAWNER) && !spawnType.equals(MobSpawnType.CHUNK_GENERATION) && !isBaby()) { + if(Winterly.config.mobDecorations.enabled && HolidayUtils.isWinterHolidays() || !Winterly.config.mobDecorations.onlyInWinter) { + if(!this.level().dimension().equals(Level.NETHER)) { + int chance = Winterly.config.mobDecorations.chance; + if(chance > 0 && Math.random() < (double)chance / 100) { + getEntityData().set(winterly$DECORATED, true); + getEntityData().set(winterly$INDEX, level.getRandom().nextInt(5)); + } + } + + } + } + } + +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/registry/CommonWinterlyBlockEntities.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/registry/CommonWinterlyBlockEntities.java new file mode 100644 index 0000000..ad8ed2f --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/registry/CommonWinterlyBlockEntities.java @@ -0,0 +1,8 @@ +package ru.pinkgoosik.winterly.registry; + +import net.minecraft.world.level.block.entity.BlockEntityType; +import ru.pinkgoosik.winterly.block.entity.GiftBoxBlockEntity; + +public class CommonWinterlyBlockEntities { + public static BlockEntityType GIFT_BOX_BLOCK_ENTITY; +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/registry/CommonWinterlyBlocks.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/registry/CommonWinterlyBlocks.java new file mode 100644 index 0000000..9232035 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/registry/CommonWinterlyBlocks.java @@ -0,0 +1,52 @@ +package ru.pinkgoosik.winterly.registry; + +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.level.block.Block; + +import java.util.LinkedHashMap; +import java.util.Map; + +@SuppressWarnings("unused") +public abstract class CommonWinterlyBlocks { + public static final Map ITEMS = new LinkedHashMap<>(); + public static final Map BLOCKS = new LinkedHashMap<>(); + +// public static final Block RED_SOCK = add("red_sock", new SockBlock(copyOf(CANDLE).sounds(BlockSoundGroup.WOOL))); +// public static final Block GREEN_SOCK = add("green_sock", new SockBlock(copyOf(CANDLE).sounds(BlockSoundGroup.WOOL))); +// public static final Block BLUE_SOCK = add("blue_sock", new SockBlock(copyOf(CANDLE).sounds(BlockSoundGroup.WOOL))); + + public static Block ICICLE; + public static Block ICICLE_BLOCK; + public static Block PACKED_ICICLE_BLOCK; + public static Block ICICLE_PANE; + public static Block ICICLE_BARS; + public static Block CRYOMARBLE_BLOCK; + public static Block SNOWGUY; + public static Block SNOWBALL_WALL; + public static Block DENSE_SNOW; + public static Block DENSE_SNOW_STAIRS; + public static Block DENSE_SNOW_SLAB; + + public static Block SNOW_BRICKS; + public static Block SNOW_BRICK_STAIRS; + public static Block SNOW_BRICK_SLAB; + public static Block FROZEN_GRASS; + public static Block FROZEN_FLOWER; + + public static Block RAW_CRYOMARBLE_SHARD; + + public static Block RED_GIFT_BOX; + public static Block ORANGE_GIFT_BOX; + public static Block YELLOW_GIFT_BOX; + public static Block GREEN_GIFT_BOX; + public static Block CYAN_GIFT_BOX; + public static Block BLUE_GIFT_BOX; + public static Block PURPLE_GIFT_BOX; + public static Block BLACK_GIFT_BOX; + public static Block WHITE_GIFT_BOX; + + public static Block GARLAND_LIGHTS; + public static Block RAINY_GARLAND_LIGHTS; + +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/registry/CommonWinterlyItems.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/registry/CommonWinterlyItems.java new file mode 100644 index 0000000..686d21f --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/registry/CommonWinterlyItems.java @@ -0,0 +1,39 @@ +package ru.pinkgoosik.winterly.registry; + +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; + +import java.util.LinkedHashMap; +import java.util.Map; + +@SuppressWarnings("unused") +public class CommonWinterlyItems { + public static final Map ITEMS = new LinkedHashMap<>(); + + public static Item RED_CANDY_CANE; + public static Item GREEN_CANDY_CANE; + public static Item BLUE_CANDY_CANE; + + public static Item CRYOMARBLE_SHARD; + public static Item CRYOMARBLE; + + public static Item CRYOMARBLE_SWORD; + public static Item CRYOMARBLE_SHOVEL; + public static Item CRYOMARBLE_PICKAXE; + public static Item CRYOMARBLE_AXE; + public static Item CRYOMARBLE_HOE; + + public static Item RED_SANTA_HAT; + public static Item BLUE_SANTA_HAT; + + public static Item WHITE_SCARF; + public static Item RED_SCARF; + public static Item GREEN_SCARF; + public static Item BLUE_SCARF; + public static Item RAINBOW_SCARF; + + public static Item.Properties settings() { + return new Item.Properties(); + } +} + diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/util/HolidayUtils.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/util/HolidayUtils.java new file mode 100644 index 0000000..15cf0b1 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/util/HolidayUtils.java @@ -0,0 +1,16 @@ +package ru.pinkgoosik.winterly.util; + +import java.time.LocalDate; + +public final class HolidayUtils { + + public static boolean isWinterHolidays() { + LocalDate date = LocalDate.now(); + int month = date.getMonth().getValue(); + + if(month == 12 && date.getDayOfMonth() >= 25) { + return true; + } + return month == 1 && date.getDayOfMonth() <= 7; + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/util/UpdateChecker.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/util/UpdateChecker.java new file mode 100644 index 0000000..a0badc8 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/util/UpdateChecker.java @@ -0,0 +1,131 @@ +package ru.pinkgoosik.winterly.util; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.annotations.SerializedName; +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.SharedConstants; +import net.minecraft.locale.Language; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; +import ru.pinkgoosik.winterly.Winterly; + +import java.io.FileNotFoundException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.time.Instant; +import java.time.temporal.ChronoUnit; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Optional; + +public class UpdateChecker { + private static final Gson GSON = new GsonBuilder().setLenient().setPrettyPrinting().create(); + private static final HttpClient HTTP_CLIENT = HttpClient.newBuilder().build(); + private static Instant lastCheck = Instant.now().minus(4, ChronoUnit.HOURS); + private static String cachedLatest = "0"; + public static boolean updated = false; + public static MutableComponent text = null; + + public static boolean check() { + if(Winterly.config.updateCheckerEnabled) { + var local = getLocalVersion(); + var remote = getLatestRemote(); + + var localNum = Integer.parseInt(local.replaceAll("\\.", "")); + var remoteNum = Integer.parseInt(remote.replaceAll("\\.", "")); + + if(remoteNum > localNum) { + String temp = Language.getInstance().getOrDefault("itemGroup.winterly.items.button.updated"); + + temp = temp.replaceAll("%local_version%", local); + temp = temp.replaceAll("%remote_version%", remote); + + text = Component.literal(temp); + updated = true; + } + } + return updated; + } + + static String getLatestRemote() { + if(ChronoUnit.HOURS.between(lastCheck, Instant.now()) >= 4) { + String remote = "0"; + var versions = getModrinthVersions(); + if(versions.isPresent() && !versions.get().isEmpty()) { + remote = versions.get().get(0).versionNumber; + } + cachedLatest = remote; + lastCheck = Instant.now(); + } + return cachedLatest; + } + + static String getLocalVersion() { + String version = "1000"; + var mod = FabricLoader.getInstance().getModContainer("winterly"); + + if(mod.isPresent()) { + version = mod.get().getMetadata().getVersion().getFriendlyString(); + } + + return version; + } + + static Optional> getModrinthVersions() { + try { + HttpRequest request = HttpRequest.newBuilder() + .GET() + .uri(new URI("https://api.modrinth.com/v2/project/winterly/version")) + .headers("User-Agent", "tyap-lyap/winterly/" + getLocalVersion()) + .build(); + + HttpResponse response = HTTP_CLIENT.send(request, HttpResponse.BodyHandlers.ofInputStream()); + InputStreamReader reader = new InputStreamReader(response.body()); + ProjectVersion[] versions = GSON.fromJson(reader, ProjectVersion[].class); + + var array = new ArrayList(); + + Arrays.asList(versions).forEach(version -> { + if(version.gameVersions.contains(SharedConstants.getCurrentVersion().getName())) array.add(version); + }); + + return Optional.of(array); + } + catch(FileNotFoundException e) { + return Optional.empty(); + } + catch(Exception e) { + Winterly.LOGGER.info("Failed to parse modrinth project versions due to an exception:\n" + e); + } + return Optional.empty(); + } + + @SuppressWarnings("unused") + static class ProjectVersion { + public String id = ""; + @SerializedName("project_id") + public String projectId = ""; + @SerializedName("author_id") + public String authorId = ""; + public boolean featured = false; + public String name = ""; + @SerializedName("version_number") + public String versionNumber = ""; + public String changelog = ""; + @SerializedName("changelog_url") + public String changelogUrl = ""; + @SerializedName("date_published") + public String published = ""; + public int downloads = 0; + @SerializedName("version_type") + public String versionType = ""; + @SerializedName("game_versions") + public ArrayList gameVersions = new ArrayList<>(); + public ArrayList loaders = new ArrayList<>(); + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/worldgen/CryomarbleFeature.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/worldgen/CryomarbleFeature.java new file mode 100644 index 0000000..a7d9087 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/worldgen/CryomarbleFeature.java @@ -0,0 +1,57 @@ +package ru.pinkgoosik.winterly.worldgen; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import ru.pinkgoosik.winterly.Winterly; +import ru.pinkgoosik.winterly.block.IcicleBlock; +import ru.pinkgoosik.winterly.registry.CommonWinterlyBlocks; + +public class CryomarbleFeature extends Feature { + + public CryomarbleFeature() { + super(NoneFeatureConfiguration.CODEC); + } + + @Override + public boolean place(FeaturePlaceContext context) { + if(!Winterly.config.generateCryomarble) return false; + WorldGenLevel world = context.level(); + BlockPos origin = context.origin(); + + for(int i = -20; i < 20; i++) { + BlockPos newOrigin = new BlockPos(origin.getX(), i, origin.getZ()); + if(world.getBlockState(newOrigin).isAir()) { + origin = newOrigin; + break; + } + } + if(context.random().nextInt(16) != 0) return false; + + int spawned = 0; + + for(int x = -3; x < 3; x++) { + for(int z = -3; z < 3; z++) { + for(int y = -3; y < 3; y++) { + int xPos = origin.getX() + x; + int zPos = origin.getZ() + z; + int yPos = origin.getY() + y; + BlockPos pos = new BlockPos(xPos, yPos, zPos); + if(context.random().nextInt(Math.abs(x) + Math.abs(y) + Math.abs(z) + 1) == 0) { + if(world.isEmptyBlock(pos) && isStone(world.getBlockState(pos.below()))) { + if(spawned < 3) { + world.setBlock(pos, CommonWinterlyBlocks.RAW_CRYOMARBLE_SHARD.defaultBlockState().setValue(IcicleBlock.FACING, Direction.UP), Block.UPDATE_ALL); + spawned++; + }else return true; + } + } + } + } + } + return true; + } +} diff --git a/winterly-common/src/main/java/ru/pinkgoosik/winterly/worldgen/UndergroundIcicleFeature.java b/winterly-common/src/main/java/ru/pinkgoosik/winterly/worldgen/UndergroundIcicleFeature.java new file mode 100644 index 0000000..b824471 --- /dev/null +++ b/winterly-common/src/main/java/ru/pinkgoosik/winterly/worldgen/UndergroundIcicleFeature.java @@ -0,0 +1,45 @@ +package ru.pinkgoosik.winterly.worldgen; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import ru.pinkgoosik.winterly.Winterly; +import ru.pinkgoosik.winterly.registry.CommonWinterlyBlocks; + +public class UndergroundIcicleFeature extends Feature { + + public UndergroundIcicleFeature() { + super(NoneFeatureConfiguration.CODEC); + } + + @Override + public boolean place(FeaturePlaceContext context) { + if(!Winterly.config.generateUndergroundIcicles) return false; + boolean generated = false; + int randomY = context.random().nextInt(100) - 50; + + for (int x = 0; x < 10; x++) { + for (int z = 0; z < 10; z++) { + for (int y = 0; y < 10; y++) { + int xPos = context.origin().getX() + x; + int zPos = context.origin().getZ() + z; + int yPos = randomY + y; + BlockPos pos = new BlockPos(xPos, yPos, zPos); + WorldGenLevel world = context.level(); + if(context.random().nextInt(4) == 0) { + if(world.isEmptyBlock(pos)) { + if(isStone(world.getBlockState(pos.above()))) { + world.setBlock(pos, CommonWinterlyBlocks.ICICLE.defaultBlockState(), Block.UPDATE_ALL); + generated = true; + } + } + } + } + } + } + return generated; + } +} diff --git a/winterly-common/src/main/resources/assets/winterly/blockstates/black_gift_box.json b/winterly-common/src/main/resources/assets/winterly/blockstates/black_gift_box.json new file mode 100644 index 0000000..03c294d --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/blockstates/black_gift_box.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "winterly:block/black_gift_box" + } + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/blockstates/blue_gift_box.json b/winterly-common/src/main/resources/assets/winterly/blockstates/blue_gift_box.json new file mode 100644 index 0000000..3aeaa5c --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/blockstates/blue_gift_box.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "winterly:block/blue_gift_box" + } + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/blockstates/cryomarble_block.json b/winterly-common/src/main/resources/assets/winterly/blockstates/cryomarble_block.json new file mode 100644 index 0000000..48c00a9 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/blockstates/cryomarble_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "winterly:block/cryomarble_block" + } + } +} diff --git a/winterly-common/src/main/resources/assets/winterly/blockstates/cyan_gift_box.json b/winterly-common/src/main/resources/assets/winterly/blockstates/cyan_gift_box.json new file mode 100644 index 0000000..742e494 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/blockstates/cyan_gift_box.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "winterly:block/cyan_gift_box" + } + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/blockstates/dense_snow.json b/winterly-common/src/main/resources/assets/winterly/blockstates/dense_snow.json new file mode 100644 index 0000000..0119a20 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/blockstates/dense_snow.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "winterly:block/dense_snow" + } + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/blockstates/dense_snow_slab.json b/winterly-common/src/main/resources/assets/winterly/blockstates/dense_snow_slab.json new file mode 100644 index 0000000..6b4faa7 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/blockstates/dense_snow_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "winterly:block/dense_snow_slab" + }, + "type=double": { + "model": "winterly:block/dense_snow" + }, + "type=top": { + "model": "winterly:block/dense_snow_slab_top" + } + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/blockstates/dense_snow_stairs.json b/winterly-common/src/main/resources/assets/winterly/blockstates/dense_snow_stairs.json new file mode 100644 index 0000000..92aaca1 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/blockstates/dense_snow_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "winterly:block/dense_snow_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "winterly:block/dense_snow_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "winterly:block/dense_snow_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "winterly:block/dense_snow_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "winterly:block/dense_snow_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "winterly:block/dense_snow_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "winterly:block/dense_snow_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "winterly:block/dense_snow_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "winterly:block/dense_snow_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "winterly:block/dense_snow_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "winterly:block/dense_snow_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "winterly:block/dense_snow_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "winterly:block/dense_snow_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "winterly:block/dense_snow_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "winterly:block/dense_snow_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "winterly:block/dense_snow_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "winterly:block/dense_snow_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "winterly:block/dense_snow_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "winterly:block/dense_snow_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "winterly:block/dense_snow_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "winterly:block/dense_snow_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "winterly:block/dense_snow_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "winterly:block/dense_snow_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "winterly:block/dense_snow_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "winterly:block/dense_snow_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "winterly:block/dense_snow_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "winterly:block/dense_snow_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "winterly:block/dense_snow_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "winterly:block/dense_snow_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "winterly:block/dense_snow_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "winterly:block/dense_snow_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "winterly:block/dense_snow_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "winterly:block/dense_snow_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "winterly:block/dense_snow_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "winterly:block/dense_snow_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "winterly:block/dense_snow_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "winterly:block/dense_snow_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "winterly:block/dense_snow_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "winterly:block/dense_snow_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "winterly:block/dense_snow_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/blockstates/frozen_flower.json b/winterly-common/src/main/resources/assets/winterly/blockstates/frozen_flower.json new file mode 100644 index 0000000..85846ff --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/blockstates/frozen_flower.json @@ -0,0 +1,145 @@ +{ + "variants": { + "layers=0": [ + { + "model": "winterly:block/frozen_flower" + }, + { + "model": "winterly:block/frozen_flower", + "y": 90 + }, + { + "model": "winterly:block/frozen_flower", + "y": 180 + }, + { + "model": "winterly:block/frozen_flower", + "y": 270 + } + ], + "layers=1": [ + { + "model": "winterly:block/frozen_flower_2" + }, + { + "model": "winterly:block/frozen_flower_2", + "y": 90 + }, + { + "model": "winterly:block/frozen_flower_2", + "y": 180 + }, + { + "model": "winterly:block/frozen_flower_2", + "y": 270 + } + ], + "layers=2": [ + { + "model": "winterly:block/frozen_flower_4" + }, + { + "model": "winterly:block/frozen_flower_4", + "y": 90 + }, + { + "model": "winterly:block/frozen_flower_4", + "y": 180 + }, + { + "model": "winterly:block/frozen_flower_4", + "y": 270 + } + ], + "layers=3": [ + { + "model": "winterly:block/frozen_flower_6" + }, + { + "model": "winterly:block/frozen_flower_6", + "y": 90 + }, + { + "model": "winterly:block/frozen_flower_6", + "y": 180 + }, + { + "model": "winterly:block/frozen_flower_6", + "y": 270 + } + ], + "layers=4": [ + { + "model": "winterly:block/frozen_flower_8" + }, + { + "model": "winterly:block/frozen_flower_8", + "y": 90 + }, + { + "model": "winterly:block/frozen_flower_8", + "y": 180 + }, + { + "model": "winterly:block/frozen_flower_8", + "y": 270 + } + ], + "layers=5": [ + { + "model": "winterly:block/frozen_flower_10" + }, + { + "model": "winterly:block/frozen_flower_10", + "y": 90 + }, + { + "model": "winterly:block/frozen_flower_10", + "y": 180 + }, + { + "model": "winterly:block/frozen_flower_10", + "y": 270 + } + ], + "layers=6": [ + { + "model": "winterly:block/frozen_flower_12" + }, + { + "model": "winterly:block/frozen_flower_12", + "y": 90 + }, + { + "model": "winterly:block/frozen_flower_12", + "y": 180 + }, + { + "model": "winterly:block/frozen_flower_12", + "y": 270 + } + ], + "layers=7": [ + { + "model": "winterly:block/frozen_flower_14" + }, + { + "model": "winterly:block/frozen_flower_14", + "y": 90 + }, + { + "model": "winterly:block/frozen_flower_14", + "y": 180 + }, + { + "model": "winterly:block/frozen_flower_14", + "y": 270 + } + ], + "layers=8": [ + { + "model": "minecraft:block/snow_block" + } + ] + } +} diff --git a/winterly-common/src/main/resources/assets/winterly/blockstates/frozen_grass.json b/winterly-common/src/main/resources/assets/winterly/blockstates/frozen_grass.json new file mode 100644 index 0000000..ef57d4d --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/blockstates/frozen_grass.json @@ -0,0 +1,128 @@ +{ + "variants": { + "layers=1": [ + { + "model": "winterly:block/frozen_grass_2" + }, + { + "model": "winterly:block/frozen_grass_2", + "y": 90 + }, + { + "model": "winterly:block/frozen_grass_2", + "y": 180 + }, + { + "model": "winterly:block/frozen_grass_2", + "y": 270 + } + ], + "layers=2": [ + { + "model": "winterly:block/frozen_grass_4" + }, + { + "model": "winterly:block/frozen_grass_4", + "y": 90 + }, + { + "model": "winterly:block/frozen_grass_4", + "y": 180 + }, + { + "model": "winterly:block/frozen_grass_4", + "y": 270 + } + ], + "layers=3": [ + { + "model": "winterly:block/frozen_grass_6" + }, + { + "model": "winterly:block/frozen_grass_6", + "y": 90 + }, + { + "model": "winterly:block/frozen_grass_6", + "y": 180 + }, + { + "model": "winterly:block/frozen_grass_6", + "y": 270 + } + ], + "layers=4": [ + { + "model": "winterly:block/frozen_grass_8" + }, + { + "model": "winterly:block/frozen_grass_8", + "y": 90 + }, + { + "model": "winterly:block/frozen_grass_8", + "y": 180 + }, + { + "model": "winterly:block/frozen_grass_8", + "y": 270 + } + ], + "layers=5": [ + { + "model": "winterly:block/frozen_grass_10" + }, + { + "model": "winterly:block/frozen_grass_10", + "y": 90 + }, + { + "model": "winterly:block/frozen_grass_10", + "y": 180 + }, + { + "model": "winterly:block/frozen_grass_10", + "y": 270 + } + ], + "layers=6": [ + { + "model": "winterly:block/frozen_grass_12" + }, + { + "model": "winterly:block/frozen_grass_12", + "y": 90 + }, + { + "model": "winterly:block/frozen_grass_12", + "y": 180 + }, + { + "model": "winterly:block/frozen_grass_12", + "y": 270 + } + ], + "layers=7": [ + { + "model": "winterly:block/frozen_grass_14" + }, + { + "model": "winterly:block/frozen_grass_14", + "y": 90 + }, + { + "model": "winterly:block/frozen_grass_14", + "y": 180 + }, + { + "model": "winterly:block/frozen_grass_14", + "y": 270 + } + ], + "layers=8": [ + { + "model": "minecraft:block/snow_block" + } + ] + } +} diff --git a/winterly-common/src/main/resources/assets/winterly/blockstates/garland_lights.json b/winterly-common/src/main/resources/assets/winterly/blockstates/garland_lights.json new file mode 100644 index 0000000..796c742 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/blockstates/garland_lights.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "winterly:block/garland_lights", + "y": 270 + }, + "facing=north": { + "model": "winterly:block/garland_lights", + "y": 180 + }, + "facing=south": { + "model": "winterly:block/garland_lights" + }, + "facing=west": { + "model": "winterly:block/garland_lights", + "y": 90 + } + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/blockstates/green_gift_box.json b/winterly-common/src/main/resources/assets/winterly/blockstates/green_gift_box.json new file mode 100644 index 0000000..3197005 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/blockstates/green_gift_box.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "winterly:block/green_gift_box" + } + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/blockstates/icicle.json b/winterly-common/src/main/resources/assets/winterly/blockstates/icicle.json new file mode 100644 index 0000000..98c0a57 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/blockstates/icicle.json @@ -0,0 +1,94 @@ +{ + "variants": { + "facing=down": [ + { + "model": "winterly:block/icicle_1", + "x": 180 + }, + { + "model": "winterly:block/icicle_2", + "x": 180 + }, + { + "model": "winterly:block/icicle_3", + "x": 180 + } + ], + "facing=east": [ + { + "model": "winterly:block/icicle_1", + "x": 90, + "y": 90 + }, + { + "model": "winterly:block/icicle_2", + "x": 90, + "y": 90 + }, + { + "model": "winterly:block/icicle_3", + "x": 90, + "y": 90 + } + ], + "facing=north": [ + { + "model": "winterly:block/icicle_1", + "x": 90 + }, + { + "model": "winterly:block/icicle_2", + "x": 90 + }, + { + "model": "winterly:block/icicle_3", + "x": 90 + } + ], + "facing=south": [ + { + "model": "winterly:block/icicle_1", + "x": 90, + "y": 180 + }, + { + "model": "winterly:block/icicle_2", + "x": 90, + "y": 180 + }, + { + "model": "winterly:block/icicle_3", + "x": 90, + "y": 180 + } + ], + "facing=up": [ + { + "model": "winterly:block/icicle_1" + }, + { + "model": "winterly:block/icicle_2" + }, + { + "model": "winterly:block/icicle_3" + } + ], + "facing=west": [ + { + "model": "winterly:block/icicle_1", + "x": 90, + "y": 270 + }, + { + "model": "winterly:block/icicle_2", + "x": 90, + "y": 270 + }, + { + "model": "winterly:block/icicle_3", + "x": 90, + "y": 270 + } + ] + } +} diff --git a/winterly-common/src/main/resources/assets/winterly/blockstates/icicle_bars.json b/winterly-common/src/main/resources/assets/winterly/blockstates/icicle_bars.json new file mode 100644 index 0000000..780a684 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/blockstates/icicle_bars.json @@ -0,0 +1,100 @@ +{ + "multipart": [ + { + "apply": { + "model": "winterly:block/icicle_bars_post_ends" + } + }, + { + "when": { + "north": "false", + "west": "false", + "south": "false", + "east": "false" + }, + "apply": { + "model": "winterly:block/icicle_bars_post" + } + }, + { + "when": { + "north": "true", + "west": "false", + "south": "false", + "east": "false" + }, + "apply": { + "model": "winterly:block/icicle_bars_cap" + } + }, + { + "when": { + "north": "false", + "west": "false", + "south": "false", + "east": "true" + }, + "apply": { + "model": "winterly:block/icicle_bars_cap", + "y": 90 + } + }, + { + "when": { + "north": "false", + "west": "false", + "south": "true", + "east": "false" + }, + "apply": { + "model": "winterly:block/icicle_bars_cap_alt" + } + }, + { + "when": { + "north": "false", + "west": "true", + "south": "false", + "east": "false" + }, + "apply": { + "model": "winterly:block/icicle_bars_cap_alt", + "y": 90 + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "winterly:block/icicle_bars_side" + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "winterly:block/icicle_bars_side", + "y": 90 + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "winterly:block/icicle_bars_side_alt" + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "winterly:block/icicle_bars_side_alt", + "y": 90 + } + } + ] +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/blockstates/icicle_block.json b/winterly-common/src/main/resources/assets/winterly/blockstates/icicle_block.json new file mode 100644 index 0000000..4f935f4 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/blockstates/icicle_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "winterly:block/icicle_block" + } + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/blockstates/icicle_pane.json b/winterly-common/src/main/resources/assets/winterly/blockstates/icicle_pane.json new file mode 100644 index 0000000..37e7047 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/blockstates/icicle_pane.json @@ -0,0 +1,77 @@ +{ + "multipart": [ + { + "apply": { + "model": "winterly:block/icicle_pane_post" + } + }, + { + "when": { + "north": "true" + }, + "apply": { + "model": "winterly:block/icicle_pane_side" + } + }, + { + "when": { + "east": "true" + }, + "apply": { + "model": "winterly:block/icicle_pane_side", + "y": 90 + } + }, + { + "when": { + "south": "true" + }, + "apply": { + "model": "winterly:block/icicle_pane_side_alt" + } + }, + { + "when": { + "west": "true" + }, + "apply": { + "model": "winterly:block/icicle_pane_side_alt", + "y": 90 + } + }, + { + "when": { + "north": "false" + }, + "apply": { + "model": "winterly:block/icicle_pane_noside" + } + }, + { + "when": { + "east": "false" + }, + "apply": { + "model": "winterly:block/icicle_pane_noside_alt" + } + }, + { + "when": { + "south": "false" + }, + "apply": { + "model": "winterly:block/icicle_pane_noside_alt", + "y": 90 + } + }, + { + "when": { + "west": "false" + }, + "apply": { + "model": "winterly:block/icicle_pane_noside", + "y": 270 + } + } + ] +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/blockstates/orange_gift_box.json b/winterly-common/src/main/resources/assets/winterly/blockstates/orange_gift_box.json new file mode 100644 index 0000000..d2eb41c --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/blockstates/orange_gift_box.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "winterly:block/orange_gift_box" + } + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/blockstates/packed_icicle_block.json b/winterly-common/src/main/resources/assets/winterly/blockstates/packed_icicle_block.json new file mode 100644 index 0000000..14d3514 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/blockstates/packed_icicle_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "winterly:block/packed_icicle_block" + } + } +} diff --git a/winterly-common/src/main/resources/assets/winterly/blockstates/purple_gift_box.json b/winterly-common/src/main/resources/assets/winterly/blockstates/purple_gift_box.json new file mode 100644 index 0000000..bc74d10 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/blockstates/purple_gift_box.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "winterly:block/purple_gift_box" + } + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/blockstates/rainy_garland_lights.json b/winterly-common/src/main/resources/assets/winterly/blockstates/rainy_garland_lights.json new file mode 100644 index 0000000..5fb8c7a --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/blockstates/rainy_garland_lights.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "winterly:block/rainy_garland_lights", + "y": 270 + }, + "facing=north": { + "model": "winterly:block/rainy_garland_lights", + "y": 180 + }, + "facing=south": { + "model": "winterly:block/rainy_garland_lights" + }, + "facing=west": { + "model": "winterly:block/rainy_garland_lights", + "y": 90 + } + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/blockstates/raw_cryomarble_shard.json b/winterly-common/src/main/resources/assets/winterly/blockstates/raw_cryomarble_shard.json new file mode 100644 index 0000000..bf76c33 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/blockstates/raw_cryomarble_shard.json @@ -0,0 +1,42 @@ +{ + "variants": { + "facing=down": [ + { + "model": "winterly:block/raw_cryomarble_shard", + "x": 180 + } + ], + "facing=east": [ + { + "model": "winterly:block/raw_cryomarble_shard", + "x": 90, + "y": 90 + } + ], + "facing=north": [ + { + "model": "winterly:block/raw_cryomarble_shard", + "x": 90 + } + ], + "facing=south": [ + { + "model": "winterly:block/raw_cryomarble_shard", + "x": 90, + "y": 180 + } + ], + "facing=up": [ + { + "model": "winterly:block/raw_cryomarble_shard" + } + ], + "facing=west": [ + { + "model": "winterly:block/raw_cryomarble_shard", + "x": 90, + "y": 270 + } + ] + } +} diff --git a/winterly-common/src/main/resources/assets/winterly/blockstates/red_gift_box.json b/winterly-common/src/main/resources/assets/winterly/blockstates/red_gift_box.json new file mode 100644 index 0000000..e6d6203 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/blockstates/red_gift_box.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "winterly:block/red_gift_box" + } + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/blockstates/snow_brick_slab.json b/winterly-common/src/main/resources/assets/winterly/blockstates/snow_brick_slab.json new file mode 100644 index 0000000..a5b4965 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/blockstates/snow_brick_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "winterly:block/snow_brick_slab" + }, + "type=double": { + "model": "winterly:block/snow_bricks" + }, + "type=top": { + "model": "winterly:block/snow_brick_slab_top" + } + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/blockstates/snow_brick_stairs.json b/winterly-common/src/main/resources/assets/winterly/blockstates/snow_brick_stairs.json new file mode 100644 index 0000000..5173b64 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/blockstates/snow_brick_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "winterly:block/snow_brick_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "winterly:block/snow_brick_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "winterly:block/snow_brick_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "winterly:block/snow_brick_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "winterly:block/snow_brick_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "winterly:block/snow_brick_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "winterly:block/snow_brick_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "winterly:block/snow_brick_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "winterly:block/snow_brick_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "winterly:block/snow_brick_stairs", + "x": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "winterly:block/snow_brick_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "winterly:block/snow_brick_stairs_inner", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "winterly:block/snow_brick_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "winterly:block/snow_brick_stairs_outer", + "y": 270, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "winterly:block/snow_brick_stairs", + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "winterly:block/snow_brick_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "winterly:block/snow_brick_stairs_inner", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "winterly:block/snow_brick_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "winterly:block/snow_brick_stairs_outer", + "x": 180, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "winterly:block/snow_brick_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "winterly:block/snow_brick_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "winterly:block/snow_brick_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "winterly:block/snow_brick_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "winterly:block/snow_brick_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "winterly:block/snow_brick_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "winterly:block/snow_brick_stairs_inner", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "winterly:block/snow_brick_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "winterly:block/snow_brick_stairs_outer", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "winterly:block/snow_brick_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "winterly:block/snow_brick_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "winterly:block/snow_brick_stairs_inner", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "winterly:block/snow_brick_stairs_inner", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "winterly:block/snow_brick_stairs_outer", + "y": 90, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "winterly:block/snow_brick_stairs_outer", + "y": 180, + "uvlock": true + }, + "facing=west,half=bottom,shape=straight": { + "model": "winterly:block/snow_brick_stairs", + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "winterly:block/snow_brick_stairs_inner", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "winterly:block/snow_brick_stairs_inner", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "winterly:block/snow_brick_stairs_outer", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "winterly:block/snow_brick_stairs_outer", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "winterly:block/snow_brick_stairs", + "x": 180, + "y": 180, + "uvlock": true + } + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/blockstates/snow_bricks.json b/winterly-common/src/main/resources/assets/winterly/blockstates/snow_bricks.json new file mode 100644 index 0000000..61cb45f --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/blockstates/snow_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "winterly:block/snow_bricks" + } + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/blockstates/snowball_wall.json b/winterly-common/src/main/resources/assets/winterly/blockstates/snowball_wall.json new file mode 100644 index 0000000..ea55517 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/blockstates/snowball_wall.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "winterly:block/snowball_wall", + "y": 90 + }, + "facing=north": { + "model": "winterly:block/snowball_wall" + }, + "facing=south": { + "model": "winterly:block/snowball_wall", + "y": 180 + }, + "facing=west": { + "model": "winterly:block/snowball_wall", + "y": 270 + } + } +} diff --git a/winterly-common/src/main/resources/assets/winterly/blockstates/snowguy.json b/winterly-common/src/main/resources/assets/winterly/blockstates/snowguy.json new file mode 100644 index 0000000..ec91790 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/blockstates/snowguy.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "winterly:block/snowguy", + "y": 90 + }, + "facing=north": { + "model": "winterly:block/snowguy" + }, + "facing=south": { + "model": "winterly:block/snowguy", + "y": 180 + }, + "facing=west": { + "model": "winterly:block/snowguy", + "y": 270 + } + } +} diff --git a/winterly-common/src/main/resources/assets/winterly/blockstates/white_gift_box.json b/winterly-common/src/main/resources/assets/winterly/blockstates/white_gift_box.json new file mode 100644 index 0000000..eaeec99 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/blockstates/white_gift_box.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "winterly:block/white_gift_box" + } + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/blockstates/yellow_gift_box.json b/winterly-common/src/main/resources/assets/winterly/blockstates/yellow_gift_box.json new file mode 100644 index 0000000..ccbc5a1 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/blockstates/yellow_gift_box.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "winterly:block/yellow_gift_box" + } + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/icon.png b/winterly-common/src/main/resources/assets/winterly/icon.png new file mode 100644 index 0000000..a8cef6d Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/icon.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/lang/en_us.json b/winterly-common/src/main/resources/assets/winterly/lang/en_us.json new file mode 100644 index 0000000..cc0312d --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/lang/en_us.json @@ -0,0 +1,79 @@ +{ + "itemGroup.winterly.items": "Winterly", + "itemGroup.winterly.items.button.discord": "Join our Discord server!", + "itemGroup.winterly.items.button.updated": "New update available!", + + "modmenu.descriptionTranslation.winterly": "Winter expansion mod adding cold and sloppy stuff.", + + "tip.winterly.requires_trinkets.0": "Requires Trinkets mod to be installed", + "tip.winterly.requires_trinkets.1": "in order to be wearable.", + + "tip.winterly.requires_curios.0": "Requires Curios API to be installed", + "tip.winterly.requires_curios.1": "in order to be wearable.", + + "item.winterly.red_candy_cane": "Red Candy Cane", + "item.winterly.green_candy_cane": "Green Candy Cane", + "item.winterly.blue_candy_cane": "Blue Candy Cane", + "item.winterly.cryomarble_shard": "Cryomarble Shard", + "item.winterly.cryomarble": "Cryomarble", + "item.winterly.cryomarble_sword": "Cryomarble Sword", + "item.winterly.cryomarble_shovel": "Cryomarble Shovel", + "item.winterly.cryomarble_pickaxe": "Cryomarble Pickaxe", + "item.winterly.cryomarble_axe": "Cryomarble Axe", + "item.winterly.cryomarble_hoe": "Cryomarble Hoe", + "item.winterly.red_santa_hat": "Red Santa Hat", + "item.winterly.blue_santa_hat": "Blue Santa Hat", + "item.winterly.white_scarf": "White Scarf", + "item.winterly.blue_scarf": "Blue Scarf", + "item.winterly.red_scarf": "Red Scarf", + "item.winterly.green_scarf": "Green Scarf", + "item.winterly.rainbow_scarf": "Rainbow Scarf", + + "block.winterly.icicle": "Icicle", + "block.winterly.icicle_block": "Icicle Block", + "block.winterly.packed_icicle_block": "Packed Icicle Block", + "block.winterly.icicle_bars": "Icicle Bars", + "block.winterly.icicle_pane": "Icicle Pane", + "block.winterly.cryomarble_block": "Cryomarble Block", + "block.winterly.snowguy": "Snowguy", + "block.winterly.snowball_wall": "Snowball Wall", + "block.winterly.dense_snow": "Dense Snow", + "block.winterly.dense_snow_stairs": "Dense Snow Stairs", + "block.winterly.dense_snow_slab": "Dense Snow Slab", + "block.winterly.snow_bricks": "Snow Bricks", + "block.winterly.snow_brick_stairs": "Snow Brick Stairs", + "block.winterly.snow_brick_slab": "Snow Brick Slab", + "block.winterly.raw_cryomarble_shard": "Raw Cryomarble Shard", + "block.winterly.garland_lights": "Garland Lights", + "block.winterly.rainy_garland_lights": "Rainy Garland Lights", + "block.winterly.frozen_grass": "Frozen Grass", + "block.winterly.frozen_flower": "Frozen Flower", + + "description.winterly.gift_box.0": "Place in the world and then", + "description.winterly.gift_box.1": "right-click to put items.", + "description.winterly.gift_box.2": "Use silk touch to collect.", + + "block.winterly.blue_gift_box": "Blue Gift Box", + "block.winterly.red_gift_box": "Red Gift Box", + "block.winterly.green_gift_box": "Green Gift Box", + "block.winterly.purple_gift_box": "Purple Gift Box", + "block.winterly.yellow_gift_box": "Yellow Gift Box", + "block.winterly.black_gift_box": "Black Gift Box", + "block.winterly.white_gift_box": "White Gift Box", + "block.winterly.cyan_gift_box": "Cyan Gift Box", + "block.winterly.orange_gift_box": "Orange Gift Box", + + "tag.winterly.placeable": "Placeable", + "tag.winterly.cosmetic": "Cosmetic", + + "config.winterly.title": "Winterly Config", + "config.winterly.general": "General", + "config.winterly.option.max_gift_box_capacity": "Max Gift Box Capacity", + "config.winterly.option.generate_underground_icicles": "Generate Underground Icicles", + "config.winterly.option.generate_cryomarble": "Generate Cryomarble", + "config.winterly.option.generate_frozen_grass": "Generate Frozen Grass", + "config.winterly.option.generate_frozen_flowers": "Generate Frozen Flowers", + "config.winterly.option.mob_decorations.enabled": "Mob Decorations Enabled", + "config.winterly.option.mob_decorations.only_in_winter": "Mob Decorations Only in Winter Holidays", + "config.winterly.option.mob_decorations.chance": "Mob Decorations Chance" +} diff --git a/winterly-common/src/main/resources/assets/winterly/lang/ru_ru.json b/winterly-common/src/main/resources/assets/winterly/lang/ru_ru.json new file mode 100644 index 0000000..1f79440 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/lang/ru_ru.json @@ -0,0 +1,79 @@ +{ + "itemGroup.winterly.items": "Winterly", + "itemGroup.winterly.items.button.discord": "Присоединяйтесь к нашему Discord серверу!", + "itemGroup.winterly.items.button.updated": "Доступно новое обновление!", + + "modmenu.descriptionTranslation.winterly": "Мод расширяющий зиму и добавляющий праздничные предметы.", + + "tip.winterly.requires_trinkets.0": "Для ношения требуется", + "tip.winterly.requires_trinkets.1": "установка мода Trinkets.", + + "tip.winterly.requires_curios.0": "Для ношения требуется", + "tip.winterly.requires_curios.1": "установка мода Curios API.", + + "item.winterly.red_candy_cane": "Красный леденец", + "item.winterly.green_candy_cane": "Зеленый леденец", + "item.winterly.blue_candy_cane": "Синий леденец", + "item.winterly.cryomarble_shard": "Осколок криомрамор", + "item.winterly.cryomarble": "Криомрамор", + "item.winterly.cryomarble_sword": "Криомраморный меч", + "item.winterly.cryomarble_shovel": "Криомраморная лопата", + "item.winterly.cryomarble_pickaxe": "Криомраморная кирка", + "item.winterly.cryomarble_axe": "Криомраморный топор", + "item.winterly.cryomarble_hoe": "Криомраморная мотыга", + "item.winterly.red_santa_hat": "Шапочка Деда Мороза", + "item.winterly.blue_santa_hat": "Шапочка Санты", + "item.winterly.white_scarf": "Белый шарф", + "item.winterly.blue_scarf": "Синий шарф", + "item.winterly.red_scarf": "Красный шарф", + "item.winterly.green_scarf": "Зелёный шарф", + "item.winterly.rainbow_scarf": "Радужный шарф", + + "block.winterly.icicle": "Сосульки", + "block.winterly.icicle_block": "Сосулечный блок", + "block.winterly.packed_icicle_block": "Плотный сосулечный блок", + "block.winterly.icicle_bars": "Прутья из сосулек", + "block.winterly.icicle_pane": "Сосулечная панель", + "block.winterly.cryomarble_block": "Криомраморный блок", + "block.winterly.snowguy": "Снежночел", + "block.winterly.dense_snow": "Плотный снег", + "block.winterly.dense_snow_stairs": "Ступеньки из плотного снега", + "block.winterly.dense_snow_slab": "Плита из плотного снега", + "block.winterly.snowball_wall": "Стена из снежков", + "block.winterly.snow_bricks": "Снежные кирпичи", + "block.winterly.snow_brick_stairs": "Ступеньки из снежных кирпичей", + "block.winterly.snow_brick_slab": "Плита из снежных кирпичей", + "block.winterly.raw_cryomarble_shard": "Сырой осколок криомрамор", + "block.winterly.garland_lights": "Гирлянда", + "block.winterly.rainy_garland_lights": "Гирлянда-дождик", + "block.winterly.frozen_grass": "Замороженная трава", + "block.winterly.frozen_flower": "Замороженный цветок", + + "description.winterly.gift_box.0": "Поставьте в мире и затем нажмите", + "description.winterly.gift_box.1": "ПКМ, чтобы поместить предметы внутрь.", + "description.winterly.gift_box.2": "Используйте шёлковое касание, чтобы собрать блок.", + + "block.winterly.blue_gift_box": "Синяя подарочная коробка", + "block.winterly.red_gift_box": "Красная подарочная коробка", + "block.winterly.green_gift_box": "Зелёная подарочная коробка", + "block.winterly.purple_gift_box": "Фиолетовая подарочная коробка", + "block.winterly.yellow_gift_box": "Жёлтая подарочная коробка", + "block.winterly.black_gift_box": "Чёрная подарочная коробка", + "block.winterly.white_gift_box": "Белая подарочная коробка", + "block.winterly.cyan_gift_box": "Бирюзовая подарочная коробка", + "block.winterly.orange_gift_box": "Оранжевая подарочная коробка", + + "tag.winterly.placeable": "Размещаемый предмет", + "tag.winterly.cosmetic": "Косметический предмет", + + "config.winterly.title": "Настройки Winterly", + "config.winterly.general": "Общее", + "config.winterly.option.max_gift_box_capacity": "Максимальная вместимость подарочной коробки", + "config.winterly.option.generate_underground_icicles": "Генерировать подземные сосульки", + "config.winterly.option.generate_cryomarble": "Генерировать криомрамор", + "config.winterly.option.generate_frozen_grass": "Генерировать замороженную траву", + "config.winterly.option.generate_frozen_flowers": "Генерировать замороженные цветы", + "config.winterly.option.mob_decorations.enabled": "Украшения мобов включены", + "config.winterly.option.mob_decorations.only_in_winter": "Украшать мобов только в зимние праздники", + "config.winterly.option.mob_decorations.chance": "Шанс украсить моба" +} diff --git a/winterly-common/src/main/resources/assets/winterly/lang/zh_cn.json b/winterly-common/src/main/resources/assets/winterly/lang/zh_cn.json new file mode 100644 index 0000000..117c243 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/lang/zh_cn.json @@ -0,0 +1,79 @@ +{ + "itemGroup.winterly.items": "Winterly", + "itemGroup.winterly.items.button.discord": "Join our Discord server!", + "itemGroup.winterly.items.button.updated": "New update available!", + + "modmenu.descriptionTranslation.winterly": "Winter expansion mod adding cold and sloppy stuff.", + + "tip.winterly.requires_trinkets.0": "Requires Trinkets mod to be installed", + "tip.winterly.requires_trinkets.1": "in order to be wearable.", + + "tip.winterly.requires_curios.0": "Requires Curios API to be installed", + "tip.winterly.requires_curios.1": "in order to be wearable.", + + "item.winterly.red_candy_cane": "红色条纹拐杖糖", + "item.winterly.green_candy_cane": "绿色条纹拐杖糖", + "item.winterly.blue_candy_cane": "蓝色条纹拐杖糖", + "item.winterly.cryomarble_shard": "冰晶石碎片", + "item.winterly.cryomarble": "冰晶石", + "item.winterly.cryomarble_sword": "冰晶石剑", + "item.winterly.cryomarble_shovel": "冰晶石锹", + "item.winterly.cryomarble_pickaxe": "冰晶石镐", + "item.winterly.cryomarble_axe": "冰晶石斧", + "item.winterly.cryomarble_hoe": "冰晶石锄", + "item.winterly.red_santa_hat": "红色圣诞帽", + "item.winterly.blue_santa_hat": "蓝色圣诞帽", + "item.winterly.white_scarf": "白色围巾", + "item.winterly.blue_scarf": "蓝色围巾", + "item.winterly.red_scarf": "红色围巾", + "item.winterly.green_scarf": "绿色围巾", + "item.winterly.rainbow_scarf": "Rainbow Scarf", + + "block.winterly.icicle": "冰锥", + "block.winterly.icicle_block": "冰凌块", + "block.winterly.packed_icicle_block": "Packed Icicle Block", + "block.winterly.icicle_bars": "冰凌棒", + "block.winterly.icicle_pane": "冰凌板", + "block.winterly.cryomarble_block": "Cryomarble Block", + "block.winterly.snowguy": "雪人", + "block.winterly.snowball_wall": "雪球墙", + "block.winterly.dense_snow": "致密的雪块", + "block.winterly.dense_snow_stairs": "致密的雪楼梯", + "block.winterly.dense_snow_slab": "致密的雪台阶", + "block.winterly.snow_bricks": "雪砖", + "block.winterly.snow_brick_stairs": "雪砖楼梯", + "block.winterly.snow_brick_slab": "雪砖台阶", + "block.winterly.raw_cryomarble_shard": "原始冰晶石碎片", + "block.winterly.garland_lights": "花环灯", + "block.winterly.rainy_garland_lights": "雨天花环灯", + "block.winterly.frozen_grass": "Frozen Grass", + "block.winterly.frozen_flower": "Frozen Flower", + + "description.winterly.gift_box.0": "Place in the world and then", + "description.winterly.gift_box.1": "right-click to put items.", + "description.winterly.gift_box.2": "Use silk touch to collect.", + + "block.winterly.blue_gift_box": "Blue Gift Box", + "block.winterly.red_gift_box": "Red Gift Box", + "block.winterly.green_gift_box": "Green Gift Box", + "block.winterly.purple_gift_box": "Purple Gift Box", + "block.winterly.yellow_gift_box": "Yellow Gift Box", + "block.winterly.black_gift_box": "Black Gift Box", + "block.winterly.white_gift_box": "White Gift Box", + "block.winterly.cyan_gift_box": "Cyan Gift Box", + "block.winterly.orange_gift_box": "Orange Gift Box", + + "tag.winterly.placeable": "可放置的", + "tag.winterly.cosmetic": "装饰品", + + "config.winterly.title": "Winterly配置", + "config.winterly.general": "常规", + "config.winterly.option.max_gift_box_capacity": "Max Gift Box Capacity", + "config.winterly.option.generate_underground_icicles": "Generate Underground Icicles", + "config.winterly.option.generate_cryomarble": "Generate Cryomarble", + "config.winterly.option.generate_frozen_grass": "Generate Frozen Grass", + "config.winterly.option.generate_frozen_flowers": "Generate Frozen Flowers", + "config.winterly.option.mob_decorations.enabled": "启用生物装饰", + "config.winterly.option.mob_decorations.only_in_winter": "只有在冬季才有生物装饰", + "config.winterly.option.mob_decorations.chance": "生物装饰几率" +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/base/garland_lights_model.json b/winterly-common/src/main/resources/assets/winterly/models/block/base/garland_lights_model.json new file mode 100644 index 0000000..e90937a --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/base/garland_lights_model.json @@ -0,0 +1,42 @@ +{ + "render_type": "minecraft:cutout", + "ambientocclusion": false, + "textures": { + "lights": "winterly:block/garland_lights", + "particle": "#lights" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0.1 + ], + "to": [ + 16, + 16, + 0.1 + ], + "faces": { + "north": { + "uv": [ + 16, + 0, + 0, + 16 + ], + "texture": "#lights" + }, + "south": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#lights" + } + } + } + ] +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/base/gift_box_model.json b/winterly-common/src/main/resources/assets/winterly/models/block/base/gift_box_model.json new file mode 100644 index 0000000..96a293f --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/base/gift_box_model.json @@ -0,0 +1,407 @@ +{ + "render_type": "minecraft:cutout", + "credit": "Made in Blockbench by PinkGoosik", + "texture_size": [32, 32], + "textures": { + "box": "winterly:block/black_gift_box", + "particle": "winterly:block/black_gift_box_particle" + }, + "elements": [ + { + "from": [ + 4, + 0, + 4 + ], + "to": [ + 12, + 9, + 12 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 4, + 4.5 + ], + "texture": "#box" + }, + "east": { + "uv": [ + 0, + 0, + 4, + 4.5 + ], + "texture": "#box" + }, + "south": { + "uv": [ + 0, + 0, + 4, + 4.5 + ], + "texture": "#box" + }, + "west": { + "uv": [ + 0, + 0, + 4, + 4.5 + ], + "texture": "#box" + }, + "up": { + "uv": [ + 8, + 0, + 12, + 4 + ], + "texture": "#box" + }, + "down": { + "uv": [ + 12, + 0, + 16, + 4 + ], + "texture": "#box" + } + } + }, + { + "from": [ + 3.5, + 6.5, + 3.5 + ], + "to": [ + 12.5, + 9.5, + 12.5 + ], + "faces": { + "north": { + "uv": [ + 4, + 0, + 8, + 1 + ], + "texture": "#box" + }, + "east": { + "uv": [ + 4, + 0, + 8, + 1 + ], + "texture": "#box" + }, + "south": { + "uv": [ + 4, + 0, + 8, + 1 + ], + "texture": "#box" + }, + "west": { + "uv": [ + 4, + 0, + 8, + 1 + ], + "texture": "#box" + }, + "up": { + "uv": [ + 8, + 0, + 12, + 4 + ], + "texture": "#box" + }, + "down": { + "uv": [ + 12, + 0, + 16, + 4 + ], + "texture": "#box" + } + } + }, + { + "shade": false, + "from": [ + -4.5, + 9.5, + 11 + ], + "to": [ + 4.5, + 13.5, + 11 + ], + "rotation": { + "angle": 45, + "axis": "y", + "origin": [ + 0, + 0, + 0 + ] + }, + "faces": { + "north": { + "uv": [ + 1, + 6, + 5, + 8 + ], + "texture": "#box" + }, + "east": { + "uv": [ + 0, + 0, + 0, + 2 + ], + "texture": "#box" + }, + "south": { + "uv": [ + 9, + 6, + 13, + 8 + ], + "texture": "#box" + }, + "west": { + "uv": [ + 0, + 0, + 0, + 2 + ], + "texture": "#box" + }, + "up": { + "uv": [ + 0, + 0, + 4, + 0 + ], + "texture": "#box" + }, + "down": { + "uv": [ + 0, + 0, + 4, + 0 + ], + "texture": "#box" + } + } + }, + { + "shade": false, + "from": [ + 6.5, + 9.5, + 0 + ], + "to": [ + 15.5, + 13.5, + 0 + ], + "rotation": { + "angle": -45, + "axis": "y", + "origin": [ + 0, + 0, + 0 + ] + }, + "faces": { + "north": { + "uv": [ + 1, + 6, + 5, + 8 + ], + "texture": "#box" + }, + "east": { + "uv": [ + 0, + 0, + 0, + 2 + ], + "texture": "#box" + }, + "south": { + "uv": [ + 9, + 6, + 13, + 8 + ], + "texture": "#box" + }, + "west": { + "uv": [ + 0, + 0, + 0, + 2 + ], + "texture": "#box" + }, + "up": { + "uv": [ + 0, + 0, + 4, + 0 + ], + "texture": "#box" + }, + "down": { + "uv": [ + 0, + 0, + 4, + 0 + ], + "texture": "#box" + } + } + } + ], + "display": { + "gui": { + "rotation": [ + 30, + 45, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.625, + 0.625, + 0.625 + ] + }, + "ground": { + "rotation": [ + 0, + 0, + 0 + ], + "translation": [ + 0, + 3, + 0 + ], + "scale": [ + 0.25, + 0.25, + 0.25 + ] + }, + "head": { + "rotation": [ + 0, + 180, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + "fixed": { + "rotation": [ + 0, + 180, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "thirdperson_righthand": { + "rotation": [ + 75, + 315, + 0 + ], + "translation": [ + 0, + 2.5, + 0 + ], + "scale": [ + 0.375, + 0.375, + 0.375 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + 315, + 0 + ], + "translation": [ + 0, + 0, + 0 + ], + "scale": [ + 0.4, + 0.4, + 0.4 + ] + } + } +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/black_gift_box.json b/winterly-common/src/main/resources/assets/winterly/models/block/black_gift_box.json new file mode 100644 index 0000000..be20c79 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/black_gift_box.json @@ -0,0 +1,7 @@ +{ + "parent": "winterly:block/base/gift_box_model", + "textures": { + "box": "winterly:block/black_gift_box", + "particle": "winterly:block/black_gift_box_particle" + } +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/blue_gift_box.json b/winterly-common/src/main/resources/assets/winterly/models/block/blue_gift_box.json new file mode 100644 index 0000000..48ca793 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/blue_gift_box.json @@ -0,0 +1,7 @@ +{ + "parent": "winterly:block/base/gift_box_model", + "textures": { + "box": "winterly:block/blue_gift_box", + "particle": "winterly:block/blue_gift_box_particle" + } +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/cryomarble_block.json b/winterly-common/src/main/resources/assets/winterly/models/block/cryomarble_block.json new file mode 100644 index 0000000..b844113 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/cryomarble_block.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "winterly:block/cryomarble_block" + } +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/cyan_gift_box.json b/winterly-common/src/main/resources/assets/winterly/models/block/cyan_gift_box.json new file mode 100644 index 0000000..62fee5e --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/cyan_gift_box.json @@ -0,0 +1,7 @@ +{ + "parent": "winterly:block/base/gift_box_model", + "textures": { + "box": "winterly:block/cyan_gift_box", + "particle": "winterly:block/cyan_gift_box_particle" + } +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/dense_snow.json b/winterly-common/src/main/resources/assets/winterly/models/block/dense_snow.json new file mode 100644 index 0000000..c4ee7e1 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/dense_snow.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "winterly:block/dense_snow" + } +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/dense_snow_slab.json b/winterly-common/src/main/resources/assets/winterly/models/block/dense_snow_slab.json new file mode 100644 index 0000000..e49494c --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/dense_snow_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "block/slab", + "textures": { + "bottom": "winterly:block/dense_snow", + "top": "winterly:block/dense_snow", + "side": "winterly:block/dense_snow" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/dense_snow_slab_top.json b/winterly-common/src/main/resources/assets/winterly/models/block/dense_snow_slab_top.json new file mode 100644 index 0000000..21e3077 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/dense_snow_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "block/slab_top", + "textures": { + "bottom": "winterly:block/dense_snow", + "top": "winterly:block/dense_snow", + "side": "winterly:block/dense_snow" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/dense_snow_stairs.json b/winterly-common/src/main/resources/assets/winterly/models/block/dense_snow_stairs.json new file mode 100644 index 0000000..48ab478 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/dense_snow_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/stairs", + "textures": { + "bottom": "winterly:block/dense_snow", + "top": "winterly:block/dense_snow", + "side": "winterly:block/dense_snow" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/dense_snow_stairs_inner.json b/winterly-common/src/main/resources/assets/winterly/models/block/dense_snow_stairs_inner.json new file mode 100644 index 0000000..f95321f --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/dense_snow_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "block/inner_stairs", + "textures": { + "bottom": "winterly:block/dense_snow", + "top": "winterly:block/dense_snow", + "side": "winterly:block/dense_snow" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/dense_snow_stairs_outer.json b/winterly-common/src/main/resources/assets/winterly/models/block/dense_snow_stairs_outer.json new file mode 100644 index 0000000..6ddc7ef --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/dense_snow_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "block/outer_stairs", + "textures": { + "bottom": "winterly:block/dense_snow", + "top": "winterly:block/dense_snow", + "side": "winterly:block/dense_snow" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/frozen_flower.json b/winterly-common/src/main/resources/assets/winterly/models/block/frozen_flower.json new file mode 100644 index 0000000..17b0ecc --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/frozen_flower.json @@ -0,0 +1,30 @@ +{ + "render_type": "minecraft:cutout", + "credit": "Made in Blockbench by PinkGoosik", + "textures": { + "flower": "winterly:block/frozen_flower", + "particle": "#flower" + }, + "elements": [ + { + "from": [0.8, 0, 10], + "to": [15.2, 16, 10], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8], "rescale": true}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#flower"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#flower"} + } + }, + { + "from": [8, 0, 2.8], + "to": [8, 16, 17.2], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8], "rescale": true}, + "faces": { + "east": {"uv": [0, 0, 16, 16], "texture": "#flower"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#flower"} + } + } + ] +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/frozen_flower_10.json b/winterly-common/src/main/resources/assets/winterly/models/block/frozen_flower_10.json new file mode 100644 index 0000000..5859fed --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/frozen_flower_10.json @@ -0,0 +1,43 @@ +{ + "render_type": "minecraft:cutout", + "credit": "Made in Blockbench by PinkGoosik", + "textures": { + "flower": "winterly:block/frozen_flower", + "snow": "minecraft:block/snow", + "particle": "#snow" + }, + "elements": [ + { + "from": [0.8, 0, 10], + "to": [15.2, 16, 10], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8], "rescale": true}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#flower"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#flower"} + } + }, + { + "from": [8, 0, 2.8], + "to": [8, 16, 17.2], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8], "rescale": true}, + "faces": { + "east": {"uv": [0, 0, 16, 16], "texture": "#flower"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#flower"} + } + }, + { + "from": [0, 0, 0], + "to": [16, 10, 16], + "faces": { + "north": {"uv": [0, 6, 16, 16], "texture": "#snow"}, + "east": {"uv": [0, 6, 16, 16], "texture": "#snow"}, + "south": {"uv": [0, 6, 16, 16], "texture": "#snow"}, + "west": {"uv": [0, 6, 16, 16], "texture": "#snow"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#snow"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#snow"} + } + } + ] +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/frozen_flower_12.json b/winterly-common/src/main/resources/assets/winterly/models/block/frozen_flower_12.json new file mode 100644 index 0000000..9153d9a --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/frozen_flower_12.json @@ -0,0 +1,43 @@ +{ + "render_type": "minecraft:cutout", + "credit": "Made in Blockbench by PinkGoosik", + "textures": { + "flower": "winterly:block/frozen_flower", + "snow": "minecraft:block/snow", + "particle": "#snow" + }, + "elements": [ + { + "from": [0.8, 0, 10], + "to": [15.2, 16, 10], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8], "rescale": true}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#flower"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#flower"} + } + }, + { + "from": [8, 0, 2.8], + "to": [8, 16, 17.2], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8], "rescale": true}, + "faces": { + "east": {"uv": [0, 0, 16, 16], "texture": "#flower"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#flower"} + } + }, + { + "from": [0, 0, 0], + "to": [16, 12, 16], + "faces": { + "north": {"uv": [0, 4, 16, 16], "texture": "#snow"}, + "east": {"uv": [0, 4, 16, 16], "texture": "#snow"}, + "south": {"uv": [0, 4, 16, 16], "texture": "#snow"}, + "west": {"uv": [0, 4, 16, 16], "texture": "#snow"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#snow"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#snow"} + } + } + ] +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/frozen_flower_14.json b/winterly-common/src/main/resources/assets/winterly/models/block/frozen_flower_14.json new file mode 100644 index 0000000..4d81a6a --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/frozen_flower_14.json @@ -0,0 +1,43 @@ +{ + "render_type": "minecraft:cutout", + "credit": "Made in Blockbench by PinkGoosik", + "textures": { + "flower": "winterly:block/frozen_flower", + "snow": "minecraft:block/snow", + "particle": "#snow" + }, + "elements": [ + { + "from": [0.8, 0, 10], + "to": [15.2, 16, 10], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8], "rescale": true}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#flower"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#flower"} + } + }, + { + "from": [8, 0, 2.8], + "to": [8, 16, 17.2], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8], "rescale": true}, + "faces": { + "east": {"uv": [0, 0, 16, 16], "texture": "#flower"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#flower"} + } + }, + { + "from": [0, 0, 0], + "to": [16, 14, 16], + "faces": { + "north": {"uv": [0, 2, 16, 16], "texture": "#snow"}, + "east": {"uv": [0, 2, 16, 16], "texture": "#snow"}, + "south": {"uv": [0, 2, 16, 16], "texture": "#snow"}, + "west": {"uv": [0, 2, 16, 16], "texture": "#snow"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#snow"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#snow"} + } + } + ] +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/frozen_flower_2.json b/winterly-common/src/main/resources/assets/winterly/models/block/frozen_flower_2.json new file mode 100644 index 0000000..a554e72 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/frozen_flower_2.json @@ -0,0 +1,43 @@ +{ + "render_type": "minecraft:cutout", + "credit": "Made in Blockbench by PinkGoosik", + "textures": { + "flower": "winterly:block/frozen_flower", + "snow": "minecraft:block/snow", + "particle": "#snow" + }, + "elements": [ + { + "from": [0.8, 0, 10], + "to": [15.2, 16, 10], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8], "rescale": true}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#flower"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#flower"} + } + }, + { + "from": [8, 0, 2.8], + "to": [8, 16, 17.2], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8], "rescale": true}, + "faces": { + "east": {"uv": [0, 0, 16, 16], "texture": "#flower"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#flower"} + } + }, + { + "from": [0, 0, 0], + "to": [16, 2, 16], + "faces": { + "north": {"uv": [0, 14, 16, 16], "texture": "#snow"}, + "east": {"uv": [0, 14, 16, 16], "texture": "#snow"}, + "south": {"uv": [0, 14, 16, 16], "texture": "#snow"}, + "west": {"uv": [0, 14, 16, 16], "texture": "#snow"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#snow"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#snow"} + } + } + ] +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/frozen_flower_4.json b/winterly-common/src/main/resources/assets/winterly/models/block/frozen_flower_4.json new file mode 100644 index 0000000..5983dc9 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/frozen_flower_4.json @@ -0,0 +1,43 @@ +{ + "render_type": "minecraft:cutout", + "credit": "Made in Blockbench by PinkGoosik", + "textures": { + "flower": "winterly:block/frozen_flower", + "snow": "minecraft:block/snow", + "particle": "#snow" + }, + "elements": [ + { + "from": [0.8, 0, 10], + "to": [15.2, 16, 10], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8], "rescale": true}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#flower"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#flower"} + } + }, + { + "from": [8, 0, 2.8], + "to": [8, 16, 17.2], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8], "rescale": true}, + "faces": { + "east": {"uv": [0, 0, 16, 16], "texture": "#flower"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#flower"} + } + }, + { + "from": [0, 0, 0], + "to": [16, 4, 16], + "faces": { + "north": {"uv": [0, 12, 16, 16], "texture": "#snow"}, + "east": {"uv": [0, 12, 16, 16], "texture": "#snow"}, + "south": {"uv": [0, 12, 16, 16], "texture": "#snow"}, + "west": {"uv": [0, 12, 16, 16], "texture": "#snow"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#snow"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#snow"} + } + } + ] +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/frozen_flower_6.json b/winterly-common/src/main/resources/assets/winterly/models/block/frozen_flower_6.json new file mode 100644 index 0000000..7442469 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/frozen_flower_6.json @@ -0,0 +1,43 @@ +{ + "render_type": "minecraft:cutout", + "credit": "Made in Blockbench by PinkGoosik", + "textures": { + "flower": "winterly:block/frozen_flower", + "snow": "minecraft:block/snow", + "particle": "#snow" + }, + "elements": [ + { + "from": [0.8, 0, 10], + "to": [15.2, 16, 10], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8], "rescale": true}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#flower"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#flower"} + } + }, + { + "from": [8, 0, 2.8], + "to": [8, 16, 17.2], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8], "rescale": true}, + "faces": { + "east": {"uv": [0, 0, 16, 16], "texture": "#flower"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#flower"} + } + }, + { + "from": [0, 0, 0], + "to": [16, 6, 16], + "faces": { + "north": {"uv": [0, 10, 16, 16], "texture": "#snow"}, + "east": {"uv": [0, 10, 16, 16], "texture": "#snow"}, + "south": {"uv": [0, 10, 16, 16], "texture": "#snow"}, + "west": {"uv": [0, 10, 16, 16], "texture": "#snow"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#snow"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#snow"} + } + } + ] +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/frozen_flower_8.json b/winterly-common/src/main/resources/assets/winterly/models/block/frozen_flower_8.json new file mode 100644 index 0000000..5ebf6f8 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/frozen_flower_8.json @@ -0,0 +1,43 @@ +{ + "render_type": "minecraft:cutout", + "credit": "Made in Blockbench by PinkGoosik", + "textures": { + "flower": "winterly:block/frozen_flower", + "snow": "minecraft:block/snow", + "particle": "#snow" + }, + "elements": [ + { + "from": [0.8, 0, 10], + "to": [15.2, 16, 10], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8], "rescale": true}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#flower"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#flower"} + } + }, + { + "from": [8, 0, 2.8], + "to": [8, 16, 17.2], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8], "rescale": true}, + "faces": { + "east": {"uv": [0, 0, 16, 16], "texture": "#flower"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#flower"} + } + }, + { + "from": [0, 0, 0], + "to": [16, 8, 16], + "faces": { + "north": {"uv": [0, 8, 16, 16], "texture": "#snow"}, + "east": {"uv": [0, 8, 16, 16], "texture": "#snow"}, + "south": {"uv": [0, 8, 16, 16], "texture": "#snow"}, + "west": {"uv": [0, 8, 16, 16], "texture": "#snow"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#snow"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#snow"} + } + } + ] +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/frozen_grass_10.json b/winterly-common/src/main/resources/assets/winterly/models/block/frozen_grass_10.json new file mode 100644 index 0000000..b18c15a --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/frozen_grass_10.json @@ -0,0 +1,43 @@ +{ + "render_type": "minecraft:cutout", + "credit": "Made in Blockbench by PinkGoosik", + "textures": { + "grass": "winterly:block/frozen_grass", + "snow": "minecraft:block/snow", + "particle": "#snow" + }, + "elements": [ + { + "from": [0.8, 0, 9], + "to": [15.2, 16, 9], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8], "rescale": true}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#grass"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#grass"} + } + }, + { + "from": [8, 0, 1.8], + "to": [8, 16, 16.2], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8], "rescale": true}, + "faces": { + "east": {"uv": [0, 0, 16, 16], "texture": "#grass"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#grass"} + } + }, + { + "from": [0, 0, 0], + "to": [16, 10, 16], + "faces": { + "north": {"uv": [0, 6, 16, 16], "texture": "#snow"}, + "east": {"uv": [0, 6, 16, 16], "texture": "#snow"}, + "south": {"uv": [0, 6, 16, 16], "texture": "#snow"}, + "west": {"uv": [0, 6, 16, 16], "texture": "#snow"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#snow"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#snow"} + } + } + ] +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/frozen_grass_12.json b/winterly-common/src/main/resources/assets/winterly/models/block/frozen_grass_12.json new file mode 100644 index 0000000..13d5a5d --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/frozen_grass_12.json @@ -0,0 +1,43 @@ +{ + "render_type": "minecraft:cutout", + "credit": "Made in Blockbench by PinkGoosik", + "textures": { + "grass": "winterly:block/frozen_grass", + "snow": "minecraft:block/snow", + "particle": "#snow" + }, + "elements": [ + { + "from": [0.8, 0, 9], + "to": [15.2, 16, 9], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8], "rescale": true}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#grass"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#grass"} + } + }, + { + "from": [8, 0, 1.8], + "to": [8, 16, 16.2], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8], "rescale": true}, + "faces": { + "east": {"uv": [0, 0, 16, 16], "texture": "#grass"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#grass"} + } + }, + { + "from": [0, 0, 0], + "to": [16, 12, 16], + "faces": { + "north": {"uv": [0, 4, 16, 16], "texture": "#snow"}, + "east": {"uv": [0, 4, 16, 16], "texture": "#snow"}, + "south": {"uv": [0, 4, 16, 16], "texture": "#snow"}, + "west": {"uv": [0, 4, 16, 16], "texture": "#snow"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#snow"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#snow"} + } + } + ] +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/frozen_grass_14.json b/winterly-common/src/main/resources/assets/winterly/models/block/frozen_grass_14.json new file mode 100644 index 0000000..28e9c4a --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/frozen_grass_14.json @@ -0,0 +1,43 @@ +{ + "render_type": "minecraft:cutout", + "credit": "Made in Blockbench by PinkGoosik", + "textures": { + "grass": "winterly:block/frozen_grass", + "snow": "minecraft:block/snow", + "particle": "#snow" + }, + "elements": [ + { + "from": [0.8, 0, 9], + "to": [15.2, 16, 9], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8], "rescale": true}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#grass"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#grass"} + } + }, + { + "from": [8, 0, 1.8], + "to": [8, 16, 16.2], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8], "rescale": true}, + "faces": { + "east": {"uv": [0, 0, 16, 16], "texture": "#grass"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#grass"} + } + }, + { + "from": [0, 0, 0], + "to": [16, 14, 16], + "faces": { + "north": {"uv": [0, 2, 16, 16], "texture": "#snow"}, + "east": {"uv": [0, 2, 16, 16], "texture": "#snow"}, + "south": {"uv": [0, 2, 16, 16], "texture": "#snow"}, + "west": {"uv": [0, 2, 16, 16], "texture": "#snow"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#snow"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#snow"} + } + } + ] +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/frozen_grass_2.json b/winterly-common/src/main/resources/assets/winterly/models/block/frozen_grass_2.json new file mode 100644 index 0000000..c815672 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/frozen_grass_2.json @@ -0,0 +1,43 @@ +{ + "render_type": "minecraft:cutout", + "credit": "Made in Blockbench by PinkGoosik", + "textures": { + "grass": "winterly:block/frozen_grass", + "snow": "minecraft:block/snow", + "particle": "#snow" + }, + "elements": [ + { + "from": [0.8, 0, 9], + "to": [15.2, 16, 9], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8], "rescale": true}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#grass"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#grass"} + } + }, + { + "from": [8, 0, 1.8], + "to": [8, 16, 16.2], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8], "rescale": true}, + "faces": { + "east": {"uv": [0, 0, 16, 16], "texture": "#grass"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#grass"} + } + }, + { + "from": [0, 0, 0], + "to": [16, 2, 16], + "faces": { + "north": {"uv": [0, 14, 16, 16], "texture": "#snow"}, + "east": {"uv": [0, 14, 16, 16], "texture": "#snow"}, + "south": {"uv": [0, 14, 16, 16], "texture": "#snow"}, + "west": {"uv": [0, 14, 16, 16], "texture": "#snow"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#snow"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#snow"} + } + } + ] +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/frozen_grass_4.json b/winterly-common/src/main/resources/assets/winterly/models/block/frozen_grass_4.json new file mode 100644 index 0000000..380d880 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/frozen_grass_4.json @@ -0,0 +1,43 @@ +{ + "render_type": "minecraft:cutout", + "credit": "Made in Blockbench by PinkGoosik", + "textures": { + "grass": "winterly:block/frozen_grass", + "snow": "minecraft:block/snow", + "particle": "#snow" + }, + "elements": [ + { + "from": [0.8, 0, 9], + "to": [15.2, 16, 9], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8], "rescale": true}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#grass"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#grass"} + } + }, + { + "from": [8, 0, 1.8], + "to": [8, 16, 16.2], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8], "rescale": true}, + "faces": { + "east": {"uv": [0, 0, 16, 16], "texture": "#grass"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#grass"} + } + }, + { + "from": [0, 0, 0], + "to": [16, 4, 16], + "faces": { + "north": {"uv": [0, 12, 16, 16], "texture": "#snow"}, + "east": {"uv": [0, 12, 16, 16], "texture": "#snow"}, + "south": {"uv": [0, 12, 16, 16], "texture": "#snow"}, + "west": {"uv": [0, 12, 16, 16], "texture": "#snow"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#snow"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#snow"} + } + } + ] +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/frozen_grass_6.json b/winterly-common/src/main/resources/assets/winterly/models/block/frozen_grass_6.json new file mode 100644 index 0000000..7573a54 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/frozen_grass_6.json @@ -0,0 +1,43 @@ +{ + "render_type": "minecraft:cutout", + "credit": "Made in Blockbench by PinkGoosik", + "textures": { + "grass": "winterly:block/frozen_grass", + "snow": "minecraft:block/snow", + "particle": "#snow" + }, + "elements": [ + { + "from": [0.8, 0, 9], + "to": [15.2, 16, 9], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8], "rescale": true}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#grass"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#grass"} + } + }, + { + "from": [8, 0, 1.8], + "to": [8, 16, 16.2], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8], "rescale": true}, + "faces": { + "east": {"uv": [0, 0, 16, 16], "texture": "#grass"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#grass"} + } + }, + { + "from": [0, 0, 0], + "to": [16, 6, 16], + "faces": { + "north": {"uv": [0, 10, 16, 16], "texture": "#snow"}, + "east": {"uv": [0, 10, 16, 16], "texture": "#snow"}, + "south": {"uv": [0, 10, 16, 16], "texture": "#snow"}, + "west": {"uv": [0, 10, 16, 16], "texture": "#snow"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#snow"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#snow"} + } + } + ] +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/frozen_grass_8.json b/winterly-common/src/main/resources/assets/winterly/models/block/frozen_grass_8.json new file mode 100644 index 0000000..a998eb6 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/frozen_grass_8.json @@ -0,0 +1,43 @@ +{ + "render_type": "minecraft:cutout", + "credit": "Made in Blockbench by PinkGoosik", + "textures": { + "grass": "winterly:block/frozen_grass", + "snow": "minecraft:block/snow", + "particle": "#snow" + }, + "elements": [ + { + "from": [0.8, 0, 9], + "to": [15.2, 16, 9], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8], "rescale": true}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#grass"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#grass"} + } + }, + { + "from": [8, 0, 1.8], + "to": [8, 16, 16.2], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8], "rescale": true}, + "faces": { + "east": {"uv": [0, 0, 16, 16], "texture": "#grass"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#grass"} + } + }, + { + "from": [0, 0, 0], + "to": [16, 8, 16], + "faces": { + "north": {"uv": [0, 8, 16, 16], "texture": "#snow"}, + "east": {"uv": [0, 8, 16, 16], "texture": "#snow"}, + "south": {"uv": [0, 8, 16, 16], "texture": "#snow"}, + "west": {"uv": [0, 8, 16, 16], "texture": "#snow"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#snow"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#snow"} + } + } + ] +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/garland_lights.json b/winterly-common/src/main/resources/assets/winterly/models/block/garland_lights.json new file mode 100644 index 0000000..226f1c7 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/garland_lights.json @@ -0,0 +1,6 @@ +{ + "parent": "winterly:block/base/garland_lights_model", + "textures": { + "lights": "winterly:block/garland_lights" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/green_gift_box.json b/winterly-common/src/main/resources/assets/winterly/models/block/green_gift_box.json new file mode 100644 index 0000000..0974576 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/green_gift_box.json @@ -0,0 +1,7 @@ +{ + "parent": "winterly:block/base/gift_box_model", + "textures": { + "box": "winterly:block/green_gift_box", + "particle": "winterly:block/green_gift_box_particle" + } +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/icicle_1.json b/winterly-common/src/main/resources/assets/winterly/models/block/icicle_1.json new file mode 100644 index 0000000..c2a39ed --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/icicle_1.json @@ -0,0 +1,7 @@ +{ + "render_type": "minecraft:cutout", + "parent": "block/tinted_cross", + "textures": { + "cross": "winterly:block/icicle_1" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/icicle_2.json b/winterly-common/src/main/resources/assets/winterly/models/block/icicle_2.json new file mode 100644 index 0000000..0987d09 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/icicle_2.json @@ -0,0 +1,7 @@ +{ + "render_type": "minecraft:cutout", + "parent": "block/tinted_cross", + "textures": { + "cross": "winterly:block/icicle_2" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/icicle_3.json b/winterly-common/src/main/resources/assets/winterly/models/block/icicle_3.json new file mode 100644 index 0000000..f64910f --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/icicle_3.json @@ -0,0 +1,7 @@ +{ + "render_type": "minecraft:cutout", + "parent": "block/tinted_cross", + "textures": { + "cross": "winterly:block/icicle_3" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/icicle_bars_cap.json b/winterly-common/src/main/resources/assets/winterly/models/block/icicle_bars_cap.json new file mode 100644 index 0000000..a1decf2 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/icicle_bars_cap.json @@ -0,0 +1,9 @@ +{ + "render_type": "minecraft:cutout", + "parent": "block/iron_bars_cap", + "textures": { + "bars": "winterly:block/icicle_bars", + "edge": "#bars", + "particle": "#bars" + } +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/icicle_bars_cap_alt.json b/winterly-common/src/main/resources/assets/winterly/models/block/icicle_bars_cap_alt.json new file mode 100644 index 0000000..390ce7d --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/icicle_bars_cap_alt.json @@ -0,0 +1,9 @@ +{ + "render_type": "minecraft:cutout", + "parent": "block/iron_bars_cap_alt", + "textures": { + "bars": "winterly:block/icicle_bars", + "edge": "#bars", + "particle": "#bars" + } +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/icicle_bars_post.json b/winterly-common/src/main/resources/assets/winterly/models/block/icicle_bars_post.json new file mode 100644 index 0000000..ae72f79 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/icicle_bars_post.json @@ -0,0 +1,8 @@ +{ + "render_type": "minecraft:cutout", + "parent": "block/iron_bars_post", + "textures": { + "bars": "winterly:block/icicle_bars", + "particle": "#bars" + } +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/icicle_bars_post_ends.json b/winterly-common/src/main/resources/assets/winterly/models/block/icicle_bars_post_ends.json new file mode 100644 index 0000000..609d960 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/icicle_bars_post_ends.json @@ -0,0 +1,8 @@ +{ + "render_type": "minecraft:cutout", + "parent": "block/iron_bars_post_ends", + "textures": { + "edge": "winterly:block/icicle_bars", + "particle": "#edge" + } +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/icicle_bars_side.json b/winterly-common/src/main/resources/assets/winterly/models/block/icicle_bars_side.json new file mode 100644 index 0000000..2cb9fcd --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/icicle_bars_side.json @@ -0,0 +1,9 @@ +{ + "render_type": "minecraft:cutout", + "parent": "block/iron_bars_side", + "textures": { + "bars": "winterly:block/icicle_bars", + "edge": "#bars", + "particle": "#bars" + } +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/icicle_bars_side_alt.json b/winterly-common/src/main/resources/assets/winterly/models/block/icicle_bars_side_alt.json new file mode 100644 index 0000000..c313920 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/icicle_bars_side_alt.json @@ -0,0 +1,9 @@ +{ + "render_type": "minecraft:cutout", + "parent": "block/iron_bars_side_alt", + "textures": { + "bars": "winterly:block/icicle_bars", + "edge": "#bars", + "particle": "#bars" + } +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/icicle_block.json b/winterly-common/src/main/resources/assets/winterly/models/block/icicle_block.json new file mode 100644 index 0000000..12af2ff --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/icicle_block.json @@ -0,0 +1,7 @@ +{ + "render_type": "minecraft:translucent", + "parent": "block/cube_all", + "textures": { + "all": "winterly:block/icicle_block" + } +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/icicle_pane_noside.json b/winterly-common/src/main/resources/assets/winterly/models/block/icicle_pane_noside.json new file mode 100644 index 0000000..476a6a0 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/icicle_pane_noside.json @@ -0,0 +1,7 @@ +{ + "render_type": "minecraft:translucent", + "parent": "block/template_glass_pane_noside", + "textures": { + "pane": "winterly:block/icicle_block" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/icicle_pane_noside_alt.json b/winterly-common/src/main/resources/assets/winterly/models/block/icicle_pane_noside_alt.json new file mode 100644 index 0000000..c9b7912 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/icicle_pane_noside_alt.json @@ -0,0 +1,7 @@ +{ + "render_type": "minecraft:translucent", + "parent": "block/template_glass_pane_noside_alt", + "textures": { + "pane": "winterly:block/icicle_block" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/icicle_pane_post.json b/winterly-common/src/main/resources/assets/winterly/models/block/icicle_pane_post.json new file mode 100644 index 0000000..8112da9 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/icicle_pane_post.json @@ -0,0 +1,8 @@ +{ + "render_type": "minecraft:translucent", + "parent": "block/template_glass_pane_post", + "textures": { + "pane": "winterly:block/icicle_block", + "edge": "winterly:block/icicle_block" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/icicle_pane_side.json b/winterly-common/src/main/resources/assets/winterly/models/block/icicle_pane_side.json new file mode 100644 index 0000000..d387c81 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/icicle_pane_side.json @@ -0,0 +1,8 @@ +{ + "render_type": "minecraft:translucent", + "parent": "block/template_glass_pane_side", + "textures": { + "pane": "winterly:block/icicle_block", + "edge": "winterly:block/icicle_block" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/icicle_pane_side_alt.json b/winterly-common/src/main/resources/assets/winterly/models/block/icicle_pane_side_alt.json new file mode 100644 index 0000000..d1a76cf --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/icicle_pane_side_alt.json @@ -0,0 +1,8 @@ +{ + "render_type": "minecraft:translucent", + "parent": "block/template_glass_pane_side_alt", + "textures": { + "pane": "winterly:block/icicle_block", + "edge": "winterly:block/icicle_block" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/orange_gift_box.json b/winterly-common/src/main/resources/assets/winterly/models/block/orange_gift_box.json new file mode 100644 index 0000000..f2dba2c --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/orange_gift_box.json @@ -0,0 +1,7 @@ +{ + "parent": "winterly:block/base/gift_box_model", + "textures": { + "box": "winterly:block/orange_gift_box", + "particle": "winterly:block/orange_gift_box_particle" + } +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/packed_icicle_block.json b/winterly-common/src/main/resources/assets/winterly/models/block/packed_icicle_block.json new file mode 100644 index 0000000..c4751e0 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/packed_icicle_block.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "winterly:block/packed_icicle_block" + } +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/purple_gift_box.json b/winterly-common/src/main/resources/assets/winterly/models/block/purple_gift_box.json new file mode 100644 index 0000000..cdacca8 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/purple_gift_box.json @@ -0,0 +1,7 @@ +{ + "parent": "winterly:block/base/gift_box_model", + "textures": { + "box": "winterly:block/purple_gift_box", + "particle": "winterly:block/purple_gift_box_particle" + } +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/rainy_garland_lights.json b/winterly-common/src/main/resources/assets/winterly/models/block/rainy_garland_lights.json new file mode 100644 index 0000000..81efe40 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/rainy_garland_lights.json @@ -0,0 +1,6 @@ +{ + "parent": "winterly:block/base/garland_lights_model", + "textures": { + "lights": "winterly:block/rainy_garland_lights" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/raw_cryomarble_shard.json b/winterly-common/src/main/resources/assets/winterly/models/block/raw_cryomarble_shard.json new file mode 100644 index 0000000..5b3f88b --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/raw_cryomarble_shard.json @@ -0,0 +1,7 @@ +{ + "render_type": "minecraft:cutout", + "parent": "block/tinted_cross", + "textures": { + "cross": "winterly:block/raw_cryomarble_shard" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/red_gift_box.json b/winterly-common/src/main/resources/assets/winterly/models/block/red_gift_box.json new file mode 100644 index 0000000..8a4c422 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/red_gift_box.json @@ -0,0 +1,7 @@ +{ + "parent": "winterly:block/base/gift_box_model", + "textures": { + "box": "winterly:block/red_gift_box", + "particle": "winterly:block/red_gift_box_particle" + } +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/snow_brick_slab.json b/winterly-common/src/main/resources/assets/winterly/models/block/snow_brick_slab.json new file mode 100644 index 0000000..4edd3df --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/snow_brick_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "block/slab", + "textures": { + "bottom": "winterly:block/snow_bricks", + "top": "winterly:block/snow_bricks", + "side": "winterly:block/snow_bricks" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/snow_brick_slab_top.json b/winterly-common/src/main/resources/assets/winterly/models/block/snow_brick_slab_top.json new file mode 100644 index 0000000..cf7bed7 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/snow_brick_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "block/slab_top", + "textures": { + "bottom": "winterly:block/snow_bricks", + "top": "winterly:block/snow_bricks", + "side": "winterly:block/snow_bricks" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/snow_brick_stairs.json b/winterly-common/src/main/resources/assets/winterly/models/block/snow_brick_stairs.json new file mode 100644 index 0000000..b5ff4c5 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/snow_brick_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/stairs", + "textures": { + "bottom": "winterly:block/snow_bricks", + "top": "winterly:block/snow_bricks", + "side": "winterly:block/snow_bricks" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/snow_brick_stairs_inner.json b/winterly-common/src/main/resources/assets/winterly/models/block/snow_brick_stairs_inner.json new file mode 100644 index 0000000..56bca28 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/snow_brick_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "block/inner_stairs", + "textures": { + "bottom": "winterly:block/snow_bricks", + "top": "winterly:block/snow_bricks", + "side": "winterly:block/snow_bricks" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/snow_brick_stairs_outer.json b/winterly-common/src/main/resources/assets/winterly/models/block/snow_brick_stairs_outer.json new file mode 100644 index 0000000..bab4956 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/snow_brick_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "block/outer_stairs", + "textures": { + "bottom": "winterly:block/snow_bricks", + "top": "winterly:block/snow_bricks", + "side": "winterly:block/snow_bricks" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/snow_bricks.json b/winterly-common/src/main/resources/assets/winterly/models/block/snow_bricks.json new file mode 100644 index 0000000..d43e3fe --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/snow_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "winterly:block/snow_bricks" + } +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/snowball_wall.json b/winterly-common/src/main/resources/assets/winterly/models/block/snowball_wall.json new file mode 100644 index 0000000..5484347 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/snowball_wall.json @@ -0,0 +1,281 @@ +{ + "parent": "block/block", + "textures": { + "wall": "winterly:block/snowball_wall", + "particle": "winterly:block/snow_bricks" + }, + "elements": [ + { + "from": [ + 9, + 0, + 4 + ], + "to": [ + 15, + 6, + 10 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 6, + 6 + ], + "texture": "#wall" + }, + "east": { + "uv": [ + 0, + 0, + 6, + 6 + ], + "texture": "#wall" + }, + "south": { + "uv": [ + 0, + 0, + 6, + 6 + ], + "texture": "#wall" + }, + "west": { + "uv": [ + 0, + 0, + 6, + 6 + ], + "texture": "#wall" + }, + "up": { + "uv": [ + 0, + 0, + 6, + 6 + ], + "texture": "#wall" + }, + "down": { + "uv": [ + 0, + 0, + 6, + 6 + ], + "texture": "#wall" + } + } + }, + { + "from": [ + 12, + 6, + 6 + ], + "to": [ + 18, + 12, + 12 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 6, + 6 + ], + "texture": "#wall" + }, + "east": { + "uv": [ + 0, + 0, + 6, + 6 + ], + "texture": "#wall" + }, + "south": { + "uv": [ + 0, + 0, + 6, + 6 + ], + "texture": "#wall" + }, + "west": { + "uv": [ + 0, + 0, + 6, + 6 + ], + "texture": "#wall" + }, + "up": { + "uv": [ + 0, + 0, + 6, + 6 + ], + "texture": "#wall" + }, + "down": { + "uv": [ + 0, + 0, + 6, + 6 + ], + "texture": "#wall" + } + } + }, + { + "from": [ + 4, + 6, + 5 + ], + "to": [ + 10, + 12, + 11 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 6, + 6 + ], + "texture": "#wall" + }, + "east": { + "uv": [ + 0, + 0, + 6, + 6 + ], + "texture": "#wall" + }, + "south": { + "uv": [ + 0, + 0, + 6, + 6 + ], + "texture": "#wall" + }, + "west": { + "uv": [ + 0, + 0, + 6, + 6 + ], + "texture": "#wall" + }, + "up": { + "uv": [ + 0, + 0, + 6, + 6 + ], + "texture": "#wall" + }, + "down": { + "uv": [ + 0, + 0, + 6, + 6 + ], + "texture": "#wall" + } + } + }, + { + "from": [ + 1, + 0, + 6 + ], + "to": [ + 7, + 6, + 12 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 6, + 6 + ], + "texture": "#wall" + }, + "east": { + "uv": [ + 0, + 0, + 6, + 6 + ], + "texture": "#wall" + }, + "south": { + "uv": [ + 0, + 0, + 6, + 6 + ], + "texture": "#wall" + }, + "west": { + "uv": [ + 0, + 0, + 6, + 6 + ], + "texture": "#wall" + }, + "up": { + "uv": [ + 0, + 0, + 6, + 6 + ], + "texture": "#wall" + }, + "down": { + "uv": [ + 0, + 0, + 6, + 6 + ], + "texture": "#wall" + } + } + } + ] +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/snowguy.json b/winterly-common/src/main/resources/assets/winterly/models/block/snowguy.json new file mode 100644 index 0000000..bc33496 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/snowguy.json @@ -0,0 +1,494 @@ +{ + "render_type": "minecraft:cutout", + "textures": { + "guy": "winterly:block/snowguy_model", + "particle": "winterly:block/snow_bricks" + }, + "elements": [ + { + "from": [ + 4, + 0, + 4 + ], + "to": [ + 12, + 8, + 12 + ], + "faces": { + "north": { + "uv": [ + 12, + 4, + 16, + 8 + ], + "texture": "#guy" + }, + "east": { + "uv": [ + 4, + 4, + 8, + 8 + ], + "texture": "#guy" + }, + "south": { + "uv": [ + 4, + 4, + 8, + 8 + ], + "texture": "#guy" + }, + "west": { + "uv": [ + 4, + 4, + 8, + 8 + ], + "texture": "#guy" + }, + "up": { + "uv": [ + 4, + 4, + 8, + 8 + ], + "texture": "#guy" + }, + "down": { + "uv": [ + 4, + 4, + 8, + 8 + ], + "texture": "#guy" + } + } + }, + { + "from": [ + 5, + 8, + 5 + ], + "to": [ + 11, + 14, + 11 + ], + "faces": { + "north": { + "uv": [ + 13, + 0, + 16, + 3 + ], + "texture": "#guy" + }, + "east": { + "uv": [ + 5, + 0, + 8, + 3 + ], + "texture": "#guy" + }, + "south": { + "uv": [ + 5, + 0, + 8, + 3 + ], + "texture": "#guy" + }, + "west": { + "uv": [ + 5, + 0, + 8, + 3 + ], + "texture": "#guy" + }, + "up": { + "uv": [ + 5, + 0, + 8, + 3 + ], + "texture": "#guy" + }, + "down": { + "uv": [ + 5, + 0, + 8, + 3 + ], + "texture": "#guy" + } + } + }, + { + "from": [ + 5, + 10, + 5 + ], + "to": [ + 6, + 11, + 9 + ], + "rotation": { + "angle": 22.5, + "axis": "y", + "origin": [ + 0, + 0, + 0 + ] + }, + "faces": { + "north": { + "uv": [ + 8, + 10, + 8.5, + 10.5 + ], + "texture": "#guy" + }, + "east": { + "uv": [ + 8, + 10, + 10, + 10.5 + ], + "texture": "#guy" + }, + "south": { + "uv": [ + 8, + 8, + 8.5, + 8.5 + ], + "texture": "#guy" + }, + "west": { + "uv": [ + 8, + 10, + 10, + 10.5 + ], + "texture": "#guy" + }, + "up": { + "uv": [ + 8, + 8, + 8.5, + 10.5 + ], + "texture": "#guy" + }, + "down": { + "uv": [ + 8, + 8, + 8.5, + 10.5 + ], + "texture": "#guy" + } + } + }, + { + "from": [ + -2, + 5, + 8 + ], + "to": [ + 5, + 10, + 8 + ], + "faces": { + "north": { + "uv": [ + 4.5, + 8, + 8, + 10.5 + ], + "texture": "#guy" + }, + "east": { + "uv": [ + 0, + 0, + 0, + 5 + ], + "texture": "#guy" + }, + "south": { + "uv": [ + 0, + 8, + 3.5, + 10.5 + ], + "texture": "#guy" + }, + "west": { + "uv": [ + 0, + 0, + 0, + 5 + ], + "texture": "#guy" + }, + "up": { + "uv": [ + 0, + 0, + 7, + 0 + ], + "texture": "#guy" + }, + "down": { + "uv": [ + 0, + 0, + 7, + 0 + ], + "texture": "#guy" + } + } + }, + { + "from": [ + 11, + 5, + 8 + ], + "to": [ + 18, + 10, + 8 + ], + "faces": { + "north": { + "uv": [ + 0, + 8, + 3.5, + 10.5 + ], + "texture": "#guy" + }, + "east": { + "uv": [ + 0, + 0, + 0, + 5 + ], + "texture": "#guy" + }, + "south": { + "uv": [ + 4.5, + 8, + 8, + 10.5 + ], + "texture": "#guy" + }, + "west": { + "uv": [ + 0, + 0, + 0, + 5 + ], + "texture": "#guy" + }, + "up": { + "uv": [ + 0, + 0, + 7, + 0 + ], + "texture": "#guy" + }, + "down": { + "uv": [ + 0, + 0, + 7, + 0 + ], + "texture": "#guy" + } + } + }, + { + "from": [ + 4.5, + 13.5, + 4.5 + ], + "to": [ + 11.5, + 14.5, + 11.5 + ], + "faces": { + "north": { + "uv": [ + 0, + 12.5, + 3.5, + 13 + ], + "texture": "#guy" + }, + "east": { + "uv": [ + 0, + 15.5, + 3.5, + 16 + ], + "texture": "#guy" + }, + "south": { + "uv": [ + 0, + 12.5, + 3.5, + 13 + ], + "texture": "#guy" + }, + "west": { + "uv": [ + 0, + 15.5, + 3.5, + 16 + ], + "texture": "#guy" + }, + "up": { + "uv": [ + 0, + 12.5, + 3.5, + 16 + ], + "texture": "#guy" + }, + "down": { + "uv": [ + 0, + 12.5, + 3.5, + 16 + ], + "texture": "#guy" + } + } + }, + { + "from": [ + 5.5, + 13.5, + 5.5 + ], + "to": [ + 10.5, + 18.5, + 10.5 + ], + "faces": { + "north": { + "uv": [ + 4.5, + 13.5, + 7, + 16 + ], + "texture": "#guy" + }, + "east": { + "uv": [ + 4.5, + 13.5, + 7, + 16 + ], + "texture": "#guy" + }, + "south": { + "uv": [ + 4.5, + 13.5, + 7, + 16 + ], + "texture": "#guy" + }, + "west": { + "uv": [ + 4.5, + 13.5, + 7, + 16 + ], + "texture": "#guy" + }, + "up": { + "uv": [ + 4.5, + 13.5, + 7, + 16 + ], + "texture": "#guy" + }, + "down": { + "uv": [ + 4.5, + 13.5, + 7, + 16 + ], + "texture": "#guy" + } + } + } + ] +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/white_gift_box.json b/winterly-common/src/main/resources/assets/winterly/models/block/white_gift_box.json new file mode 100644 index 0000000..a806d6d --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/white_gift_box.json @@ -0,0 +1,7 @@ +{ + "parent": "winterly:block/base/gift_box_model", + "textures": { + "box": "winterly:block/white_gift_box", + "particle": "winterly:block/white_gift_box_particle" + } +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/block/yellow_gift_box.json b/winterly-common/src/main/resources/assets/winterly/models/block/yellow_gift_box.json new file mode 100644 index 0000000..1170258 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/block/yellow_gift_box.json @@ -0,0 +1,7 @@ +{ + "parent": "winterly:block/base/gift_box_model", + "textures": { + "box": "winterly:block/yellow_gift_box", + "particle": "winterly:block/yellow_gift_box_particle" + } +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/black_gift_box.json b/winterly-common/src/main/resources/assets/winterly/models/item/black_gift_box.json new file mode 100644 index 0000000..f0ec2e4 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/black_gift_box.json @@ -0,0 +1,3 @@ +{ + "parent": "winterly:block/black_gift_box" +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/blue_candy_cane.json b/winterly-common/src/main/resources/assets/winterly/models/item/blue_candy_cane.json new file mode 100644 index 0000000..f479807 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/blue_candy_cane.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "winterly:item/blue_candy_cane" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/blue_gift_box.json b/winterly-common/src/main/resources/assets/winterly/models/item/blue_gift_box.json new file mode 100644 index 0000000..fb0320f --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/blue_gift_box.json @@ -0,0 +1,3 @@ +{ + "parent": "winterly:block/blue_gift_box" +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/blue_santa_hat.json b/winterly-common/src/main/resources/assets/winterly/models/item/blue_santa_hat.json new file mode 100644 index 0000000..dc3c50b --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/blue_santa_hat.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "winterly:item/blue_santa_hat" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/blue_scarf.json b/winterly-common/src/main/resources/assets/winterly/models/item/blue_scarf.json new file mode 100644 index 0000000..b694201 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/blue_scarf.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "winterly:item/blue_scarf" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/cryomarble.json b/winterly-common/src/main/resources/assets/winterly/models/item/cryomarble.json new file mode 100644 index 0000000..d5d0173 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/cryomarble.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "winterly:item/cryomarble" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/cryomarble_axe.json b/winterly-common/src/main/resources/assets/winterly/models/item/cryomarble_axe.json new file mode 100644 index 0000000..4ca662f --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/cryomarble_axe.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "winterly:item/cryomarble_axe" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/cryomarble_block.json b/winterly-common/src/main/resources/assets/winterly/models/item/cryomarble_block.json new file mode 100644 index 0000000..7b28cc1 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/cryomarble_block.json @@ -0,0 +1,3 @@ +{ + "parent": "winterly:block/cryomarble_block" +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/cryomarble_hoe.json b/winterly-common/src/main/resources/assets/winterly/models/item/cryomarble_hoe.json new file mode 100644 index 0000000..f96e858 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/cryomarble_hoe.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "winterly:item/cryomarble_hoe" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/cryomarble_pickaxe.json b/winterly-common/src/main/resources/assets/winterly/models/item/cryomarble_pickaxe.json new file mode 100644 index 0000000..f46c0f1 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/cryomarble_pickaxe.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "winterly:item/cryomarble_pickaxe" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/cryomarble_shard.json b/winterly-common/src/main/resources/assets/winterly/models/item/cryomarble_shard.json new file mode 100644 index 0000000..60c4bf5 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/cryomarble_shard.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "winterly:item/cryomarble_shard" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/cryomarble_shovel.json b/winterly-common/src/main/resources/assets/winterly/models/item/cryomarble_shovel.json new file mode 100644 index 0000000..e86a5ad --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/cryomarble_shovel.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "winterly:item/cryomarble_shovel" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/cryomarble_sword.json b/winterly-common/src/main/resources/assets/winterly/models/item/cryomarble_sword.json new file mode 100644 index 0000000..1604e43 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/cryomarble_sword.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "winterly:item/cryomarble_sword" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/cyan_gift_box.json b/winterly-common/src/main/resources/assets/winterly/models/item/cyan_gift_box.json new file mode 100644 index 0000000..b499f0d --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/cyan_gift_box.json @@ -0,0 +1,3 @@ +{ + "parent": "winterly:block/cyan_gift_box" +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/dense_snow.json b/winterly-common/src/main/resources/assets/winterly/models/item/dense_snow.json new file mode 100644 index 0000000..1b8ab98 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/dense_snow.json @@ -0,0 +1,3 @@ +{ + "parent": "winterly:block/dense_snow" +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/dense_snow_slab.json b/winterly-common/src/main/resources/assets/winterly/models/item/dense_snow_slab.json new file mode 100644 index 0000000..67d9878 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/dense_snow_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "winterly:block/dense_snow_slab" +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/dense_snow_stairs.json b/winterly-common/src/main/resources/assets/winterly/models/item/dense_snow_stairs.json new file mode 100644 index 0000000..e554c99 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/dense_snow_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "winterly:block/dense_snow_stairs" +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/frozen_flower.json b/winterly-common/src/main/resources/assets/winterly/models/item/frozen_flower.json new file mode 100644 index 0000000..6ee46eb --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/frozen_flower.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "winterly:block/frozen_flower" + } +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/frozen_grass.json b/winterly-common/src/main/resources/assets/winterly/models/item/frozen_grass.json new file mode 100644 index 0000000..3a5abd1 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/frozen_grass.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "winterly:block/frozen_grass" + } +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/garland_lights.json b/winterly-common/src/main/resources/assets/winterly/models/item/garland_lights.json new file mode 100644 index 0000000..7b2d23c --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/garland_lights.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "winterly:block/garland_lights" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/green_candy_cane.json b/winterly-common/src/main/resources/assets/winterly/models/item/green_candy_cane.json new file mode 100644 index 0000000..3cc1d9b --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/green_candy_cane.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "winterly:item/green_candy_cane" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/green_gift_box.json b/winterly-common/src/main/resources/assets/winterly/models/item/green_gift_box.json new file mode 100644 index 0000000..ca1b090 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/green_gift_box.json @@ -0,0 +1,3 @@ +{ + "parent": "winterly:block/green_gift_box" +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/green_scarf.json b/winterly-common/src/main/resources/assets/winterly/models/item/green_scarf.json new file mode 100644 index 0000000..5db5952 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/green_scarf.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "winterly:item/green_scarf" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/icicle.json b/winterly-common/src/main/resources/assets/winterly/models/item/icicle.json new file mode 100644 index 0000000..9403431 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/icicle.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "winterly:item/icicle" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/icicle_bars.json b/winterly-common/src/main/resources/assets/winterly/models/item/icicle_bars.json new file mode 100644 index 0000000..06291b2 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/icicle_bars.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "winterly:block/icicle_bars" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/icicle_block.json b/winterly-common/src/main/resources/assets/winterly/models/item/icicle_block.json new file mode 100644 index 0000000..ddab6e4 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/icicle_block.json @@ -0,0 +1,3 @@ +{ + "parent": "winterly:block/icicle_block" +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/icicle_pane.json b/winterly-common/src/main/resources/assets/winterly/models/item/icicle_pane.json new file mode 100644 index 0000000..aaafcde --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/icicle_pane.json @@ -0,0 +1,7 @@ +{ + "render_type": "minecraft:translucent", + "parent": "item/generated", + "textures": { + "layer0": "winterly:block/icicle_block" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/orange_gift_box.json b/winterly-common/src/main/resources/assets/winterly/models/item/orange_gift_box.json new file mode 100644 index 0000000..8e81e64 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/orange_gift_box.json @@ -0,0 +1,3 @@ +{ + "parent": "winterly:block/orange_gift_box" +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/packed_icicle_block.json b/winterly-common/src/main/resources/assets/winterly/models/item/packed_icicle_block.json new file mode 100644 index 0000000..9cefc1f --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/packed_icicle_block.json @@ -0,0 +1,3 @@ +{ + "parent": "winterly:block/packed_icicle_block" +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/purple_gift_box.json b/winterly-common/src/main/resources/assets/winterly/models/item/purple_gift_box.json new file mode 100644 index 0000000..386a690 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/purple_gift_box.json @@ -0,0 +1,3 @@ +{ + "parent": "winterly:block/purple_gift_box" +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/rainbow_scarf.json b/winterly-common/src/main/resources/assets/winterly/models/item/rainbow_scarf.json new file mode 100644 index 0000000..1fb8a38 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/rainbow_scarf.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "winterly:item/rainbow_scarf" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/rainy_garland_lights.json b/winterly-common/src/main/resources/assets/winterly/models/item/rainy_garland_lights.json new file mode 100644 index 0000000..b67ddd6 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/rainy_garland_lights.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "winterly:block/rainy_garland_lights" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/raw_cryomarble_shard.json b/winterly-common/src/main/resources/assets/winterly/models/item/raw_cryomarble_shard.json new file mode 100644 index 0000000..12e36dc --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/raw_cryomarble_shard.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "winterly:block/raw_cryomarble_shard" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/red_candy_cane.json b/winterly-common/src/main/resources/assets/winterly/models/item/red_candy_cane.json new file mode 100644 index 0000000..3ef8da3 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/red_candy_cane.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "winterly:item/red_candy_cane" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/red_gift_box.json b/winterly-common/src/main/resources/assets/winterly/models/item/red_gift_box.json new file mode 100644 index 0000000..9b83613 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/red_gift_box.json @@ -0,0 +1,3 @@ +{ + "parent": "winterly:block/red_gift_box" +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/red_santa_hat.json b/winterly-common/src/main/resources/assets/winterly/models/item/red_santa_hat.json new file mode 100644 index 0000000..c471817 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/red_santa_hat.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "winterly:item/red_santa_hat" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/red_scarf.json b/winterly-common/src/main/resources/assets/winterly/models/item/red_scarf.json new file mode 100644 index 0000000..0693bcb --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/red_scarf.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "winterly:item/red_scarf" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/snow_brick_slab.json b/winterly-common/src/main/resources/assets/winterly/models/item/snow_brick_slab.json new file mode 100644 index 0000000..58973e6 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/snow_brick_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "winterly:block/snow_brick_slab" +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/snow_brick_stairs.json b/winterly-common/src/main/resources/assets/winterly/models/item/snow_brick_stairs.json new file mode 100644 index 0000000..7e4a37f --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/snow_brick_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "winterly:block/snow_brick_stairs" +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/snow_bricks.json b/winterly-common/src/main/resources/assets/winterly/models/item/snow_bricks.json new file mode 100644 index 0000000..5c9fa8b --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/snow_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "winterly:block/snow_bricks" +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/snowball_wall.json b/winterly-common/src/main/resources/assets/winterly/models/item/snowball_wall.json new file mode 100644 index 0000000..6992605 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/snowball_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "winterly:block/snowball_wall" +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/snowguy.json b/winterly-common/src/main/resources/assets/winterly/models/item/snowguy.json new file mode 100644 index 0000000..24209cc --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/snowguy.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "winterly:item/snowguy" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/white_gift_box.json b/winterly-common/src/main/resources/assets/winterly/models/item/white_gift_box.json new file mode 100644 index 0000000..1db91ab --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/white_gift_box.json @@ -0,0 +1,3 @@ +{ + "parent": "winterly:block/white_gift_box" +} diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/white_scarf.json b/winterly-common/src/main/resources/assets/winterly/models/item/white_scarf.json new file mode 100644 index 0000000..fe90f61 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/white_scarf.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "winterly:item/white_scarf" + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/models/item/yellow_gift_box.json b/winterly-common/src/main/resources/assets/winterly/models/item/yellow_gift_box.json new file mode 100644 index 0000000..aedc4f9 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/models/item/yellow_gift_box.json @@ -0,0 +1,3 @@ +{ + "parent": "winterly:block/yellow_gift_box" +} diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/black_gift_box.png b/winterly-common/src/main/resources/assets/winterly/textures/block/black_gift_box.png new file mode 100644 index 0000000..2ab3c6b Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/black_gift_box.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/black_gift_box_particle.png b/winterly-common/src/main/resources/assets/winterly/textures/block/black_gift_box_particle.png new file mode 100644 index 0000000..9ec8b2c Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/black_gift_box_particle.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/blue_gift_box.png b/winterly-common/src/main/resources/assets/winterly/textures/block/blue_gift_box.png new file mode 100644 index 0000000..129c3df Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/blue_gift_box.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/blue_gift_box_particle.png b/winterly-common/src/main/resources/assets/winterly/textures/block/blue_gift_box_particle.png new file mode 100644 index 0000000..0593146 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/blue_gift_box_particle.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/cryomarble_block.png b/winterly-common/src/main/resources/assets/winterly/textures/block/cryomarble_block.png new file mode 100644 index 0000000..9722802 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/cryomarble_block.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/cyan_gift_box.png b/winterly-common/src/main/resources/assets/winterly/textures/block/cyan_gift_box.png new file mode 100644 index 0000000..512e4f8 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/cyan_gift_box.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/cyan_gift_box_particle.png b/winterly-common/src/main/resources/assets/winterly/textures/block/cyan_gift_box_particle.png new file mode 100644 index 0000000..9ffbacd Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/cyan_gift_box_particle.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/dense_snow.png b/winterly-common/src/main/resources/assets/winterly/textures/block/dense_snow.png new file mode 100644 index 0000000..bdde711 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/dense_snow.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/frozen_flower.png b/winterly-common/src/main/resources/assets/winterly/textures/block/frozen_flower.png new file mode 100644 index 0000000..3eaaac6 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/frozen_flower.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/frozen_grass.png b/winterly-common/src/main/resources/assets/winterly/textures/block/frozen_grass.png new file mode 100644 index 0000000..6277abb Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/frozen_grass.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/garland_lights.png b/winterly-common/src/main/resources/assets/winterly/textures/block/garland_lights.png new file mode 100644 index 0000000..b5d74cf Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/garland_lights.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/garland_lights.png.mcmeta b/winterly-common/src/main/resources/assets/winterly/textures/block/garland_lights.png.mcmeta new file mode 100644 index 0000000..519b9d3 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/textures/block/garland_lights.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 20 + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/green_gift_box.png b/winterly-common/src/main/resources/assets/winterly/textures/block/green_gift_box.png new file mode 100644 index 0000000..b84abd5 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/green_gift_box.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/green_gift_box_particle.png b/winterly-common/src/main/resources/assets/winterly/textures/block/green_gift_box_particle.png new file mode 100644 index 0000000..9577947 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/green_gift_box_particle.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/icicle_1.png b/winterly-common/src/main/resources/assets/winterly/textures/block/icicle_1.png new file mode 100644 index 0000000..7231354 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/icicle_1.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/icicle_2.png b/winterly-common/src/main/resources/assets/winterly/textures/block/icicle_2.png new file mode 100644 index 0000000..25b5956 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/icicle_2.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/icicle_3.png b/winterly-common/src/main/resources/assets/winterly/textures/block/icicle_3.png new file mode 100644 index 0000000..2dbcc2e Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/icicle_3.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/icicle_bars.png b/winterly-common/src/main/resources/assets/winterly/textures/block/icicle_bars.png new file mode 100644 index 0000000..46f8b2b Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/icicle_bars.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/icicle_block.png b/winterly-common/src/main/resources/assets/winterly/textures/block/icicle_block.png new file mode 100644 index 0000000..38eda2e Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/icicle_block.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/orange_gift_box.png b/winterly-common/src/main/resources/assets/winterly/textures/block/orange_gift_box.png new file mode 100644 index 0000000..075d607 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/orange_gift_box.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/orange_gift_box_particle.png b/winterly-common/src/main/resources/assets/winterly/textures/block/orange_gift_box_particle.png new file mode 100644 index 0000000..7faafd4 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/orange_gift_box_particle.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/packed_icicle_block.png b/winterly-common/src/main/resources/assets/winterly/textures/block/packed_icicle_block.png new file mode 100644 index 0000000..4848f50 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/packed_icicle_block.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/purple_gift_box.png b/winterly-common/src/main/resources/assets/winterly/textures/block/purple_gift_box.png new file mode 100644 index 0000000..97c9544 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/purple_gift_box.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/purple_gift_box_particle.png b/winterly-common/src/main/resources/assets/winterly/textures/block/purple_gift_box_particle.png new file mode 100644 index 0000000..0538113 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/purple_gift_box_particle.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/rainy_garland_lights.png b/winterly-common/src/main/resources/assets/winterly/textures/block/rainy_garland_lights.png new file mode 100644 index 0000000..3b386c3 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/rainy_garland_lights.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/rainy_garland_lights.png.mcmeta b/winterly-common/src/main/resources/assets/winterly/textures/block/rainy_garland_lights.png.mcmeta new file mode 100644 index 0000000..254b603 --- /dev/null +++ b/winterly-common/src/main/resources/assets/winterly/textures/block/rainy_garland_lights.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 5, + "interpolate": true + } +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/raw_cryomarble_shard.png b/winterly-common/src/main/resources/assets/winterly/textures/block/raw_cryomarble_shard.png new file mode 100644 index 0000000..c356b95 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/raw_cryomarble_shard.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/red_gift_box.png b/winterly-common/src/main/resources/assets/winterly/textures/block/red_gift_box.png new file mode 100644 index 0000000..e769fd4 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/red_gift_box.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/red_gift_box_particle.png b/winterly-common/src/main/resources/assets/winterly/textures/block/red_gift_box_particle.png new file mode 100644 index 0000000..df90142 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/red_gift_box_particle.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/snow_bricks.png b/winterly-common/src/main/resources/assets/winterly/textures/block/snow_bricks.png new file mode 100644 index 0000000..65e4e4f Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/snow_bricks.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/snowball_wall.png b/winterly-common/src/main/resources/assets/winterly/textures/block/snowball_wall.png new file mode 100644 index 0000000..3131d88 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/snowball_wall.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/snowguy_model.png b/winterly-common/src/main/resources/assets/winterly/textures/block/snowguy_model.png new file mode 100644 index 0000000..77b2a52 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/snowguy_model.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/white_gift_box.png b/winterly-common/src/main/resources/assets/winterly/textures/block/white_gift_box.png new file mode 100644 index 0000000..565127e Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/white_gift_box.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/white_gift_box_particle.png b/winterly-common/src/main/resources/assets/winterly/textures/block/white_gift_box_particle.png new file mode 100644 index 0000000..33e2b44 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/white_gift_box_particle.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/yellow_gift_box.png b/winterly-common/src/main/resources/assets/winterly/textures/block/yellow_gift_box.png new file mode 100644 index 0000000..0f9d1ee Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/yellow_gift_box.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/block/yellow_gift_box_particle.png b/winterly-common/src/main/resources/assets/winterly/textures/block/yellow_gift_box_particle.png new file mode 100644 index 0000000..a39e97e Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/block/yellow_gift_box_particle.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/entity/blue_santa_hat.png b/winterly-common/src/main/resources/assets/winterly/textures/entity/blue_santa_hat.png new file mode 100644 index 0000000..2fd18ca Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/entity/blue_santa_hat.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/entity/blue_scarf.png b/winterly-common/src/main/resources/assets/winterly/textures/entity/blue_scarf.png new file mode 100644 index 0000000..0139a97 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/entity/blue_scarf.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/entity/green_scarf.png b/winterly-common/src/main/resources/assets/winterly/textures/entity/green_scarf.png new file mode 100644 index 0000000..b4eb284 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/entity/green_scarf.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/entity/rainbow_scarf.png b/winterly-common/src/main/resources/assets/winterly/textures/entity/rainbow_scarf.png new file mode 100644 index 0000000..661be27 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/entity/rainbow_scarf.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/entity/red_santa_hat.png b/winterly-common/src/main/resources/assets/winterly/textures/entity/red_santa_hat.png new file mode 100644 index 0000000..c71b250 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/entity/red_santa_hat.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/entity/red_scarf.png b/winterly-common/src/main/resources/assets/winterly/textures/entity/red_scarf.png new file mode 100644 index 0000000..d5b1937 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/entity/red_scarf.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/entity/white_scarf.png b/winterly-common/src/main/resources/assets/winterly/textures/entity/white_scarf.png new file mode 100644 index 0000000..378f6a5 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/entity/white_scarf.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/gui/icons.png b/winterly-common/src/main/resources/assets/winterly/textures/gui/icons.png new file mode 100644 index 0000000..6dfc225 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/gui/icons.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/item/blue_candy_cane.png b/winterly-common/src/main/resources/assets/winterly/textures/item/blue_candy_cane.png new file mode 100644 index 0000000..9223d13 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/item/blue_candy_cane.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/item/blue_santa_hat.png b/winterly-common/src/main/resources/assets/winterly/textures/item/blue_santa_hat.png new file mode 100644 index 0000000..3aaa032 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/item/blue_santa_hat.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/item/blue_scarf.png b/winterly-common/src/main/resources/assets/winterly/textures/item/blue_scarf.png new file mode 100644 index 0000000..ea2b26a Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/item/blue_scarf.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/item/cryomarble.png b/winterly-common/src/main/resources/assets/winterly/textures/item/cryomarble.png new file mode 100644 index 0000000..c6627c8 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/item/cryomarble.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/item/cryomarble_axe.png b/winterly-common/src/main/resources/assets/winterly/textures/item/cryomarble_axe.png new file mode 100644 index 0000000..a181da0 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/item/cryomarble_axe.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/item/cryomarble_hoe.png b/winterly-common/src/main/resources/assets/winterly/textures/item/cryomarble_hoe.png new file mode 100644 index 0000000..b45a9b1 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/item/cryomarble_hoe.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/item/cryomarble_pickaxe.png b/winterly-common/src/main/resources/assets/winterly/textures/item/cryomarble_pickaxe.png new file mode 100644 index 0000000..1d0201c Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/item/cryomarble_pickaxe.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/item/cryomarble_shard.png b/winterly-common/src/main/resources/assets/winterly/textures/item/cryomarble_shard.png new file mode 100644 index 0000000..c04bd6b Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/item/cryomarble_shard.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/item/cryomarble_shovel.png b/winterly-common/src/main/resources/assets/winterly/textures/item/cryomarble_shovel.png new file mode 100644 index 0000000..b8f2d51 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/item/cryomarble_shovel.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/item/cryomarble_sword.png b/winterly-common/src/main/resources/assets/winterly/textures/item/cryomarble_sword.png new file mode 100644 index 0000000..9706659 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/item/cryomarble_sword.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/item/green_candy_cane.png b/winterly-common/src/main/resources/assets/winterly/textures/item/green_candy_cane.png new file mode 100644 index 0000000..bb6c2c3 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/item/green_candy_cane.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/item/green_scarf.png b/winterly-common/src/main/resources/assets/winterly/textures/item/green_scarf.png new file mode 100644 index 0000000..00a52ec Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/item/green_scarf.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/item/icicle.png b/winterly-common/src/main/resources/assets/winterly/textures/item/icicle.png new file mode 100644 index 0000000..9c7e99f Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/item/icicle.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/item/rainbow_scarf.png b/winterly-common/src/main/resources/assets/winterly/textures/item/rainbow_scarf.png new file mode 100644 index 0000000..8880d01 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/item/rainbow_scarf.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/item/red_candy_cane.png b/winterly-common/src/main/resources/assets/winterly/textures/item/red_candy_cane.png new file mode 100644 index 0000000..d686c07 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/item/red_candy_cane.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/item/red_santa_hat.png b/winterly-common/src/main/resources/assets/winterly/textures/item/red_santa_hat.png new file mode 100644 index 0000000..cc64370 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/item/red_santa_hat.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/item/red_scarf.png b/winterly-common/src/main/resources/assets/winterly/textures/item/red_scarf.png new file mode 100644 index 0000000..c67f712 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/item/red_scarf.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/item/snowguy.png b/winterly-common/src/main/resources/assets/winterly/textures/item/snowguy.png new file mode 100644 index 0000000..c9ff197 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/item/snowguy.png differ diff --git a/winterly-common/src/main/resources/assets/winterly/textures/item/white_scarf.png b/winterly-common/src/main/resources/assets/winterly/textures/item/white_scarf.png new file mode 100644 index 0000000..afe6499 Binary files /dev/null and b/winterly-common/src/main/resources/assets/winterly/textures/item/white_scarf.png differ diff --git a/winterly-common/src/main/resources/data/minecraft/tags/block/beacon_base_blocks.json b/winterly-common/src/main/resources/data/minecraft/tags/block/beacon_base_blocks.json new file mode 100644 index 0000000..978cefb --- /dev/null +++ b/winterly-common/src/main/resources/data/minecraft/tags/block/beacon_base_blocks.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "winterly:cryomarble_block" + ] +} diff --git a/winterly-common/src/main/resources/data/minecraft/tags/block/mangrove_roots_can_grow_through.json b/winterly-common/src/main/resources/data/minecraft/tags/block/mangrove_roots_can_grow_through.json new file mode 100644 index 0000000..1bc6a39 --- /dev/null +++ b/winterly-common/src/main/resources/data/minecraft/tags/block/mangrove_roots_can_grow_through.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "winterly:frozen_grass" + ] +} diff --git a/winterly-common/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json b/winterly-common/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json new file mode 100644 index 0000000..d77a621 --- /dev/null +++ b/winterly-common/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -0,0 +1,12 @@ +{ + "replace": false, + "values": [ + "winterly:raw_cryomarble_shard", + "winterly:icicle", + "winterly:icicle_block", + "winterly:packed_icicle_block", + "winterly:icicle_bars", + "winterly:icicle_pane", + "winterly:cryomarble_block" + ] +} diff --git a/winterly-common/src/main/resources/data/minecraft/tags/block/mineable/shovel.json b/winterly-common/src/main/resources/data/minecraft/tags/block/mineable/shovel.json new file mode 100644 index 0000000..3ad4e4a --- /dev/null +++ b/winterly-common/src/main/resources/data/minecraft/tags/block/mineable/shovel.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "winterly:dense_snow", + "winterly:dense_snow_stairs", + "winterly:dense_snow_slab", + "winterly:snow_bricks", + "winterly:snowball_wall", + "winterly:snow_brick_stairs", + "winterly:snow_brick_slab", + "winterly:frozen_grass" + ] +} diff --git a/winterly-common/src/main/resources/data/minecraft/tags/block/slabs.json b/winterly-common/src/main/resources/data/minecraft/tags/block/slabs.json new file mode 100644 index 0000000..363b392 --- /dev/null +++ b/winterly-common/src/main/resources/data/minecraft/tags/block/slabs.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "winterly:snow_brick_slab", + "winterly:dense_snow_slab" + ] +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/data/minecraft/tags/block/snow.json b/winterly-common/src/main/resources/data/minecraft/tags/block/snow.json new file mode 100644 index 0000000..14100c0 --- /dev/null +++ b/winterly-common/src/main/resources/data/minecraft/tags/block/snow.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "winterly:dense_snow", + "winterly:snow_bricks", + "winterly:frozen_grass" + ] +} diff --git a/winterly-common/src/main/resources/data/minecraft/tags/block/stairs.json b/winterly-common/src/main/resources/data/minecraft/tags/block/stairs.json new file mode 100644 index 0000000..3180093 --- /dev/null +++ b/winterly-common/src/main/resources/data/minecraft/tags/block/stairs.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "winterly:snow_brick_stairs", + "winterly:dense_snow_stairs" + ] +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/data/winterly/loot_table/blocks/cryomarble_block.json b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/cryomarble_block.json new file mode 100644 index 0000000..1b44632 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/cryomarble_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "winterly:cryomarble_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} diff --git a/winterly-common/src/main/resources/data/winterly/loot_table/blocks/dense_snow.json b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/dense_snow.json new file mode 100644 index 0000000..6199b93 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/dense_snow.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "winterly:dense_snow" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/data/winterly/loot_table/blocks/dense_snow_slab.json b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/dense_snow_slab.json new file mode 100644 index 0000000..22b1c6e --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/dense_snow_slab.json @@ -0,0 +1,34 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "winterly:dense_snow_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2.0, + "add": false + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "winterly:dense_snow_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/data/winterly/loot_table/blocks/dense_snow_stairs.json b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/dense_snow_stairs.json new file mode 100644 index 0000000..456eab0 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/dense_snow_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "winterly:dense_snow_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/data/winterly/loot_table/blocks/frozen_flower.json b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/frozen_flower.json new file mode 100644 index 0000000..2bd5ba6 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/frozen_flower.json @@ -0,0 +1,395 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": {} + } + ], + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "block": "winterly:frozen_flower", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "0" + } + } + ], + "functions": [ + { + "add": false, + "count": 1.0, + "function": "minecraft:set_count" + } + ], + "name": "winterly:frozen_flower" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "winterly:frozen_flower", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "1" + } + } + ], + "functions": [ + { + "add": false, + "count": 1.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:snowball" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "winterly:frozen_flower", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "2" + } + } + ], + "functions": [ + { + "add": false, + "count": 2.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:snowball" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "winterly:frozen_flower", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "3" + } + } + ], + "functions": [ + { + "add": false, + "count": 3.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:snowball" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "winterly:frozen_flower", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "4" + } + } + ], + "functions": [ + { + "add": false, + "count": 4.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:snowball" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "winterly:frozen_flower", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "5" + } + } + ], + "functions": [ + { + "add": false, + "count": 5.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:snowball" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "winterly:frozen_flower", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "6" + } + } + ], + "functions": [ + { + "add": false, + "count": 6.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:snowball" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "winterly:frozen_flower", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "7" + } + } + ], + "functions": [ + { + "add": false, + "count": 7.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:snowball" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "winterly:frozen_flower", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "8" + } + } + ], + "functions": [ + { + "add": false, + "count": 8.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:snowball" + } + ], + "conditions": [ + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + } + ] + }, + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "block": "winterly:frozen_flower", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "0" + } + } + ], + "functions": [ + { + "add": false, + "count": 1.0, + "function": "minecraft:set_count" + } + ], + "name": "winterly:frozen_flower" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "winterly:frozen_flower", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "1" + } + } + ], + "functions": [ + { + "add": false, + "count": 1.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:snow" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "winterly:frozen_flower", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "2" + } + } + ], + "functions": [ + { + "add": false, + "count": 2.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:snow" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "winterly:frozen_flower", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "3" + } + } + ], + "functions": [ + { + "add": false, + "count": 3.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:snow" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "winterly:frozen_flower", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "4" + } + } + ], + "functions": [ + { + "add": false, + "count": 4.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:snow" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "winterly:frozen_flower", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "5" + } + } + ], + "functions": [ + { + "add": false, + "count": 5.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:snow" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "winterly:frozen_flower", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "6" + } + } + ], + "functions": [ + { + "add": false, + "count": 6.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:snow" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "winterly:frozen_flower", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "7" + } + } + ], + "functions": [ + { + "add": false, + "count": 7.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:snow" + }, + { + "type": "minecraft:item", + "name": "minecraft:snow_block" + } + ] + } + ] + } + ], + "rolls": 1.0 + } + ] +} diff --git a/winterly-common/src/main/resources/data/winterly/loot_table/blocks/frozen_grass.json b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/frozen_grass.json new file mode 100644 index 0000000..cf48ea5 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/frozen_grass.json @@ -0,0 +1,355 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": {} + } + ], + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "block": "winterly:frozen_grass", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "1" + } + } + ], + "functions": [ + { + "add": false, + "count": 1.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:snowball" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "winterly:frozen_grass", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "2" + } + } + ], + "functions": [ + { + "add": false, + "count": 2.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:snowball" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "winterly:frozen_grass", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "3" + } + } + ], + "functions": [ + { + "add": false, + "count": 3.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:snowball" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "winterly:frozen_grass", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "4" + } + } + ], + "functions": [ + { + "add": false, + "count": 4.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:snowball" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "winterly:frozen_grass", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "5" + } + } + ], + "functions": [ + { + "add": false, + "count": 5.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:snowball" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "winterly:frozen_grass", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "6" + } + } + ], + "functions": [ + { + "add": false, + "count": 6.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:snowball" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "winterly:frozen_grass", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "7" + } + } + ], + "functions": [ + { + "add": false, + "count": 7.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:snowball" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "winterly:frozen_grass", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "8" + } + } + ], + "functions": [ + { + "add": false, + "count": 8.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:snowball" + } + ], + "conditions": [ + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + } + ] + }, + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "block": "winterly:frozen_grass", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "1" + } + } + ], + "functions": [ + { + "add": false, + "count": 1.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:snow" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "winterly:frozen_grass", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "2" + } + } + ], + "functions": [ + { + "add": false, + "count": 2.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:snow" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "winterly:frozen_grass", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "3" + } + } + ], + "functions": [ + { + "add": false, + "count": 3.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:snow" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "winterly:frozen_grass", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "4" + } + } + ], + "functions": [ + { + "add": false, + "count": 4.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:snow" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "winterly:frozen_grass", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "5" + } + } + ], + "functions": [ + { + "add": false, + "count": 5.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:snow" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "winterly:frozen_grass", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "6" + } + } + ], + "functions": [ + { + "add": false, + "count": 6.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:snow" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "block": "winterly:frozen_grass", + "condition": "minecraft:block_state_property", + "properties": { + "layers": "7" + } + } + ], + "functions": [ + { + "add": false, + "count": 7.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:snow" + }, + { + "type": "minecraft:item", + "name": "minecraft:snow_block" + } + ] + } + ] + } + ], + "rolls": 1.0 + } + ] +} diff --git a/winterly-common/src/main/resources/data/winterly/loot_table/blocks/garland_lights.json b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/garland_lights.json new file mode 100644 index 0000000..8cdfd97 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/garland_lights.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "winterly:garland_lights" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/data/winterly/loot_table/blocks/icicle.json b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/icicle.json new file mode 100644 index 0000000..bd9a48a --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/icicle.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "winterly:icicle" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/data/winterly/loot_table/blocks/icicle_bars.json b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/icicle_bars.json new file mode 100644 index 0000000..c583621 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/icicle_bars.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "winterly:icicle_bars" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/data/winterly/loot_table/blocks/icicle_block.json b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/icicle_block.json new file mode 100644 index 0000000..860f00d --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/icicle_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "winterly:icicle_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/data/winterly/loot_table/blocks/icicle_pane.json b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/icicle_pane.json new file mode 100644 index 0000000..f24a467 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/icicle_pane.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "winterly:icicle_pane" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/data/winterly/loot_table/blocks/packed_icicle_block.json b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/packed_icicle_block.json new file mode 100644 index 0000000..9b8c217 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/packed_icicle_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "winterly:packed_icicle_block" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} diff --git a/winterly-common/src/main/resources/data/winterly/loot_table/blocks/rainy_garland_lights.json b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/rainy_garland_lights.json new file mode 100644 index 0000000..5b6f0b4 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/rainy_garland_lights.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "winterly:rainy_garland_lights" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/data/winterly/loot_table/blocks/raw_cryomarble_shard.json b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/raw_cryomarble_shard.json new file mode 100644 index 0000000..540a6c5 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/raw_cryomarble_shard.json @@ -0,0 +1,44 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "winterly:raw_cryomarble_shard" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "name": "winterly:cryomarble_shard" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/data/winterly/loot_table/blocks/snow_brick_slab.json b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/snow_brick_slab.json new file mode 100644 index 0000000..5c992c3 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/snow_brick_slab.json @@ -0,0 +1,34 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:set_count", + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "winterly:snow_brick_slab", + "properties": { + "type": "double" + } + } + ], + "count": 2.0, + "add": false + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "winterly:snow_brick_slab" + } + ] + } + ] +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/data/winterly/loot_table/blocks/snow_brick_stairs.json b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/snow_brick_stairs.json new file mode 100644 index 0000000..520fe1e --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/snow_brick_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "winterly:snow_brick_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/data/winterly/loot_table/blocks/snow_bricks.json b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/snow_bricks.json new file mode 100644 index 0000000..26475c8 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/snow_bricks.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "winterly:snow_bricks" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/data/winterly/loot_table/blocks/snowball_wall.json b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/snowball_wall.json new file mode 100644 index 0000000..1c2358b --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/snowball_wall.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "winterly:snowball_wall" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/data/winterly/loot_table/blocks/snowguy.json b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/snowguy.json new file mode 100644 index 0000000..b493156 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/loot_table/blocks/snowguy.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "winterly:snowguy" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/winterly-common/src/main/resources/data/winterly/recipe/black_gift_box.json b/winterly-common/src/main/resources/data/winterly/recipe/black_gift_box.json new file mode 100644 index 0000000..9e9193b --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/black_gift_box.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#D#", + "# #", + "###" + ], + "key": { + "#": { + "item": "minecraft:paper" + }, + "D": { + "item": "minecraft:black_dye" + } + }, + "result": { + "id": "winterly:black_gift_box", + "count": 1 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/blue_candy_cane.json b/winterly-common/src/main/resources/data/winterly/recipe/blue_candy_cane.json new file mode 100644 index 0000000..90e3ca2 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/blue_candy_cane.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "## ", + "HD ", + "# " + ], + "key": { + "#": { + "item": "minecraft:sugar" + }, + "D": { + "item": "minecraft:blue_dye" + }, + "H": { + "item": "minecraft:honey_bottle" + } + }, + "result": { + "id": "winterly:blue_candy_cane", + "count": 4 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/blue_gift_box.json b/winterly-common/src/main/resources/data/winterly/recipe/blue_gift_box.json new file mode 100644 index 0000000..ca3dcd0 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/blue_gift_box.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#D#", + "# #", + "###" + ], + "key": { + "#": { + "item": "minecraft:paper" + }, + "D": { + "item": "minecraft:blue_dye" + } + }, + "result": { + "id": "winterly:blue_gift_box", + "count": 1 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/blue_santa_hat.json b/winterly-common/src/main/resources/data/winterly/recipe/blue_santa_hat.json new file mode 100644 index 0000000..10607be --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/blue_santa_hat.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " # ", + "RRR", + "###" + ], + "key": { + "#": { + "item": "minecraft:white_wool" + }, + "R": { + "item": "minecraft:blue_wool" + } + }, + "result": { + "id": "winterly:blue_santa_hat", + "count": 1 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/blue_scarf.json b/winterly-common/src/main/resources/data/winterly/recipe/blue_scarf.json new file mode 100644 index 0000000..669b72c --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/blue_scarf.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " #", + "###", + "# " + ], + "key": { + "#": { + "item": "minecraft:blue_wool" + } + }, + "result": { + "id": "winterly:blue_scarf", + "count": 1 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/cryomarble.json b/winterly-common/src/main/resources/data/winterly/recipe/cryomarble.json new file mode 100644 index 0000000..0d31550 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/cryomarble.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "winterly:cryomarble_shard" + } + }, + "result": { + "id": "winterly:cryomarble", + "count": 1 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/cryomarble_axe.json b/winterly-common/src/main/resources/data/winterly/recipe/cryomarble_axe.json new file mode 100644 index 0000000..a3389b4 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/cryomarble_axe.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:iron_axe" + }, + { + "item": "winterly:cryomarble" + } + ], + "result": { + "id": "winterly:cryomarble_axe", + "count": 1 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/cryomarble_block.json b/winterly-common/src/main/resources/data/winterly/recipe/cryomarble_block.json new file mode 100644 index 0000000..0cfc7d2 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/cryomarble_block.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": { + "item": "winterly:cryomarble" + } + }, + "result": { + "id": "winterly:cryomarble_block", + "count": 1 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/cryomarble_from_cryomarble_block.json b/winterly-common/src/main/resources/data/winterly/recipe/cryomarble_from_cryomarble_block.json new file mode 100644 index 0000000..3b08153 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/cryomarble_from_cryomarble_block.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#" + ], + "key": { + "#": { + "item": "winterly:cryomarble_block" + } + }, + "result": { + "id": "winterly:cryomarble", + "count": 9 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/cryomarble_hoe.json b/winterly-common/src/main/resources/data/winterly/recipe/cryomarble_hoe.json new file mode 100644 index 0000000..da0e1bc --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/cryomarble_hoe.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:iron_hoe" + }, + { + "item": "winterly:cryomarble" + } + ], + "result": { + "id": "winterly:cryomarble_hoe", + "count": 1 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/cryomarble_pickaxe.json b/winterly-common/src/main/resources/data/winterly/recipe/cryomarble_pickaxe.json new file mode 100644 index 0000000..f5031b4 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/cryomarble_pickaxe.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:iron_pickaxe" + }, + { + "item": "winterly:cryomarble" + } + ], + "result": { + "id": "winterly:cryomarble_pickaxe", + "count": 1 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/cryomarble_shovel.json b/winterly-common/src/main/resources/data/winterly/recipe/cryomarble_shovel.json new file mode 100644 index 0000000..a8c6963 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/cryomarble_shovel.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:iron_shovel" + }, + { + "item": "winterly:cryomarble" + } + ], + "result": { + "id": "winterly:cryomarble_shovel", + "count": 1 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/cryomarble_sword.json b/winterly-common/src/main/resources/data/winterly/recipe/cryomarble_sword.json new file mode 100644 index 0000000..ea8e827 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/cryomarble_sword.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:iron_sword" + }, + { + "item": "winterly:cryomarble" + } + ], + "result": { + "id": "winterly:cryomarble_sword", + "count": 1 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/cyan_gift_box.json b/winterly-common/src/main/resources/data/winterly/recipe/cyan_gift_box.json new file mode 100644 index 0000000..73a99cc --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/cyan_gift_box.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#D#", + "# #", + "###" + ], + "key": { + "#": { + "item": "minecraft:paper" + }, + "D": { + "item": "minecraft:cyan_dye" + } + }, + "result": { + "id": "winterly:cyan_gift_box", + "count": 1 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/dense_snow.json b/winterly-common/src/main/resources/data/winterly/recipe/dense_snow.json new file mode 100644 index 0000000..4d77128 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/dense_snow.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:snow_block" + } + }, + "result": { + "id": "winterly:dense_snow", + "count": 4 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/dense_snow_slab.json b/winterly-common/src/main/resources/data/winterly/recipe/dense_snow_slab.json new file mode 100644 index 0000000..e4b8af7 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/dense_snow_slab.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "winterly:dense_snow" + } + }, + "result": { + "id": "winterly:dense_snow_slab", + "count": 6 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/dense_snow_stairs.json b/winterly-common/src/main/resources/data/winterly/recipe/dense_snow_stairs.json new file mode 100644 index 0000000..fa271b0 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/dense_snow_stairs.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "winterly:dense_snow" + } + }, + "result": { + "id": "winterly:dense_snow_stairs", + "count": 4 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/garland_lights.json b/winterly-common/src/main/resources/data/winterly/recipe/garland_lights.json new file mode 100644 index 0000000..7fbaafa --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/garland_lights.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "RGB" + ], + "key": { + "#": { + "item": "minecraft:glowstone_dust" + }, + "R": { + "item": "minecraft:red_dye" + }, + "G": { + "item": "minecraft:green_dye" + }, + "B": { + "item": "minecraft:blue_dye" + } + }, + "result": { + "id": "winterly:garland_lights", + "count": 8 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/green_candy_cane.json b/winterly-common/src/main/resources/data/winterly/recipe/green_candy_cane.json new file mode 100644 index 0000000..1fa9848 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/green_candy_cane.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "## ", + "HD ", + "# " + ], + "key": { + "#": { + "item": "minecraft:sugar" + }, + "D": { + "item": "minecraft:green_dye" + }, + "H": { + "item": "minecraft:honey_bottle" + } + }, + "result": { + "id": "winterly:green_candy_cane", + "count": 4 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/green_gift_box.json b/winterly-common/src/main/resources/data/winterly/recipe/green_gift_box.json new file mode 100644 index 0000000..901e5ac --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/green_gift_box.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#D#", + "# #", + "###" + ], + "key": { + "#": { + "item": "minecraft:paper" + }, + "D": { + "item": "minecraft:green_dye" + } + }, + "result": { + "id": "winterly:green_gift_box", + "count": 1 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/green_scarf.json b/winterly-common/src/main/resources/data/winterly/recipe/green_scarf.json new file mode 100644 index 0000000..0b0860a --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/green_scarf.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " #", + "###", + "# " + ], + "key": { + "#": { + "item": "minecraft:green_wool" + } + }, + "result": { + "id": "winterly:green_scarf", + "count": 1 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/icicle_1.json b/winterly-common/src/main/resources/data/winterly/recipe/icicle_1.json new file mode 100644 index 0000000..d5df059 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/icicle_1.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "#", + "#" + ], + "key": { + "#": { + "item": "minecraft:ice" + } + }, + "result": { + "id": "winterly:icicle", + "count": 2 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/icicle_2.json b/winterly-common/src/main/resources/data/winterly/recipe/icicle_2.json new file mode 100644 index 0000000..dc9b5c6 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/icicle_2.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "#", + "#" + ], + "key": { + "#": { + "item": "minecraft:packed_ice" + } + }, + "result": { + "id": "winterly:icicle", + "count": 4 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/icicle_3.json b/winterly-common/src/main/resources/data/winterly/recipe/icicle_3.json new file mode 100644 index 0000000..f038ef2 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/icicle_3.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "#", + "#" + ], + "key": { + "#": { + "item": "minecraft:blue_ice" + } + }, + "result": { + "id": "winterly:icicle", + "count": 6 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/icicle_bars.json b/winterly-common/src/main/resources/data/winterly/recipe/icicle_bars.json new file mode 100644 index 0000000..13b5a66 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/icicle_bars.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "winterly:icicle" + } + }, + "result": { + "id": "winterly:icicle_bars", + "count": 8 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/icicle_block.json b/winterly-common/src/main/resources/data/winterly/recipe/icicle_block.json new file mode 100644 index 0000000..d160510 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/icicle_block.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": { + "item": "winterly:icicle" + } + }, + "result": { + "id": "winterly:icicle_block", + "count": 1 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/icicle_from_icicle_block.json b/winterly-common/src/main/resources/data/winterly/recipe/icicle_from_icicle_block.json new file mode 100644 index 0000000..77b9679 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/icicle_from_icicle_block.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#" + ], + "key": { + "#": { + "item": "winterly:icicle_block" + } + }, + "result": { + "id": "winterly:icicle", + "count": 9 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/icicle_pane.json b/winterly-common/src/main/resources/data/winterly/recipe/icicle_pane.json new file mode 100644 index 0000000..09ac47c --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/icicle_pane.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "winterly:icicle_block" + } + }, + "result": { + "id": "winterly:icicle_pane", + "count": 16 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/orange_gift_box.json b/winterly-common/src/main/resources/data/winterly/recipe/orange_gift_box.json new file mode 100644 index 0000000..40829e3 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/orange_gift_box.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#D#", + "# #", + "###" + ], + "key": { + "#": { + "item": "minecraft:paper" + }, + "D": { + "item": "minecraft:orange_dye" + } + }, + "result": { + "id": "winterly:orange_gift_box", + "count": 1 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/packed_icicle_block.json b/winterly-common/src/main/resources/data/winterly/recipe/packed_icicle_block.json new file mode 100644 index 0000000..cb692c9 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/packed_icicle_block.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "winterly:icicle_block" + } + }, + "result": { + "id": "winterly:packed_icicle_block", + "count": 2 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/purple_gift_box.json b/winterly-common/src/main/resources/data/winterly/recipe/purple_gift_box.json new file mode 100644 index 0000000..1e54037 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/purple_gift_box.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#D#", + "# #", + "###" + ], + "key": { + "#": { + "item": "minecraft:paper" + }, + "D": { + "item": "minecraft:purple_dye" + } + }, + "result": { + "id": "winterly:purple_gift_box", + "count": 1 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/rainbow_scarf.json b/winterly-common/src/main/resources/data/winterly/recipe/rainbow_scarf.json new file mode 100644 index 0000000..62bbf07 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/rainbow_scarf.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " 0", + "321", + "4 " + ], + "key": { + "0": { + "item": "minecraft:red_wool" + }, + "1": { + "item": "minecraft:yellow_wool" + }, + "2": { + "item": "minecraft:green_wool" + }, + "3": { + "item": "minecraft:blue_wool" + }, + "4": { + "item": "minecraft:purple_wool" + } + }, + "result": { + "id": "winterly:rainbow_scarf", + "count": 1 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/rainy_garland_lights.json b/winterly-common/src/main/resources/data/winterly/recipe/rainy_garland_lights.json new file mode 100644 index 0000000..275b4b3 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/rainy_garland_lights.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " # ", + "GGG", + "GGG" + ], + "key": { + "#": { + "item": "minecraft:string" + }, + "G": { + "item": "minecraft:glowstone_dust" + } + }, + "result": { + "id": "winterly:rainy_garland_lights", + "count": 8 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/red_candy_cane.json b/winterly-common/src/main/resources/data/winterly/recipe/red_candy_cane.json new file mode 100644 index 0000000..4612c1e --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/red_candy_cane.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "## ", + "HD ", + "# " + ], + "key": { + "#": { + "item": "minecraft:sugar" + }, + "D": { + "item": "minecraft:red_dye" + }, + "H": { + "item": "minecraft:honey_bottle" + } + }, + "result": { + "id": "winterly:red_candy_cane", + "count": 4 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/red_gift_box.json b/winterly-common/src/main/resources/data/winterly/recipe/red_gift_box.json new file mode 100644 index 0000000..be28283 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/red_gift_box.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#D#", + "# #", + "###" + ], + "key": { + "#": { + "item": "minecraft:paper" + }, + "D": { + "item": "minecraft:red_dye" + } + }, + "result": { + "id": "winterly:red_gift_box", + "count": 1 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/red_santa_hat.json b/winterly-common/src/main/resources/data/winterly/recipe/red_santa_hat.json new file mode 100644 index 0000000..5e3adca --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/red_santa_hat.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " # ", + "RRR", + "###" + ], + "key": { + "#": { + "item": "minecraft:white_wool" + }, + "R": { + "item": "minecraft:red_wool" + } + }, + "result": { + "id": "winterly:red_santa_hat", + "count": 1 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/red_scarf.json b/winterly-common/src/main/resources/data/winterly/recipe/red_scarf.json new file mode 100644 index 0000000..926ac7a --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/red_scarf.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " #", + "###", + "# " + ], + "key": { + "#": { + "item": "minecraft:red_wool" + } + }, + "result": { + "id": "winterly:red_scarf", + "count": 1 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/snow_brick_slab.json b/winterly-common/src/main/resources/data/winterly/recipe/snow_brick_slab.json new file mode 100644 index 0000000..a498b05 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/snow_brick_slab.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": { + "item": "winterly:snow_bricks" + } + }, + "result": { + "id": "winterly:snow_brick_slab", + "count": 6 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/snow_brick_stairs.json b/winterly-common/src/main/resources/data/winterly/recipe/snow_brick_stairs.json new file mode 100644 index 0000000..424aa1e --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/snow_brick_stairs.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": { + "item": "winterly:snow_bricks" + } + }, + "result": { + "id": "winterly:snow_brick_stairs", + "count": 4 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/snow_bricks.json b/winterly-common/src/main/resources/data/winterly/recipe/snow_bricks.json new file mode 100644 index 0000000..fb47e1b --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/snow_bricks.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "item": "winterly:dense_snow" + } + }, + "result": { + "id": "winterly:snow_bricks", + "count": 4 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/snowball_wall.json b/winterly-common/src/main/resources/data/winterly/recipe/snowball_wall.json new file mode 100644 index 0000000..b39377c --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/snowball_wall.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###" + ], + "key": { + "#": { + "item": "minecraft:snowball" + } + }, + "result": { + "id": "winterly:snowball_wall", + "count": 1 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/snowguy.json b/winterly-common/src/main/resources/data/winterly/recipe/snowguy.json new file mode 100644 index 0000000..d67a77d --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/snowguy.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#S ", + "/S/", + " S " + ], + "key": { + "#": { + "item": "minecraft:carrot" + }, + "S": { + "item": "minecraft:snow_block" + }, + "/": { + "item": "minecraft:stick" + } + }, + "result": { + "id": "winterly:snowguy", + "count": 1 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/white_gift_box.json b/winterly-common/src/main/resources/data/winterly/recipe/white_gift_box.json new file mode 100644 index 0000000..9c759dc --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/white_gift_box.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#D#", + "# #", + "###" + ], + "key": { + "#": { + "item": "minecraft:paper" + }, + "D": { + "item": "minecraft:white_dye" + } + }, + "result": { + "id": "winterly:white_gift_box", + "count": 1 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/white_scarf.json b/winterly-common/src/main/resources/data/winterly/recipe/white_scarf.json new file mode 100644 index 0000000..26e20d0 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/white_scarf.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " #", + "###", + "# " + ], + "key": { + "#": { + "item": "minecraft:white_wool" + } + }, + "result": { + "id": "winterly:white_scarf", + "count": 1 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/recipe/yellow_gift_box.json b/winterly-common/src/main/resources/data/winterly/recipe/yellow_gift_box.json new file mode 100644 index 0000000..5c33bdf --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/recipe/yellow_gift_box.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#D#", + "# #", + "###" + ], + "key": { + "#": { + "item": "minecraft:paper" + }, + "D": { + "item": "minecraft:yellow_dye" + } + }, + "result": { + "id": "winterly:yellow_gift_box", + "count": 1 + } +} diff --git a/winterly-common/src/main/resources/data/winterly/tags/block/gift_boxes.json b/winterly-common/src/main/resources/data/winterly/tags/block/gift_boxes.json new file mode 100644 index 0000000..a356179 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/tags/block/gift_boxes.json @@ -0,0 +1,13 @@ +{ + "values": [ + "winterly:blue_gift_box", + "winterly:red_gift_box", + "winterly:green_gift_box", + "winterly:purple_gift_box", + "winterly:yellow_gift_box", + "winterly:black_gift_box", + "winterly:white_gift_box", + "winterly:cyan_gift_box", + "winterly:orange_gift_box" + ] +} diff --git a/winterly-common/src/main/resources/data/winterly/tags/item/candy_canes.json b/winterly-common/src/main/resources/data/winterly/tags/item/candy_canes.json new file mode 100644 index 0000000..3e07eee --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/tags/item/candy_canes.json @@ -0,0 +1,7 @@ +{ + "values": [ + "winterly:red_candy_cane", + "winterly:blue_candy_cane", + "winterly:green_candy_cane" + ] +} diff --git a/winterly-common/src/main/resources/data/winterly/tags/item/scarfs.json b/winterly-common/src/main/resources/data/winterly/tags/item/scarfs.json new file mode 100644 index 0000000..4a05e14 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/tags/item/scarfs.json @@ -0,0 +1,9 @@ +{ + "values": [ + "winterly:red_scarf", + "winterly:blue_scarf", + "winterly:green_scarf", + "winterly:white_scarf", + "winterly:rainbow_scarf" + ] +} diff --git a/winterly-common/src/main/resources/data/winterly/worldgen/configured_feature/cryomarble.json b/winterly-common/src/main/resources/data/winterly/worldgen/configured_feature/cryomarble.json new file mode 100644 index 0000000..4eb5520 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/worldgen/configured_feature/cryomarble.json @@ -0,0 +1,4 @@ +{ + "type": "winterly:cryomarble", + "config": {} +} diff --git a/winterly-common/src/main/resources/data/winterly/worldgen/configured_feature/underground_icicle.json b/winterly-common/src/main/resources/data/winterly/worldgen/configured_feature/underground_icicle.json new file mode 100644 index 0000000..635dce5 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/worldgen/configured_feature/underground_icicle.json @@ -0,0 +1,4 @@ +{ + "type": "winterly:underground_icicle", + "config": {} +} diff --git a/winterly-common/src/main/resources/data/winterly/worldgen/placed_feature/cryomarble.json b/winterly-common/src/main/resources/data/winterly/worldgen/placed_feature/cryomarble.json new file mode 100644 index 0000000..7a4bb9e --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/worldgen/placed_feature/cryomarble.json @@ -0,0 +1,4 @@ +{ + "feature": "winterly:cryomarble", + "placement": [] +} diff --git a/winterly-common/src/main/resources/data/winterly/worldgen/placed_feature/underground_icicle.json b/winterly-common/src/main/resources/data/winterly/worldgen/placed_feature/underground_icicle.json new file mode 100644 index 0000000..693e106 --- /dev/null +++ b/winterly-common/src/main/resources/data/winterly/worldgen/placed_feature/underground_icicle.json @@ -0,0 +1,4 @@ +{ + "feature": "winterly:underground_icicle", + "placement": [] +} diff --git a/winterly-common/src/main/resources/winterly-common.mixins.json b/winterly-common/src/main/resources/winterly-common.mixins.json new file mode 100644 index 0000000..d0c7cec --- /dev/null +++ b/winterly-common/src/main/resources/winterly-common.mixins.json @@ -0,0 +1,23 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "ru.pinkgoosik.winterly.mixin", + "compatibilityLevel": "JAVA_21", + "mixins": [ + "common.BlockStateMixin", + "common.FreezeTopLayerMixin", + "common.MiningToolItemMixin", + "common.ServerWorldMixin", + "common.SkeletonExtension", + "common.SnowBlockMixin", + "common.SnowyBlockMixin", + "common.SpreadableBlockMixin", + "common.ZombieExtension" + ], + "client": [ + ], + "injectors": { + "defaultRequire": 1 + }, + "plugin": "ru.pinkgoosik.winterly.mixin.WinterlyMixins" +} diff --git a/winterly-common/src/main/resources/winterly.accesswidener b/winterly-common/src/main/resources/winterly.accesswidener new file mode 100644 index 0000000..babb8fe --- /dev/null +++ b/winterly-common/src/main/resources/winterly.accesswidener @@ -0,0 +1,2 @@ +accessWidener v1 named +accessible method net/minecraft/world/level/biome/Biome getTemperature (Lnet/minecraft/core/BlockPos;)F diff --git a/winterly-fabric/build.gradle.kts b/winterly-fabric/build.gradle.kts new file mode 100644 index 0000000..a250cb5 --- /dev/null +++ b/winterly-fabric/build.gradle.kts @@ -0,0 +1,98 @@ +plugins { + id("com.github.johnrengelman.shadow") version "7.1.2" +} + +architectury { + platformSetupLoomIde() + fabric() +} + +base.archivesName.set("${rootProject.property("archives_base_name").toString()}-fabric") + +loom { + accessWidenerPath.set(project(":winterly-common").loom.accessWidenerPath) +} + +val common: Configuration by configurations.creating +val shadowCommon: Configuration by configurations.creating // Don't use shadow from the shadow plugin because we don't want IDEA to index this. +val developmentFabric: Configuration = configurations.getByName("developmentFabric") + +configurations { + compileClasspath.get().extendsFrom(configurations["common"]) + runtimeClasspath.get().extendsFrom(configurations["common"]) + developmentFabric.extendsFrom(configurations["common"]) +} + +repositories { + maven { + url = uri("https://api.modrinth.com/maven") + } + maven { url = uri("https://maven.ladysnake.org/releases") } //CCA + maven { url = uri("https://maven.terraformersmc.com") } //trinkets + maven { url = uri("https://maven.wispforest.io") } //owo-lib + maven { url = uri("https://maven.shedaniel.me/") } //cloth-config +} + +dependencies { + modImplementation("net.fabricmc:fabric-loader:${rootProject.property("fabric_loader_version")}") + modApi("net.fabricmc.fabric-api:fabric-api:${rootProject.property("fabric_api_version")}") + + // Remove the next line if you don't want to depend on the API + //modApi("dev.architectury:architectury-fabric:${rootProject.property("architectury_version")}") + + modCompileOnly("dev.emi:trinkets:${rootProject.property("trinkets_version")}") + modImplementation("dev.onyxstudios.cardinal-components-api:cardinal-components-entity:${rootProject.property("cca_version")}") + + modImplementation("dev.onyxstudios.cardinal-components-api:cardinal-components-base:${rootProject.property("cca_version")}") + include("dev.onyxstudios.cardinal-components-api:cardinal-components-base:${rootProject.property("cca_version")}") + modImplementation("dev.onyxstudios.cardinal-components-api:cardinal-components-world:${rootProject.property("cca_version")}") + include("dev.onyxstudios.cardinal-components-api:cardinal-components-world:${rootProject.property("cca_version")}") + + modCompileOnly("io.wispforest:owo-lib:${rootProject.property("owo_lib")}") + modApi("me.shedaniel.cloth:cloth-config-fabric:${rootProject.property("cloth_config")}") { exclude("net.fabricmc.fabric-api") } + modApi("com.terraformersmc:modmenu:${rootProject.property("modmenu_version")}") + + //modLocalRuntime "maven.modrinth:here-be-no-dragons:1.0.0" + //modLocalRuntime "dev.emi:emi-fabric:1.0.29+1.20.4" + + common(project(":winterly-common", configuration = "namedElements")) { isTransitive = false } + shadowCommon(project(":winterly-common", configuration = "transformProductionFabric")) { isTransitive = false } +} + +val javaComponent = components.getByName("java") +javaComponent.withVariantsFromConfiguration(configurations["sourcesElements"]) { + skip() +} + +tasks { + processResources { + inputs.property("version", project.version) + + filesMatching("fabric.mod.json") { + expand("version" to project.version) + } + } + + shadowJar { + exclude("architectury.common.json") + configurations = listOf(project.configurations["shadowCommon"]) + archiveClassifier.set("dev-shadow") + } + + remapJar { + injectAccessWidener.set(true) + inputFile.set(shadowJar.flatMap { it.archiveFile }) + dependsOn(shadowJar) +// archiveClassifier.set("fabric") + } + + jar { + archiveClassifier.set("dev") + } + + sourcesJar { + val commonSources = project(":winterly-common").tasks.getByName("sourcesJar") + dependsOn(commonSources) + from(commonSources.archiveFile.map { zipTree(it) }) + } +} diff --git a/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/WinterlyFabric.java b/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/WinterlyFabric.java new file mode 100644 index 0000000..362d99d --- /dev/null +++ b/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/WinterlyFabric.java @@ -0,0 +1,55 @@ +package ru.pinkgoosik.winterly.fabric; + +import net.fabricmc.api.ModInitializer; +import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup; +import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.CreativeModeTab; +import ru.pinkgoosik.winterly.Winterly; +import ru.pinkgoosik.winterly.fabric.compat.WinterlyOwoLibIntegration; +import ru.pinkgoosik.winterly.fabric.registry.WinterlyBlockEntities; +import ru.pinkgoosik.winterly.fabric.registry.WinterlyBlocks; +import ru.pinkgoosik.winterly.registry.CommonWinterlyBlocks; +import ru.pinkgoosik.winterly.fabric.registry.WinterlyFeatures; +import ru.pinkgoosik.winterly.fabric.registry.WinterlyItems; +import ru.pinkgoosik.winterly.registry.CommonWinterlyItems; + +public class WinterlyFabric implements ModInitializer { + public static CreativeModeTab itemGroup; + + @Override + public void onInitialize() { + itemGroup = createItemGroup(); + WinterlyItems.init(); + + WinterlyBlocks.init(); + WinterlyBlockEntities.init(); + WinterlyFeatures.init(); + + if(FabricLoader.getInstance().isModLoaded("owo")) { + WinterlyOwoLibIntegration.initItemGroup(); + ItemGroupEvents.modifyEntriesEvent(BuiltInRegistries.CREATIVE_MODE_TAB.getResourceKey(itemGroup).get()).register(entries -> { + CommonWinterlyItems.ITEMS.forEach((id, item) -> entries.accept(item.getDefaultInstance())); + CommonWinterlyBlocks.ITEMS.forEach((id, item) -> entries.accept(item.getDefaultInstance())); + }); + } + } + + private static CreativeModeTab createItemGroup() { + if(FabricLoader.getInstance().isModLoaded("owo")) { + return WinterlyOwoLibIntegration.createItemGroup(); + } + var group = FabricItemGroup.builder().title(Component.translatable("itemGroup.winterly.items")) + .icon(() -> CommonWinterlyBlocks.SNOWGUY.asItem().getDefaultInstance()) + .displayItems((displayContext, entries) -> { + CommonWinterlyItems.ITEMS.forEach((id, item) -> entries.accept(item.getDefaultInstance())); + CommonWinterlyBlocks.ITEMS.forEach((id, item) -> entries.accept(item.getDefaultInstance())); + }).build(); + Registry.register(BuiltInRegistries.CREATIVE_MODE_TAB, Winterly.id("items"), group); + return group; + } + +} diff --git a/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/block/FrozenFlowerBlock.java b/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/block/FrozenFlowerBlock.java new file mode 100644 index 0000000..5950f96 --- /dev/null +++ b/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/block/FrozenFlowerBlock.java @@ -0,0 +1,40 @@ +package ru.pinkgoosik.winterly.fabric.block; + +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.LightLayer; +import net.minecraft.world.level.block.state.BlockState; +import ru.pinkgoosik.winterly.block.CommonFrozenFlowerBlock; +import ru.pinkgoosik.winterly.data.CachedFlowers; + +import java.util.Objects; + +public class FrozenFlowerBlock extends CommonFrozenFlowerBlock { + + public FrozenFlowerBlock(Properties settings) { + super(settings); + } + + @SuppressWarnings("deprecation") + @Override + public void randomTick(BlockState state, ServerLevel world, BlockPos pos, RandomSource random) { + if (world.getBrightness(LightLayer.BLOCK, pos) > 11) { + dropResources(state, world, pos); + if(state.getValue(LAYERS) != 0) { + var cachedFlower = CachedFlowers.getFlower(world, pos); + world.setBlockAndUpdate(pos, Objects.requireNonNullElse(cachedFlower, this).defaultBlockState()); + } + } + else if(FabricLoader.getInstance().isModLoaded("seasons")) { + if(!state.getValue(PERSISTENT) && world.getBrightness(LightLayer.SKY, pos) > 0 && world.getBiome(pos).value().getTemperature(pos) >= 0.15F) { + dropResources(state, world, pos); + if(state.getValue(LAYERS) != 0) { + var cachedFlower = CachedFlowers.getFlower(world, pos); + world.setBlockAndUpdate(pos, Objects.requireNonNullElse(cachedFlower, this).defaultBlockState()); + } + } + } + } +} diff --git a/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/block/FrozenGrassBlock.java b/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/block/FrozenGrassBlock.java new file mode 100644 index 0000000..2220d22 --- /dev/null +++ b/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/block/FrozenGrassBlock.java @@ -0,0 +1,32 @@ +package ru.pinkgoosik.winterly.fabric.block; + +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.LightLayer; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import ru.pinkgoosik.winterly.block.CommonFrozenGrassBlock; + +public class FrozenGrassBlock extends CommonFrozenGrassBlock { + + public FrozenGrassBlock(Properties settings) { + super(settings); + } + + @SuppressWarnings("deprecation") + @Override + public void randomTick(BlockState state, ServerLevel world, BlockPos pos, RandomSource random) { + if (world.getBrightness(LightLayer.BLOCK, pos) > 11) { + dropResources(state, world, pos); + world.setBlockAndUpdate(pos, Blocks.SHORT_GRASS.defaultBlockState()); + } + else if(FabricLoader.getInstance().isModLoaded("seasons")) { + if(!state.getValue(PERSISTENT) && world.getBrightness(LightLayer.SKY, pos) > 0 && world.getBiome(pos).value().getTemperature(pos) >= 0.15F) { + dropResources(state, world, pos); + world.setBlockAndUpdate(pos, Blocks.SHORT_GRASS.defaultBlockState()); + } + } + } +} diff --git a/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/client/WinterlyFabricClient.java b/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/client/WinterlyFabricClient.java new file mode 100644 index 0000000..c3262fd --- /dev/null +++ b/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/client/WinterlyFabricClient.java @@ -0,0 +1,71 @@ +package ru.pinkgoosik.winterly.fabric.client; + +import net.fabricmc.api.ClientModInitializer; +import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; +import net.fabricmc.fabric.api.client.rendering.v1.LivingEntityFeatureRendererRegistrationCallback; +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.DrownedRenderer; +import net.minecraft.client.renderer.entity.SkeletonRenderer; +import net.minecraft.client.renderer.entity.ZombieRenderer; +import ru.pinkgoosik.winterly.fabric.compat.WinterlyTrinketsIntegration; +import ru.pinkgoosik.winterly.block.*; +import ru.pinkgoosik.winterly.client.WinterlyModelLayers; +import ru.pinkgoosik.winterly.client.model.SantaHatModel; +import ru.pinkgoosik.winterly.client.model.ScarfModel; +import ru.pinkgoosik.winterly.client.render.DecorationFeatureRenderer; +import ru.pinkgoosik.winterly.client.render.MobDecorationRenderers; +import ru.pinkgoosik.winterly.item.CommonSantaHatItem; +import ru.pinkgoosik.winterly.item.CommonScarfItem; +import ru.pinkgoosik.winterly.registry.CommonWinterlyBlocks; +import ru.pinkgoosik.winterly.registry.CommonWinterlyItems; + +import static net.fabricmc.fabric.api.client.rendering.v1.EntityModelLayerRegistry.registerModelLayer; + +public class WinterlyFabricClient implements ClientModInitializer { + + @Override + public void onInitializeClient() { + registerModelLayer(WinterlyModelLayers.SANTA_HAT_LAYER, SantaHatModel::getTexturedModelData); + registerModelLayer(WinterlyModelLayers.SCARF_LAYER, ScarfModel::getTexturedModelData); + + MobDecorationRenderers.init(); + + BlockRenderLayerMap map = BlockRenderLayerMap.INSTANCE; + CommonWinterlyBlocks.BLOCKS.forEach((id, block) -> { + if(block instanceof GiftBoxBlock) map.putBlock(block, RenderType.cutout()); + if(block instanceof GarlandLightsBlock) map.putBlock(block, RenderType.cutout()); + if(block instanceof SnowguyBlock) map.putBlock(block, RenderType.cutout()); + if(block instanceof IcicleBlock) map.putBlock(block, RenderType.cutout()); + if(block instanceof CommonFrozenGrassBlock) map.putBlock(block, RenderType.cutout()); + if(block instanceof CommonFrozenFlowerBlock) map.putBlock(block, RenderType.cutout()); + }); + map.putBlock(CommonWinterlyBlocks.ICICLE_BLOCK, RenderType.translucent()); + map.putBlock(CommonWinterlyBlocks.ICICLE_PANE, RenderType.translucent()); + map.putBlock(CommonWinterlyBlocks.ICICLE_BARS, RenderType.cutout()); + + if(FabricLoader.getInstance().isModLoaded("trinkets")) { + CommonWinterlyItems.ITEMS.forEach((id, item) -> { + if(item instanceof CommonScarfItem scarf) { + WinterlyTrinketsIntegration.registerScarfRenderer(scarf); + } + if(item instanceof CommonSantaHatItem hat) { + WinterlyTrinketsIntegration.registerSantaHatRenderer(hat); + } + }); + } + + LivingEntityFeatureRendererRegistrationCallback.EVENT.register((entityType, entityRenderer, registrationHelper, context) -> { + if(entityRenderer instanceof ZombieRenderer renderer) { + registrationHelper.register(new DecorationFeatureRenderer<>(renderer)); + } + if(entityRenderer instanceof DrownedRenderer renderer) { + registrationHelper.register(new DecorationFeatureRenderer<>(renderer)); + } + if(entityRenderer instanceof SkeletonRenderer renderer) { + registrationHelper.register(new DecorationFeatureRenderer<>(renderer)); + } + }); + } + +} diff --git a/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/compat/WinterlyModMenuIntegration.java b/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/compat/WinterlyModMenuIntegration.java new file mode 100644 index 0000000..e9b87a7 --- /dev/null +++ b/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/compat/WinterlyModMenuIntegration.java @@ -0,0 +1,17 @@ +package ru.pinkgoosik.winterly.fabric.compat; + +import com.terraformersmc.modmenu.api.ConfigScreenFactory; +import com.terraformersmc.modmenu.api.ModMenuApi; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import ru.pinkgoosik.winterly.config.WinterlyClientConfig; + +@Environment(EnvType.CLIENT) +public class WinterlyModMenuIntegration implements ModMenuApi { + + @Override + public ConfigScreenFactory getModConfigScreenFactory() { + return WinterlyClientConfig::buildScreen; + } + +} diff --git a/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/compat/WinterlyOwoLibIntegration.java b/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/compat/WinterlyOwoLibIntegration.java new file mode 100644 index 0000000..b2a26e7 --- /dev/null +++ b/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/compat/WinterlyOwoLibIntegration.java @@ -0,0 +1,30 @@ +package ru.pinkgoosik.winterly.fabric.compat; + +import io.wispforest.owo.itemgroup.Icon; +import io.wispforest.owo.itemgroup.OwoItemGroup; +import io.wispforest.owo.itemgroup.gui.ItemGroupButton; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.CreativeModeTab; +import ru.pinkgoosik.winterly.fabric.WinterlyFabric; +import ru.pinkgoosik.winterly.Winterly; +import ru.pinkgoosik.winterly.registry.CommonWinterlyBlocks; + +public class WinterlyOwoLibIntegration { + public static final ResourceLocation ICONS_TEXTURE = Winterly.id("textures/gui/icons.png"); + + public static CreativeModeTab createItemGroup() { + return OwoItemGroup.builder(Winterly.id("items"), () -> Icon.of(CommonWinterlyBlocks.SNOWGUY)) + .initializer(group -> { + group.addButton(ItemGroupButton.link(group, Icon.of(ICONS_TEXTURE, 0, 0, 64, 64), "discord", "https://discord.gg/DcemWeskeZ")); +// if(UpdateChecker.check()) { +// group.addButton(ItemGroupButton.link(group, Icon.of(ICONS_TEXTURE, 16, 0, 64, 64), "updated", "https://modrinth.com/mod/winterly")); +// } + }).build(); + } + + public static void initItemGroup() { + if(WinterlyFabric.itemGroup instanceof OwoItemGroup owoItemGroup) { + owoItemGroup.initialize(); + } + } +} diff --git a/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/compat/WinterlyTrinketsIntegration.java b/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/compat/WinterlyTrinketsIntegration.java new file mode 100644 index 0000000..9868a6a --- /dev/null +++ b/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/compat/WinterlyTrinketsIntegration.java @@ -0,0 +1,65 @@ +package ru.pinkgoosik.winterly.fabric.compat; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import dev.emi.trinkets.api.SlotReference; +import dev.emi.trinkets.api.Trinket; +import dev.emi.trinkets.api.TrinketsApi; +import dev.emi.trinkets.api.client.TrinketRenderer; +import dev.emi.trinkets.api.client.TrinketRendererRegistry; +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.model.HumanoidModel; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import ru.pinkgoosik.winterly.Winterly; +import ru.pinkgoosik.winterly.client.model.WinterlyModels; +import ru.pinkgoosik.winterly.item.CommonSantaHatItem; +import ru.pinkgoosik.winterly.item.CommonScarfItem; + +public class WinterlyTrinketsIntegration { + + public static void registerTrinket(Item item) { + TrinketsApi.registerTrinket(item, new Trinket() {}); + } + + public static boolean hasHatOn(Player player) { +// Optional component = TrinketsApi.getTrinketComponent(player); +// if(component.isPresent()) { +// for(Tuple pair : component.get().getAllEquipped()) { +// if(pair.getB().getItem() instanceof SantaHatItem) return true; +// } +// } + return false; + } + + public static void registerScarfRenderer(CommonScarfItem scarf) { + TrinketRendererRegistry.registerRenderer(scarf, new TrinketRenderer() { + @Override + public void render(ItemStack stack, SlotReference slotReference, EntityModel contextModel, PoseStack matrices, MultiBufferSource vertexConsumers, int light, LivingEntity entity, float limbAngle, float limbDistance, float tickDelta, float animationProgress, float headYaw, float headPitch) { + if(contextModel instanceof HumanoidModel biped){ + WinterlyModels.SCARF_MODEL.scarf.copyFrom(biped.body); + VertexConsumer vertexConsumer = vertexConsumers.getBuffer(RenderType.entityCutout(Winterly.id("textures/entity/" + scarf.color + "_scarf.png"))); + WinterlyModels.SCARF_MODEL.renderToBuffer(matrices, vertexConsumer, light, OverlayTexture.NO_OVERLAY); + } + } + }); + } + + public static void registerSantaHatRenderer(CommonSantaHatItem hat) { + TrinketRendererRegistry.registerRenderer(hat, new TrinketRenderer() { + @Override + public void render(ItemStack stack, SlotReference slotReference, EntityModel contextModel, PoseStack matrices, MultiBufferSource vertexConsumers, int light, LivingEntity entity, float limbAngle, float limbDistance, float tickDelta, float animationProgress, float headYaw, float headPitch) { + if(contextModel instanceof HumanoidModel biped) { + WinterlyModels.SANTA_HAT_MODEL.hat.copyFrom(biped.head); + VertexConsumer vertexConsumer = vertexConsumers.getBuffer(RenderType.entityCutout(Winterly.id("textures/entity/" + hat.color + "_santa_hat.png"))); + WinterlyModels.SANTA_HAT_MODEL.renderToBuffer(matrices, vertexConsumer, light, OverlayTexture.NO_OVERLAY); + } + } + }); + } +} diff --git a/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/data/WinterlyComponents.java b/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/data/WinterlyComponents.java new file mode 100644 index 0000000..10ae3ea --- /dev/null +++ b/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/data/WinterlyComponents.java @@ -0,0 +1,16 @@ +package ru.pinkgoosik.winterly.fabric.data; + +import org.ladysnake.cca.api.v3.component.ComponentKey; +import org.ladysnake.cca.api.v3.component.ComponentRegistryV3; +import org.ladysnake.cca.api.v3.world.WorldComponentFactoryRegistry; +import org.ladysnake.cca.api.v3.world.WorldComponentInitializer; +import ru.pinkgoosik.winterly.Winterly; + +public class WinterlyComponents implements WorldComponentInitializer { + public static final ComponentKey WORLD_DATA = ComponentRegistryV3.INSTANCE.getOrCreate(Winterly.id("world_data"), WorldData.class); + + @Override + public void registerWorldComponentFactories(WorldComponentFactoryRegistry registry) { + registry.register(WORLD_DATA, WorldData::new); + } +} diff --git a/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/data/WorldData.java b/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/data/WorldData.java new file mode 100644 index 0000000..91abde9 --- /dev/null +++ b/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/data/WorldData.java @@ -0,0 +1,59 @@ +package ru.pinkgoosik.winterly.fabric.data; + +import java.util.LinkedHashMap; +import net.minecraft.core.BlockPos; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.Level; +import org.ladysnake.cca.api.v3.component.ComponentV3; +import ru.pinkgoosik.winterly.data.CachedFlowers; + +public class WorldData implements ComponentV3 { + + public Level world; + + public WorldData(Level world) { + this.world = world; + } + + @Override + public void readFromNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { + CachedFlowers.instance.data = new LinkedHashMap<>(); + var cachedFlowerNbt = tag.getCompound("cachedFlower"); + + if(!cachedFlowerNbt.isEmpty()) { + int size = cachedFlowerNbt.getInt("size"); + + for(int i = 0; i < size; i++) { + CompoundTag entry = cachedFlowerNbt.getCompound(String.valueOf(i)); + BlockPos pos = new BlockPos(entry.getInt("x"), entry.getInt("y"), entry.getInt("z")); + var block = BuiltInRegistries.BLOCK.getOptional(ResourceLocation.parse(entry.getString("block"))); + block.ifPresent(bl -> CachedFlowers.cacheFlower(world, pos, bl)); + } + } + } + + @Override + public void writeToNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { + CompoundTag cachedFlowerNbt = new CompoundTag(); + var map = CachedFlowers.instance.data.get(world.dimension()); + if(map != null) { + cachedFlowerNbt.putInt("size", map.size()); + int index = -1; + + for(var entry : map.entrySet()) { + index++; + CompoundTag entryNbt = new CompoundTag(); + entryNbt.putInt("x", entry.getKey().getX()); + entryNbt.putInt("y", entry.getKey().getY()); + entryNbt.putInt("z", entry.getKey().getZ()); + entryNbt.putString("block", BuiltInRegistries.BLOCK.getKey(entry.getValue()).toString()); + cachedFlowerNbt.put(String.valueOf(index), entryNbt); + } + tag.put("cachedFlower", cachedFlowerNbt); + } + + } +} diff --git a/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/item/SantaHatItem.java b/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/item/SantaHatItem.java new file mode 100644 index 0000000..7c35c4b --- /dev/null +++ b/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/item/SantaHatItem.java @@ -0,0 +1,44 @@ +package ru.pinkgoosik.winterly.fabric.item; + +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.ChatFormatting; +import net.minecraft.locale.Language; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.Style; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import ru.pinkgoosik.winterly.fabric.compat.WinterlyTrinketsIntegration; +import ru.pinkgoosik.winterly.item.CommonSantaHatItem; + +import java.util.List; + +public class SantaHatItem extends CommonSantaHatItem { + + public SantaHatItem(Item.Properties settings, String color) { + super(settings, color); + if(FabricLoader.getInstance().isModLoaded("trinkets")) { + WinterlyTrinketsIntegration.registerTrinket(this); + } + } + + @Override + public void appendHoverText(ItemStack stack, TooltipContext context, List tooltip, TooltipFlag tooltipFlag) { + tooltip.add(Component.translatable("tag.winterly.cosmetic").withStyle(ChatFormatting.GRAY)); + tooltip.add(Component.nullToEmpty(" ")); + + if(!FabricLoader.getInstance().isModLoaded("trinkets")) { + Language lang = Language.getInstance(); + String key = "tip.winterly.requires_trinkets."; + + for(int i = 0; i <= 32; i++) { + if(lang.has(key + i)) { + tooltip.add(Component.translatable(key + i).toFlatList(Style.EMPTY.withColor(ChatFormatting.GRAY)).get(0)); + } + if(!lang.has(key + (i + 1))) { + break; + } + } + } + } +} diff --git a/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/item/ScarfItem.java b/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/item/ScarfItem.java new file mode 100644 index 0000000..079cbe9 --- /dev/null +++ b/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/item/ScarfItem.java @@ -0,0 +1,44 @@ +package ru.pinkgoosik.winterly.fabric.item; + +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.ChatFormatting; +import net.minecraft.locale.Language; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.Style; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import ru.pinkgoosik.winterly.fabric.compat.WinterlyTrinketsIntegration; +import ru.pinkgoosik.winterly.item.CommonScarfItem; + +import java.util.List; + +public class ScarfItem extends CommonScarfItem { + + public ScarfItem(Item.Properties settings, String color) { + super(settings, color); + if(FabricLoader.getInstance().isModLoaded("trinkets")) { + WinterlyTrinketsIntegration.registerTrinket(this); + } + } + + @Override + public void appendHoverText(ItemStack stack, TooltipContext context, List tooltip, TooltipFlag tooltipFlag) { + tooltip.add(Component.translatable("tag.winterly.cosmetic").withStyle(ChatFormatting.GRAY)); + tooltip.add(Component.nullToEmpty(" ")); + + if(!FabricLoader.getInstance().isModLoaded("trinkets")) { + Language lang = Language.getInstance(); + String key = "tip.winterly.requires_trinkets."; + + for(int i = 0; i <= 32; i++) { + if(lang.has(key + i)) { + tooltip.add(Component.translatable(key + i).toFlatList(Style.EMPTY.withColor(ChatFormatting.GRAY)).get(0)); + } + if(!lang.has(key + (i + 1))) { + break; + } + } + } + } +} diff --git a/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/mixin/client/ArmorRendererMixin.java b/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/mixin/client/ArmorRendererMixin.java new file mode 100644 index 0000000..65eb470 --- /dev/null +++ b/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/mixin/client/ArmorRendererMixin.java @@ -0,0 +1,34 @@ +package ru.pinkgoosik.winterly.fabric.mixin.client; + +import com.mojang.blaze3d.vertex.PoseStack; +import net.fabricmc.loader.api.FabricLoader; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import ru.pinkgoosik.winterly.fabric.compat.WinterlyTrinketsIntegration; +import net.minecraft.client.model.HumanoidModel; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer; +import net.minecraft.client.renderer.entity.layers.RenderLayer; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; + +@Mixin(HumanoidArmorLayer.class) +public abstract class ArmorRendererMixin , A extends HumanoidModel> extends RenderLayer { + + public ArmorRendererMixin(RenderLayerParent context) { + super(context); + } + + @Inject(method = "renderArmorPiece", at = @At("HEAD"), cancellable = true) + void render(PoseStack matrices, MultiBufferSource vertexConsumers, T entity, EquipmentSlot armorSlot, int light, A model, CallbackInfo ci) { + if(entity instanceof Player player) { + if(FabricLoader.getInstance().isModLoaded("trinkets") && armorSlot.equals(EquipmentSlot.HEAD)) { + if(WinterlyTrinketsIntegration.hasHatOn(player)) ci.cancel(); + } + } + } +} diff --git a/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/registry/WinterlyBlockEntities.java b/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/registry/WinterlyBlockEntities.java new file mode 100644 index 0000000..d34319a --- /dev/null +++ b/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/registry/WinterlyBlockEntities.java @@ -0,0 +1,35 @@ +package ru.pinkgoosik.winterly.fabric.registry; + +import net.fabricmc.fabric.api.object.builder.v1.block.entity.FabricBlockEntityTypeBuilder; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; +import ru.pinkgoosik.winterly.Winterly; +import ru.pinkgoosik.winterly.block.GiftBoxBlock; +import ru.pinkgoosik.winterly.block.entity.GiftBoxBlockEntity; +import ru.pinkgoosik.winterly.registry.CommonWinterlyBlockEntities; +import ru.pinkgoosik.winterly.registry.CommonWinterlyBlocks; + +import java.util.ArrayList; + +public class WinterlyBlockEntities { + + public static void init() { + CommonWinterlyBlockEntities.GIFT_BOX_BLOCK_ENTITY = Registry.register( + BuiltInRegistries.BLOCK_ENTITY_TYPE, + Winterly.id("gift_box"), + FabricBlockEntityTypeBuilder.create(GiftBoxBlockEntity::new, getGiftBoxes()).build() + ); + } + + public static GiftBoxBlock[] getGiftBoxes() { + ArrayList gifts = new ArrayList<>(); + + CommonWinterlyBlocks.BLOCKS.forEach((identifier, block) -> { + if(block instanceof GiftBoxBlock box) { + gifts.add(box); + } + }); + + return gifts.toArray(new GiftBoxBlock[0]); + } +} diff --git a/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/registry/WinterlyBlocks.java b/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/registry/WinterlyBlocks.java new file mode 100644 index 0000000..5691f80 --- /dev/null +++ b/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/registry/WinterlyBlocks.java @@ -0,0 +1,82 @@ +package ru.pinkgoosik.winterly.fabric.registry; + +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.*; +import net.minecraft.world.level.material.MapColor; +import net.minecraft.world.level.material.PushReaction; +import ru.pinkgoosik.winterly.Winterly; +import ru.pinkgoosik.winterly.block.*; +import ru.pinkgoosik.winterly.block.base.BasePaneBlock; +import ru.pinkgoosik.winterly.block.base.BaseStairsBlock; +import ru.pinkgoosik.winterly.fabric.block.FrozenFlowerBlock; +import ru.pinkgoosik.winterly.fabric.block.FrozenGrassBlock; + +import static net.minecraft.world.level.block.Blocks.*; +import static ru.pinkgoosik.winterly.registry.CommonWinterlyBlocks.*; + +public class WinterlyBlocks { + + public static void init() { + ICICLE = add("icicle", new IcicleBlock(copyOf(ICE).pushReaction(PushReaction.DESTROY))); + ICICLE_BLOCK = add("icicle_block", new TransparentBlock(copyOf(PACKED_ICE).nonOpaque())); + PACKED_ICICLE_BLOCK = add("packed_icicle_block", new TransparentBlock(copyOf(PACKED_ICE).nonOpaque())); + ICICLE_PANE = add("icicle_pane", new BasePaneBlock(copyOf(PACKED_ICE).nonOpaque())); + ICICLE_BARS = add("icicle_bars", new BasePaneBlock(copyOf(ICE).nonOpaque())); + CRYOMARBLE_BLOCK = add("cryomarble_block", new Block(copyOf(DIAMOND_BLOCK))); + SNOWGUY = add("snowguy", new SnowguyBlock(copyOf(WHITE_WOOL).sounds(SoundType.SNOW))); + SNOWBALL_WALL = add("snowball_wall", new SnowballWallBlock(copyOf(WHITE_WOOL).sounds(SoundType.SNOW).nonOpaque())); + DENSE_SNOW = add("dense_snow", new Block(copyOf(WHITE_WOOL).sounds(SoundType.SNOW))); + DENSE_SNOW_STAIRS = add("dense_snow_stairs", new BaseStairsBlock(SNOW_BLOCK.defaultBlockState(), copyOf(WHITE_WOOL).sounds(SoundType.SNOW))); + DENSE_SNOW_SLAB = add("dense_snow_slab", new SlabBlock(copyOf(WHITE_WOOL).sounds(SoundType.SNOW))); + + SNOW_BRICKS = add("snow_bricks", new Block(copyOf(WHITE_WOOL).sounds(SoundType.SNOW))); + SNOW_BRICK_STAIRS = add("snow_brick_stairs", new BaseStairsBlock(SNOW_BLOCK.defaultBlockState(), copyOf(WHITE_WOOL).sounds(SoundType.SNOW))); + SNOW_BRICK_SLAB = add("snow_brick_slab", new SlabBlock(copyOf(WHITE_WOOL).sounds(SoundType.SNOW))); + FROZEN_GRASS = add("frozen_grass", new FrozenGrassBlock(FabricBlockSettings.create().mapColor(MapColor.SNOW).replaceable().notSolid().ticksRandomly().strength(0.1F).requiresTool().sounds(SoundType.SNOW).blockVision((state, world, pos) -> state.getValue(CommonFrozenGrassBlock.LAYERS) >= 8).pushReaction(PushReaction.DESTROY))); + FROZEN_FLOWER = add("frozen_flower", new FrozenFlowerBlock(FabricBlockSettings.create().mapColor(MapColor.SNOW).replaceable().notSolid().ticksRandomly().strength(0.1F).requiresTool().sounds(SoundType.GRASS).blockVision((state, world, pos) -> state.getValue(CommonFrozenFlowerBlock.LAYERS) >= 8).pushReaction(PushReaction.DESTROY))); + + RAW_CRYOMARBLE_SHARD = add("raw_cryomarble_shard", new IcicleBlock(copyOf(WHITE_WOOL).sounds(SoundType.GLASS).luminance(state -> 12))); + + RED_GIFT_BOX = add("red_gift_box", new GiftBoxBlock(copyOf(RED_WOOL).pistonBehavior(PushReaction.DESTROY))); + ORANGE_GIFT_BOX = add("orange_gift_box", new GiftBoxBlock(copyOf(RED_GIFT_BOX))); + YELLOW_GIFT_BOX = add("yellow_gift_box", new GiftBoxBlock(copyOf(RED_GIFT_BOX))); + GREEN_GIFT_BOX = add("green_gift_box", new GiftBoxBlock(copyOf(RED_GIFT_BOX))); + CYAN_GIFT_BOX = add("cyan_gift_box", new GiftBoxBlock(copyOf(RED_GIFT_BOX))); + BLUE_GIFT_BOX = add("blue_gift_box", new GiftBoxBlock(copyOf(RED_GIFT_BOX))); + PURPLE_GIFT_BOX = add("purple_gift_box", new GiftBoxBlock(copyOf(RED_GIFT_BOX))); + BLACK_GIFT_BOX = add("black_gift_box", new GiftBoxBlock(copyOf(RED_GIFT_BOX))); + WHITE_GIFT_BOX = add("white_gift_box", new GiftBoxBlock(copyOf(RED_GIFT_BOX))); + + GARLAND_LIGHTS = add("garland_lights", new GarlandLightsBlock(copyOf(GREEN_WOOL).pistonBehavior(PushReaction.DESTROY).noCollision().sounds(SoundType.CANDLE))); + RAINY_GARLAND_LIGHTS = add("rainy_garland_lights", new GarlandLightsBlock(copyOf(WHITE_WOOL).pistonBehavior(PushReaction.DESTROY).noCollision().sounds(SoundType.CANDLE))); + + ITEMS.forEach((id, item) -> Registry.register(BuiltInRegistries.ITEM, id, item)); + BLOCKS.forEach((id, block) -> Registry.register(BuiltInRegistries.BLOCK, id, block)); + } + + public static T add(String name, T block) { + return addBlockItem(name, block, new BlockItem(block, new Item.Properties())); + } + + private static T addBlockItem(String name, T block, BlockItem item) { + addBlock(name, block); + if (item != null) { + item.registerBlocks(Item.BY_BLOCK, item); + ITEMS.put(Winterly.id(name), item); + } + return block; + } + + private static T addBlock(String name, T block) { + BLOCKS.put(Winterly.id(name), block); + return block; + } + + public static FabricBlockSettings copyOf(Block block) { + return FabricBlockSettings.copyOf(block); + } +} diff --git a/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/registry/WinterlyFeatures.java b/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/registry/WinterlyFeatures.java new file mode 100644 index 0000000..47f1dd1 --- /dev/null +++ b/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/registry/WinterlyFeatures.java @@ -0,0 +1,52 @@ +package ru.pinkgoosik.winterly.fabric.registry; + +import net.fabricmc.fabric.api.biome.v1.BiomeModifications; +import net.fabricmc.fabric.api.biome.v1.ModificationPhase; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.BiomeTags; +import net.minecraft.tags.TagKey; +import net.minecraft.world.level.levelgen.GenerationStep; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.placement.PlacedFeature; +import ru.pinkgoosik.winterly.Winterly; +import ru.pinkgoosik.winterly.worldgen.CryomarbleFeature; +import ru.pinkgoosik.winterly.worldgen.UndergroundIcicleFeature; + +import static ru.pinkgoosik.winterly.Winterly.id; + +public class WinterlyFeatures { + public static final Feature UNDERGROUND_ICICLE_FEATURE = new UndergroundIcicleFeature(); + public static final ResourceKey> UNDERGROUND_ICICLE_CONFIG = ResourceKey.create(Registries.CONFIGURED_FEATURE, Winterly.id("underground_icicle")); + public static final ResourceKey UNDERGROUND_ICICLE_PLACED = ResourceKey.create(Registries.PLACED_FEATURE, Winterly.id("underground_icicle")); + + + public static final Feature CRYOMARBLE_FEATURE = new CryomarbleFeature(); + public static final ResourceKey> CRYOMARBLE_CONFIG = ResourceKey.create(Registries.CONFIGURED_FEATURE, Winterly.id("cryomarble")); + public static final ResourceKey CRYOMARBLE_PLACED = ResourceKey.create(Registries.PLACED_FEATURE, Winterly.id("cryomarble")); + + public static void init() { + Registry.register(BuiltInRegistries.FEATURE, id("underground_icicle"), UNDERGROUND_ICICLE_FEATURE); + Registry.register(BuiltInRegistries.FEATURE, id("cryomarble"), CRYOMARBLE_FEATURE); + + BiomeModifications.create(Winterly.id("features")) + .add(ModificationPhase.ADDITIONS, ctx -> { + var entry = ctx.getBiomeRegistryEntry(); + var coldTag = TagKey.create(Registries.BIOME, ResourceLocation.fromNamespaceAndPath("c", "climate_cold")); + return !entry.is(BiomeTags.IS_NETHER) && !entry.is(BiomeTags.IS_END) && entry.is(coldTag); + }, ctx -> { + ctx.getGenerationSettings().addFeature(GenerationStep.Decoration.UNDERGROUND_DECORATION, UNDERGROUND_ICICLE_PLACED); + }) + .add(ModificationPhase.ADDITIONS, ctx -> { + var entry = ctx.getBiomeRegistryEntry(); + return !entry.is(BiomeTags.IS_NETHER) && !entry.is(BiomeTags.IS_END); + }, ctx -> { + ctx.getGenerationSettings().addFeature(GenerationStep.Decoration.UNDERGROUND_DECORATION, CRYOMARBLE_PLACED); + }); + } +} diff --git a/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/registry/WinterlyItems.java b/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/registry/WinterlyItems.java new file mode 100644 index 0000000..e09ea00 --- /dev/null +++ b/winterly-fabric/src/main/java/ru/pinkgoosik/winterly/fabric/registry/WinterlyItems.java @@ -0,0 +1,48 @@ +package ru.pinkgoosik.winterly.fabric.registry; + +import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Tiers; +import ru.pinkgoosik.winterly.fabric.item.SantaHatItem; +import ru.pinkgoosik.winterly.fabric.item.ScarfItem; +import ru.pinkgoosik.winterly.Winterly; +import ru.pinkgoosik.winterly.item.tool.*; + +import static ru.pinkgoosik.winterly.registry.CommonWinterlyItems.*; + +@SuppressWarnings("unused") +public class WinterlyItems { + + public static void init() { + RED_CANDY_CANE = add("red_candy_cane", new Item(settings().food(new FoodProperties.Builder().nutrition(2).saturationModifier(0.1F).fast().build()))); + GREEN_CANDY_CANE = add("green_candy_cane", new Item(settings().food(new FoodProperties.Builder().nutrition(2).saturationModifier(0.1F).fast().build()))); + BLUE_CANDY_CANE = add("blue_candy_cane", new Item(settings().food(new FoodProperties.Builder().nutrition(2).saturationModifier(0.1F).fast().build()))); + + CRYOMARBLE_SHARD = add("cryomarble_shard", new Item(settings())); + CRYOMARBLE = add("cryomarble", new Item(settings())); + + CRYOMARBLE_SWORD = add("cryomarble_sword", new CryomarbleSwordItem(Tiers.DIAMOND, settings())); + CRYOMARBLE_SHOVEL = add("cryomarble_shovel", new CryomarbleShovelItem(Tiers.DIAMOND, settings())); + CRYOMARBLE_PICKAXE = add("cryomarble_pickaxe", new CryomarblePickaxeItem(Tiers.DIAMOND, settings())); + CRYOMARBLE_AXE = add("cryomarble_axe", new CryomarbleAxeItem(Tiers.DIAMOND, settings())); + CRYOMARBLE_HOE = add("cryomarble_hoe", new CryomarbleHoeItem(Tiers.DIAMOND, settings())); + + RED_SANTA_HAT = add("red_santa_hat", new SantaHatItem(settings(), "red")); + BLUE_SANTA_HAT = add("blue_santa_hat", new SantaHatItem(settings(), "blue")); + + WHITE_SCARF = add("white_scarf", new ScarfItem(settings(), "white")); + RED_SCARF = add("red_scarf", new ScarfItem(settings(), "red")); + GREEN_SCARF = add("green_scarf", new ScarfItem(settings(), "green")); + BLUE_SCARF = add("blue_scarf", new ScarfItem(settings(), "blue")); + RAINBOW_SCARF = add("rainbow_scarf", new ScarfItem(settings(), "rainbow")); + + ITEMS.forEach((id, item) -> Registry.register(BuiltInRegistries.ITEM, id, item)); + } + + private static T add(String name, T item) { + ITEMS.put(Winterly.id(name), item); + return item; + } +} diff --git a/winterly-fabric/src/main/resources/data/trinkets/entity/winterly.json b/winterly-fabric/src/main/resources/data/trinkets/entity/winterly.json new file mode 100644 index 0000000..5fa14e5 --- /dev/null +++ b/winterly-fabric/src/main/resources/data/trinkets/entity/winterly.json @@ -0,0 +1,9 @@ +{ + "entities": [ + "player" + ], + "slots": [ + "head/hat", + "chest/necklace" + ] +} \ No newline at end of file diff --git a/winterly-fabric/src/main/resources/data/trinkets/tags/item/chest/necklace.json b/winterly-fabric/src/main/resources/data/trinkets/tags/item/chest/necklace.json new file mode 100644 index 0000000..0380e9f --- /dev/null +++ b/winterly-fabric/src/main/resources/data/trinkets/tags/item/chest/necklace.json @@ -0,0 +1,10 @@ +{ + "replace": false, + "values": [ + "winterly:red_scarf", + "winterly:green_scarf", + "winterly:blue_scarf", + "winterly:white_scarf", + "winterly:rainbow_scarf" + ] +} diff --git a/winterly-fabric/src/main/resources/data/trinkets/tags/item/head/hat.json b/winterly-fabric/src/main/resources/data/trinkets/tags/item/head/hat.json new file mode 100644 index 0000000..6896299 --- /dev/null +++ b/winterly-fabric/src/main/resources/data/trinkets/tags/item/head/hat.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "winterly:red_santa_hat", + "winterly:blue_santa_hat" + ] +} \ No newline at end of file diff --git a/winterly-fabric/src/main/resources/fabric.mod.json b/winterly-fabric/src/main/resources/fabric.mod.json new file mode 100644 index 0000000..f87243e --- /dev/null +++ b/winterly-fabric/src/main/resources/fabric.mod.json @@ -0,0 +1,56 @@ +{ + "schemaVersion": 1, + "id": "${mod_id}", + "version": "${version}", + "name": "${name}", + "description": "${description}", + "authors": [ + "PinkGoosik", + "VioletSomik" + ], + "contact": { + "homepage": "${homepage_url}", + "sources": "${sources_url}", + "issues": "${issue_tracker_url}" + }, + "license": "${license}", + "icon": "assets/winterly/icon.png", + "environment": "*", + "entrypoints": { + "main": [ + "ru.pinkgoosik.winterly.fabric.WinterlyFabric" + ], + "client": [ + "ru.pinkgoosik.winterly.fabric.client.WinterlyFabricClient" + ], + "cardinal-components": [ + "ru.pinkgoosik.winterly.fabric.data.WinterlyComponents" + ], + "modmenu": [ + "ru.pinkgoosik.winterly.fabric.compat.WinterlyModMenuIntegration" + ] + }, + "mixins": [ + "${mod_id}-common.mixins.json", + "${mod_id}.mixins.json" + ], + "custom": { + "modmenu": { + "links": { + "modmenu.discord": "https://discord.gg/DcemWeskeZ", + "modmenu.curseforge": "https://curseforge.com/minecraft/mc-mods/winterly", + "modmenu.modrinth": "https://modrinth.com/mod/winterly" + } + }, + "cardinal-components": [ + "winterly:world_data" + ] + }, + "depends": { + "fabricloader": "*", + "fabric-api": "*", + "cloth-config": "*", + "minecraft": "${minecraft_version_range_fabric}", + "java": ">=21" + } +} diff --git a/winterly-fabric/src/main/resources/winterly.mixins.json b/winterly-fabric/src/main/resources/winterly.mixins.json new file mode 100644 index 0000000..5ccb8a0 --- /dev/null +++ b/winterly-fabric/src/main/resources/winterly.mixins.json @@ -0,0 +1,14 @@ +{ + "required": true, + "package": "ru.pinkgoosik.winterly.fabric.mixin", + "compatibilityLevel": "JAVA_21", + "minVersion": "0.8", + "client": [ + "client.ArmorRendererMixin" + ], + "mixins": [ + ], + "injectors": { + "defaultRequire": 1 + } +} diff --git a/winterly-neoforge/build.gradle.kts b/winterly-neoforge/build.gradle.kts new file mode 100644 index 0000000..1672ef4 --- /dev/null +++ b/winterly-neoforge/build.gradle.kts @@ -0,0 +1,84 @@ +plugins { + id("com.github.johnrengelman.shadow") version "7.1.2" +} + +architectury { + platformSetupLoomIde() + neoForge() +} + +base.archivesName.set("${rootProject.property("archives_base_name").toString()}-neoforge") + +loom { + accessWidenerPath.set(project(":winterly-common").loom.accessWidenerPath) +} + +val common: Configuration by configurations.creating +val shadowCommon: Configuration by configurations.creating // Don't use shadow from the shadow plugin because we don't want IDEA to index this. +val developmentNeoForge: Configuration = configurations.getByName("developmentNeoForge") + +configurations { + compileClasspath.get().extendsFrom(configurations["common"]) + runtimeClasspath.get().extendsFrom(configurations["common"]) + developmentNeoForge.extendsFrom(configurations["common"]) +} + +repositories { + maven { url = uri("https://maven.theillusivec4.top/") } + maven { url = uri("https://maven.shedaniel.me/") } +} + +dependencies { + neoForge("net.neoforged:neoforge:${rootProject.property("neoforge_version")}") + + // Remove the next line if you don't want to depend on the API + //modApi("dev.architectury:architectury-fabric:${rootProject.property("architectury_version")}") + + modCompileOnly("top.theillusivec4.curios:curios-neoforge:${rootProject.property("curios_version")}:api") + // Use the full Curios API jar at runtime + modCompileOnly("top.theillusivec4.curios:curios-neoforge:${rootProject.property("curios_version")}") + + modApi("me.shedaniel.cloth:cloth-config-neoforge:${rootProject.property("cloth_config")}") + + common(project(":winterly-common", configuration = "namedElements")) { isTransitive = false } + shadowCommon(project(":winterly-common", configuration = "transformProductionNeoForge")) { isTransitive = false } +} + +val javaComponent = components.getByName("java") +javaComponent.withVariantsFromConfiguration(configurations["sourcesElements"]) { + skip() +} + +tasks { + processResources { + inputs.property("version", project.version) + + filesMatching("META-INF/neoforge.mods.toml") { + expand("version" to project.version) + } + } + + shadowJar { + exclude("fabric.mod.json") + exclude("architectury.common.json") + + configurations = listOf(project.configurations["shadowCommon"]) + archiveClassifier.set("dev-shadow") + } + + remapJar { + inputFile.set(shadowJar.flatMap { it.archiveFile }) + dependsOn(shadowJar) +// archiveClassifier.set("neoforge") + } + + jar { + archiveClassifier.set("dev") + } + + sourcesJar { + val commonSources = project(":winterly-common").tasks.getByName("sourcesJar") + dependsOn(commonSources) + from(commonSources.archiveFile.map { zipTree(it) }) + } +} diff --git a/winterly-neoforge/gradle.properties b/winterly-neoforge/gradle.properties new file mode 100644 index 0000000..2914393 --- /dev/null +++ b/winterly-neoforge/gradle.properties @@ -0,0 +1 @@ +loom.platform=neoforge \ No newline at end of file diff --git a/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/WinterlyNeoforge.java b/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/WinterlyNeoforge.java new file mode 100644 index 0000000..f996718 --- /dev/null +++ b/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/WinterlyNeoforge.java @@ -0,0 +1,58 @@ +package ru.pinkgoosik.winterly.neoforge; + +import net.minecraft.core.registries.Registries; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.CreativeModeTab; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.fml.common.Mod; +import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; +import net.neoforged.fml.loading.FMLEnvironment; +import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent; +import net.neoforged.neoforge.registries.DeferredRegister; +import ru.pinkgoosik.winterly.neoforge.client.WinterlyNeoforgeClient; +import ru.pinkgoosik.winterly.neoforge.data.WinterlyDataAttachments; +import ru.pinkgoosik.winterly.neoforge.registry.WinterlyBlockEntities; +import ru.pinkgoosik.winterly.neoforge.registry.WinterlyBlocks; +import ru.pinkgoosik.winterly.neoforge.registry.WinterlyFeatures; +import ru.pinkgoosik.winterly.neoforge.registry.WinterlyItems; +import ru.pinkgoosik.winterly.Winterly; +import ru.pinkgoosik.winterly.registry.CommonWinterlyBlocks; +import ru.pinkgoosik.winterly.registry.CommonWinterlyItems; + +import java.util.function.Supplier; + +@SuppressWarnings("unused") +@Mod(Winterly.MOD_ID) +public class WinterlyNeoforge { + public static final DeferredRegister CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, "winterly"); + + public static final Supplier WINTERLY_TAB = CREATIVE_MODE_TABS.register("winterly", () -> CreativeModeTab.builder().icon(CommonWinterlyBlocks.SNOWGUY.asItem()::getDefaultInstance).title(Component.translatable("itemGroup.winterly.items")).build()); + + public WinterlyNeoforge(IEventBus bus) { + CREATIVE_MODE_TABS.register(bus); + + WinterlyItems.init(bus); + WinterlyBlocks.init(bus); + WinterlyBlockEntities.init(bus); + WinterlyFeatures.init(bus); + WinterlyDataAttachments.init(bus); + + bus.addListener(this::buildCreativeTab); + bus.addListener(this::commonSetup); + + if(FMLEnvironment.dist.isClient()) { + WinterlyNeoforgeClient.init(bus); + } + } + + private void buildCreativeTab(BuildCreativeModeTabContentsEvent event) { + if (event.getTab() == WINTERLY_TAB.get()) { + CommonWinterlyItems.ITEMS.forEach((id, item) -> event.accept(item)); + CommonWinterlyBlocks.ITEMS.forEach((id, item) -> event.accept(item)); + } + } + + private void commonSetup(FMLCommonSetupEvent event) { + + } +} diff --git a/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/block/BaseTransparentBlock.java b/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/block/BaseTransparentBlock.java new file mode 100644 index 0000000..64a413c --- /dev/null +++ b/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/block/BaseTransparentBlock.java @@ -0,0 +1,10 @@ +package ru.pinkgoosik.winterly.neoforge.block; + +import net.minecraft.world.level.block.TransparentBlock; + +public class BaseTransparentBlock extends TransparentBlock { + + public BaseTransparentBlock(Properties arg) { + super(arg); + } +} diff --git a/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/client/WinterlyNeoforgeClient.java b/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/client/WinterlyNeoforgeClient.java new file mode 100644 index 0000000..8caea1b --- /dev/null +++ b/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/client/WinterlyNeoforgeClient.java @@ -0,0 +1,64 @@ +package ru.pinkgoosik.winterly.neoforge.client; + +import net.minecraft.client.renderer.entity.DrownedRenderer; +import net.minecraft.client.renderer.entity.SkeletonRenderer; +import net.minecraft.client.renderer.entity.ZombieRenderer; +import net.minecraft.world.entity.EntityType; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.fml.ModList; +import net.neoforged.fml.ModLoadingContext; +import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; +import net.neoforged.neoforge.client.event.EntityRenderersEvent; +import net.neoforged.neoforge.client.gui.IConfigScreenFactory; +import ru.pinkgoosik.winterly.neoforge.compat.WinterlyCuriosIntegration; +import ru.pinkgoosik.winterly.client.WinterlyModelLayers; +import ru.pinkgoosik.winterly.client.model.SantaHatModel; +import ru.pinkgoosik.winterly.client.model.ScarfModel; +import ru.pinkgoosik.winterly.client.render.DecorationFeatureRenderer; +import ru.pinkgoosik.winterly.client.render.MobDecorationRenderers; +import ru.pinkgoosik.winterly.config.WinterlyClientConfig; +import ru.pinkgoosik.winterly.item.CommonSantaHatItem; +import ru.pinkgoosik.winterly.item.CommonScarfItem; +import ru.pinkgoosik.winterly.registry.CommonWinterlyItems; + +@OnlyIn(Dist.CLIENT) +public class WinterlyNeoforgeClient { + + public static void init(IEventBus bus) { + bus.addListener(WinterlyNeoforgeClient::clientSetup); + bus.addListener(WinterlyNeoforgeClient::registerModelLayers); + bus.addListener(WinterlyNeoforgeClient::registerRenderLayers); + } + + private static void registerModelLayers(EntityRenderersEvent.RegisterLayerDefinitions event) { + event.registerLayerDefinition(WinterlyModelLayers.SANTA_HAT_LAYER, SantaHatModel::getTexturedModelData); + event.registerLayerDefinition(WinterlyModelLayers.SCARF_LAYER, ScarfModel::getTexturedModelData); + } + + private static void registerRenderLayers(EntityRenderersEvent.AddLayers event) { + + if(event.getRenderer(EntityType.ZOMBIE) instanceof ZombieRenderer renderer) { + renderer.addLayer(new DecorationFeatureRenderer<>(renderer)); + } + if(event.getRenderer(EntityType.DROWNED) instanceof DrownedRenderer renderer) { + renderer.addLayer(new DecorationFeatureRenderer<>(renderer)); + } + if(event.getRenderer(EntityType.SKELETON) instanceof SkeletonRenderer renderer) { + renderer.addLayer(new DecorationFeatureRenderer<>(renderer)); + } + } + + private static void clientSetup(FMLClientSetupEvent event) { + if(ModList.get().isLoaded("curios")) { + CommonWinterlyItems.ITEMS.forEach((resourceLocation, item) -> { + if(item instanceof CommonScarfItem scarf) WinterlyCuriosIntegration.registerScarfRenderer(scarf); + if(item instanceof CommonSantaHatItem hat) WinterlyCuriosIntegration.registerSantaHatRenderer(hat); + }); + } + + MobDecorationRenderers.init(); + ModLoadingContext.get().registerExtensionPoint(IConfigScreenFactory.class, () -> (client, screen) -> WinterlyClientConfig.buildScreen(screen)); + } +} diff --git a/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/compat/WinterlyCuriosIntegration.java b/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/compat/WinterlyCuriosIntegration.java new file mode 100644 index 0000000..a5ccb93 --- /dev/null +++ b/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/compat/WinterlyCuriosIntegration.java @@ -0,0 +1,93 @@ +package ru.pinkgoosik.winterly.neoforge.compat; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.model.HumanoidModel; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.core.NonNullList; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import top.theillusivec4.curios.api.CuriosApi; +import top.theillusivec4.curios.api.SlotContext; +import top.theillusivec4.curios.api.client.CuriosRendererRegistry; +import top.theillusivec4.curios.api.client.ICurioRenderer; +import top.theillusivec4.curios.api.type.capability.ICurioItem; +import top.theillusivec4.curios.api.type.inventory.ICurioStacksHandler; +import top.theillusivec4.curios.api.type.inventory.IDynamicStackHandler; +import ru.pinkgoosik.winterly.Winterly; +import ru.pinkgoosik.winterly.client.model.WinterlyModels; +import ru.pinkgoosik.winterly.item.CommonSantaHatItem; +import ru.pinkgoosik.winterly.item.CommonScarfItem; + +import java.util.Map; + +public class WinterlyCuriosIntegration { + + public static void registerCurio(Item item) { + CuriosApi.registerCurio(item, new ICurioItem() {}); + } + + public static boolean hasVisibleHat(Player player) { + var curiosItemHandler = CuriosApi.getCuriosInventory(player); + if(curiosItemHandler.isPresent()) { + for (Map.Entry entry : curiosItemHandler.get().getCurios().entrySet()) { + IDynamicStackHandler stackHandler = entry.getValue().getStacks(); + IDynamicStackHandler cosmeticStacksHandler = entry.getValue().getCosmeticStacks(); + + for(int i = 0; i < stackHandler.getSlots(); ++i) { + ItemStack stack = cosmeticStacksHandler.getStackInSlot(i); + + NonNullList renderStates = entry.getValue().getRenders(); + boolean renderable = renderStates.size() > i && renderStates.get(i); + + if (stack.isEmpty() && renderable) { + stack = stackHandler.getStackInSlot(i); + } + + if (!stack.isEmpty() && stack.getItem() instanceof CommonSantaHatItem) { + return true; + } + } + } + } + + return false; + } + + public static void registerScarfRenderer(CommonScarfItem scarf) { + CuriosRendererRegistry.register(scarf, () -> { + return new ICurioRenderer() { + @Override + public > void render(ItemStack stack, SlotContext slotContext, PoseStack matrices, RenderLayerParent renderLayerParent, MultiBufferSource renderTypeBuffer, int light, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch) { + if(renderLayerParent.getModel() instanceof HumanoidModel humanoid) { + WinterlyModels.SCARF_MODEL.scarf.copyFrom(humanoid.body); + VertexConsumer vertexConsumer = renderTypeBuffer.getBuffer(RenderType.entityCutout(Winterly.id("textures/entity/" + scarf.color + "_scarf.png"))); + WinterlyModels.SCARF_MODEL.renderToBuffer(matrices, vertexConsumer, light, OverlayTexture.NO_OVERLAY); + } + } + }; + }); + } + + public static void registerSantaHatRenderer(CommonSantaHatItem hat) { + CuriosRendererRegistry.register(hat, () -> { + return new ICurioRenderer() { + @Override + public > void render(ItemStack stack, SlotContext slotContext, PoseStack matrices, RenderLayerParent renderLayerParent, MultiBufferSource renderTypeBuffer, int light, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch) { + if(renderLayerParent.getModel() instanceof HumanoidModel humanoid) { + WinterlyModels.SANTA_HAT_MODEL.hat.copyFrom(humanoid.head); + VertexConsumer vertexConsumer = renderTypeBuffer.getBuffer(RenderType.entityCutout(Winterly.id("textures/entity/" + hat.color + "_santa_hat.png"))); + WinterlyModels.SANTA_HAT_MODEL.renderToBuffer(matrices, vertexConsumer, light, OverlayTexture.NO_OVERLAY); + } + } + }; + }); + } + +} diff --git a/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/data/WinterlyDataAttachments.java b/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/data/WinterlyDataAttachments.java new file mode 100644 index 0000000..f92262c --- /dev/null +++ b/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/data/WinterlyDataAttachments.java @@ -0,0 +1,39 @@ +package ru.pinkgoosik.winterly.neoforge.data; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.attachment.AttachmentType; +import net.neoforged.neoforge.registries.DeferredRegister; +import net.neoforged.neoforge.registries.NeoForgeRegistries; +import org.jetbrains.annotations.Nullable; +import ru.pinkgoosik.winterly.Winterly; +import ru.pinkgoosik.winterly.data.CachedFlowers; + +import java.util.function.Supplier; + +public class WinterlyDataAttachments { + private static final DeferredRegister> ATTACHMENT_TYPES = DeferredRegister.create(NeoForgeRegistries.ATTACHMENT_TYPES, Winterly.MOD_ID); + + private static final Supplier> WORLD_DATA = ATTACHMENT_TYPES.register( + "world_data", () -> AttachmentType.builder(WorldData::new).serialize(new WorldData.WorldDataIAttachmentSerializer()).build() + ); + + public static void init(IEventBus eventBus) { + + CachedFlowers.instance = new CachedFlowers() { + @Override + public @Nullable Block getFlowerImpl(Level world, BlockPos pos) { + return world.getData(WORLD_DATA).cachedFlowers.get(pos); + } + + @Override + public void cacheFlowerImpl(Level world, BlockPos pos, Block flower) { + world.getData(WORLD_DATA).cachedFlowers.put(pos, flower); + } + }; + + ATTACHMENT_TYPES.register(eventBus); + } +} diff --git a/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/data/WorldData.java b/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/data/WorldData.java new file mode 100644 index 0000000..c7521bf --- /dev/null +++ b/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/data/WorldData.java @@ -0,0 +1,64 @@ +package ru.pinkgoosik.winterly.neoforge.data; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.Tag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; +import net.neoforged.neoforge.attachment.IAttachmentHolder; +import net.neoforged.neoforge.attachment.IAttachmentSerializer; + +import java.util.LinkedHashMap; +import java.util.Map; + +@SuppressWarnings("NullableProblems") +public class WorldData { + public Map cachedFlowers = new LinkedHashMap<>(); + + public static class WorldDataIAttachmentSerializer implements IAttachmentSerializer { + + @Override + public WorldData read(IAttachmentHolder holder, Tag tag, HolderLookup.Provider lookup) { + WorldData data = new WorldData(); + + var cachedFlowersNbt = ((CompoundTag) tag).getCompound("cachedFlowers"); + + if (!cachedFlowersNbt.isEmpty()) { + int size = cachedFlowersNbt.getInt("size"); + + for (int i = 0; i < size; i++) { + CompoundTag entry = cachedFlowersNbt.getCompound(String.valueOf(i)); + BlockPos pos = new BlockPos(entry.getInt("x"), entry.getInt("y"), entry.getInt("z")); + var block = BuiltInRegistries.BLOCK.getOptional(ResourceLocation.parse(entry.getString("block"))); + block.ifPresent(bl -> data.cachedFlowers.put(pos, bl)); + } + } + + return data; + } + + @Override + public Tag write(WorldData data, HolderLookup.Provider lookup) { + CompoundTag cachedFlowersNbt = new CompoundTag(); + cachedFlowersNbt.putInt("size", data.cachedFlowers.size()); + int index = -1; + + for (var entry : data.cachedFlowers.entrySet()) { + index++; + CompoundTag entryNbt = new CompoundTag(); + entryNbt.putInt("x", entry.getKey().getX()); + entryNbt.putInt("y", entry.getKey().getY()); + entryNbt.putInt("z", entry.getKey().getZ()); + entryNbt.putString("block", BuiltInRegistries.BLOCK.getKey(entry.getValue()).toString()); + cachedFlowersNbt.put(String.valueOf(index), entryNbt); + } + + CompoundTag nbt = new CompoundTag(); + nbt.put("cachedFlowers", cachedFlowersNbt); + + return nbt; + } + } +} diff --git a/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/item/SantaHatItem.java b/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/item/SantaHatItem.java new file mode 100644 index 0000000..5ca46fb --- /dev/null +++ b/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/item/SantaHatItem.java @@ -0,0 +1,49 @@ +package ru.pinkgoosik.winterly.neoforge.item; + +import net.minecraft.ChatFormatting; +import net.minecraft.locale.Language; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.Style; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.neoforged.fml.ModList; +import ru.pinkgoosik.winterly.neoforge.compat.WinterlyCuriosIntegration; +import ru.pinkgoosik.winterly.item.CommonSantaHatItem; + +import java.util.List; + +public class SantaHatItem extends CommonSantaHatItem { + + public SantaHatItem(Item.Properties settings, String color) { + super(settings, color); + + if(ModList.get().isLoaded("curios")) { + WinterlyCuriosIntegration.registerCurio(this); + } + } + + @Override + public void appendHoverText(ItemStack stack, TooltipContext context, List tooltip, TooltipFlag tooltipFlag) { + if(!ModList.get().isLoaded("curios")) { + tooltip.add(Component.translatable("tag.winterly.cosmetic").withStyle(ChatFormatting.GRAY)); + tooltip.add(Component.nullToEmpty(" ")); + Language lang = Language.getInstance(); + String key = "tip.winterly.requires_curios."; + + for(int i = 0; i <= 32; i++) { + if(lang.has(key + i)) { + tooltip.add(Component.translatable(key + i).toFlatList(Style.EMPTY.withColor(ChatFormatting.GRAY)).getFirst()); + } + if(!lang.has(key + (i + 1))) { + break; + } + } + } + else { + tooltip.add(Component.nullToEmpty(" ")); + tooltip.add(Component.translatable("tag.winterly.cosmetic").withStyle(ChatFormatting.GRAY)); + } + } + +} diff --git a/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/item/ScarfItem.java b/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/item/ScarfItem.java new file mode 100644 index 0000000..5baf04a --- /dev/null +++ b/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/item/ScarfItem.java @@ -0,0 +1,48 @@ +package ru.pinkgoosik.winterly.neoforge.item; + +import net.minecraft.ChatFormatting; +import net.minecraft.locale.Language; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.Style; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.neoforged.fml.ModList; +import ru.pinkgoosik.winterly.neoforge.compat.WinterlyCuriosIntegration; +import ru.pinkgoosik.winterly.item.CommonScarfItem; + +import java.util.List; + +public class ScarfItem extends CommonScarfItem { + + public ScarfItem(Item.Properties settings, String color) { + super(settings, color); + + if(ModList.get().isLoaded("curios")) { + WinterlyCuriosIntegration.registerCurio(this); + } + } + + @Override + public void appendHoverText(ItemStack stack, TooltipContext context, List tooltip, TooltipFlag tooltipFlag) { + if(!ModList.get().isLoaded("curios")) { + tooltip.add(Component.translatable("tag.winterly.cosmetic").withStyle(ChatFormatting.GRAY)); + tooltip.add(Component.nullToEmpty(" ")); + Language lang = Language.getInstance(); + String key = "tip.winterly.requires_curios."; + + for(int i = 0; i <= 32; i++) { + if(lang.has(key + i)) { + tooltip.add(Component.translatable(key + i).toFlatList(Style.EMPTY.withColor(ChatFormatting.GRAY)).getFirst()); + } + if(!lang.has(key + (i + 1))) { + break; + } + } + } + else { + tooltip.add(Component.nullToEmpty(" ")); + tooltip.add(Component.translatable("tag.winterly.cosmetic").withStyle(ChatFormatting.GRAY)); + } + } +} diff --git a/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/mixin/client/ArmorRendererMixin.java b/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/mixin/client/ArmorRendererMixin.java new file mode 100644 index 0000000..1706bd5 --- /dev/null +++ b/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/mixin/client/ArmorRendererMixin.java @@ -0,0 +1,34 @@ +package ru.pinkgoosik.winterly.neoforge.mixin.client; + +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.model.HumanoidModel; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer; +import net.minecraft.client.renderer.entity.layers.RenderLayer; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.neoforged.fml.ModList; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import ru.pinkgoosik.winterly.neoforge.compat.WinterlyCuriosIntegration; + +@Mixin(HumanoidArmorLayer.class) +public abstract class ArmorRendererMixin, A extends HumanoidModel> extends RenderLayer { + + public ArmorRendererMixin(RenderLayerParent context) { + super(context); + } + + @Inject(method = "renderArmorPiece", at = @At("HEAD"), cancellable = true) + void render(PoseStack matrices, MultiBufferSource vertexConsumers, T entity, EquipmentSlot armorSlot, int light, A model, CallbackInfo ci) { + if(entity instanceof Player player) { + if(ModList.get().isLoaded("curios") && armorSlot.equals(EquipmentSlot.HEAD)) { + if(WinterlyCuriosIntegration.hasVisibleHat(player)) ci.cancel(); + } + } + } +} diff --git a/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/registry/WinterlyBlockEntities.java b/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/registry/WinterlyBlockEntities.java new file mode 100644 index 0000000..6af79d1 --- /dev/null +++ b/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/registry/WinterlyBlockEntities.java @@ -0,0 +1,40 @@ +package ru.pinkgoosik.winterly.neoforge.registry; + +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.registries.DeferredRegister; +import ru.pinkgoosik.winterly.block.GiftBoxBlock; +import ru.pinkgoosik.winterly.block.entity.GiftBoxBlockEntity; +import ru.pinkgoosik.winterly.registry.CommonWinterlyBlocks; + +import java.util.ArrayList; + +import static ru.pinkgoosik.winterly.registry.CommonWinterlyBlockEntities.GIFT_BOX_BLOCK_ENTITY; + +public class WinterlyBlockEntities { + public static final DeferredRegister> BLOCK_ENTITIES_REGISTERER = DeferredRegister.create(BuiltInRegistries.BLOCK_ENTITY_TYPE, "winterly"); + + public static void init(IEventBus eventBus) { + + BLOCK_ENTITIES_REGISTERER.register("gift_box", () -> { + var type = BlockEntityType.Builder.of(GiftBoxBlockEntity::new, getGiftBoxes()).build(null); + GIFT_BOX_BLOCK_ENTITY = type; + return type; + }); + + BLOCK_ENTITIES_REGISTERER.register(eventBus); + } + + public static GiftBoxBlock[] getGiftBoxes() { + ArrayList gifts = new ArrayList<>(); + + CommonWinterlyBlocks.BLOCKS.forEach((identifier, block) -> { + if(block instanceof GiftBoxBlock box) { + gifts.add(box); + } + }); + + return gifts.toArray(new GiftBoxBlock[0]); + } +} diff --git a/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/registry/WinterlyBlocks.java b/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/registry/WinterlyBlocks.java new file mode 100644 index 0000000..4dc2b3a --- /dev/null +++ b/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/registry/WinterlyBlocks.java @@ -0,0 +1,86 @@ +package ru.pinkgoosik.winterly.neoforge.registry; + +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.SlabBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.material.MapColor; +import net.minecraft.world.level.material.PushReaction; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.registries.DeferredBlock; +import net.neoforged.neoforge.registries.DeferredRegister; +import ru.pinkgoosik.winterly.Winterly; +import ru.pinkgoosik.winterly.block.*; +import ru.pinkgoosik.winterly.block.base.BasePaneBlock; +import ru.pinkgoosik.winterly.block.base.BaseStairsBlock; +import ru.pinkgoosik.winterly.neoforge.block.BaseTransparentBlock; + +import java.util.function.Supplier; + +import static net.minecraft.world.level.block.Blocks.*; +import static ru.pinkgoosik.winterly.registry.CommonWinterlyItems.ITEMS; +import static ru.pinkgoosik.winterly.registry.CommonWinterlyBlocks.*; + +public class WinterlyBlocks { + public static final DeferredRegister.Blocks BLOCKS_REGISTERER = DeferredRegister.createBlocks("winterly"); + + public static void init(IEventBus eventBus) { + add("icicle", () -> ICICLE = new IcicleBlock(copyOf(ICE).pushReaction(PushReaction.DESTROY))); + add("icicle_block", () -> ICICLE_BLOCK = new BaseTransparentBlock(copyOf(PACKED_ICE).noOcclusion())); + add("packed_icicle_block", () -> PACKED_ICICLE_BLOCK = new BaseTransparentBlock(copyOf(PACKED_ICE).noOcclusion())); + add("icicle_pane", () -> ICICLE_PANE = new BasePaneBlock(copyOf(PACKED_ICE).noOcclusion())); + add("icicle_bars", () -> ICICLE_BARS = new BasePaneBlock(copyOf(ICE).noOcclusion())); + add("cryomarble_block", () -> CRYOMARBLE_BLOCK = new Block(copyOf(DIAMOND_BLOCK))); + add("snowguy", () -> SNOWGUY = new SnowguyBlock(copyOf(WHITE_WOOL).sound(SoundType.SNOW))); + add("snowball_wall", () -> SNOWBALL_WALL = new SnowballWallBlock(copyOf(WHITE_WOOL).sound(SoundType.SNOW).noOcclusion())); + add("dense_snow", () -> DENSE_SNOW = new Block(copyOf(WHITE_WOOL).sound(SoundType.SNOW))); + add("dense_snow_stairs", () -> DENSE_SNOW_STAIRS = new BaseStairsBlock(SNOW_BLOCK.defaultBlockState(), copyOf(WHITE_WOOL).sound(SoundType.SNOW))); + add("dense_snow_slab", () -> DENSE_SNOW_SLAB = new SlabBlock(copyOf(WHITE_WOOL).sound(SoundType.SNOW))); + + add("snow_bricks", () -> SNOW_BRICKS = new Block(copyOf(WHITE_WOOL).sound(SoundType.SNOW))); + add("snow_brick_stairs", () -> SNOW_BRICK_STAIRS = new BaseStairsBlock(SNOW_BLOCK.defaultBlockState(), copyOf(WHITE_WOOL).sound(SoundType.SNOW))); + add("snow_brick_slab", () -> SNOW_BRICK_SLAB = new SlabBlock(copyOf(WHITE_WOOL).sound(SoundType.SNOW))); + add("frozen_grass", () -> FROZEN_GRASS = new CommonFrozenGrassBlock(BlockBehaviour.Properties.of().mapColor(MapColor.SNOW).replaceable().forceSolidOff().randomTicks().strength(0.1F).requiresCorrectToolForDrops().sound(SoundType.SNOW).isViewBlocking((state, world, pos) -> state.getValue(CommonFrozenGrassBlock.LAYERS) >= 8).pushReaction(PushReaction.DESTROY))); + add("frozen_flower", () -> FROZEN_FLOWER = new CommonFrozenFlowerBlock(BlockBehaviour.Properties.of().mapColor(MapColor.SNOW).replaceable().forceSolidOff().randomTicks().strength(0.1F).requiresCorrectToolForDrops().sound(SoundType.GRASS).isViewBlocking((state, world, pos) -> state.getValue(CommonFrozenFlowerBlock.LAYERS) >= 8).pushReaction(PushReaction.DESTROY))); + + add("raw_cryomarble_shard", () -> RAW_CRYOMARBLE_SHARD = new IcicleBlock(copyOf(WHITE_WOOL).sound(SoundType.GLASS).lightLevel(state -> 12))); + + add("red_gift_box", () -> RED_GIFT_BOX = new GiftBoxBlock(copyOf(RED_WOOL).pushReaction(PushReaction.DESTROY))); + add("orange_gift_box", () -> ORANGE_GIFT_BOX = new GiftBoxBlock(copyOf(RED_GIFT_BOX))); + add("yellow_gift_box", () -> YELLOW_GIFT_BOX = new GiftBoxBlock(copyOf(RED_GIFT_BOX))); + add("green_gift_box", () -> GREEN_GIFT_BOX = new GiftBoxBlock(copyOf(RED_GIFT_BOX))); + add("cyan_gift_box", () -> CYAN_GIFT_BOX = new GiftBoxBlock(copyOf(RED_GIFT_BOX))); + add("blue_gift_box", () -> BLUE_GIFT_BOX = new GiftBoxBlock(copyOf(RED_GIFT_BOX))); + add("purple_gift_box", () -> PURPLE_GIFT_BOX = new GiftBoxBlock(copyOf(RED_GIFT_BOX))); + add("black_gift_box", () -> BLACK_GIFT_BOX = new GiftBoxBlock(copyOf(RED_GIFT_BOX))); + add("white_gift_box", () -> WHITE_GIFT_BOX = new GiftBoxBlock(copyOf(RED_GIFT_BOX))); + + add("garland_lights", () -> GARLAND_LIGHTS = new GarlandLightsBlock(copyOf(GREEN_WOOL).pushReaction(PushReaction.DESTROY).noCollission().sound(SoundType.CANDLE))); + add("rainy_garland_lights", () -> RAINY_GARLAND_LIGHTS = new GarlandLightsBlock(copyOf(WHITE_WOOL).pushReaction(PushReaction.DESTROY).noCollission().sound(SoundType.CANDLE))); + +// ITEMS.forEach((id, item) -> Registry.register(BuiltInRegistries.ITEM, id, item)); +// BLOCKS.forEach((id, block) -> Registry.register(BuiltInRegistries.BLOCK, id, block)); + + BLOCKS_REGISTERER.register(eventBus); + } + + public static T add(String name, Supplier blockSup) { + DeferredBlock toReturn = BLOCKS_REGISTERER.register(name, () -> { + var block = blockSup.get(); + BLOCKS.put(Winterly.id(name), block); + return block; + }); + WinterlyItems.ITEMS_REGISTERER.register(name, () -> { + var item = new BlockItem(toReturn.get(), new Item.Properties()); + ITEMS.put(Winterly.id(name), item); + return item; + }); + return null; + } + + public static BlockBehaviour.Properties copyOf(Block block) { + return BlockBehaviour.Properties.ofFullCopy(block); + } +} diff --git a/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/registry/WinterlyFeatures.java b/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/registry/WinterlyFeatures.java new file mode 100644 index 0000000..ae28233 --- /dev/null +++ b/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/registry/WinterlyFeatures.java @@ -0,0 +1,20 @@ +package ru.pinkgoosik.winterly.neoforge.registry; + +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.registries.DeferredRegister; +import ru.pinkgoosik.winterly.worldgen.CryomarbleFeature; +import ru.pinkgoosik.winterly.worldgen.UndergroundIcicleFeature; + +public class WinterlyFeatures { + + public static final DeferredRegister> REGISTERER = DeferredRegister.create(BuiltInRegistries.FEATURE, "winterly"); + + public static void init(IEventBus eventBus) { + REGISTERER.register("underground_icicle", UndergroundIcicleFeature::new); + REGISTERER.register("cryomarble", CryomarbleFeature::new); + + REGISTERER.register(eventBus); + } +} diff --git a/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/registry/WinterlyItems.java b/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/registry/WinterlyItems.java new file mode 100644 index 0000000..a361007 --- /dev/null +++ b/winterly-neoforge/src/main/java/ru/pinkgoosik/winterly/neoforge/registry/WinterlyItems.java @@ -0,0 +1,55 @@ +package ru.pinkgoosik.winterly.neoforge.registry; + +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Tiers; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.registries.DeferredRegister; +import ru.pinkgoosik.winterly.Winterly; +import ru.pinkgoosik.winterly.item.tool.*; +import ru.pinkgoosik.winterly.neoforge.item.SantaHatItem; +import ru.pinkgoosik.winterly.neoforge.item.ScarfItem; + +import static ru.pinkgoosik.winterly.registry.CommonWinterlyItems.*; + +import java.util.function.Supplier; + +@SuppressWarnings("unused") +public class WinterlyItems { + + public static final DeferredRegister.Items ITEMS_REGISTERER = DeferredRegister.createItems("winterly"); + + public static void init(IEventBus eventBus) { + add("red_candy_cane", () -> RED_CANDY_CANE = new Item(settings().food(new FoodProperties.Builder().nutrition(2).saturationModifier(0.1F).fast().build()))); + add("green_candy_cane", () -> GREEN_CANDY_CANE = new Item(settings().food(new FoodProperties.Builder().nutrition(2).saturationModifier(0.1F).fast().build()))); + add("blue_candy_cane", () -> BLUE_CANDY_CANE = new Item(settings().food(new FoodProperties.Builder().nutrition(2).saturationModifier(0.1F).fast().build()))); + + add("cryomarble_shard", () -> CRYOMARBLE_SHARD = new Item(settings())); + add("cryomarble", () -> CRYOMARBLE = new Item(settings())); + + add("cryomarble_sword", () -> CRYOMARBLE_SWORD = new CryomarbleSwordItem(Tiers.DIAMOND, settings())); + add("cryomarble_shovel", () -> CRYOMARBLE_SHOVEL = new CryomarbleShovelItem(Tiers.DIAMOND, settings())); + add("cryomarble_pickaxe", () -> CRYOMARBLE_PICKAXE = new CryomarblePickaxeItem(Tiers.DIAMOND, settings())); + add("cryomarble_axe", () -> CRYOMARBLE_AXE = new CryomarbleAxeItem(Tiers.DIAMOND, settings())); + add("cryomarble_hoe", () -> CRYOMARBLE_HOE = new CryomarbleHoeItem(Tiers.DIAMOND, settings())); + + add("red_santa_hat", () -> RED_SANTA_HAT = new SantaHatItem(settings(), "red")); + add("blue_santa_hat", () -> BLUE_SANTA_HAT = new SantaHatItem(settings(), "blue")); + + add("white_scarf", () -> WHITE_SCARF = new ScarfItem(settings(), "white")); + add("red_scarf", () -> RED_SCARF = new ScarfItem(settings(), "red")); + add("green_scarf", () -> GREEN_SCARF = new ScarfItem(settings(), "green")); + add("blue_scarf", () -> BLUE_SCARF = new ScarfItem(settings(), "blue")); + add("rainbow_scarf", () -> RAINBOW_SCARF = new ScarfItem(settings(), "rainbow")); + + ITEMS_REGISTERER.register(eventBus); + } + + private static void add(String name, Supplier sup) { + ITEMS_REGISTERER.register(name, () -> { + var item = sup.get(); + ITEMS.put(Winterly.id(name), item); + return item; + }); + } +} diff --git a/winterly-neoforge/src/main/resources/META-INF/neoforge.mods.toml b/winterly-neoforge/src/main/resources/META-INF/neoforge.mods.toml new file mode 100644 index 0000000..cc627da --- /dev/null +++ b/winterly-neoforge/src/main/resources/META-INF/neoforge.mods.toml @@ -0,0 +1,18 @@ +modLoader = "javafml" +loaderVersion = "[2,)" +issueTrackerURL = "${issue_tracker_url}" # Change this to the link to your mod's issue tracker. +license = "${license}" + +[[mods]] +modId = "${mod_id}" +displayName = "${name}" +version = "${version}" +description = '''${description}''' +authors = "PinkGoosik" +logoFile = "assets/winterly/icon.png" + +[[mixins]] +config = "${mod_id}-common.mixins.json" + +[[mixins]] +config = "${mod_id}.mixins.json" diff --git a/winterly-neoforge/src/main/resources/data/curios/tags/item/curio.json b/winterly-neoforge/src/main/resources/data/curios/tags/item/curio.json new file mode 100644 index 0000000..e66e6b4 --- /dev/null +++ b/winterly-neoforge/src/main/resources/data/curios/tags/item/curio.json @@ -0,0 +1,12 @@ +{ + "replace": false, + "values": [ + "winterly:red_santa_hat", + "winterly:blue_santa_hat", + "winterly:red_scarf", + "winterly:green_scarf", + "winterly:blue_scarf", + "winterly:white_scarf", + "winterly:rainbow_scarf" + ] +} \ No newline at end of file diff --git a/winterly-neoforge/src/main/resources/data/winterly/curios/entity/winterly.json b/winterly-neoforge/src/main/resources/data/winterly/curios/entity/winterly.json new file mode 100644 index 0000000..8d2c6ea --- /dev/null +++ b/winterly-neoforge/src/main/resources/data/winterly/curios/entity/winterly.json @@ -0,0 +1,11 @@ +{ + "entities": ["minecraft:player"], + "slots": [ + "belt", + "body", + "charm", + "head", + "necklace", + "ring" + ] +} \ No newline at end of file diff --git a/winterly-neoforge/src/main/resources/data/winterly/neoforge/biome_modifier/cryomarble.json b/winterly-neoforge/src/main/resources/data/winterly/neoforge/biome_modifier/cryomarble.json new file mode 100644 index 0000000..a802550 --- /dev/null +++ b/winterly-neoforge/src/main/resources/data/winterly/neoforge/biome_modifier/cryomarble.json @@ -0,0 +1,6 @@ +{ + "type": "neoforge:add_features", + "biomes": "#minecraft:is_overworld", + "features": "winterly:cryomarble", + "step": "underground_decoration" +} \ No newline at end of file diff --git a/winterly-neoforge/src/main/resources/data/winterly/neoforge/biome_modifier/underground_icicle.json b/winterly-neoforge/src/main/resources/data/winterly/neoforge/biome_modifier/underground_icicle.json new file mode 100644 index 0000000..759d169 --- /dev/null +++ b/winterly-neoforge/src/main/resources/data/winterly/neoforge/biome_modifier/underground_icicle.json @@ -0,0 +1,6 @@ +{ + "type": "neoforge:add_features", + "biomes": "#forge:is_cold/overworld", + "features": "winterly:underground_icicle", + "step": "underground_decoration" +} \ No newline at end of file diff --git a/winterly-neoforge/src/main/resources/pack.mcmeta b/winterly-neoforge/src/main/resources/pack.mcmeta new file mode 100644 index 0000000..75408ef --- /dev/null +++ b/winterly-neoforge/src/main/resources/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "description": "${description}", + "pack_format": 15 + } +} diff --git a/winterly-neoforge/src/main/resources/winterly.mixins.json b/winterly-neoforge/src/main/resources/winterly.mixins.json new file mode 100644 index 0000000..f0444f4 --- /dev/null +++ b/winterly-neoforge/src/main/resources/winterly.mixins.json @@ -0,0 +1,14 @@ +{ + "required": true, + "package": "ru.pinkgoosik.winterly.neoforge.mixin", + "compatibilityLevel": "JAVA_21", + "minVersion": "0.8", + "client": [ + "client.ArmorRendererMixin" + ], + "mixins": [ + ], + "injectors": { + "defaultRequire": 1 + } +}