├── .gitattributes ├── .gitea └── workflows │ └── deploy.yml ├── .github └── workflows │ └── publish.yml ├── .gitignore ├── LICENSE ├── LICENSE.LGPL-3.0 ├── LICENSE.MIT ├── README.md ├── build.gradle ├── buildSrc ├── .gitignore ├── build.gradle ├── gradle.properties ├── settings.gradle └── src │ └── main │ └── java │ └── fr │ └── altarik │ ├── CreateTag.java │ └── ReportDiscord.java ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── settings.gradle └── src └── main ├── java └── fr │ └── adrien1106 │ └── reframed │ ├── ReFramed.java │ ├── block │ ├── ConnectingReFramedBlock.java │ ├── CornerDoubleReFramedBlock.java │ ├── EdgeDoubleReFramedBlock.java │ ├── FacingDoubleReFramedBlock.java │ ├── HalfLayerDoubleReFramedBlock.java │ ├── LayeredReFramedBlock.java │ ├── PillarReFramedBlock.java │ ├── ReFramedBlock.java │ ├── ReFramedButtonBlock.java │ ├── ReFramedDoorBlock.java │ ├── ReFramedDoubleBlock.java │ ├── ReFramedDoubleEntity.java │ ├── ReFramedEntity.java │ ├── ReFramedFenceBlock.java │ ├── ReFramedHalfLayerBlock.java │ ├── ReFramedHalfSlabBlock.java │ ├── ReFramedHalfSlabsSlabBlock.java │ ├── ReFramedHalfStairBlock.java │ ├── ReFramedHalfStairsCubeStairBlock.java │ ├── ReFramedHalfStairsSlabBlock.java │ ├── ReFramedHalfStairsStairBlock.java │ ├── ReFramedHalfStairsStepStairBlock.java │ ├── ReFramedLayerBlock.java │ ├── ReFramedPaneBlock.java │ ├── ReFramedPillarBlock.java │ ├── ReFramedPillarsWallBlock.java │ ├── ReFramedPostBlock.java │ ├── ReFramedPostFenceBlock.java │ ├── ReFramedSlabBlock.java │ ├── ReFramedSlabsCubeBlock.java │ ├── ReFramedSlabsHalfLayerBlock.java │ ├── ReFramedSlabsInnerStairBlock.java │ ├── ReFramedSlabsLayerBlock.java │ ├── ReFramedSlabsOuterStairBlock.java │ ├── ReFramedSlabsStairBlock.java │ ├── ReFramedSmallCubeBlock.java │ ├── ReFramedSmallCubesStepBlock.java │ ├── ReFramedStairBlock.java │ ├── ReFramedStairsCubeBlock.java │ ├── ReFramedStepBlock.java │ ├── ReFramedStepsCrossBlock.java │ ├── ReFramedStepsHalfLayerBlock.java │ ├── ReFramedStepsSlabBlock.java │ ├── ReFramedTrapdoorBlock.java │ ├── ReFramedWallBlock.java │ ├── WaterloggableReFramedBlock.java │ └── WaterloggableReFramedDoubleBlock.java │ ├── client │ ├── ReFramedClient.java │ ├── ReFramedClientHelper.java │ ├── ReFramedModelProvider.java │ ├── model │ │ ├── DoubleRetexturingBakedModel.java │ │ ├── DynamicBakedModel.java │ │ ├── MultiRetexturableModel.java │ │ ├── QuadPosBounds.java │ │ ├── QuadUvBounds.java │ │ ├── RetexturingBakedModel.java │ │ ├── UnbakedAutoRetexturedModel.java │ │ ├── UnbakedDoubleRetexturedModel.java │ │ ├── UnbakedJsonRetexturedModel.java │ │ ├── UnbakedRetexturedModel.java │ │ └── apperance │ │ │ ├── Appearance.java │ │ │ ├── CamoAppearance.java │ │ │ ├── CamoAppearanceManager.java │ │ │ ├── ComputedAppearance.java │ │ │ ├── SingleSpriteAppearance.java │ │ │ ├── SpriteProperties.java │ │ │ └── WeightedComputedAppearance.java │ └── util │ │ └── RenderHelper.java │ ├── compat │ ├── ICTMQuadTransform.java │ └── RebakedModel.java │ ├── generator │ ├── BlockStateProvider.java │ ├── GAdvancement.java │ ├── GBlockLoot.java │ ├── GBlockTag.java │ ├── GBlockstate.java │ ├── GLanguage.java │ ├── GRecipe.java │ ├── Generator.java │ ├── RecipeSetter.java │ ├── TagGetter.java │ ├── block │ │ ├── Button.java │ │ ├── CornerDouble.java │ │ ├── Cube.java │ │ ├── Door.java │ │ ├── Fence.java │ │ ├── HalfLayer.java │ │ ├── HalfSlab.java │ │ ├── HalfSlabsSlab.java │ │ ├── HalfStair.java │ │ ├── HalfStairsCubeStair.java │ │ ├── HalfStairsSlab.java │ │ ├── HalfStairsStair.java │ │ ├── HalfStairsStepStair.java │ │ ├── Layer.java │ │ ├── Pane.java │ │ ├── Pillar.java │ │ ├── PillarsWall.java │ │ ├── Post.java │ │ ├── PostFence.java │ │ ├── Slab.java │ │ ├── SlabsCube.java │ │ ├── SlabsHalfLayer.java │ │ ├── SlabsInnerStair.java │ │ ├── SlabsLayer.java │ │ ├── SlabsOuterStair.java │ │ ├── SlabsStair.java │ │ ├── SmallCube.java │ │ ├── SmallCubesStep.java │ │ ├── Stair.java │ │ ├── StairsCube.java │ │ ├── Step.java │ │ ├── StepsCross.java │ │ ├── StepsHalfLayer.java │ │ ├── StepsSlab.java │ │ ├── Trapdoor.java │ │ └── Wall.java │ └── item │ │ ├── Blueprint.java │ │ ├── Hammer.java │ │ └── Screwdriver.java │ ├── item │ ├── ReFramedBlueprintItem.java │ ├── ReFramedBlueprintWrittenItem.java │ ├── ReFramedHammerItem.java │ └── ReFramedScrewdriverItem.java │ ├── mixin │ ├── BlockItemMixin.java │ ├── CompatMixinPlugin.java │ ├── MinecraftAccessor.java │ ├── WallBlockAccessor.java │ ├── compat │ │ ├── AthenaBakedModelMixin.java │ │ ├── AthenaConnectedBlockModelMixin.java │ │ ├── AthenaWrappedGetterMixin.java │ │ ├── AxiomChunkedBlockRegionMixin.java │ │ ├── AxiomClientBlockEntitySerializerMixin.java │ │ ├── AxiomClipboardMixin.java │ │ ├── AxiomCloneBuilderToolMixin.java │ │ ├── AxiomMappedBlockAndTintGetterMixin.java │ │ ├── AxiomMoveBuilderToolMixin.java │ │ ├── AxiomPlacementMixin.java │ │ ├── AxiomRotSpriteMixin.java │ │ ├── AxiomScale3xMixin.java │ │ ├── ContinuityCTMBakedModelMixin.java │ │ ├── ContinuityCTMQuadTransformMixin.java │ │ ├── ContinuityConnectionPredicateMixin.java │ │ ├── ContinuityModelWrappingHandlerMixin.java │ │ ├── IndiumAbstractBlockRenderContextMixin.java │ │ ├── IndiumBlockRenderInfoMixin.java │ │ ├── IndiumNonTerrainBlockRenderContextMixin.java │ │ ├── IndiumTerrainRenderContextMixin.java │ │ └── SodiumBlockOcclusionCacheMixin.java │ ├── logic │ │ └── BlockItemMixin.java │ ├── model │ │ └── WeightedBakedModelAccessor.java │ ├── particles │ │ ├── AccessorParticle.java │ │ ├── AccessorSpriteBillboardParticle.java │ │ ├── MixinBlockDustParticle.java │ │ ├── MixinEntity.java │ │ └── MixinLivingEntity.java │ ├── render │ │ ├── AbstractBlockRenderContextMixin.java │ │ ├── BlockModelRendererMixin.java │ │ ├── BlockRenderContextMixin.java │ │ ├── BlockRenderInfoMixin.java │ │ ├── MultipartBakedModelMixin.java │ │ ├── TerrainRenderContextMixin.java │ │ └── WorldRendererMixin.java │ └── sound │ │ ├── BlockItemMixin.java │ │ ├── EntityMixin.java │ │ ├── LivingEntityMixin.java │ │ └── WorldRendererMixin.java │ └── util │ ├── DefaultList.java │ ├── VoxelHelper.java │ ├── blocks │ ├── BlockHelper.java │ ├── BlockProperties.java │ ├── Corner.java │ ├── Edge.java │ ├── StairShape.java │ └── ThemeableBlockEntity.java │ └── mixin │ ├── IAxiomChunkedBlockRegionMixin.java │ ├── IBlockRenderInfoMixin.java │ ├── IMultipartBakedModelMixin.java │ └── ThemedBlockEntity.java └── resources ├── assets ├── minecraft │ └── atlases │ │ └── blocks.json ├── reframed-icon.png └── reframed │ ├── models │ └── block │ │ ├── door.json │ │ ├── fence │ │ ├── core.json │ │ ├── full │ │ │ ├── inventory.json │ │ │ ├── side_bars.json │ │ │ └── side_core.json │ │ ├── inventory.json │ │ ├── side_off.json │ │ └── side_on.json │ │ ├── half_layer │ │ ├── east │ │ │ ├── layer_10.json │ │ │ ├── layer_12.json │ │ │ ├── layer_14.json │ │ │ ├── layer_16.json │ │ │ ├── layer_2.json │ │ │ ├── layer_4.json │ │ │ ├── layer_6.json │ │ │ └── layer_8.json │ │ ├── side │ │ │ ├── layer_10.json │ │ │ ├── layer_12.json │ │ │ ├── layer_14.json │ │ │ ├── layer_16.json │ │ │ ├── layer_2.json │ │ │ ├── layer_4.json │ │ │ ├── layer_6.json │ │ │ └── layer_8.json │ │ └── slab │ │ │ ├── east │ │ │ ├── layer_10.json │ │ │ ├── layer_12.json │ │ │ ├── layer_14.json │ │ │ ├── layer_16.json │ │ │ ├── layer_2.json │ │ │ ├── layer_4.json │ │ │ ├── layer_6.json │ │ │ └── layer_8.json │ │ │ └── side │ │ │ ├── layer_10.json │ │ │ ├── layer_12.json │ │ │ ├── layer_14.json │ │ │ ├── layer_16.json │ │ │ ├── layer_2.json │ │ │ ├── layer_4.json │ │ │ ├── layer_6.json │ │ │ └── layer_8.json │ │ ├── half_slab │ │ ├── complement.json │ │ └── default.json │ │ ├── half_stair │ │ ├── base.json │ │ ├── base_side.json │ │ ├── down.json │ │ ├── side.json │ │ ├── slab │ │ │ ├── down.json │ │ │ └── side.json │ │ └── stair │ │ │ ├── cube.json │ │ │ ├── cube_side.json │ │ │ ├── down.json │ │ │ ├── side.json │ │ │ ├── step_1.json │ │ │ ├── step_2.json │ │ │ ├── step_side_1.json │ │ │ └── step_side_2.json │ │ ├── layer_top │ │ ├── layer_2.json │ │ ├── layer_4.json │ │ ├── layer_6.json │ │ └── layer_8.json │ │ ├── pane.json │ │ ├── pillar.json │ │ ├── post.json │ │ ├── slabs_stair │ │ ├── inner │ │ │ ├── half_stair.json │ │ │ ├── side │ │ │ │ ├── half_stair.json │ │ │ │ └── slab.json │ │ │ └── slab.json │ │ ├── outer │ │ │ ├── cube.json │ │ │ ├── side │ │ │ │ ├── cube.json │ │ │ │ └── slab.json │ │ │ └── slab.json │ │ ├── side │ │ │ ├── slab.json │ │ │ └── step.json │ │ ├── slab.json │ │ └── step.json │ │ ├── small_cube │ │ ├── base.json │ │ └── step │ │ │ └── base.json │ │ ├── stair │ │ ├── cube │ │ │ ├── double_outer.json │ │ │ ├── inner.json │ │ │ ├── outer.json │ │ │ ├── outer_side.json │ │ │ └── straight.json │ │ ├── double_outer.json │ │ ├── inner.json │ │ ├── outer.json │ │ ├── outer_side.json │ │ └── straight.json │ │ ├── step │ │ ├── cross.json │ │ ├── down.json │ │ ├── side.json │ │ ├── slab │ │ │ ├── down.json │ │ │ └── side.json │ │ └── up.json │ │ └── wall │ │ ├── full │ │ ├── inventory │ │ │ └── sides.json │ │ ├── pillar │ │ │ ├── low.json │ │ │ └── tall.json │ │ └── side │ │ │ ├── low.json │ │ │ └── tall.json │ │ ├── inventory │ │ └── default.json │ │ ├── junction │ │ ├── low.json │ │ ├── low_c.json │ │ ├── low_c_tall_t.json │ │ ├── low_i.json │ │ ├── low_i_tall_t.json │ │ ├── low_t.json │ │ ├── low_tall_c.json │ │ ├── low_tall_c_t.json │ │ ├── low_tall_i.json │ │ ├── low_x.json │ │ ├── tall.json │ │ ├── tall_c.json │ │ ├── tall_c_low_c_x.json │ │ ├── tall_c_low_t.json │ │ ├── tall_i.json │ │ ├── tall_i_low_i_x.json │ │ ├── tall_i_low_t.json │ │ ├── tall_low_c.json │ │ ├── tall_low_c_t.json │ │ ├── tall_low_t_x.json │ │ ├── tall_t.json │ │ ├── tall_t_low_x.json │ │ └── tall_x.json │ │ ├── pillar │ │ ├── core.json │ │ ├── low.json │ │ ├── none.json │ │ └── tall.json │ │ └── side │ │ ├── low.json │ │ └── tall.json │ └── textures │ ├── block │ ├── framed_accent_block.png │ └── framed_block.png │ ├── item │ ├── blueprint.png │ ├── blueprint_written.png │ ├── hammer.png │ └── screwdriver.png │ └── reframed_special │ ├── down.png │ ├── east.png │ ├── north.png │ ├── south.png │ ├── up.png │ └── west.png ├── fabric.mod.json └── reframed.mixins.json /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitea/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: deploy 2 | description: Deploy artifact to maven repo 3 | on: 4 | push: 5 | branches: [ master ] 6 | env: 7 | REPO_USERNAME: Altarik 8 | REPO_PASSWORD: ${{ secrets.REPO_PASSWORD }} 9 | DISCORD_PUB_ID: ${{ secrets.DISCORD_PUB_ID }} 10 | DISCORD_PUB_TOKEN: ${{ secrets.DISCORD_PUB_TOKEN }} 11 | 12 | jobs: 13 | deploy: 14 | runs-on: ubuntu-latest 15 | # if: gitea.ref == 'refs/heads/main' 16 | steps: 17 | - name: checkout repository 18 | uses: actions/checkout@v3 19 | - name: validate gradle wrapper 20 | uses: https://github.com/gradle/wrapper-validation-action@v1 21 | - name: setup jdk 22 | uses: actions/setup-java@v3 23 | with: 24 | java-version: 17 25 | distribution: 'oracle' 26 | - name: make gradle wrapper executable 27 | if: ${{ runner.os != 'Windows' }} 28 | run: | 29 | chmod +x ./gradlew 30 | touch local.properties 31 | - name: Generate data 32 | run: ./gradlew runDatagen 33 | - name: deploy 34 | run: ./gradlew publish 35 | - name: create tag 36 | run: ./gradlew createTag 37 | env: 38 | GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} 39 | - name: report to discord 40 | run: ./gradlew reportToDiscord -------------------------------------------------------------------------------- /.github/workflows/publish.yml: -------------------------------------------------------------------------------- 1 | name: Publish mod on Modrinth 2 | 3 | on: [ push, workflow_dispatch ] 4 | 5 | jobs: 6 | build: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - name: checkout repository 10 | uses: actions/checkout@v3 11 | - name: validate gradle wrapper 12 | uses: gradle/wrapper-validation-action@v2 13 | - name: setup jdk 14 | uses: actions/setup-java@v3 15 | with: 16 | java-version: 17 17 | distribution: 'oracle' 18 | - name: make gradle wrapper executable 19 | if: ${{ runner.os != 'Windows' }} 20 | run: | 21 | chmod +x ./gradlew 22 | touch local.properties 23 | - name: Generate data 24 | run: ./gradlew runDatagen 25 | - name: Publish Modrinth 26 | run: ./gradlew modrinth 27 | env: 28 | MODRINTH_TOKEN: ${{ secrets.MODRINTH_TOKEN }} 29 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled nonsense that does not belong in *source* control 2 | /build 3 | /bin 4 | .gradle 5 | /minecraft 6 | /out 7 | /run 8 | /classes 9 | 10 | # IDE nonsense that could go in source control but really shouldn't 11 | .classpath 12 | .project 13 | .metadata 14 | .settings 15 | *.launch 16 | *.iml 17 | .idea 18 | *.ipr 19 | *.iws 20 | 21 | # Sekrit files 22 | private.properties 23 | private.gradle 24 | 25 | # Files from bad operating systems :^) 26 | Thumbs.db 27 | .DS_Store 28 | local.properties 29 | .directory 30 | 31 | # krita Moments 32 | *.png~ 33 | *-autosave.kra 34 | *.kra~ 35 | /src/generated/ 36 | /libs/ 37 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT AND LGPL-3.0 -------------------------------------------------------------------------------- /LICENSE.MIT: -------------------------------------------------------------------------------- 1 | Copyright (c) 2019 B0undarybreaker (Meredith Espinosa)\ 2 | Copyright (c) 2024 Adrien1106 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of 5 | this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all 8 | copies or substantial portions of the Software. 9 | 10 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 11 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 12 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 13 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 14 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 15 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 16 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ReFramed 2 | ## Overview 3 | This Project is an unofficial port of [FramedBlocks](https://github.com/XFactHD/FramedBlocks) 4 | forked from [Templates 2](https://github.com/quat1024/templates-mod). 5 | It aims to add the same mechanics as [FramedBlocks](https://github.com/XFactHD/FramedBlocks) into Fabric. 6 | 7 | For a complete Feature list please have a look at the [Modrinth](https://modrinth.com/mod/reframed) page. 8 | 9 | ## Information 10 | ### Where to get it? 11 | The mod can be downloaded on [Modrinth](https://modrinth.com/mod/reframed). 12 | 13 | ### Issues/requests 14 | Any issues/requests may be addressed on this repository in the [Issues](https://github.com/DriHut/ReFramed/issues) section. 15 | 16 | ### Out of date? 17 | I will be adding new shapes as time passes, but I am currently not planing on keeping up with the newer versions of the game. 18 | That said this mod is under permissive licenses and make it easy for anyone to create their own fork. 19 | If anyone in the future plans to do so, I will gladly either link it from here and the modrinth page, 20 | or based on preferences add the person(s) to the project 21 | 22 | ### What Shapes are planed to be added 23 | Currently, the list of shapes to be added is pretty simple as the mod is still under development: 24 | - Pressure Plate 25 | - Slabs Stair (a stair with one end being of a second theme, might be done in multiple blocks) 26 | 27 | Any Ideas feel free to make a suggestion [here](https://github.com/DriHut/ReFramed/issues). 28 | 29 | ## License 30 | This work is dual-licensed under MIT and LGPL 3.0 both applying to different part of this project: 31 | - The LGPL 3.0 license applies to all the textures that can be found in [`assets/reframed/textures`](src/main/resources/assets/reframed/textures) 32 | - The MIT license applied to everything else so including all the code present within this project 33 | 34 | `SPDX-License-Identifier: MIT AND LGPL-3.0` -------------------------------------------------------------------------------- /buildSrc/.gitignore: -------------------------------------------------------------------------------- 1 | .gradle 2 | build 3 | -------------------------------------------------------------------------------- /buildSrc/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'java' 3 | } 4 | 5 | dependencies { 6 | implementation "com.squareup.okhttp3:okhttp:${project.okhttp_version}" 7 | } 8 | 9 | repositories { 10 | mavenCentral() 11 | } -------------------------------------------------------------------------------- /buildSrc/gradle.properties: -------------------------------------------------------------------------------- 1 | okhttp_version=4.12.0 -------------------------------------------------------------------------------- /buildSrc/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | mavenCentral() 4 | gradlePluginPortal() 5 | } 6 | } 7 | rootProject.name = "buildSrc" -------------------------------------------------------------------------------- /buildSrc/src/main/java/fr/altarik/CreateTag.java: -------------------------------------------------------------------------------- 1 | package fr.altarik; 2 | 3 | import okhttp3.*; 4 | import org.gradle.api.DefaultTask; 5 | import org.gradle.api.GradleException; 6 | import org.gradle.api.provider.Property; 7 | import org.gradle.api.tasks.Input; 8 | import org.gradle.api.tasks.TaskAction; 9 | 10 | import java.io.IOException; 11 | 12 | public abstract class CreateTag extends DefaultTask { 13 | 14 | public static final MediaType JSON = MediaType.get("application/json; charset=utf-8"); 15 | private final OkHttpClient client = new OkHttpClient(); 16 | 17 | @Input 18 | public abstract Property getConfig(); 19 | 20 | 21 | @TaskAction 22 | public void create() throws IOException { 23 | CreateReleaseData data = getConfig().get(); 24 | String postUrl = data.baseUrl() + "/api/v1/repos/" + data.owner() + "/" + data.repoName() + "/tags"; 25 | RequestBody body = RequestBody.create(""" 26 | { 27 | "tag_name": \"""" + data.tagName() + "\"" + """ 28 | } 29 | """, JSON); 30 | Request request = new Request.Builder() 31 | .url(postUrl) 32 | .post(body) 33 | .header("Authorization", "token " + data.giteaToken()) 34 | .build(); 35 | try(Response response = client.newCall(request).execute()) { 36 | if(!response.isSuccessful()) { 37 | if(response.code() != 409) 38 | throw new GradleException("Cannot create tag, server answer with code " + response.code() + " and message : " + response.message()); 39 | } 40 | } 41 | } 42 | 43 | public record CreateReleaseData(String baseUrl, String owner, String repoName, String tagName, String giteaToken) { 44 | } 45 | 46 | 47 | } 48 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Done to increase the memory available to gradle. 2 | org.gradle.jvmargs=-Xmx1G 3 | 4 | # Fabric Properties 5 | # check these on https://modmuss50.me/fabric.html 6 | minecraft_version=1.20.4 7 | yarn_mappings=1.20.4+build.3 8 | loader_version=0.15.11 9 | 10 | # Mod Properties 11 | modrinth_id = jCpoCBpn 12 | mod_version = 1.6.6 13 | maven_group = fr.adrien1106 14 | archives_base_name = ReFramed 15 | mod_id = reframed 16 | 17 | # Dependencies 18 | # check this on https://modmuss50.me/fabric.html 19 | fabric_version=0.97.0+1.20.4 20 | 21 | git_owner=Altarik 22 | git_repo=ReFramed 23 | 24 | athena_version=3.3.0 25 | sodium_version=0.5.8 26 | indium_version=1.0.30 27 | continuity_version=3.0.0-beta.4+1.20.2 28 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DriHut/ReFramed/e592db1ea2ada2cede7911cd7e45bf6f61ac9e91/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip 4 | networkTimeout=10000 5 | validateDistributionUrl=true 6 | zipStoreBase=GRADLE_USER_HOME 7 | zipStorePath=wrapper/dists 8 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | maven { 4 | name = 'Fabric' 5 | url = 'https://maven.fabricmc.net/' 6 | } 7 | gradlePluginPortal() 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/block/HalfLayerDoubleReFramedBlock.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.block; 2 | 3 | import fr.adrien1106.reframed.ReFramed; 4 | import net.minecraft.block.Block; 5 | import net.minecraft.block.BlockState; 6 | import net.minecraft.item.BlockItem; 7 | import net.minecraft.item.ItemPlacementContext; 8 | import net.minecraft.item.ItemStack; 9 | import net.minecraft.loot.context.LootContextParameterSet; 10 | import net.minecraft.state.StateManager; 11 | 12 | import java.util.List; 13 | 14 | import static net.minecraft.state.property.Properties.LAYERS; 15 | 16 | public abstract class HalfLayerDoubleReFramedBlock extends EdgeDoubleReFramedBlock { 17 | 18 | public HalfLayerDoubleReFramedBlock(Settings settings) { 19 | super(settings); 20 | setDefaultState(getDefaultState().with(LAYERS, 1)); 21 | } 22 | 23 | @Override 24 | @SuppressWarnings("deprecation") 25 | public List getDroppedStacks(BlockState state, LootContextParameterSet.Builder builder) { 26 | List drops = super.getDroppedStacks(state, builder); 27 | if (state.get(LAYERS) > 1) 28 | drops.add(new ItemStack(ReFramed.HALF_LAYER, state.get(LAYERS)-1)); 29 | return drops; 30 | } 31 | 32 | @Override 33 | protected void appendProperties(StateManager.Builder builder) { 34 | super.appendProperties(builder.add(LAYERS)); 35 | } 36 | 37 | @Override 38 | @SuppressWarnings("deprecation") 39 | public boolean canReplace(BlockState state, ItemPlacementContext context) { 40 | if (context.getPlayer() == null 41 | || context.getPlayer().isSneaking() 42 | || !(context.getStack().getItem() instanceof BlockItem block_item) 43 | ) return false; 44 | return block_item.getBlock() == ReFramed.HALF_LAYER && state.get(LAYERS) < 8; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/block/ReFramedHalfSlabsSlabBlock.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.block; 2 | 3 | import fr.adrien1106.reframed.util.VoxelHelper; 4 | import net.minecraft.block.BlockState; 5 | import net.minecraft.block.ShapeContext; 6 | import net.minecraft.util.math.BlockPos; 7 | import net.minecraft.util.math.Direction; 8 | import net.minecraft.util.shape.VoxelShape; 9 | import net.minecraft.world.BlockView; 10 | 11 | import static fr.adrien1106.reframed.block.ReFramedHalfSlabBlock.getHalfSlabShape; 12 | import static fr.adrien1106.reframed.block.ReFramedSlabBlock.getSlabShape; 13 | import static net.minecraft.state.property.Properties.FACING; 14 | 15 | public class ReFramedHalfSlabsSlabBlock extends FacingDoubleReFramedBlock { 16 | 17 | public static VoxelShape[] HALF_SLAB_COMP_SHAPES; 18 | 19 | public ReFramedHalfSlabsSlabBlock(Settings settings) { 20 | super(settings); 21 | } 22 | 23 | @Override 24 | public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { 25 | return getSlabShape(state.get(FACING)); 26 | } 27 | 28 | @Override 29 | public VoxelShape getShape(BlockState state, int i) { 30 | Direction face = state.get(FACING); 31 | return i == 2 32 | ? HALF_SLAB_COMP_SHAPES[face.getId()] 33 | : getHalfSlabShape(face); 34 | } 35 | 36 | static { 37 | HALF_SLAB_COMP_SHAPES = VoxelHelper.VoxelListBuilder.create(createCuboidShape(0, 4, 0, 16, 8, 16),6) 38 | .add(createCuboidShape(0, 8, 0, 16, 12, 16)) 39 | .add(createCuboidShape(0, 0, 4, 16, 16, 8)) 40 | .add(createCuboidShape(0, 0, 8, 16, 16, 12)) 41 | .add(createCuboidShape(4, 0, 0, 8, 16, 16)) 42 | .add(createCuboidShape(8, 0, 0, 12, 16, 16)) 43 | .build(); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/block/ReFramedPaneBlock.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.block; 2 | 3 | import fr.adrien1106.reframed.util.VoxelHelper; 4 | import net.minecraft.block.BlockState; 5 | import net.minecraft.block.PaneBlock; 6 | import net.minecraft.block.ShapeContext; 7 | import net.minecraft.registry.tag.BlockTags; 8 | import net.minecraft.util.math.BlockPos; 9 | import net.minecraft.util.math.Direction; 10 | import net.minecraft.util.shape.VoxelShape; 11 | import net.minecraft.util.shape.VoxelShapes; 12 | import net.minecraft.world.BlockView; 13 | 14 | public class ReFramedPaneBlock extends ConnectingReFramedBlock { 15 | 16 | public static final VoxelShape[] PANE_VOXELS; 17 | 18 | public ReFramedPaneBlock(Settings settings) { 19 | super(settings); 20 | } 21 | 22 | @Override 23 | public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { 24 | VoxelShape shape = PANE_VOXELS[0]; 25 | for (Direction dir: Direction.Type.HORIZONTAL) { 26 | if (state.get(getConnectionProperty(dir))) 27 | shape = VoxelShapes.union(shape, PANE_VOXELS[dir.ordinal() - 1]); 28 | } 29 | return shape; 30 | } 31 | 32 | @Override 33 | protected boolean connectsTo(BlockState state, boolean fs, Direction dir) { 34 | return !cannotConnect(state) && fs || state.getBlock() instanceof PaneBlock || state.isIn(BlockTags.WALLS); 35 | } 36 | 37 | static { 38 | VoxelShape POST = createCuboidShape(7, 0, 7, 9, 16, 9); 39 | VoxelShape SIDE = createCuboidShape(7, 0, 0, 9, 16, 7); 40 | PANE_VOXELS = VoxelHelper.VoxelListBuilder.create(POST, 5) 41 | .add(SIDE) 42 | .add(VoxelHelper::mirrorZ) 43 | .add(VoxelHelper::rotateY) 44 | .add(VoxelHelper::mirrorX) 45 | .build(); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/block/ReFramedPillarBlock.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.block; 2 | 3 | import fr.adrien1106.reframed.util.VoxelHelper; 4 | import net.minecraft.block.BlockState; 5 | import net.minecraft.block.ShapeContext; 6 | import net.minecraft.util.math.BlockPos; 7 | import net.minecraft.util.math.Direction; 8 | import net.minecraft.util.shape.VoxelShape; 9 | import net.minecraft.world.BlockView; 10 | 11 | import static net.minecraft.state.property.Properties.AXIS; 12 | 13 | public class ReFramedPillarBlock extends PillarReFramedBlock { 14 | 15 | public static final VoxelShape[] PILLAR_VOXELS; 16 | 17 | public ReFramedPillarBlock(Settings settings) { 18 | super(settings); 19 | } 20 | 21 | @Override 22 | public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { 23 | return getPillarShape(state.get(AXIS)); 24 | } 25 | 26 | public static VoxelShape getPillarShape(Direction.Axis axis) { 27 | return PILLAR_VOXELS[axis.ordinal()]; 28 | } 29 | 30 | static { 31 | final VoxelShape PILLAR = createCuboidShape(0, 4, 4, 16, 12, 12); 32 | PILLAR_VOXELS = VoxelHelper.VoxelListBuilder.create(PILLAR, 3) 33 | .add(VoxelHelper::rotateZ) 34 | .add(VoxelHelper::rotateX) 35 | .build(); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/block/ReFramedPostBlock.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.block; 2 | 3 | import fr.adrien1106.reframed.util.VoxelHelper; 4 | import net.minecraft.block.BlockState; 5 | import net.minecraft.block.ShapeContext; 6 | import net.minecraft.util.math.BlockPos; 7 | import net.minecraft.util.math.Direction; 8 | import net.minecraft.util.shape.VoxelShape; 9 | import net.minecraft.world.BlockView; 10 | 11 | import static net.minecraft.state.property.Properties.AXIS; 12 | 13 | public class ReFramedPostBlock extends PillarReFramedBlock { 14 | 15 | public static final VoxelShape[] POST_VOXELS; 16 | 17 | public ReFramedPostBlock(Settings settings) { 18 | super(settings); 19 | } 20 | 21 | @Override 22 | public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { 23 | return getPillarShape(state.get(AXIS)); 24 | } 25 | 26 | public static VoxelShape getPillarShape(Direction.Axis axis) { 27 | return POST_VOXELS[axis.ordinal()]; 28 | } 29 | 30 | static { 31 | final VoxelShape POST = createCuboidShape(0, 6, 6, 16, 10, 10); 32 | POST_VOXELS = VoxelHelper.VoxelListBuilder.create(POST, 3) 33 | .add(VoxelHelper::rotateZ) 34 | .add(VoxelHelper::rotateX) 35 | .build(); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/block/ReFramedSlabsStairBlock.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.block; 2 | 3 | import fr.adrien1106.reframed.util.blocks.Edge; 4 | import fr.adrien1106.reframed.util.blocks.StairShape; 5 | import net.minecraft.block.BlockState; 6 | import net.minecraft.block.ShapeContext; 7 | import net.minecraft.util.math.BlockPos; 8 | import net.minecraft.util.math.Direction; 9 | import net.minecraft.util.shape.VoxelShape; 10 | import net.minecraft.world.BlockView; 11 | 12 | import static fr.adrien1106.reframed.block.ReFramedSlabBlock.getSlabShape; 13 | import static fr.adrien1106.reframed.block.ReFramedStairBlock.getStairShape; 14 | import static fr.adrien1106.reframed.block.ReFramedStepBlock.getStepShape; 15 | import static fr.adrien1106.reframed.util.blocks.BlockProperties.EDGE; 16 | import static fr.adrien1106.reframed.util.blocks.BlockProperties.EDGE_FACE; 17 | 18 | public class ReFramedSlabsStairBlock extends EdgeDoubleReFramedBlock { 19 | 20 | public ReFramedSlabsStairBlock(Settings settings) { 21 | super(settings); 22 | } 23 | 24 | @Override 25 | public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { 26 | return getStairShape(state.get(EDGE), StairShape.STRAIGHT); 27 | } 28 | 29 | @Override 30 | public VoxelShape getShape(BlockState state, int i) { 31 | Edge edge = state.get(EDGE); 32 | Direction face = edge.getDirection(state.get(EDGE_FACE)); 33 | return i == 2 34 | ? getStepShape(edge.getOpposite(edge.getOtherDirection(face))) 35 | : getSlabShape(face); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/client/model/DynamicBakedModel.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.client.model; 2 | 3 | import net.minecraft.block.BlockState; 4 | import net.minecraft.client.render.model.BakedModel; 5 | import net.minecraft.util.math.BlockPos; 6 | import net.minecraft.world.BlockRenderView; 7 | import org.jetbrains.annotations.Nullable; 8 | 9 | public interface DynamicBakedModel { 10 | BakedModel computeQuads(@Nullable BlockRenderView level, BlockState origin_state, @Nullable BlockPos pos, int theme_index); 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/client/model/MultiRetexturableModel.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.client.model; 2 | 3 | import java.util.List; 4 | 5 | public interface MultiRetexturableModel { 6 | 7 | List models(); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/client/model/UnbakedRetexturedModel.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.client.model; 2 | 3 | import net.minecraft.block.BlockState; 4 | import net.minecraft.client.render.model.UnbakedModel; 5 | import net.minecraft.util.Identifier; 6 | 7 | import java.util.Collection; 8 | import java.util.List; 9 | import java.util.function.Function; 10 | 11 | public abstract class UnbakedRetexturedModel implements UnbakedModel { 12 | 13 | protected final Identifier parent; 14 | 15 | protected int theme_index = 1; 16 | protected BlockState item_state; 17 | 18 | public UnbakedRetexturedModel(Identifier parent) { 19 | this.parent = parent; 20 | } 21 | 22 | public UnbakedRetexturedModel setThemeIndex(int theme_index) { 23 | this.theme_index = theme_index; 24 | return this; 25 | } 26 | 27 | @Override 28 | public Collection getModelDependencies() { 29 | return List.of(parent); 30 | } 31 | 32 | @Override 33 | public void setParents(Function function) { 34 | function.apply(parent).setParents(function); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/client/model/apperance/Appearance.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.client.model.apperance; 2 | 3 | import net.minecraft.util.math.Direction; 4 | 5 | import java.util.List; 6 | import java.util.Map; 7 | 8 | public record Appearance(Map> sprites, boolean use_ao) {} 9 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/client/model/apperance/ComputedAppearance.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.client.model.apperance; 2 | 3 | import net.fabricmc.api.EnvType; 4 | import net.fabricmc.api.Environment; 5 | import net.fabricmc.fabric.api.renderer.v1.material.RenderMaterial; 6 | import net.minecraft.util.math.Direction; 7 | import org.jetbrains.annotations.NotNull; 8 | 9 | import java.util.List; 10 | 11 | @Environment(EnvType.CLIENT) 12 | public class ComputedAppearance extends CamoAppearance { 13 | private final Appearance appearance; 14 | 15 | public ComputedAppearance(@NotNull Appearance appearance, RenderMaterial ao_material, RenderMaterial material, int id) { 16 | super(ao_material, material, id); 17 | this.appearance = appearance; 18 | } 19 | @Override 20 | public @NotNull List getSprites(Direction dir, int model_id) { 21 | return appearance.sprites().get(dir); 22 | } 23 | 24 | @Override 25 | public boolean hasColor(Direction dir, int model_id, int index) { 26 | List properties = getSprites(dir, model_id); 27 | if (index != 0) index = properties.size() - index; 28 | return properties.get(index).has_colors(); 29 | } 30 | 31 | @Override 32 | public boolean getAO(int model_id) { 33 | return appearance.use_ao(); 34 | } 35 | 36 | 37 | @Override 38 | public boolean equals(Object o) { 39 | if(this == o) return true; 40 | if(!(o instanceof ComputedAppearance that)) return false; 41 | return id == that.id; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/client/model/apperance/SingleSpriteAppearance.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.client.model.apperance; 2 | 3 | import net.fabricmc.api.EnvType; 4 | import net.fabricmc.api.Environment; 5 | import net.fabricmc.fabric.api.renderer.v1.material.RenderMaterial; 6 | import net.minecraft.client.texture.Sprite; 7 | import net.minecraft.util.math.Direction; 8 | import org.jetbrains.annotations.NotNull; 9 | 10 | import java.util.List; 11 | 12 | @Environment(EnvType.CLIENT) 13 | public class SingleSpriteAppearance extends CamoAppearance { 14 | private final @NotNull Sprite defaultSprite; 15 | 16 | public SingleSpriteAppearance(@NotNull Sprite defaultSprite, RenderMaterial mat, int id) { 17 | super(null, mat, id); 18 | this.defaultSprite = defaultSprite; 19 | } 20 | 21 | @Override 22 | public @NotNull List getSprites(Direction dir, int model_id) { 23 | return List.of(new SpriteProperties(defaultSprite, 0, null, false)); 24 | } 25 | 26 | @Override 27 | public boolean hasColor(Direction dir, int model_id, int index) { 28 | return false; 29 | } 30 | 31 | @Override 32 | public boolean equals(Object o) { 33 | if(this == o) return true; 34 | if(!(o instanceof SingleSpriteAppearance that)) return false; 35 | return id == that.id; 36 | } 37 | 38 | @Override 39 | public boolean getAO(int model_id) { 40 | return false; 41 | } 42 | 43 | 44 | @Override 45 | public String toString() { 46 | return "SingleSpriteAppearance[defaultSprite=%s, mat=%s, id=%d]".formatted(defaultSprite, material, id); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/client/model/apperance/SpriteProperties.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.client.model.apperance; 2 | 3 | import fr.adrien1106.reframed.client.model.QuadPosBounds; 4 | import net.minecraft.client.texture.Sprite; 5 | 6 | public record SpriteProperties(Sprite sprite, int flags, QuadPosBounds bounds, boolean has_colors) { 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/compat/ICTMQuadTransform.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.compat; 2 | 3 | import me.pepperbell.continuity.client.model.QuadProcessors; 4 | import me.pepperbell.continuity.impl.client.ProcessingContextImpl; 5 | import net.fabricmc.fabric.api.renderer.v1.render.RenderContext; 6 | import net.minecraft.block.BlockState; 7 | import net.minecraft.client.texture.Sprite; 8 | import net.minecraft.util.math.BlockPos; 9 | import net.minecraft.util.math.random.Random; 10 | import net.minecraft.world.BlockRenderView; 11 | 12 | import java.util.function.Function; 13 | import java.util.function.Supplier; 14 | 15 | public interface ICTMQuadTransform extends RenderContext.QuadTransform { 16 | 17 | void invokePrepare(BlockRenderView view, BlockState state, BlockPos pos, Supplier random, boolean manual_culling, Function slice); 18 | 19 | ProcessingContextImpl getProcessingContext(); 20 | 21 | void invokeReset(); 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/generator/BlockStateProvider.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.generator; 2 | 3 | import net.minecraft.block.Block; 4 | import net.minecraft.data.client.BlockStateSupplier; 5 | 6 | public interface BlockStateProvider { 7 | BlockStateSupplier getMultipart(Block block); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/generator/GBlockLoot.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.generator; 2 | 3 | import fr.adrien1106.reframed.ReFramed; 4 | import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; 5 | import net.fabricmc.fabric.api.datagen.v1.provider.FabricBlockLootTableProvider; 6 | import net.minecraft.registry.Registries; 7 | 8 | public class GBlockLoot extends FabricBlockLootTableProvider { 9 | 10 | protected GBlockLoot(FabricDataOutput data_output) { 11 | super(data_output); 12 | } 13 | 14 | @Override 15 | public void generate() { 16 | ReFramed.BLOCKS.forEach(block -> addDrop(block, Registries.ITEM.get(Registries.BLOCK.getId(block)))); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/generator/GBlockTag.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.generator; 2 | 3 | import fr.adrien1106.reframed.ReFramed; 4 | import fr.adrien1106.reframed.block.*; 5 | import fr.adrien1106.reframed.generator.block.*; 6 | import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; 7 | import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider.BlockTagProvider; 8 | import net.minecraft.block.Block; 9 | import net.minecraft.registry.RegistryWrapper.WrapperLookup; 10 | import net.minecraft.registry.tag.BlockTags; 11 | 12 | import java.util.HashMap; 13 | import java.util.Map; 14 | import java.util.concurrent.CompletableFuture; 15 | 16 | public class GBlockTag extends BlockTagProvider { 17 | private static final Map, TagGetter> providers = new HashMap<>(); 18 | static { 19 | providers.put(ReFramedPillarsWallBlock.class, new PillarsWall()); 20 | providers.put(ReFramedWallBlock.class, new Wall()); 21 | providers.put(ReFramedPaneBlock.class, new Pane()); 22 | providers.put(ReFramedFenceBlock.class, new Fence()); 23 | providers.put(ReFramedPostFenceBlock.class, new PostFence()); 24 | } 25 | 26 | public GBlockTag(FabricDataOutput output, CompletableFuture registries) { 27 | super(output, registries); 28 | } 29 | 30 | @Override 31 | protected void configure(WrapperLookup arg) { 32 | FabricTagBuilder builder = getOrCreateTagBuilder(BlockTags.AXE_MINEABLE); 33 | ReFramed.BLOCKS.forEach((block) -> { 34 | if (providers.containsKey(block.getClass())) 35 | providers.get(block.getClass()).getTags().forEach((tag) -> getOrCreateTagBuilder(tag).add(block)); 36 | builder.add(block); 37 | }); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/generator/GLanguage.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.generator; 2 | 3 | import fr.adrien1106.reframed.ReFramed; 4 | import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; 5 | import net.fabricmc.fabric.api.datagen.v1.provider.FabricLanguageProvider; 6 | import net.minecraft.registry.Registries; 7 | 8 | import java.util.Arrays; 9 | import java.util.stream.Collectors; 10 | 11 | public class GLanguage extends FabricLanguageProvider { 12 | protected GLanguage(FabricDataOutput dataOutput) { 13 | super(dataOutput, "en_us"); 14 | } 15 | 16 | @Override 17 | public void generateTranslations(TranslationBuilder builder) { 18 | builder.add(Registries.ITEM_GROUP.getKey(ReFramed.ITEM_GROUP).get(), "Frames"); 19 | builder.add("advancements.reframed.description", "Get all the frame types."); 20 | ReFramed.BLOCKS.forEach(block -> builder.add(block, beautify(Registries.BLOCK.getId(block).getPath()) + " Frame")); 21 | ReFramed.ITEMS.forEach(block -> builder.add(block, beautify(Registries.ITEM.getId(block).getPath()))); 22 | } 23 | 24 | private static String beautify(String name) { 25 | return Arrays.stream(name.split("_")) 26 | .map(word -> word.substring(0, 1).toUpperCase() + word.substring(1)) 27 | .collect(Collectors.joining(" ")); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/generator/Generator.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.generator; 2 | 3 | import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint; 4 | import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator; 5 | 6 | public class Generator implements DataGeneratorEntrypoint { 7 | 8 | @Override 9 | public void onInitializeDataGenerator(FabricDataGenerator data_generator) { 10 | FabricDataGenerator.Pack my_pack = data_generator.createPack(); 11 | my_pack.addProvider(GBlockLoot::new); 12 | my_pack.addProvider(GBlockstate::new); 13 | my_pack.addProvider(GLanguage::new); 14 | my_pack.addProvider(GBlockTag::new); 15 | my_pack.addProvider(GRecipe::new); 16 | my_pack.addProvider(GAdvancement::new); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/generator/RecipeSetter.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.generator; 2 | 3 | import net.minecraft.data.server.recipe.RecipeExporter; 4 | import net.minecraft.item.ItemConvertible; 5 | 6 | public interface RecipeSetter { 7 | 8 | void setRecipe(RecipeExporter exporter, ItemConvertible convertible); 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/generator/TagGetter.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.generator; 2 | 3 | import net.minecraft.block.Block; 4 | import net.minecraft.registry.tag.TagKey; 5 | 6 | import java.util.List; 7 | 8 | public interface TagGetter { 9 | 10 | List> getTags(); 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/generator/block/Cube.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.generator.block; 2 | 3 | import fr.adrien1106.reframed.generator.RecipeSetter; 4 | import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider; 5 | import net.minecraft.data.server.recipe.RecipeExporter; 6 | import net.minecraft.data.server.recipe.ShapedRecipeJsonBuilder; 7 | import net.minecraft.item.ItemConvertible; 8 | import net.minecraft.item.Items; 9 | import net.minecraft.recipe.book.RecipeCategory; 10 | 11 | public class Cube implements RecipeSetter { 12 | 13 | @Override 14 | public void setRecipe(RecipeExporter exporter, ItemConvertible convertible) { 15 | ShapedRecipeJsonBuilder 16 | .create(RecipeCategory.BUILDING_BLOCKS, convertible) 17 | .pattern("III") 18 | .pattern("I~I") 19 | .pattern("III") 20 | .input('I', Items.BAMBOO) 21 | .input('~', Items.STRING) 22 | .criterion(FabricRecipeProvider.hasItem(Items.BAMBOO), FabricRecipeProvider.conditionsFromItem(Items.BAMBOO)) 23 | .criterion(FabricRecipeProvider.hasItem(convertible), FabricRecipeProvider.conditionsFromItem(convertible)) 24 | .offerTo(exporter); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/generator/block/HalfSlab.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.generator.block; 2 | 3 | import fr.adrien1106.reframed.ReFramed; 4 | import fr.adrien1106.reframed.generator.BlockStateProvider; 5 | import fr.adrien1106.reframed.generator.RecipeSetter; 6 | import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider; 7 | import net.minecraft.block.Block; 8 | import net.minecraft.data.client.MultipartBlockStateSupplier; 9 | import net.minecraft.data.server.recipe.RecipeExporter; 10 | import net.minecraft.data.server.recipe.RecipeProvider; 11 | import net.minecraft.data.server.recipe.ShapelessRecipeJsonBuilder; 12 | import net.minecraft.item.ItemConvertible; 13 | import net.minecraft.recipe.book.RecipeCategory; 14 | 15 | public class HalfSlab implements RecipeSetter, BlockStateProvider { 16 | 17 | @Override 18 | public void setRecipe(RecipeExporter exporter, ItemConvertible convertible) { 19 | RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, convertible, ReFramed.CUBE, 4); 20 | ShapelessRecipeJsonBuilder 21 | .create(RecipeCategory.BUILDING_BLOCKS, convertible, 2) 22 | .input(ReFramed.SLAB) 23 | .criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE)) 24 | .criterion(FabricRecipeProvider.hasItem(convertible), FabricRecipeProvider.conditionsFromItem(convertible)) 25 | .offerTo(exporter); 26 | } 27 | 28 | @Override 29 | public MultipartBlockStateSupplier getMultipart(Block block) { 30 | return Slab.getMultipart(block, "half_slab"); 31 | } 32 | 33 | 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/generator/block/HalfSlabsSlab.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.generator.block; 2 | 3 | import fr.adrien1106.reframed.ReFramed; 4 | import fr.adrien1106.reframed.generator.BlockStateProvider; 5 | import fr.adrien1106.reframed.generator.RecipeSetter; 6 | import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider; 7 | import net.minecraft.block.Block; 8 | import net.minecraft.data.client.MultipartBlockStateSupplier; 9 | import net.minecraft.data.server.recipe.RecipeExporter; 10 | import net.minecraft.data.server.recipe.RecipeProvider; 11 | import net.minecraft.data.server.recipe.ShapelessRecipeJsonBuilder; 12 | import net.minecraft.item.ItemConvertible; 13 | import net.minecraft.recipe.book.RecipeCategory; 14 | 15 | public class HalfSlabsSlab implements RecipeSetter, BlockStateProvider { 16 | 17 | @Override 18 | public void setRecipe(RecipeExporter exporter, ItemConvertible convertible) { 19 | RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, convertible, ReFramed.CUBE, 2); 20 | ShapelessRecipeJsonBuilder 21 | .create(RecipeCategory.BUILDING_BLOCKS, convertible, 1) 22 | .input(ReFramed.HALF_SLAB, 2) 23 | .criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE)) 24 | .criterion(FabricRecipeProvider.hasItem(convertible), FabricRecipeProvider.conditionsFromItem(convertible)) 25 | .offerTo(exporter); 26 | } 27 | 28 | @Override 29 | public MultipartBlockStateSupplier getMultipart(Block block) { 30 | return Slab.getMultipart(block, "half_slabs_slab"); 31 | } 32 | 33 | 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/generator/block/HalfStairsCubeStair.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.generator.block; 2 | 3 | import fr.adrien1106.reframed.ReFramed; 4 | import fr.adrien1106.reframed.generator.BlockStateProvider; 5 | import fr.adrien1106.reframed.generator.RecipeSetter; 6 | import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider; 7 | import net.minecraft.block.Block; 8 | import net.minecraft.data.client.MultipartBlockStateSupplier; 9 | import net.minecraft.data.server.recipe.RecipeExporter; 10 | import net.minecraft.data.server.recipe.RecipeProvider; 11 | import net.minecraft.data.server.recipe.ShapelessRecipeJsonBuilder; 12 | import net.minecraft.item.ItemConvertible; 13 | import net.minecraft.recipe.book.RecipeCategory; 14 | 15 | public class HalfStairsCubeStair implements RecipeSetter, BlockStateProvider { 16 | 17 | @Override 18 | public void setRecipe(RecipeExporter exporter, ItemConvertible convertible) { 19 | RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, convertible, ReFramed.CUBE); 20 | ShapelessRecipeJsonBuilder 21 | .create(RecipeCategory.BUILDING_BLOCKS, convertible) 22 | .input(ReFramed.SMALL_CUBE) 23 | .input(ReFramed.HALF_STAIR) 24 | .criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE)) 25 | .criterion(FabricRecipeProvider.hasItem(convertible), FabricRecipeProvider.conditionsFromItem(convertible)) 26 | .offerTo(exporter); 27 | } 28 | 29 | @Override 30 | public MultipartBlockStateSupplier getMultipart(Block block) { 31 | return CornerDouble.getMultipart(block, "half_stairs_cube_stair"); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/generator/block/HalfStairsSlab.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.generator.block; 2 | 3 | import fr.adrien1106.reframed.ReFramed; 4 | import fr.adrien1106.reframed.generator.BlockStateProvider; 5 | import fr.adrien1106.reframed.generator.RecipeSetter; 6 | import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider; 7 | import net.minecraft.block.Block; 8 | import net.minecraft.data.client.BlockStateSupplier; 9 | import net.minecraft.data.server.recipe.RecipeExporter; 10 | import net.minecraft.data.server.recipe.RecipeProvider; 11 | import net.minecraft.data.server.recipe.ShapelessRecipeJsonBuilder; 12 | import net.minecraft.item.ItemConvertible; 13 | import net.minecraft.recipe.book.RecipeCategory; 14 | 15 | public class HalfStairsSlab implements RecipeSetter, BlockStateProvider { 16 | 17 | @Override 18 | public void setRecipe(RecipeExporter exporter, ItemConvertible convertible) { 19 | RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, convertible, ReFramed.CUBE, 2); 20 | ShapelessRecipeJsonBuilder 21 | .create(RecipeCategory.BUILDING_BLOCKS, convertible) 22 | .input(ReFramed.HALF_STAIR) 23 | .input(ReFramed.SMALL_CUBE) 24 | .criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE)) 25 | .criterion(FabricRecipeProvider.hasItem(convertible), FabricRecipeProvider.conditionsFromItem(convertible)) 26 | .offerTo(exporter); 27 | } 28 | 29 | @Override 30 | public BlockStateSupplier getMultipart(Block block) { 31 | return HalfStair.getMultipart( 32 | block, 33 | ReFramed.id("half_stairs_slab_down_special"), 34 | ReFramed.id("half_stairs_slab_side_special") 35 | ); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/generator/block/SlabsInnerStair.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.generator.block; 2 | 3 | import fr.adrien1106.reframed.ReFramed; 4 | import fr.adrien1106.reframed.generator.BlockStateProvider; 5 | import fr.adrien1106.reframed.generator.RecipeSetter; 6 | import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider; 7 | import net.minecraft.block.Block; 8 | import net.minecraft.data.client.MultipartBlockStateSupplier; 9 | import net.minecraft.data.server.recipe.RecipeExporter; 10 | import net.minecraft.data.server.recipe.RecipeProvider; 11 | import net.minecraft.data.server.recipe.ShapelessRecipeJsonBuilder; 12 | import net.minecraft.item.ItemConvertible; 13 | import net.minecraft.recipe.book.RecipeCategory; 14 | 15 | public class SlabsInnerStair implements RecipeSetter, BlockStateProvider { 16 | 17 | @Override 18 | public void setRecipe(RecipeExporter exporter, ItemConvertible convertible) { 19 | RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, convertible, ReFramed.CUBE); 20 | ShapelessRecipeJsonBuilder 21 | .create(RecipeCategory.BUILDING_BLOCKS, convertible) 22 | .input(ReFramed.HALF_STAIR) 23 | .input(ReFramed.SLAB) 24 | .criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE)) 25 | .criterion(FabricRecipeProvider.hasItem(convertible), FabricRecipeProvider.conditionsFromItem(convertible)) 26 | .offerTo(exporter); 27 | } 28 | 29 | @Override 30 | public MultipartBlockStateSupplier getMultipart(Block block) { 31 | return CornerDouble.getMultipart(block, "slabs_inner_stair"); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/generator/block/SlabsOuterStair.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.generator.block; 2 | 3 | import fr.adrien1106.reframed.ReFramed; 4 | import fr.adrien1106.reframed.generator.BlockStateProvider; 5 | import fr.adrien1106.reframed.generator.RecipeSetter; 6 | import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider; 7 | import net.minecraft.block.Block; 8 | import net.minecraft.data.client.MultipartBlockStateSupplier; 9 | import net.minecraft.data.server.recipe.RecipeExporter; 10 | import net.minecraft.data.server.recipe.RecipeProvider; 11 | import net.minecraft.data.server.recipe.ShapelessRecipeJsonBuilder; 12 | import net.minecraft.item.ItemConvertible; 13 | import net.minecraft.recipe.book.RecipeCategory; 14 | 15 | public class SlabsOuterStair implements RecipeSetter, BlockStateProvider { 16 | 17 | @Override 18 | public void setRecipe(RecipeExporter exporter, ItemConvertible convertible) { 19 | RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, convertible, ReFramed.CUBE); 20 | ShapelessRecipeJsonBuilder 21 | .create(RecipeCategory.BUILDING_BLOCKS, convertible) 22 | .input(ReFramed.SMALL_CUBE) 23 | .input(ReFramed.SLAB) 24 | .criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE)) 25 | .criterion(FabricRecipeProvider.hasItem(convertible), FabricRecipeProvider.conditionsFromItem(convertible)) 26 | .offerTo(exporter); 27 | } 28 | 29 | @Override 30 | public MultipartBlockStateSupplier getMultipart(Block block) { 31 | return CornerDouble.getMultipart(block, "slabs_outer_stair"); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/generator/block/SmallCubesStep.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.generator.block; 2 | 3 | import fr.adrien1106.reframed.ReFramed; 4 | import fr.adrien1106.reframed.generator.BlockStateProvider; 5 | import fr.adrien1106.reframed.generator.RecipeSetter; 6 | import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider; 7 | import net.minecraft.block.Block; 8 | import net.minecraft.data.client.BlockStateSupplier; 9 | import net.minecraft.data.server.recipe.RecipeExporter; 10 | import net.minecraft.data.server.recipe.RecipeProvider; 11 | import net.minecraft.data.server.recipe.ShapelessRecipeJsonBuilder; 12 | import net.minecraft.item.ItemConvertible; 13 | import net.minecraft.recipe.book.RecipeCategory; 14 | 15 | public class SmallCubesStep implements RecipeSetter, BlockStateProvider { 16 | 17 | @Override 18 | public void setRecipe(RecipeExporter exporter, ItemConvertible convertible) { 19 | RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, convertible, ReFramed.CUBE, 4); 20 | ShapelessRecipeJsonBuilder 21 | .create(RecipeCategory.BUILDING_BLOCKS, convertible) 22 | .input(ReFramed.SMALL_CUBE, 2) 23 | .criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE)) 24 | .criterion(FabricRecipeProvider.hasItem(convertible), FabricRecipeProvider.conditionsFromItem(convertible)) 25 | .offerTo(exporter); 26 | } 27 | 28 | @Override 29 | public BlockStateSupplier getMultipart(Block block) { 30 | return Step.getMultipart(block, "small_cubes_step", "small_cubes_step_reverse"); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/generator/block/StairsCube.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.generator.block; 2 | 3 | import fr.adrien1106.reframed.ReFramed; 4 | import fr.adrien1106.reframed.generator.BlockStateProvider; 5 | import fr.adrien1106.reframed.generator.RecipeSetter; 6 | import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider; 7 | import net.minecraft.block.Block; 8 | import net.minecraft.data.client.MultipartBlockStateSupplier; 9 | import net.minecraft.data.server.recipe.RecipeExporter; 10 | import net.minecraft.data.server.recipe.RecipeProvider; 11 | import net.minecraft.data.server.recipe.ShapelessRecipeJsonBuilder; 12 | import net.minecraft.item.ItemConvertible; 13 | import net.minecraft.recipe.book.RecipeCategory; 14 | 15 | public class StairsCube implements RecipeSetter, BlockStateProvider { 16 | 17 | @Override 18 | public void setRecipe(RecipeExporter exporter, ItemConvertible convertible) { 19 | RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, convertible, ReFramed.CUBE); 20 | ShapelessRecipeJsonBuilder 21 | .create(RecipeCategory.BUILDING_BLOCKS, convertible) 22 | .input(ReFramed.STAIR) 23 | .input(ReFramed.STEP) 24 | .criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE)) 25 | .criterion(FabricRecipeProvider.hasItem(convertible), FabricRecipeProvider.conditionsFromItem(convertible)) 26 | .offerTo(exporter); 27 | } 28 | 29 | @Override 30 | public MultipartBlockStateSupplier getMultipart(Block block) { 31 | return Stair.getMultipart(block, true); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/generator/block/StepsCross.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.generator.block; 2 | 3 | import fr.adrien1106.reframed.ReFramed; 4 | import fr.adrien1106.reframed.generator.BlockStateProvider; 5 | import fr.adrien1106.reframed.generator.RecipeSetter; 6 | import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider; 7 | import net.minecraft.block.Block; 8 | import net.minecraft.data.client.BlockStateSupplier; 9 | import net.minecraft.data.server.recipe.RecipeExporter; 10 | import net.minecraft.data.server.recipe.RecipeProvider; 11 | import net.minecraft.data.server.recipe.ShapedRecipeJsonBuilder; 12 | import net.minecraft.item.ItemConvertible; 13 | import net.minecraft.recipe.book.RecipeCategory; 14 | 15 | public class StepsCross implements RecipeSetter, BlockStateProvider { 16 | 17 | @Override 18 | public void setRecipe(RecipeExporter exporter, ItemConvertible convertible) { 19 | RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, convertible, ReFramed.CUBE, 2); 20 | ShapedRecipeJsonBuilder 21 | .create(RecipeCategory.BUILDING_BLOCKS, convertible, 8) 22 | .pattern(" I") 23 | .pattern("I ") 24 | .input('I', ReFramed.STEP) 25 | .criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE)) 26 | .criterion(FabricRecipeProvider.hasItem(convertible), FabricRecipeProvider.conditionsFromItem(convertible)) 27 | .offerTo(exporter); 28 | } 29 | 30 | @Override 31 | public BlockStateSupplier getMultipart(Block block) { 32 | return Step.getMultipart(block, "steps_cross"); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/generator/item/Blueprint.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.generator.item; 2 | 3 | import fr.adrien1106.reframed.generator.RecipeSetter; 4 | import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider; 5 | import net.minecraft.data.server.recipe.RecipeExporter; 6 | import net.minecraft.data.server.recipe.ShapedRecipeJsonBuilder; 7 | import net.minecraft.item.ItemConvertible; 8 | import net.minecraft.item.Items; 9 | import net.minecraft.recipe.book.RecipeCategory; 10 | 11 | public class Blueprint implements RecipeSetter { 12 | 13 | @Override 14 | public void setRecipe(RecipeExporter exporter, ItemConvertible convertible) { 15 | ShapedRecipeJsonBuilder 16 | .create(RecipeCategory.TOOLS, convertible, 3) 17 | .pattern("PI") 18 | .pattern("PP") 19 | .input('P', Items.PAPER) 20 | .input('I', Items.INK_SAC) 21 | .criterion(FabricRecipeProvider.hasItem(Items.PAPER), FabricRecipeProvider.conditionsFromItem(Items.PAPER)) 22 | .criterion(FabricRecipeProvider.hasItem(convertible), FabricRecipeProvider.conditionsFromItem(convertible)) 23 | .offerTo(exporter); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/generator/item/Hammer.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.generator.item; 2 | 3 | import fr.adrien1106.reframed.ReFramed; 4 | import fr.adrien1106.reframed.generator.RecipeSetter; 5 | import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider; 6 | import net.minecraft.data.server.recipe.RecipeExporter; 7 | import net.minecraft.data.server.recipe.ShapedRecipeJsonBuilder; 8 | import net.minecraft.item.ItemConvertible; 9 | import net.minecraft.item.Items; 10 | import net.minecraft.recipe.book.RecipeCategory; 11 | 12 | public class Hammer implements RecipeSetter { 13 | 14 | @Override 15 | public void setRecipe(RecipeExporter exporter, ItemConvertible convertible) { 16 | ShapedRecipeJsonBuilder 17 | .create(RecipeCategory.TOOLS, convertible) 18 | .pattern(" CI") 19 | .pattern(" ~C") 20 | .pattern("~ ") 21 | .input('I', Items.IRON_INGOT) 22 | .input('C', ReFramed.CUBE) 23 | .input('~', Items.STICK) 24 | .criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE)) 25 | .criterion(FabricRecipeProvider.hasItem(convertible), FabricRecipeProvider.conditionsFromItem(convertible)) 26 | .offerTo(exporter); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/generator/item/Screwdriver.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.generator.item; 2 | 3 | import fr.adrien1106.reframed.ReFramed; 4 | import fr.adrien1106.reframed.generator.RecipeSetter; 5 | import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider; 6 | import net.minecraft.data.server.recipe.RecipeExporter; 7 | import net.minecraft.data.server.recipe.ShapedRecipeJsonBuilder; 8 | import net.minecraft.item.ItemConvertible; 9 | import net.minecraft.item.Items; 10 | import net.minecraft.recipe.book.RecipeCategory; 11 | 12 | public class Screwdriver implements RecipeSetter { 13 | 14 | @Override 15 | public void setRecipe(RecipeExporter exporter, ItemConvertible convertible) { 16 | ShapedRecipeJsonBuilder 17 | .create(RecipeCategory.TOOLS, convertible) 18 | .pattern(" I") 19 | .pattern(" I ") 20 | .pattern("C ") 21 | .input('I', Items.IRON_INGOT) 22 | .input('C', ReFramed.CUBE) 23 | .criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE)) 24 | .criterion(FabricRecipeProvider.hasItem(convertible), FabricRecipeProvider.conditionsFromItem(convertible)) 25 | .offerTo(exporter); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/item/ReFramedBlueprintItem.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.item; 2 | 3 | import fr.adrien1106.reframed.ReFramed; 4 | import fr.adrien1106.reframed.block.ReFramedEntity; 5 | import net.minecraft.block.Blocks; 6 | import net.minecraft.item.Item; 7 | import net.minecraft.item.ItemStack; 8 | import net.minecraft.item.ItemUsageContext; 9 | import net.minecraft.sound.SoundCategory; 10 | import net.minecraft.sound.SoundEvents; 11 | import net.minecraft.util.ActionResult; 12 | import net.minecraft.util.math.BlockPos; 13 | import net.minecraft.world.World; 14 | 15 | public class ReFramedBlueprintItem extends Item { 16 | public ReFramedBlueprintItem(Settings settings) { 17 | super(settings); 18 | } 19 | 20 | @Override 21 | public ActionResult useOnBlock(ItemUsageContext context) { 22 | BlockPos pos = context.getBlockPos(); 23 | World world = context.getWorld(); 24 | if (!(world.getBlockEntity(pos) instanceof ReFramedEntity frame_entity) 25 | || frame_entity.getThemes().stream().noneMatch(state -> state.getBlock() != Blocks.AIR) 26 | ) return ActionResult.PASS; 27 | 28 | context.getStack().decrement(1); 29 | ItemStack stack = ReFramed.BLUEPRINT_WRITTEN.getDefaultStack(); 30 | frame_entity.setStackNbt(stack); 31 | context.getPlayer().giveItemStack(stack); 32 | world.playSound(context.getPlayer(), context.getPlayer().getBlockPos(), SoundEvents.ITEM_BOOK_PUT, SoundCategory.PLAYERS); 33 | 34 | return ActionResult.SUCCESS; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/mixin/MinecraftAccessor.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.mixin; 2 | 3 | import net.minecraft.client.MinecraftClient; 4 | import net.minecraft.client.color.item.ItemColors; 5 | import org.spongepowered.asm.mixin.Mixin; 6 | import org.spongepowered.asm.mixin.gen.Accessor; 7 | 8 | @Mixin(MinecraftClient.class) 9 | public interface MinecraftAccessor { 10 | //Yeah there's a fabric API for this, but do we really need it, no. 11 | @Accessor("itemColors") ItemColors getItemColors(); 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/mixin/WallBlockAccessor.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.mixin; 2 | 3 | import net.minecraft.block.BlockState; 4 | import net.minecraft.block.WallBlock; 5 | import net.minecraft.util.shape.VoxelShape; 6 | import org.spongepowered.asm.mixin.Mixin; 7 | import org.spongepowered.asm.mixin.gen.Accessor; 8 | 9 | import java.util.Map; 10 | 11 | //Used in ReFramedWallBlock, since the vanilla wall block code explodes if you add more blockstates. 12 | @Mixin(WallBlock.class) 13 | public interface WallBlockAccessor { 14 | @Accessor("shapeMap") Map getShapeMap(); 15 | @Accessor("collisionShapeMap") Map getCollisionShapeMap(); 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/mixin/compat/AthenaConnectedBlockModelMixin.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.mixin.compat; 2 | 3 | import earth.terrarium.athena.api.client.utils.AppearanceAndTintGetter; 4 | import earth.terrarium.athena.api.client.utils.CtmUtils; 5 | import earth.terrarium.athena.impl.client.models.ConnectedBlockModel; 6 | import fr.adrien1106.reframed.util.blocks.ThemeableBlockEntity; 7 | import net.minecraft.block.BlockState; 8 | import net.minecraft.util.math.BlockPos; 9 | import net.minecraft.util.math.Direction; 10 | import org.spongepowered.asm.mixin.Mixin; 11 | import org.spongepowered.asm.mixin.injection.At; 12 | import org.spongepowered.asm.mixin.injection.Redirect; 13 | 14 | @Mixin(ConnectedBlockModel.class) 15 | public class AthenaConnectedBlockModelMixin { 16 | 17 | @Redirect(method = "getQuads", 18 | at = @At(value = "INVOKE", target = "Learth/terrarium/athena/api/client/utils/CtmUtils;" + 19 | "checkRelative(Learth/terrarium/athena/api/client/utils/AppearanceAndTintGetter;" + 20 | "Lnet/minecraft/block/BlockState;" + 21 | "Lnet/minecraft/util/math/BlockPos;" + 22 | "Lnet/minecraft/util/math/Direction;)Z")) 23 | private boolean checkForCull(AppearanceAndTintGetter level, BlockState state, BlockPos pos, Direction direction) { 24 | // Always get all the textures unless its another block then use default behaviour 25 | if (level.getBlockEntity(pos) instanceof ThemeableBlockEntity 26 | || level.getBlockEntity(pos.offset(direction)) instanceof ThemeableBlockEntity) 27 | return false; 28 | return CtmUtils.checkRelative(level, state, pos, direction); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/mixin/compat/AthenaWrappedGetterMixin.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.mixin.compat; 2 | 3 | import com.llamalad7.mixinextras.sugar.Local; 4 | import earth.terrarium.athena.api.client.fabric.WrappedGetter; 5 | import fr.adrien1106.reframed.util.blocks.ThemeableBlockEntity; 6 | import net.minecraft.block.BlockState; 7 | import net.minecraft.util.math.BlockPos; 8 | import net.minecraft.world.BlockRenderView; 9 | import org.spongepowered.asm.mixin.Mixin; 10 | import org.spongepowered.asm.mixin.injection.At; 11 | import org.spongepowered.asm.mixin.injection.Redirect; 12 | 13 | @Mixin(WrappedGetter.class) 14 | public class AthenaWrappedGetterMixin { 15 | 16 | @Redirect( 17 | method = "query", 18 | at = @At( 19 | value = "INVOKE", 20 | target = "Lnet/minecraft/world/BlockRenderView;getBlockState(Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/block/BlockState;" 21 | ) 22 | ) // TODO better connected textures 23 | private BlockState queryCamoState(BlockRenderView world, BlockPos pos, @Local(argsOnly = true) BlockState reference_state) { 24 | // get Any that will connect or return any other (/!\ isOf is an uncertain check) 25 | if (world.getBlockEntity(pos) instanceof ThemeableBlockEntity framed_entity) 26 | return framed_entity.getThemes() 27 | .stream() 28 | .filter(state -> reference_state.isOf(state.getBlock())) 29 | .findAny() 30 | .orElse(framed_entity.getTheme(1)); 31 | return world.getBlockState(pos); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/mixin/compat/AxiomClientBlockEntitySerializerMixin.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.mixin.compat; 2 | 3 | import com.moulberry.axiom.world_modification.ClientBlockEntitySerializer; 4 | import fr.adrien1106.reframed.util.blocks.ThemeableBlockEntity; 5 | import net.minecraft.block.entity.BlockEntity; 6 | import net.minecraft.nbt.NbtCompound; 7 | import net.minecraft.registry.RegistryWrapper; 8 | import org.spongepowered.asm.mixin.Mixin; 9 | import org.spongepowered.asm.mixin.injection.At; 10 | import org.spongepowered.asm.mixin.injection.Inject; 11 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 12 | 13 | @Mixin(ClientBlockEntitySerializer.class) 14 | public class AxiomClientBlockEntitySerializerMixin { 15 | 16 | @Inject( 17 | method = "serialize", 18 | at = @At("HEAD"), 19 | remap = false, 20 | cancellable = true 21 | ) 22 | private static void serialize(BlockEntity blockEntity, RegistryWrapper.WrapperLookup provider, CallbackInfoReturnable cir) { 23 | if (!(blockEntity instanceof ThemeableBlockEntity)) return; 24 | cir.setReturnValue(blockEntity.createNbt()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/mixin/compat/AxiomClipboardMixin.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.mixin.compat; 2 | 3 | import com.moulberry.axiom.clipboard.Clipboard; 4 | import com.moulberry.axiom.clipboard.ClipboardObject; 5 | import com.moulberry.axiom.utils.IntMatrix; 6 | import fr.adrien1106.reframed.util.mixin.IAxiomChunkedBlockRegionMixin; 7 | import org.spongepowered.asm.mixin.Mixin; 8 | import org.spongepowered.asm.mixin.injection.At; 9 | import org.spongepowered.asm.mixin.injection.Inject; 10 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 11 | 12 | @Mixin(Clipboard.class) 13 | public class AxiomClipboardMixin { 14 | 15 | @Inject( 16 | method = "setClipboard(Lcom/moulberry/axiom/clipboard/ClipboardObject;)I", 17 | at = @At( 18 | value = "TAIL" 19 | ), 20 | remap = false 21 | ) 22 | private void onInit(ClipboardObject object, CallbackInfoReturnable cir) { 23 | ((IAxiomChunkedBlockRegionMixin) object.blockRegion()).setTransform(new IntMatrix(), object.blockEntities()); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/mixin/compat/AxiomCloneBuilderToolMixin.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.mixin.compat; 2 | 3 | import com.moulberry.axiom.buildertools.CloneBuilderTool; 4 | import com.moulberry.axiom.clipboard.SelectionBuffer; 5 | import com.moulberry.axiom.render.regions.ChunkedBlockRegion; 6 | import com.moulberry.axiom.utils.IntMatrix; 7 | import com.moulberry.axiom.world_modification.CompressedBlockEntity; 8 | import fr.adrien1106.reframed.util.mixin.IAxiomChunkedBlockRegionMixin; 9 | import it.unimi.dsi.fastutil.longs.Long2ObjectMap; 10 | import org.spongepowered.asm.mixin.Final; 11 | import org.spongepowered.asm.mixin.Mixin; 12 | import org.spongepowered.asm.mixin.Shadow; 13 | import org.spongepowered.asm.mixin.injection.At; 14 | import org.spongepowered.asm.mixin.injection.Inject; 15 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 16 | 17 | @Mixin(CloneBuilderTool.class) 18 | public class AxiomCloneBuilderToolMixin { 19 | 20 | @Shadow(remap = false) private ChunkedBlockRegion blockRegion; 21 | 22 | @Shadow(remap = false) @Final private IntMatrix transformMatrix; 23 | 24 | @Shadow(remap = false) private Long2ObjectMap blockEntities; 25 | 26 | @Inject( 27 | method = "lambda$initiateClone$0", 28 | at = @At( 29 | value = "INVOKE_ASSIGN", 30 | target = "Lcom/moulberry/axiom/clipboard/SelectionBuffer$CopyResult;blockEntities()Lit/unimi/dsi/fastutil/longs/Long2ObjectMap;", 31 | shift = At.Shift.AFTER 32 | ), 33 | remap = false 34 | ) 35 | private void onInitiateClone(int copyId, int offsetX, int offsetY, int offsetZ, SelectionBuffer.CopyResult copyResult, CallbackInfo ci) { 36 | ((IAxiomChunkedBlockRegionMixin) blockRegion).setTransform(transformMatrix, blockEntities); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/mixin/compat/AxiomMappedBlockAndTintGetterMixin.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.mixin.compat; 2 | 3 | import fr.adrien1106.reframed.block.ReFramedEntity; 4 | import net.minecraft.block.entity.BlockEntity; 5 | import net.minecraft.util.math.BlockPos; 6 | import net.minecraft.world.World; 7 | import org.spongepowered.asm.mixin.Final; 8 | import org.spongepowered.asm.mixin.Mixin; 9 | import org.spongepowered.asm.mixin.Shadow; 10 | import org.spongepowered.asm.mixin.injection.At; 11 | import org.spongepowered.asm.mixin.injection.Inject; 12 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 13 | 14 | @Mixin(targets = "com.moulberry.axiom.render.ChunkRenderOverrider$MappedBlockAndTintGetter") 15 | public class AxiomMappedBlockAndTintGetterMixin { 16 | 17 | @Shadow @Final private World level; 18 | 19 | @Inject( 20 | method = "getBlockEntity", 21 | at = @At( 22 | value = "RETURN" 23 | ), 24 | cancellable = true 25 | ) 26 | private void onGetBlockEntity(BlockPos pos, CallbackInfoReturnable cir) { 27 | if (!(level.getBlockEntity(pos) instanceof ReFramedEntity frame_entity)) return; 28 | cir.setReturnValue(frame_entity); 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/mixin/compat/AxiomMoveBuilderToolMixin.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.mixin.compat; 2 | 3 | import com.moulberry.axiom.buildertools.MoveBuilderTool; 4 | import com.moulberry.axiom.clipboard.SelectionBuffer; 5 | import com.moulberry.axiom.render.regions.ChunkedBlockRegion; 6 | import com.moulberry.axiom.utils.IntMatrix; 7 | import com.moulberry.axiom.world_modification.CompressedBlockEntity; 8 | import fr.adrien1106.reframed.util.mixin.IAxiomChunkedBlockRegionMixin; 9 | import it.unimi.dsi.fastutil.longs.Long2ObjectMap; 10 | import org.spongepowered.asm.mixin.Final; 11 | import org.spongepowered.asm.mixin.Mixin; 12 | import org.spongepowered.asm.mixin.Shadow; 13 | import org.spongepowered.asm.mixin.injection.At; 14 | import org.spongepowered.asm.mixin.injection.Inject; 15 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 16 | 17 | @Mixin(MoveBuilderTool.class) 18 | public class AxiomMoveBuilderToolMixin { 19 | 20 | @Shadow(remap = false) private ChunkedBlockRegion blockRegion; 21 | 22 | @Shadow(remap = false) @Final private IntMatrix transformMatrix; 23 | 24 | @Shadow(remap = false) private Long2ObjectMap blockEntities; 25 | 26 | @Inject( 27 | method = "lambda$initiateMovement$1", 28 | at = @At( 29 | value = "INVOKE_ASSIGN", 30 | target = "Lcom/moulberry/axiom/clipboard/SelectionBuffer$CopyResult;blockEntities()Lit/unimi/dsi/fastutil/longs/Long2ObjectMap;", 31 | shift = At.Shift.AFTER 32 | ), 33 | remap = false 34 | ) 35 | private void onInitiateClone(int copyId, int offsetX, int offsetY, int offsetZ, SelectionBuffer.CopyResult copyResult, CallbackInfo ci) { 36 | ((IAxiomChunkedBlockRegionMixin) blockRegion).setTransform(transformMatrix, blockEntities); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/mixin/compat/AxiomRotSpriteMixin.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.mixin.compat; 2 | 3 | import com.moulberry.axiom.render.regions.ChunkedBlockRegion; 4 | import com.moulberry.axiom.scaling.RotSprite; 5 | import fr.adrien1106.reframed.util.mixin.IAxiomChunkedBlockRegionMixin; 6 | import org.joml.Matrix4f; 7 | import org.spongepowered.asm.mixin.Mixin; 8 | import org.spongepowered.asm.mixin.injection.At; 9 | import org.spongepowered.asm.mixin.injection.Inject; 10 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 11 | 12 | @Mixin(RotSprite.class) 13 | public class AxiomRotSpriteMixin { 14 | 15 | @Inject( 16 | method = "rotateCachedWithOutput", 17 | at = @At( 18 | value = "HEAD" 19 | ), 20 | remap = false 21 | ) 22 | private static void onRotateCachedWithOutput(ChunkedBlockRegion in, Matrix4f matrix4f, ChunkedBlockRegion out, int x, int y, int z, CallbackInfoReturnable cir) { 23 | IAxiomChunkedBlockRegionMixin iin = (IAxiomChunkedBlockRegionMixin) in; 24 | ((IAxiomChunkedBlockRegionMixin) out).setTransform(iin.getTransform(), iin.getBlockEntities()); 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/mixin/compat/AxiomScale3xMixin.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.mixin.compat; 2 | 3 | import com.llamalad7.mixinextras.sugar.Local; 4 | import com.moulberry.axiom.render.regions.ChunkedBlockRegion; 5 | import com.moulberry.axiom.scaling.Scale3x; 6 | import fr.adrien1106.reframed.util.mixin.IAxiomChunkedBlockRegionMixin; 7 | import org.spongepowered.asm.mixin.Mixin; 8 | import org.spongepowered.asm.mixin.injection.At; 9 | import org.spongepowered.asm.mixin.injection.Inject; 10 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 11 | 12 | @Mixin(Scale3x.class) 13 | public class AxiomScale3xMixin { 14 | 15 | @Inject( 16 | method = "scale3x", 17 | at = @At( 18 | value = "INVOKE_ASSIGN", 19 | target = "Lcom/moulberry/axiom/render/regions/ChunkedBlockRegion;()V", 20 | shift = At.Shift.AFTER 21 | ), 22 | remap = false 23 | ) 24 | private static void onInit(ChunkedBlockRegion in, boolean postProcessing, CallbackInfoReturnable cir, @Local(ordinal = 1) ChunkedBlockRegion out) { 25 | IAxiomChunkedBlockRegionMixin iin = (IAxiomChunkedBlockRegionMixin) in; 26 | ((IAxiomChunkedBlockRegionMixin) out).setTransform(iin.getTransform(), iin.getBlockEntities()); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/mixin/compat/ContinuityConnectionPredicateMixin.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.mixin.compat; 2 | 3 | import com.llamalad7.mixinextras.sugar.Local; 4 | import fr.adrien1106.reframed.util.blocks.ThemeableBlockEntity; 5 | import me.pepperbell.continuity.client.processor.ConnectionPredicate; 6 | import net.minecraft.block.BlockState; 7 | import net.minecraft.util.math.BlockPos; 8 | import net.minecraft.world.BlockRenderView; 9 | import org.spongepowered.asm.mixin.Mixin; 10 | import org.spongepowered.asm.mixin.injection.At; 11 | import org.spongepowered.asm.mixin.injection.Redirect; 12 | 13 | @Mixin(ConnectionPredicate.class) 14 | public interface ContinuityConnectionPredicateMixin { 15 | 16 | @Redirect( 17 | method = "shouldConnect(Lnet/minecraft/world/BlockRenderView;Lnet/minecraft/block/BlockState;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/util/math/Direction;Lnet/minecraft/client/texture/Sprite;)Z", 18 | at = @At( 19 | value = "INVOKE", 20 | target = "Lnet/minecraft/world/BlockRenderView;getBlockState(Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/block/BlockState;" 21 | ) 22 | ) // TODO better connected textures 23 | private BlockState getBlockState(BlockRenderView view, BlockPos pos, @Local(argsOnly = true) BlockState state) { 24 | if (!(view.getBlockEntity(pos) instanceof ThemeableBlockEntity frame_entity)) return view.getBlockState(pos); 25 | return frame_entity.getThemes() 26 | .stream() 27 | .filter(theme -> theme.getBlock() == state.getBlock()) 28 | .findFirst() 29 | .orElse(frame_entity.getTheme(0)); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/mixin/compat/ContinuityModelWrappingHandlerMixin.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.mixin.compat; 2 | 3 | import fr.adrien1106.reframed.block.ReFramedBlock; 4 | import me.pepperbell.continuity.client.resource.ModelWrappingHandler; 5 | import net.minecraft.block.Block; 6 | import net.minecraft.registry.DefaultedRegistry; 7 | import org.spongepowered.asm.mixin.Mixin; 8 | import org.spongepowered.asm.mixin.injection.At; 9 | import org.spongepowered.asm.mixin.injection.Redirect; 10 | 11 | import java.util.Iterator; 12 | 13 | @Mixin(ModelWrappingHandler.class) 14 | public class ContinuityModelWrappingHandlerMixin { 15 | 16 | @Redirect( 17 | method = "createBlockStateModelIdMap", 18 | at = @At( 19 | value = "INVOKE", 20 | target = "Lnet/minecraft/registry/DefaultedRegistry;iterator()Ljava/util/Iterator;" 21 | ) 22 | ) 23 | private static Iterator filterFrames(DefaultedRegistry registry) { 24 | return registry 25 | .stream() 26 | .filter(block -> !(block instanceof ReFramedBlock)) 27 | .iterator(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/mixin/compat/IndiumAbstractBlockRenderContextMixin.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.mixin.compat; 2 | 3 | import com.llamalad7.mixinextras.sugar.Local; 4 | import fr.adrien1106.reframed.client.util.RenderHelper; 5 | import fr.adrien1106.reframed.util.mixin.IBlockRenderInfoMixin; 6 | import link.infra.indium.renderer.mesh.MutableQuadViewImpl; 7 | import link.infra.indium.renderer.render.AbstractBlockRenderContext; 8 | import link.infra.indium.renderer.render.BlockRenderInfo; 9 | import net.minecraft.util.math.Direction; 10 | import org.jetbrains.annotations.Nullable; 11 | import org.spongepowered.asm.mixin.Mixin; 12 | import org.spongepowered.asm.mixin.Shadow; 13 | import org.spongepowered.asm.mixin.injection.At; 14 | import org.spongepowered.asm.mixin.injection.Redirect; 15 | 16 | @Mixin(AbstractBlockRenderContext.class) 17 | public abstract class IndiumAbstractBlockRenderContextMixin { 18 | 19 | @Shadow(remap = false) protected BlockRenderInfo blockInfo; 20 | 21 | @Shadow public abstract boolean isFaceCulled(@Nullable Direction face); 22 | 23 | @Redirect(method = "renderQuad", at = @At(value = "INVOKE", target = "Llink/infra/indium/renderer/render/AbstractBlockRenderContext;isFaceCulled(Lnet/minecraft/util/math/Direction;)Z")) 24 | private boolean shouldDrawInnerQuad(AbstractBlockRenderContext instance, Direction face, @Local(argsOnly = true) MutableQuadViewImpl quad) { 25 | if (face != null || quad.tag() == 0 || !(blockInfo instanceof IBlockRenderInfoMixin info) || info.getThemeIndex() == 0) return isFaceCulled(face); 26 | 27 | return !RenderHelper.shouldDrawInnerFace(blockInfo.blockState, blockInfo.blockView, blockInfo.blockPos, quad.tag() >>> 8, info.getThemeIndex(), info.getModelHash()); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/mixin/compat/SodiumBlockOcclusionCacheMixin.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.mixin.compat; 2 | 3 | import com.llamalad7.mixinextras.sugar.Local; 4 | import fr.adrien1106.reframed.client.util.RenderHelper; 5 | import fr.adrien1106.reframed.util.blocks.ThemeableBlockEntity; 6 | import me.jellysquid.mods.sodium.client.render.chunk.compile.pipeline.BlockOcclusionCache; 7 | import net.minecraft.block.BlockState; 8 | import net.minecraft.util.math.BlockPos; 9 | import net.minecraft.util.math.Direction; 10 | import net.minecraft.world.BlockView; 11 | import org.spongepowered.asm.mixin.Mixin; 12 | import org.spongepowered.asm.mixin.injection.At; 13 | import org.spongepowered.asm.mixin.injection.Inject; 14 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 15 | 16 | @Mixin(BlockOcclusionCache.class) 17 | public class SodiumBlockOcclusionCacheMixin { 18 | 19 | @Inject( 20 | method = "shouldDrawSide", 21 | at = @At( 22 | value = "INVOKE", 23 | target = "Lnet/minecraft/util/math/BlockPos$Mutable;set(III)Lnet/minecraft/util/math/BlockPos$Mutable;", 24 | shift = At.Shift.AFTER 25 | ), cancellable = true) 26 | private void shouldDrawFrameNeighborSide(BlockState self_state, BlockView view, BlockPos self_pos, Direction face, CallbackInfoReturnable cir, @Local BlockPos.Mutable other_pos) { 27 | if (!(view.getBlockEntity(other_pos) instanceof ThemeableBlockEntity)) return; 28 | cir.setReturnValue(RenderHelper.shouldDrawSide(self_state, view, self_pos, face, other_pos, 0)); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/mixin/model/WeightedBakedModelAccessor.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.mixin.model; 2 | 3 | import net.minecraft.client.render.model.BakedModel; 4 | import net.minecraft.client.render.model.WeightedBakedModel; 5 | import net.minecraft.util.collection.Weighted; 6 | import org.spongepowered.asm.mixin.Mixin; 7 | import org.spongepowered.asm.mixin.gen.Accessor; 8 | 9 | import java.util.List; 10 | 11 | @Mixin(WeightedBakedModel.class) 12 | public interface WeightedBakedModelAccessor { 13 | 14 | @Accessor("models") List> getModels(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/mixin/particles/AccessorParticle.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.mixin.particles; 2 | 3 | import net.minecraft.client.particle.Particle; 4 | import net.minecraft.util.math.random.Random; 5 | import org.spongepowered.asm.mixin.Mixin; 6 | import org.spongepowered.asm.mixin.gen.Accessor; 7 | 8 | @Mixin(Particle.class) 9 | public interface AccessorParticle { 10 | @Accessor("random") Random getRandom(); 11 | 12 | @Accessor("red") void setRed(float red); 13 | @Accessor("green") void setGreen(float green); 14 | @Accessor("blue") void setBlue(float blue); 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/mixin/particles/AccessorSpriteBillboardParticle.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.mixin.particles; 2 | 3 | import net.minecraft.client.particle.SpriteBillboardParticle; 4 | import net.minecraft.client.texture.Sprite; 5 | import org.spongepowered.asm.mixin.Mixin; 6 | import org.spongepowered.asm.mixin.gen.Invoker; 7 | 8 | @Mixin(SpriteBillboardParticle.class) 9 | public interface AccessorSpriteBillboardParticle { 10 | @Invoker("setSprite") void setNewSprite(Sprite sprite); 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/mixin/particles/MixinEntity.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.mixin.particles; 2 | 3 | import com.llamalad7.mixinextras.sugar.Local; 4 | import fr.adrien1106.reframed.block.ReFramedBlock; 5 | import fr.adrien1106.reframed.util.blocks.ThemeableBlockEntity; 6 | import net.minecraft.block.BlockState; 7 | import net.minecraft.entity.Entity; 8 | import net.minecraft.util.math.BlockPos; 9 | import net.minecraft.world.World; 10 | import org.spongepowered.asm.mixin.Mixin; 11 | import org.spongepowered.asm.mixin.injection.At; 12 | import org.spongepowered.asm.mixin.injection.ModifyArg; 13 | 14 | @Mixin(Entity.class) 15 | public abstract class MixinEntity { 16 | @ModifyArg( 17 | method = "spawnSprintingParticles", 18 | at = @At(value = "INVOKE", target = "Lnet/minecraft/particle/BlockStateParticleEffect;(Lnet/minecraft/particle/ParticleType;Lnet/minecraft/block/BlockState;)V") 19 | ) 20 | private BlockState modifyParticleState(BlockState state, @Local(ordinal = 0) BlockPos landing_pos) { 21 | World world = ((Entity) (Object) this).getWorld(); 22 | 23 | if(world.getBlockEntity(landing_pos) instanceof ThemeableBlockEntity themeable 24 | && state.getBlock() instanceof ReFramedBlock block) { 25 | BlockState theme = themeable.getTheme(block.getTopThemeIndex(state)); 26 | if(!theme.isAir()) return theme; 27 | } 28 | 29 | return state; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/mixin/particles/MixinLivingEntity.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.mixin.particles; 2 | 3 | import com.llamalad7.mixinextras.sugar.Local; 4 | import fr.adrien1106.reframed.block.ReFramedBlock; 5 | import fr.adrien1106.reframed.util.blocks.ThemeableBlockEntity; 6 | import net.minecraft.block.BlockState; 7 | import net.minecraft.entity.Entity; 8 | import net.minecraft.entity.LivingEntity; 9 | import net.minecraft.util.math.BlockPos; 10 | import net.minecraft.world.World; 11 | import org.spongepowered.asm.mixin.Mixin; 12 | import org.spongepowered.asm.mixin.injection.At; 13 | import org.spongepowered.asm.mixin.injection.ModifyArg; 14 | 15 | @Mixin(LivingEntity.class) 16 | public class MixinLivingEntity { 17 | 18 | @ModifyArg( 19 | method = "fall", 20 | at = @At(value = "INVOKE", target = "Lnet/minecraft/particle/BlockStateParticleEffect;(Lnet/minecraft/particle/ParticleType;Lnet/minecraft/block/BlockState;)V") 21 | ) 22 | private BlockState modifyParticleState(BlockState state, @Local(ordinal = 0, argsOnly = true) BlockPos land_pos) { 23 | World world = ((Entity) (Object) this).getWorld(); 24 | 25 | if(world.getBlockEntity(land_pos) instanceof ThemeableBlockEntity themeable 26 | && state.getBlock() instanceof ReFramedBlock block) { 27 | BlockState theme = themeable.getTheme(block.getTopThemeIndex(state)); 28 | if(!theme.isAir()) return theme; 29 | } 30 | 31 | return state; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/mixin/render/MultipartBakedModelMixin.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.mixin.render; 2 | 3 | import fr.adrien1106.reframed.util.mixin.IMultipartBakedModelMixin; 4 | import net.minecraft.block.BlockState; 5 | import net.minecraft.client.render.model.BakedModel; 6 | import net.minecraft.client.render.model.MultipartBakedModel; 7 | import org.apache.commons.lang3.tuple.Pair; 8 | import org.spongepowered.asm.mixin.Final; 9 | import org.spongepowered.asm.mixin.Mixin; 10 | import org.spongepowered.asm.mixin.Shadow; 11 | 12 | import java.util.List; 13 | import java.util.Objects; 14 | import java.util.function.Predicate; 15 | 16 | @Mixin(MultipartBakedModel.class) 17 | public class MultipartBakedModelMixin implements IMultipartBakedModelMixin { 18 | 19 | @Shadow @Final private List, BakedModel>> components; 20 | 21 | @Override 22 | public List getModels(BlockState state) { 23 | return components.stream().map(pair -> pair.getLeft().test(state) ? pair.getRight(): null).filter(Objects::nonNull).toList(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/mixin/render/WorldRendererMixin.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.mixin.render; 2 | 3 | import fr.adrien1106.reframed.block.ReFramedDoubleBlock; 4 | import net.minecraft.block.BlockState; 5 | import net.minecraft.block.ShapeContext; 6 | import net.minecraft.client.MinecraftClient; 7 | import net.minecraft.client.render.WorldRenderer; 8 | import net.minecraft.util.hit.BlockHitResult; 9 | import net.minecraft.util.math.BlockPos; 10 | import net.minecraft.util.shape.VoxelShape; 11 | import net.minecraft.world.BlockView; 12 | import org.spongepowered.asm.mixin.Final; 13 | import org.spongepowered.asm.mixin.Mixin; 14 | import org.spongepowered.asm.mixin.Shadow; 15 | import org.spongepowered.asm.mixin.injection.At; 16 | import org.spongepowered.asm.mixin.injection.Redirect; 17 | 18 | @Mixin(WorldRenderer.class) 19 | public class WorldRendererMixin { 20 | 21 | @Shadow @Final private MinecraftClient client; 22 | 23 | @Redirect(method = "drawBlockOutline", 24 | at = @At(value = "INVOKE", target = "Lnet/minecraft/block/BlockState;" + 25 | "getOutlineShape(" + 26 | "Lnet/minecraft/world/BlockView;" + 27 | "Lnet/minecraft/util/math/BlockPos;" + 28 | "Lnet/minecraft/block/ShapeContext;" + 29 | ")Lnet/minecraft/util/shape/VoxelShape;")) 30 | private VoxelShape getRenderOutline(BlockState state, BlockView world, BlockPos pos, ShapeContext shape_context) { 31 | if (state.getBlock() instanceof ReFramedDoubleBlock double_frame_block) // cast is already checked in render 32 | return double_frame_block.getRenderOutline(state, (BlockHitResult) client.crosshairTarget); 33 | return state.getOutlineShape(world, pos, shape_context); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/mixin/sound/EntityMixin.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.mixin.sound; 2 | 3 | import com.llamalad7.mixinextras.sugar.Local; 4 | import fr.adrien1106.reframed.block.ReFramedBlock; 5 | import fr.adrien1106.reframed.util.blocks.ThemeableBlockEntity; 6 | import net.minecraft.block.BlockState; 7 | import net.minecraft.block.Blocks; 8 | import net.minecraft.entity.Entity; 9 | import net.minecraft.sound.BlockSoundGroup; 10 | import net.minecraft.util.math.BlockPos; 11 | import net.minecraft.world.World; 12 | import org.spongepowered.asm.mixin.Mixin; 13 | import org.spongepowered.asm.mixin.Shadow; 14 | import org.spongepowered.asm.mixin.injection.At; 15 | import org.spongepowered.asm.mixin.injection.Redirect; 16 | 17 | @Mixin(Entity.class) 18 | public abstract class EntityMixin { 19 | 20 | @Shadow public abstract World getWorld(); 21 | 22 | @Redirect( 23 | method = "playStepSound", 24 | at = @At( 25 | value = "INVOKE", 26 | target = "Lnet/minecraft/block/BlockState;getSoundGroup()Lnet/minecraft/sound/BlockSoundGroup;" 27 | ) 28 | ) 29 | private BlockSoundGroup playStepCamoSound(BlockState state, @Local(argsOnly = true) BlockPos pos) { 30 | if (state.getBlock() instanceof ReFramedBlock frame_block 31 | && getWorld().getBlockEntity(pos) instanceof ThemeableBlockEntity frame_entity 32 | ) { 33 | BlockState camo_state = frame_entity.getTheme(frame_block.getTopThemeIndex(state)); 34 | state = camo_state.getBlock() != Blocks.AIR ? camo_state : state; 35 | } 36 | return state.getSoundGroup(); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/mixin/sound/LivingEntityMixin.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.mixin.sound; 2 | 3 | import fr.adrien1106.reframed.block.ReFramedBlock; 4 | import fr.adrien1106.reframed.util.blocks.ThemeableBlockEntity; 5 | import net.minecraft.block.BlockState; 6 | import net.minecraft.block.Blocks; 7 | import net.minecraft.entity.LivingEntity; 8 | import net.minecraft.util.math.BlockPos; 9 | import net.minecraft.world.World; 10 | import org.spongepowered.asm.mixin.Mixin; 11 | import org.spongepowered.asm.mixin.injection.At; 12 | import org.spongepowered.asm.mixin.injection.Redirect; 13 | 14 | @Mixin(LivingEntity.class) 15 | public class LivingEntityMixin { 16 | 17 | @Redirect( 18 | method = "playBlockFallSound", 19 | at = @At( 20 | value = "INVOKE", 21 | target = "Lnet/minecraft/world/World;getBlockState(Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/block/BlockState;" 22 | ) 23 | ) 24 | private BlockState playCamoFallSound(World world, BlockPos pos) { 25 | BlockState state = world.getBlockState(pos); 26 | if (state.getBlock() instanceof ReFramedBlock frame_block 27 | && world.getBlockEntity(pos) instanceof ThemeableBlockEntity frame_entity 28 | ) { 29 | BlockState camo_state = frame_entity.getTheme(frame_block.getTopThemeIndex(state)); 30 | state = camo_state.getBlock() != Blocks.AIR ? camo_state : state; 31 | } 32 | return state; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/mixin/sound/WorldRendererMixin.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.mixin.sound; 2 | 3 | import com.llamalad7.mixinextras.sugar.Local; 4 | import fr.adrien1106.reframed.block.ReFramedBlock; 5 | import fr.adrien1106.reframed.util.blocks.ThemeableBlockEntity; 6 | import net.minecraft.block.BlockState; 7 | import net.minecraft.block.Blocks; 8 | import net.minecraft.client.render.WorldRenderer; 9 | import net.minecraft.client.world.ClientWorld; 10 | import net.minecraft.sound.BlockSoundGroup; 11 | import net.minecraft.util.math.BlockPos; 12 | import org.jetbrains.annotations.Nullable; 13 | import org.spongepowered.asm.mixin.Mixin; 14 | import org.spongepowered.asm.mixin.Shadow; 15 | import org.spongepowered.asm.mixin.injection.At; 16 | import org.spongepowered.asm.mixin.injection.Redirect; 17 | 18 | @Mixin(WorldRenderer.class) 19 | public class WorldRendererMixin { 20 | 21 | @Shadow @Nullable private ClientWorld world; 22 | 23 | @Redirect( 24 | method = "processWorldEvent", 25 | at = @At( 26 | value = "INVOKE", 27 | target = "Lnet/minecraft/block/BlockState;getSoundGroup()Lnet/minecraft/sound/BlockSoundGroup;" 28 | ) 29 | ) 30 | private BlockSoundGroup getCamoBreakSound(BlockState state, @Local(argsOnly = true) BlockPos pos) { 31 | if (state.getBlock() instanceof ReFramedBlock frame_block 32 | && world.getBlockEntity(pos) instanceof ThemeableBlockEntity frame_entity 33 | ) { 34 | BlockState camo_state = frame_entity.getTheme(frame_block.getTopThemeIndex(state)); 35 | state = camo_state.getBlock() != Blocks.AIR ? camo_state : state; 36 | } 37 | return state.getSoundGroup(); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/util/blocks/BlockProperties.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.util.blocks; 2 | 3 | import net.minecraft.state.property.BooleanProperty; 4 | import net.minecraft.state.property.EnumProperty; 5 | import net.minecraft.state.property.IntProperty; 6 | 7 | public class BlockProperties { 8 | public static final BooleanProperty LIGHT = BooleanProperty.of("emits_light"); 9 | public static final EnumProperty EDGE = EnumProperty.of("edge", Edge.class); 10 | public static final IntProperty EDGE_FACE = IntProperty.of("face", 0, 1); 11 | public static final EnumProperty CORNER = EnumProperty.of("corner", Corner.class); 12 | public static final IntProperty CORNER_FACE = IntProperty.of("face", 0, 2); 13 | public static final IntProperty CORNER_FEATURE = IntProperty.of("corner_feature", 0, 1); 14 | public static final EnumProperty STAIR_SHAPE = EnumProperty.of("shape", StairShape.class); 15 | public static final IntProperty HALF_LAYERS = IntProperty.of("layers", 1, 4); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/util/blocks/ThemeableBlockEntity.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.util.blocks; 2 | 3 | import net.minecraft.block.BlockState; 4 | 5 | import java.util.List; 6 | 7 | public interface ThemeableBlockEntity { 8 | BlockState getTheme(int i); 9 | 10 | void setTheme(BlockState state, int i); 11 | 12 | List getThemes(); 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/util/mixin/IAxiomChunkedBlockRegionMixin.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.util.mixin; 2 | 3 | import com.moulberry.axiom.utils.IntMatrix; 4 | import com.moulberry.axiom.world_modification.CompressedBlockEntity; 5 | import it.unimi.dsi.fastutil.longs.Long2ObjectMap; 6 | 7 | public interface IAxiomChunkedBlockRegionMixin { 8 | 9 | void setTransform(IntMatrix transform, Long2ObjectMap block_entities); 10 | 11 | IntMatrix getTransform(); 12 | 13 | Long2ObjectMap getBlockEntities(); 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/util/mixin/IBlockRenderInfoMixin.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.util.mixin; 2 | 3 | import net.minecraft.block.BlockState; 4 | import net.minecraft.util.math.BlockPos; 5 | 6 | public interface IBlockRenderInfoMixin { 7 | 8 | void prepareForBlock(BlockState state, BlockPos pos, boolean ao, int theme_index, int model_hash); 9 | 10 | void prepareForBlock(BlockState state, BlockPos pos, long seed, boolean ao, int theme_index, int model_hash); 11 | 12 | int getThemeIndex(); 13 | 14 | int getModelHash(); 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/util/mixin/IMultipartBakedModelMixin.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.util.mixin; 2 | 3 | import net.minecraft.block.BlockState; 4 | import net.minecraft.client.render.model.BakedModel; 5 | 6 | import java.util.List; 7 | 8 | public interface IMultipartBakedModelMixin { 9 | 10 | List getModels(BlockState state); 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/fr/adrien1106/reframed/util/mixin/ThemedBlockEntity.java: -------------------------------------------------------------------------------- 1 | package fr.adrien1106.reframed.util.mixin; 2 | 3 | import fr.adrien1106.reframed.util.blocks.ThemeableBlockEntity; 4 | import net.minecraft.block.BlockState; 5 | import net.minecraft.block.Blocks; 6 | import net.minecraft.block.entity.BlockEntity; 7 | import net.minecraft.nbt.NbtCompound; 8 | import net.minecraft.nbt.NbtHelper; 9 | import net.minecraft.registry.Registries; 10 | import net.minecraft.util.math.BlockPos; 11 | 12 | import java.util.ArrayList; 13 | import java.util.List; 14 | 15 | import static fr.adrien1106.reframed.block.ReFramedEntity.BLOCKSTATE_KEY; 16 | 17 | public class ThemedBlockEntity extends BlockEntity implements ThemeableBlockEntity { 18 | private final List themes; 19 | 20 | public ThemedBlockEntity(NbtCompound compound, BlockPos pos, BlockState state) { 21 | super(null, pos, state); 22 | themes = new ArrayList<>(); 23 | for (int i = 1; compound.contains(BLOCKSTATE_KEY + i ); i++) { 24 | themes.add(NbtHelper.toBlockState( 25 | Registries.BLOCK.getReadOnlyWrapper(), 26 | compound.getCompound(BLOCKSTATE_KEY + i) 27 | )); 28 | } 29 | } 30 | 31 | @Override 32 | public BlockState getTheme(int i) { 33 | if (i > themes.size()) 34 | return Blocks.AIR.getDefaultState(); 35 | return themes.get(Math.max(0, i-1)); 36 | } 37 | 38 | @Override 39 | public void setTheme(BlockState state, int i) { 40 | if (i > themes.size()) 41 | themes.add(state); 42 | else 43 | themes.set(Math.max(0, i-1), state); 44 | } 45 | 46 | @Override 47 | public List getThemes() { 48 | return themes; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/main/resources/assets/minecraft/atlases/blocks.json: -------------------------------------------------------------------------------- 1 | { 2 | "sources": [ 3 | { 4 | "type": "directory", 5 | "source": "reframed_special", 6 | "prefix": "reframed_special/" 7 | } 8 | ] 9 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DriHut/ReFramed/e592db1ea2ada2cede7911cd7e45bf6f61ac9e91/src/main/resources/assets/reframed-icon.png -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/door.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [14, 0, 0], 10 | "to": [16, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 0, 2, 16], "texture": "#side", "cullface": "north"}, 14 | "east": {"uv": [0, 0, 16, 16], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [14, 0, 16, 16], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [0, 0, 16, 16], "texture": "#side"}, 17 | "down": {"uv": [14, 0, 16, 16], "texture": "#bottom", "cullface": "down"} 18 | } 19 | }, 20 | { 21 | "from": [14, 16, 0], 22 | "to": [16, 32, 16], 23 | "rotation": {"angle": 0, "axis": "y", "origin": [7, 16, 0]}, 24 | "faces": { 25 | "north": {"uv": [0, 0, 2, 0], "texture": "#side", "cullface": "north"}, 26 | "east": {"uv": [0, 0, 16, 16], "texture": "#side", "cullface": "east"}, 27 | "south": {"uv": [14, 0, 16, 0], "texture": "#side", "cullface": "south"}, 28 | "west": {"uv": [0, 0, 16, 16], "texture": "#side"}, 29 | "up": {"uv": [14, 0, 16, 16], "texture": "#top", "cullface": "up"} 30 | } 31 | } 32 | ], 33 | "display": {} 34 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/fence/core.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [7, 0, 7], 10 | "to": [9, 16, 9], 11 | "faces": { 12 | "up": {"uv": [7, 7, 9, 9], "texture": "#top", "cullface": "up"}, 13 | "down": {"uv": [7, 7, 9, 9], "texture": "#bottom", "cullface": "down"} 14 | } 15 | } 16 | ] 17 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/fence/full/side_bars.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [7, 12, 0], 10 | "to": [9, 15, 6], 11 | "faces": { 12 | "north": {"uv": [7, 1, 9, 4], "texture": "#side", "cullface": "north"}, 13 | "east": {"uv": [10, 1, 16, 4], "texture": "#side"}, 14 | "south": {"uv": [7, 1, 9, 4], "texture": "#side"}, 15 | "west": {"uv": [0, 1, 6, 4], "texture": "#side"}, 16 | "up": {"uv": [7, 0, 9, 6], "texture": "#top"}, 17 | "down": {"uv": [7, 10, 9, 16], "texture": "#bottom"} 18 | } 19 | }, 20 | { 21 | "from": [7, 6, 0], 22 | "to": [9, 9, 6], 23 | "rotation": {"angle": 0, "axis": "y", "origin": [0, -5, -10]}, 24 | "faces": { 25 | "north": {"uv": [7, 7, 9, 10], "texture": "#side", "cullface": "north"}, 26 | "east": {"uv": [10, 7, 16, 10], "texture": "#side"}, 27 | "south": {"uv": [7, 7, 9, 10], "texture": "#side"}, 28 | "west": {"uv": [0, 7, 6, 10], "texture": "#side"}, 29 | "up": {"uv": [7, 0, 9, 6], "texture": "#top"}, 30 | "down": {"uv": [7, 10, 9, 16], "texture": "#bottom"} 31 | } 32 | } 33 | ] 34 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/fence/side_off.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [6, 0, 6], 10 | "to": [9, 16, 7], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [-1, 0, -1]}, 12 | "faces": { 13 | "north": {"uv": [7, 0, 10, 16], "texture": "#side"}, 14 | "west": {"uv": [6, 0, 7, 16], "texture": "#side"}, 15 | "up": {"uv": [6, 6, 9, 7], "texture": "#top", "cullface": "up"}, 16 | "down": {"uv": [6, 9, 9, 10], "texture": "#bottom", "cullface": "down"} 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_layer/east/layer_10.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [8, 0, 0], 10 | "to": [16, 10, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 6, 8, 16], "texture": "#side", "cullface": "north"}, 14 | "east": {"uv": [0, 6, 16, 16], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [8, 6, 16, 16], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [0, 6, 16, 16], "texture": "#side"}, 17 | "up": {"uv": [8, 0, 16, 16], "texture": "#top"}, 18 | "down": {"uv": [8, 0, 16, 16], "texture": "#bottom", "cullface": "down"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_layer/east/layer_12.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [8, 0, 0], 10 | "to": [16, 12, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 4, 8, 16], "texture": "#side", "cullface": "north"}, 14 | "east": {"uv": [0, 4, 16, 16], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [8, 4, 16, 16], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [0, 4, 16, 16], "texture": "#side"}, 17 | "up": {"uv": [8, 0, 16, 16], "texture": "#top"}, 18 | "down": {"uv": [8, 0, 16, 16], "texture": "#bottom", "cullface": "down"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_layer/east/layer_14.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [8, 0, 0], 10 | "to": [16, 14, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 2, 8, 16], "texture": "#side", "cullface": "north"}, 14 | "east": {"uv": [0, 2, 16, 16], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [8, 2, 16, 16], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [0, 2, 16, 16], "texture": "#side"}, 17 | "up": {"uv": [8, 0, 16, 16], "texture": "#top"}, 18 | "down": {"uv": [8, 0, 16, 16], "texture": "#bottom", "cullface": "down"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_layer/east/layer_16.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [8, 0, 0], 10 | "to": [16, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 0, 8, 16], "texture": "#side", "cullface": "north"}, 14 | "east": {"uv": [0, 0, 16, 16], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [8, 0, 16, 16], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [0, 0, 16, 16], "texture": "#side"}, 17 | "up": {"uv": [8, 0, 16, 16], "texture": "#top", "cullface": "up"}, 18 | "down": {"uv": [8, 0, 16, 16], "texture": "#bottom", "cullface": "down"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_layer/east/layer_2.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [8, 0, 0], 10 | "to": [16, 2, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 14, 8, 16], "texture": "#side", "cullface": "north"}, 14 | "east": {"uv": [0, 14, 16, 16], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [8, 14, 16, 16], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [0, 14, 16, 16], "texture": "#side"}, 17 | "up": {"uv": [8, 0, 16, 16], "texture": "#top"}, 18 | "down": {"uv": [8, 0, 16, 16], "texture": "#bottom", "cullface": "down"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_layer/east/layer_4.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [8, 0, 0], 10 | "to": [16, 4, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 12, 8, 16], "texture": "#side", "cullface": "north"}, 14 | "east": {"uv": [0, 12, 16, 16], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [8, 12, 16, 16], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [0, 12, 16, 16], "texture": "#side"}, 17 | "up": {"uv": [8, 0, 16, 16], "texture": "#top"}, 18 | "down": {"uv": [8, 0, 16, 16], "texture": "#bottom", "cullface": "down"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_layer/east/layer_6.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [8, 0, 0], 10 | "to": [16, 6, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 10, 8, 16], "texture": "#side", "cullface": "north"}, 14 | "east": {"uv": [0, 10, 16, 16], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [8, 10, 16, 16], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [0, 10, 16, 16], "texture": "#side"}, 17 | "up": {"uv": [8, 0, 16, 16], "texture": "#top"}, 18 | "down": {"uv": [8, 0, 16, 16], "texture": "#bottom", "cullface": "down"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_layer/east/layer_8.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [8, 0, 0], 10 | "to": [16, 8, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "north"}, 14 | "east": {"uv": [0, 8, 16, 16], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [0, 8, 16, 16], "texture": "#side"}, 17 | "up": {"uv": [8, 0, 16, 16], "texture": "#top"}, 18 | "down": {"uv": [8, 0, 16, 16], "texture": "#bottom", "cullface": "down"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_layer/side/layer_10.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [6, 0, 8], 10 | "to": [16, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 0, 10, 16], "texture": "#side"}, 14 | "east": {"uv": [0, 0, 8, 16], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [6, 0, 16, 16], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [8, 0, 16, 16], "texture": "#side"}, 17 | "up": {"uv": [6, 8, 16, 16], "texture": "#top", "cullface": "up"}, 18 | "down": {"uv": [6, 0, 16, 8], "texture": "#bottom", "cullface": "down"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_layer/side/layer_12.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [4, 0, 8], 10 | "to": [16, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 0, 12, 16], "texture": "#side"}, 14 | "east": {"uv": [0, 0, 8, 16], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [4, 0, 16, 16], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [8, 0, 16, 16], "texture": "#side"}, 17 | "up": {"uv": [4, 8, 16, 16], "texture": "#top", "cullface": "up"}, 18 | "down": {"uv": [4, 0, 16, 8], "texture": "#bottom", "cullface": "down"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_layer/side/layer_14.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [2, 0, 8], 10 | "to": [16, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 0, 14, 16], "texture": "#side"}, 14 | "east": {"uv": [0, 0, 8, 16], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [2, 0, 16, 16], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [8, 0, 16, 16], "texture": "#side"}, 17 | "up": {"uv": [2, 8, 16, 16], "texture": "#top", "cullface": "up"}, 18 | "down": {"uv": [2, 0, 16, 8], "texture": "#bottom", "cullface": "down"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_layer/side/layer_16.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [0, 0, 8], 10 | "to": [16, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 0, 16, 16], "texture": "#side"}, 14 | "east": {"uv": [0, 0, 8, 16], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [0, 0, 16, 16], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [8, 0, 16, 16], "texture": "#side", "cullface": "west"}, 17 | "up": {"uv": [0, 8, 16, 16], "texture": "#top", "cullface": "up"}, 18 | "down": {"uv": [0, 0, 16, 8], "texture": "#bottom", "cullface": "down"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_layer/side/layer_2.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [14, 0, 8], 10 | "to": [16, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 0, 2, 16], "texture": "#side"}, 14 | "east": {"uv": [0, 0, 8, 16], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [14, 0, 16, 16], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [8, 0, 16, 16], "texture": "#side"}, 17 | "up": {"uv": [14, 8, 16, 16], "texture": "#top", "cullface": "up"}, 18 | "down": {"uv": [14, 0, 16, 8], "texture": "#bottom", "cullface": "down"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_layer/side/layer_4.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [12, 0, 8], 10 | "to": [16, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 0, 4, 16], "texture": "#side"}, 14 | "east": {"uv": [0, 0, 8, 16], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [12, 0, 16, 16], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [8, 0, 16, 16], "texture": "#side"}, 17 | "up": {"uv": [12, 8, 16, 16], "texture": "#top", "cullface": "up"}, 18 | "down": {"uv": [12, 0, 16, 8], "texture": "#bottom", "cullface": "down"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_layer/side/layer_6.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [10, 0, 8], 10 | "to": [16, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 0, 6, 16], "texture": "#side"}, 14 | "east": {"uv": [0, 0, 8, 16], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [10, 0, 16, 16], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [8, 0, 16, 16], "texture": "#side"}, 17 | "up": {"uv": [10, 8, 16, 16], "texture": "#top", "cullface": "up"}, 18 | "down": {"uv": [10, 0, 16, 8], "texture": "#bottom", "cullface": "down"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_layer/side/layer_8.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [8, 0, 8], 10 | "to": [16, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 0, 8, 16], "texture": "#side"}, 14 | "east": {"uv": [0, 0, 8, 16], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [8, 0, 16, 16], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [8, 0, 16, 16], "texture": "#side"}, 17 | "up": {"uv": [8, 8, 16, 16], "texture": "#top", "cullface": "up"}, 18 | "down": {"uv": [8, 0, 16, 8], "texture": "#bottom", "cullface": "down"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_layer/slab/east/layer_10.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [6, 8, 0], 10 | "to": [16, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 16, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 0, 10, 8], "texture": "#side", "cullface": "north"}, 14 | "east": {"uv": [0, 0, 16, 8], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [6, 0, 16, 8], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [0, 0, 16, 8], "texture": "#side"}, 17 | "up": {"uv": [6, 0, 16, 16], "texture": "#top", "cullface": "up"}, 18 | "down": {"uv": [6, 0, 16, 16], "texture": "#bottom"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_layer/slab/east/layer_12.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [4, 8, 0], 10 | "to": [16, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 16, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 0, 12, 8], "texture": "#side", "cullface": "north"}, 14 | "east": {"uv": [0, 0, 16, 8], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [4, 0, 16, 8], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [0, 0, 16, 8], "texture": "#side"}, 17 | "up": {"uv": [4, 0, 16, 16], "texture": "#top", "cullface": "up"}, 18 | "down": {"uv": [4, 0, 16, 16], "texture": "#bottom"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_layer/slab/east/layer_14.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [2, 8, 0], 10 | "to": [16, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 16, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 0, 14, 8], "texture": "#side", "cullface": "north"}, 14 | "east": {"uv": [0, 0, 16, 8], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [2, 0, 16, 8], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [0, 0, 16, 8], "texture": "#side"}, 17 | "up": {"uv": [2, 0, 16, 16], "texture": "#top", "cullface": "up"}, 18 | "down": {"uv": [2, 0, 16, 16], "texture": "#bottom"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_layer/slab/east/layer_16.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [0, 8, 0], 10 | "to": [16, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 16, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 0, 16, 8], "texture": "#side", "cullface": "north"}, 14 | "east": {"uv": [0, 0, 16, 8], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [0, 0, 16, 8], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [0, 0, 16, 8], "texture": "#side", "cullface": "west"}, 17 | "up": {"uv": [0, 0, 16, 16], "texture": "#top", "cullface": "up"}, 18 | "down": {"uv": [0, 0, 16, 16], "texture": "#bottom"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_layer/slab/east/layer_2.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [14, 8, 0], 10 | "to": [16, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 16, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 0, 2, 8], "texture": "#side", "cullface": "north"}, 14 | "east": {"uv": [0, 0, 16, 8], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [14, 0, 16, 8], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [0, 0, 16, 8], "texture": "#side"}, 17 | "up": {"uv": [14, 0, 16, 16], "texture": "#top", "cullface": "up"}, 18 | "down": {"uv": [14, 0, 16, 16], "texture": "#bottom"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_layer/slab/east/layer_4.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [12, 8, 0], 10 | "to": [16, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 16, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 0, 4, 8], "texture": "#side", "cullface": "north"}, 14 | "east": {"uv": [0, 0, 16, 8], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [12, 0, 16, 8], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [0, 0, 16, 8], "texture": "#side"}, 17 | "up": {"uv": [12, 0, 16, 16], "texture": "#top", "cullface": "up"}, 18 | "down": {"uv": [12, 0, 16, 16], "texture": "#bottom"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_layer/slab/east/layer_6.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [10, 8, 0], 10 | "to": [16, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 16, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 0, 6, 8], "texture": "#side", "cullface": "north"}, 14 | "east": {"uv": [0, 0, 16, 8], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [10, 0, 16, 8], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [0, 0, 16, 8], "texture": "#side"}, 17 | "up": {"uv": [10, 0, 16, 16], "texture": "#top", "cullface": "up"}, 18 | "down": {"uv": [10, 0, 16, 16], "texture": "#bottom"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_layer/slab/east/layer_8.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [8, 8, 0], 10 | "to": [16, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 16, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "north"}, 14 | "east": {"uv": [0, 0, 16, 8], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [0, 0, 16, 8], "texture": "#side"}, 17 | "up": {"uv": [8, 0, 16, 16], "texture": "#top", "cullface": "up"}, 18 | "down": {"uv": [8, 0, 16, 16], "texture": "#bottom"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_layer/slab/side/layer_10.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [0, 0, 6], 10 | "to": [8, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [-8, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [8, 0, 16, 16], "texture": "#side"}, 14 | "east": {"uv": [0, 0, 10, 16], "texture": "#side"}, 15 | "south": {"uv": [0, 0, 8, 16], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [6, 0, 16, 16], "texture": "#side", "cullface": "east"}, 17 | "up": {"uv": [0, 6, 8, 16], "texture": "#top", "cullface": "up"}, 18 | "down": {"uv": [0, 0, 8, 10], "texture": "#bottom", "cullface": "down"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_layer/slab/side/layer_12.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [0, 0, 4], 10 | "to": [8, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [-8, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [8, 0, 16, 16], "texture": "#side"}, 14 | "east": {"uv": [0, 0, 12, 16], "texture": "#side"}, 15 | "south": {"uv": [0, 0, 8, 16], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [4, 0, 16, 16], "texture": "#side", "cullface": "east"}, 17 | "up": {"uv": [0, 4, 8, 16], "texture": "#top", "cullface": "up"}, 18 | "down": {"uv": [0, 0, 8, 12], "texture": "#bottom", "cullface": "down"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_layer/slab/side/layer_14.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [0, 0, 2], 10 | "to": [8, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [-8, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [8, 0, 16, 16], "texture": "#side"}, 14 | "east": {"uv": [0, 0, 14, 16], "texture": "#side"}, 15 | "south": {"uv": [0, 0, 8, 16], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [2, 0, 16, 16], "texture": "#side", "cullface": "east"}, 17 | "up": {"uv": [0, 2, 8, 16], "texture": "#top", "cullface": "up"}, 18 | "down": {"uv": [0, 0, 8, 14], "texture": "#bottom", "cullface": "down"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_layer/slab/side/layer_16.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [0, 0, 0], 10 | "to": [8, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [-8, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [8, 0, 16, 16], "texture": "#side", "cullface": "north"}, 14 | "east": {"uv": [0, 0, 16, 16], "texture": "#side"}, 15 | "south": {"uv": [0, 0, 8, 16], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [0, 0, 16, 16], "texture": "#side", "cullface": "east"}, 17 | "up": {"uv": [0, 0, 8, 16], "texture": "#top", "cullface": "up"}, 18 | "down": {"uv": [0, 0, 8, 16], "texture": "#bottom", "cullface": "down"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_layer/slab/side/layer_2.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [0, 0, 14], 10 | "to": [8, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [-8, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [8, 0, 16, 16], "texture": "#side"}, 14 | "east": {"uv": [0, 0, 2, 16], "texture": "#side"}, 15 | "south": {"uv": [0, 0, 8, 16], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [14, 0, 16, 16], "texture": "#side", "cullface": "east"}, 17 | "up": {"uv": [0, 14, 8, 16], "texture": "#top", "cullface": "up"}, 18 | "down": {"uv": [0, 0, 8, 2], "texture": "#bottom", "cullface": "down"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_layer/slab/side/layer_4.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [0, 0, 12], 10 | "to": [8, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [-8, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [8, 0, 16, 16], "texture": "#side"}, 14 | "east": {"uv": [0, 0, 4, 16], "texture": "#side"}, 15 | "south": {"uv": [0, 0, 8, 16], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [12, 0, 16, 16], "texture": "#side", "cullface": "east"}, 17 | "up": {"uv": [0, 12, 8, 16], "texture": "#top", "cullface": "up"}, 18 | "down": {"uv": [0, 0, 8, 4], "texture": "#bottom", "cullface": "down"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_layer/slab/side/layer_6.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [0, 0, 10], 10 | "to": [8, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [-8, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [8, 0, 16, 16], "texture": "#side"}, 14 | "east": {"uv": [0, 0, 6, 16], "texture": "#side"}, 15 | "south": {"uv": [0, 0, 8, 16], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [10, 0, 16, 16], "texture": "#side", "cullface": "east"}, 17 | "up": {"uv": [0, 10, 8, 16], "texture": "#top", "cullface": "up"}, 18 | "down": {"uv": [0, 0, 8, 6], "texture": "#bottom", "cullface": "down"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_layer/slab/side/layer_8.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [0, 0, 8], 10 | "to": [8, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [-8, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [8, 0, 16, 16], "texture": "#side"}, 14 | "east": {"uv": [0, 0, 8, 16], "texture": "#side"}, 15 | "south": {"uv": [0, 0, 8, 16], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [8, 0, 16, 16], "texture": "#side", "cullface": "east"}, 17 | "up": {"uv": [0, 8, 8, 16], "texture": "#top", "cullface": "up"}, 18 | "down": {"uv": [0, 0, 8, 8], "texture": "#bottom", "cullface": "down"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_slab/complement.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [0, 4, 0], 10 | "to": [16, 8, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 12, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 8, 16, 12], "texture": "#side", "cullface": "north"}, 14 | "east": {"uv": [0, 8, 16, 12], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [0, 8, 16, 12], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [0, 8, 16, 12], "texture": "#side", "cullface": "west"}, 17 | "up": {"uv": [0, 0, 16, 16], "texture": "#top"}, 18 | "down": {"uv": [0, 0, 16, 16], "texture": "#bottom"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_slab/default.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [0, 0, 0], 10 | "to": [16, 4, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 12, 16, 16], "texture": "#side", "cullface": "north"}, 14 | "east": {"uv": [0, 12, 16, 16], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [0, 12, 16, 16], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [0, 12, 16, 16], "texture": "#side", "cullface": "west"}, 17 | "up": {"uv": [0, 0, 16, 16], "texture": "#top"}, 18 | "down": {"uv": [0, 0, 16, 16], "texture": "#bottom", "cullface": "down"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_stair/base.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [8, 0, 8], 10 | "to": [16, 8, 16], 11 | "faces": { 12 | "east": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "east"}, 13 | "south": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "south"}, 14 | "up": {"uv": [8, 8, 16, 16], "texture": "#top"}, 15 | "down": {"uv": [8, 0, 16, 8], "texture": "#bottom", "cullface": "down"} 16 | } 17 | }, 18 | { 19 | "from": [8, 0, 0], 20 | "to": [16, 8, 8], 21 | "faces": { 22 | "north": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "north"}, 23 | "east": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "east"}, 24 | "west": {"uv": [0, 8, 8, 16], "texture": "#side"}, 25 | "up": {"uv": [8, 0, 16, 8], "texture": "#top"}, 26 | "down": {"uv": [8, 8, 16, 16], "texture": "#bottom", "cullface": "down"} 27 | } 28 | }, 29 | { 30 | "from": [0, 0, 8], 31 | "to": [8, 8, 16], 32 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 0, 8]}, 33 | "faces": { 34 | "north": {"uv": [8, 8, 16, 16], "texture": "#side"}, 35 | "south": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "south"}, 36 | "west": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "west"}, 37 | "up": {"uv": [0, 8, 8, 16], "texture": "#top"}, 38 | "down": {"uv": [0, 0, 8, 8], "texture": "#bottom", "cullface": "down"} 39 | } 40 | } 41 | ], 42 | "display": { 43 | "thirdperson_lefthand": { 44 | "rotation": [75, -135, 0], 45 | "translation": [0, 2.5, 0], 46 | "scale": [0.375, 0.375, 0.375] 47 | }, 48 | "gui": { 49 | "rotation": [30, 135, 0], 50 | "scale": [0.625, 0.625, 0.625] 51 | }, 52 | "head": { 53 | "rotation": [0, -90, 0] 54 | } 55 | } 56 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_stair/down.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [8, 0, 8], 10 | "to": [16, 8, 16], 11 | "faces": { 12 | "east": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "east"}, 13 | "south": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "south"}, 14 | "west": {"uv": [8, 8, 16, 16], "texture": "#side"}, 15 | "up": {"uv": [8, 8, 16, 16], "texture": "#top"}, 16 | "down": {"uv": [8, 0, 16, 8], "texture": "#bottom", "cullface": "down"} 17 | } 18 | }, 19 | { 20 | "from": [8, 0, 0], 21 | "to": [16, 8, 8], 22 | "faces": { 23 | "north": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "north"}, 24 | "east": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "east"}, 25 | "up": {"uv": [8, 0, 16, 8], "texture": "#top"}, 26 | "down": {"uv": [8, 8, 16, 16], "texture": "#bottom", "cullface": "down"} 27 | } 28 | }, 29 | { 30 | "from": [0, 0, 0], 31 | "to": [8, 8, 8], 32 | "faces": { 33 | "north": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "north"}, 34 | "south": {"uv": [0, 8, 8, 16], "texture": "#side"}, 35 | "west": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "west"}, 36 | "up": {"uv": [0, 0, 8, 8], "texture": "#top"}, 37 | "down": {"uv": [0, 8, 8, 16], "texture": "#bottom", "cullface": "down"} 38 | } 39 | } 40 | ], 41 | "display": { 42 | "thirdperson_lefthand": { 43 | "rotation": [75, -135, 0], 44 | "translation": [0, 2.5, 0], 45 | "scale": [0.375, 0.375, 0.375] 46 | }, 47 | "gui": { 48 | "rotation": [30, 135, 0], 49 | "scale": [0.625, 0.625, 0.625] 50 | }, 51 | "head": { 52 | "rotation": [0, -90, 0] 53 | } 54 | } 55 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_stair/side.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [8, 8, 0], 10 | "to": [16, 16, 8], 11 | "faces": { 12 | "north": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "north"}, 13 | "east": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "east"}, 14 | "south": {"uv": [8, 0, 16, 8], "texture": "#side"}, 15 | "west": {"uv": [0, 0, 8, 8], "texture": "#side"}, 16 | "up": {"uv": [8, 0, 16, 8], "texture": "#top", "cullface": "up"} 17 | } 18 | }, 19 | { 20 | "from": [8, 0, 0], 21 | "to": [16, 8, 8], 22 | "faces": { 23 | "north": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "north"}, 24 | "east": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "east"}, 25 | "west": {"uv": [0, 8, 8, 16], "texture": "#side"}, 26 | "down": {"uv": [8, 8, 16, 16], "texture": "#bottom", "cullface": "down"} 27 | } 28 | }, 29 | { 30 | "from": [8, 0, 8], 31 | "to": [16, 8, 16], 32 | "faces": { 33 | "east": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "east"}, 34 | "south": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "south"}, 35 | "west": {"uv": [8, 8, 16, 16], "texture": "#side"}, 36 | "up": {"uv": [8, 8, 16, 16], "texture": "#top"}, 37 | "down": {"uv": [8, 0, 16, 8], "texture": "#bottom", "cullface": "down"} 38 | } 39 | } 40 | ], 41 | "display": { 42 | "thirdperson_lefthand": { 43 | "rotation": [75, -135, 0], 44 | "translation": [0, 2.5, 0], 45 | "scale": [0.375, 0.375, 0.375] 46 | }, 47 | "gui": { 48 | "rotation": [30, 135, 0], 49 | "scale": [0.625, 0.625, 0.625] 50 | }, 51 | "head": { 52 | "rotation": [0, -90, 0] 53 | } 54 | } 55 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_stair/slab/down.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [0, 0, 8], 10 | "to": [8, 8, 16], 11 | "faces": { 12 | "north": {"uv": [8, 8, 16, 16], "texture": "#side"}, 13 | "east": {"uv": [0, 8, 8, 16], "texture": "#side"}, 14 | "south": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "south"}, 15 | "west": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "west"}, 16 | "up": {"uv": [0, 8, 8, 16], "texture": "#top"}, 17 | "down": {"uv": [0, 0, 8, 8], "texture": "#bottom", "cullface": "down"} 18 | } 19 | } 20 | ], 21 | "display": { 22 | "thirdperson_lefthand": { 23 | "rotation": [75, -135, 0], 24 | "translation": [0, 2.5, 0], 25 | "scale": [0.375, 0.375, 0.375] 26 | }, 27 | "gui": { 28 | "rotation": [30, 135, 0], 29 | "scale": [0.625, 0.625, 0.625] 30 | }, 31 | "head": { 32 | "rotation": [0, -90, 0] 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_stair/slab/side.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [8, 8, 8], 10 | "to": [16, 16, 16], 11 | "faces": { 12 | "north": {"uv": [0, 0, 8, 8], "texture": "#side"}, 13 | "east": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "east"}, 14 | "south": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "south"}, 15 | "west": {"uv": [8, 0, 16, 8], "texture": "#side"}, 16 | "up": {"uv": [8, 8, 16, 16], "texture": "#top", "cullface": "up"}, 17 | "down": {"uv": [8, 0, 16, 8], "texture": "#bottom"} 18 | } 19 | } 20 | ], 21 | "display": { 22 | "thirdperson_lefthand": { 23 | "rotation": [75, -135, 0], 24 | "translation": [0, 2.5, 0], 25 | "scale": [0.375, 0.375, 0.375] 26 | }, 27 | "gui": { 28 | "rotation": [30, 135, 0], 29 | "scale": [0.625, 0.625, 0.625] 30 | }, 31 | "head": { 32 | "rotation": [0, -90, 0] 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_stair/stair/cube.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [8, 8, 8], 10 | "to": [16, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 0, 8, 8], "texture": "#side"}, 14 | "east": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [8, 0, 16, 8], "texture": "#side"}, 17 | "up": {"uv": [8, 8, 16, 16], "texture": "#top", "cullface": "up"}, 18 | "down": {"uv": [8, 0, 16, 8], "texture": "#bottom"} 19 | } 20 | } 21 | ], 22 | "display": { 23 | "thirdperson_lefthand": { 24 | "rotation": [75, -135, 0], 25 | "translation": [0, 2.5, 0], 26 | "scale": [0.375, 0.375, 0.375] 27 | }, 28 | "gui": { 29 | "rotation": [30, 135, 0], 30 | "scale": [0.625, 0.625, 0.625] 31 | }, 32 | "head": { 33 | "rotation": [0, -90, 0] 34 | } 35 | } 36 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_stair/stair/cube_side.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [0, 0, 8], 10 | "to": [8, 8, 16], 11 | "faces": { 12 | "north": {"uv": [8, 8, 16, 16], "texture": "#side"}, 13 | "east": {"uv": [0, 8, 8, 16], "texture": "#side"}, 14 | "south": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "south"}, 15 | "west": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "west"}, 16 | "up": {"uv": [0, 8, 8, 16], "texture": "#top"}, 17 | "down": {"uv": [0, 0, 8, 8], "texture": "#bottom", "cullface": "down"} 18 | } 19 | } 20 | ], 21 | "display": { 22 | "thirdperson_lefthand": { 23 | "rotation": [75, -135, 0], 24 | "translation": [0, 2.5, 0], 25 | "scale": [0.375, 0.375, 0.375] 26 | }, 27 | "gui": { 28 | "rotation": [30, 135, 0], 29 | "scale": [0.625, 0.625, 0.625] 30 | }, 31 | "head": { 32 | "rotation": [0, -90, 0] 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_stair/stair/down.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [8, 8, 8], 10 | "to": [16, 16, 16], 11 | "faces": { 12 | "east": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "east"}, 13 | "south": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "south"}, 14 | "west": {"uv": [8, 0, 16, 8], "texture": "#side"}, 15 | "up": {"uv": [8, 8, 16, 16], "texture": "#top", "cullface": "up"}, 16 | "down": {"uv": [8, 0, 16, 8], "texture": "#bottom"} 17 | } 18 | }, 19 | { 20 | "from": [8, 8, 0], 21 | "to": [16, 16, 8], 22 | "faces": { 23 | "north": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "north"}, 24 | "east": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "east"}, 25 | "up": {"uv": [8, 0, 16, 8], "texture": "#top", "cullface": "up"}, 26 | "down": {"uv": [8, 8, 16, 16], "texture": "#bottom"} 27 | } 28 | }, 29 | { 30 | "from": [0, 8, 0], 31 | "to": [8, 16, 8], 32 | "faces": { 33 | "north": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "north"}, 34 | "south": {"uv": [0, 0, 8, 8], "texture": "#side"}, 35 | "west": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "west"}, 36 | "up": {"uv": [0, 0, 8, 8], "texture": "#top", "cullface": "up"}, 37 | "down": {"uv": [0, 8, 8, 16], "texture": "#bottom"} 38 | } 39 | } 40 | ], 41 | "display": { 42 | "thirdperson_lefthand": { 43 | "rotation": [75, -135, 0], 44 | "translation": [0, 2.5, 0], 45 | "scale": [0.375, 0.375, 0.375] 46 | }, 47 | "gui": { 48 | "rotation": [30, 135, 0], 49 | "scale": [0.625, 0.625, 0.625] 50 | }, 51 | "head": { 52 | "rotation": [0, -90, 0] 53 | } 54 | } 55 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_stair/stair/side.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [0, 8, 0], 10 | "to": [8, 16, 8], 11 | "faces": { 12 | "north": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "north"}, 13 | "east": {"uv": [8, 0, 16, 8], "texture": "#side"}, 14 | "south": {"uv": [0, 0, 8, 8], "texture": "#side"}, 15 | "west": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "west"}, 16 | "up": {"uv": [0, 0, 8, 8], "texture": "#top", "cullface": "up"} 17 | } 18 | }, 19 | { 20 | "from": [0, 0, 0], 21 | "to": [8, 8, 8], 22 | "faces": { 23 | "north": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "north"}, 24 | "east": {"uv": [8, 8, 16, 16], "texture": "#side"}, 25 | "west": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "west"}, 26 | "down": {"uv": [0, 8, 8, 16], "texture": "#bottom", "cullface": "down"} 27 | } 28 | }, 29 | { 30 | "from": [0, 0, 8], 31 | "to": [8, 8, 16], 32 | "faces": { 33 | "east": {"uv": [0, 8, 8, 16], "texture": "#side"}, 34 | "south": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "south"}, 35 | "west": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "west"}, 36 | "up": {"uv": [0, 8, 8, 16], "texture": "#top"}, 37 | "down": {"uv": [0, 0, 8, 8], "texture": "#bottom", "cullface": "down"} 38 | } 39 | } 40 | ], 41 | "display": { 42 | "thirdperson_lefthand": { 43 | "rotation": [75, -135, 0], 44 | "translation": [0, 2.5, 0], 45 | "scale": [0.375, 0.375, 0.375] 46 | }, 47 | "gui": { 48 | "rotation": [30, 135, 0], 49 | "scale": [0.625, 0.625, 0.625] 50 | }, 51 | "head": { 52 | "rotation": [0, -90, 0] 53 | } 54 | } 55 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_stair/stair/step_1.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [8, 8, 8], 10 | "to": [16, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 0]}, 12 | "faces": { 13 | "east": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "east"}, 14 | "south": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "south"}, 15 | "west": {"uv": [8, 0, 16, 8], "texture": "#side"}, 16 | "up": {"uv": [8, 8, 16, 16], "texture": "#top", "cullface": "up"}, 17 | "down": {"uv": [8, 0, 16, 8], "texture": "#bottom"} 18 | } 19 | }, 20 | { 21 | "from": [8, 8, 0], 22 | "to": [16, 16, 8], 23 | "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 0]}, 24 | "faces": { 25 | "north": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "north"}, 26 | "east": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "east"}, 27 | "west": {"uv": [0, 0, 8, 8], "texture": "#side"}, 28 | "up": {"uv": [8, 0, 16, 8], "texture": "#top", "cullface": "up"}, 29 | "down": {"uv": [8, 8, 16, 16], "texture": "#bottom"} 30 | } 31 | } 32 | ], 33 | "display": { 34 | "thirdperson_lefthand": { 35 | "rotation": [75, -135, 0], 36 | "translation": [0, 2.5, 0], 37 | "scale": [0.375, 0.375, 0.375] 38 | }, 39 | "gui": { 40 | "rotation": [30, 135, 0], 41 | "scale": [0.625, 0.625, 0.625] 42 | }, 43 | "head": { 44 | "rotation": [0, -90, 0] 45 | } 46 | } 47 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_stair/stair/step_2.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [8, 8, 8], 10 | "to": [16, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 0, 8, 8], "texture": "#side"}, 14 | "east": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "south"}, 16 | "up": {"uv": [8, 8, 16, 16], "texture": "#top", "cullface": "up"}, 17 | "down": {"uv": [8, 0, 16, 8], "texture": "#bottom"} 18 | } 19 | }, 20 | { 21 | "from": [0, 8, 8], 22 | "to": [8, 16, 16], 23 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 8]}, 24 | "faces": { 25 | "north": {"uv": [8, 0, 16, 8], "texture": "#side"}, 26 | "south": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "south"}, 27 | "west": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "west"}, 28 | "up": {"uv": [0, 8, 8, 16], "texture": "#top", "cullface": "up"}, 29 | "down": {"uv": [0, 0, 8, 8], "texture": "#bottom"} 30 | } 31 | } 32 | ], 33 | "display": { 34 | "thirdperson_lefthand": { 35 | "rotation": [75, -135, 0], 36 | "translation": [0, 2.5, 0], 37 | "scale": [0.375, 0.375, 0.375] 38 | }, 39 | "gui": { 40 | "rotation": [30, 135, 0], 41 | "scale": [0.625, 0.625, 0.625] 42 | }, 43 | "head": { 44 | "rotation": [0, -90, 0] 45 | } 46 | } 47 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_stair/stair/step_side_1.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [0, 0, 8], 10 | "to": [8, 8, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [-8, 0, 0]}, 12 | "faces": { 13 | "north": {"uv": [8, 8, 16, 16], "texture": "#side"}, 14 | "east": {"uv": [0, 8, 8, 16], "texture": "#side"}, 15 | "south": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "west"}, 17 | "down": {"uv": [0, 0, 8, 8], "texture": "#bottom", "cullface": "down"} 18 | } 19 | }, 20 | { 21 | "from": [0, 8, 8], 22 | "to": [8, 16, 16], 23 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 8]}, 24 | "faces": { 25 | "north": {"uv": [8, 0, 16, 8], "texture": "#side"}, 26 | "east": {"uv": [0, 0, 8, 8], "texture": "#side"}, 27 | "south": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "south"}, 28 | "west": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "west"}, 29 | "up": {"uv": [0, 8, 8, 16], "texture": "#top", "cullface": "up"} 30 | } 31 | } 32 | ], 33 | "display": { 34 | "thirdperson_lefthand": { 35 | "rotation": [75, -135, 0], 36 | "translation": [0, 2.5, 0], 37 | "scale": [0.375, 0.375, 0.375] 38 | }, 39 | "gui": { 40 | "rotation": [30, 135, 0], 41 | "scale": [0.625, 0.625, 0.625] 42 | }, 43 | "head": { 44 | "rotation": [0, -90, 0] 45 | } 46 | } 47 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/half_stair/stair/step_side_2.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [0, 0, 8], 10 | "to": [8, 8, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [-8, 0, 0]}, 12 | "faces": { 13 | "east": {"uv": [0, 8, 8, 16], "texture": "#side"}, 14 | "south": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "south"}, 15 | "west": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "west"}, 16 | "up": {"uv": [0, 8, 8, 16], "texture": "#top"}, 17 | "down": {"uv": [0, 0, 8, 8], "texture": "#bottom", "cullface": "down"} 18 | } 19 | }, 20 | { 21 | "from": [0, 0, 0], 22 | "to": [8, 8, 8], 23 | "faces": { 24 | "north": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "north"}, 25 | "east": {"uv": [8, 8, 16, 16], "texture": "#side"}, 26 | "west": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "west"}, 27 | "up": {"uv": [0, 0, 8, 8], "texture": "#top"}, 28 | "down": {"uv": [0, 8, 8, 16], "texture": "#bottom", "cullface": "down"} 29 | } 30 | } 31 | ], 32 | "display": { 33 | "thirdperson_lefthand": { 34 | "rotation": [75, -135, 0], 35 | "translation": [0, 2.5, 0], 36 | "scale": [0.375, 0.375, 0.375] 37 | }, 38 | "gui": { 39 | "rotation": [30, 135, 0], 40 | "scale": [0.625, 0.625, 0.625] 41 | }, 42 | "head": { 43 | "rotation": [0, -90, 0] 44 | } 45 | } 46 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/layer_top/layer_2.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [0, 8, 0], 10 | "to": [16, 10, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 6, 16, 8], "texture": "#side", "cullface": "north"}, 14 | "east": {"uv": [0, 6, 16, 8], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [0, 6, 16, 8], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [0, 6, 16, 8], "texture": "#side", "cullface": "west"}, 17 | "up": {"uv": [0, 0, 16, 16], "texture": "#top"}, 18 | "down": {"uv": [0, 0, 16, 16], "texture": "#bottom"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/layer_top/layer_4.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [0, 8, 0], 10 | "to": [16, 12, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 4, 16, 8], "texture": "#side", "cullface": "north"}, 14 | "east": {"uv": [0, 4, 16, 8], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [0, 4, 16, 8], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [0, 4, 16, 8], "texture": "#side", "cullface": "west"}, 17 | "up": {"uv": [0, 0, 16, 16], "texture": "#top"}, 18 | "down": {"uv": [0, 0, 16, 16], "texture": "#bottom"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/layer_top/layer_6.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [0, 8, 0], 10 | "to": [16, 14, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 2, 16, 8], "texture": "#side", "cullface": "north"}, 14 | "east": {"uv": [0, 2, 16, 8], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [0, 2, 16, 8], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [0, 2, 16, 8], "texture": "#side", "cullface": "west"}, 17 | "up": {"uv": [0, 0, 16, 16], "texture": "#top"}, 18 | "down": {"uv": [0, 0, 16, 16], "texture": "#bottom"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/layer_top/layer_8.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [0, 8, 0], 10 | "to": [16, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 0, 16, 8], "texture": "#side", "cullface": "north"}, 14 | "east": {"uv": [0, 0, 16, 8], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [0, 0, 16, 8], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [0, 0, 16, 8], "texture": "#side", "cullface": "west"}, 17 | "up": {"uv": [0, 0, 16, 16], "texture": "#top", "cullface": "up"}, 18 | "down": {"uv": [0, 0, 16, 16], "texture": "#bottom"} 19 | } 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/pane.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [7, 0, 0], 10 | "to": [9, 16, 16], 11 | "faces": { 12 | "north": {"uv": [7, 0, 9, 16], "texture": "#side", "cullface": "north"}, 13 | "east": {"uv": [0, 0, 16, 16], "texture": "#side"}, 14 | "south": {"uv": [7, 0, 9, 16], "texture": "#side", "cullface": "south"}, 15 | "west": {"uv": [0, 0, 16, 16], "texture": "#side"}, 16 | "up": {"uv": [7, 0, 9, 16], "texture": "#top", "cullface": "up"}, 17 | "down": {"uv": [7, 0, 9, 16], "texture": "#bottom", "cullface": "down"} 18 | } 19 | } 20 | ] 21 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/pillar.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [4, 0, 4], 10 | "to": [12, 16, 12], 11 | "faces": { 12 | "north": {"uv": [4, 0, 12, 16], "texture": "#side"}, 13 | "east": {"uv": [4, 0, 12, 16], "texture": "#side"}, 14 | "south": {"uv": [4, 0, 12, 16], "texture": "#side"}, 15 | "west": {"uv": [4, 0, 12, 16], "texture": "#side"}, 16 | "up": {"uv": [4, 4, 12, 12], "texture": "#top", "cullface": "up"}, 17 | "down": {"uv": [4, 4, 12, 12], "texture": "#bottom", "cullface": "down"} 18 | } 19 | } 20 | ] 21 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/post.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [6, 0, 6], 10 | "to": [10, 16, 10], 11 | "faces": { 12 | "north": {"uv": [6, 0, 10, 16], "texture": "#side"}, 13 | "east": {"uv": [4, 0, 10, 16], "texture": "#side"}, 14 | "south": {"uv": [6, 0, 10, 16], "texture": "#side"}, 15 | "west": {"uv": [6, 0, 10, 16], "texture": "#side"}, 16 | "up": {"uv": [6, 6, 10, 10], "texture": "#top", "cullface": "up"}, 17 | "down": {"uv": [6, 6, 10, 10], "texture": "#bottom", "cullface": "down"} 18 | } 19 | } 20 | ] 21 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/slabs_stair/outer/cube.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [8, 8, 8], 10 | "to": [16, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 0, 8, 8], "texture": "#side"}, 14 | "east": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [8, 0, 16, 8], "texture": "#side"}, 17 | "up": {"uv": [8, 8, 16, 16], "texture": "#top", "cullface": "up"}, 18 | "down": {"uv": [8, 0, 16, 8], "texture": "#bottom"} 19 | } 20 | } 21 | ], 22 | "display": { 23 | "thirdperson_lefthand": { 24 | "rotation": [75, -135, 0], 25 | "translation": [0, 2.5, 0], 26 | "scale": [0.375, 0.375, 0.375] 27 | }, 28 | "gui": { 29 | "rotation": [30, 135, 0], 30 | "scale": [0.625, 0.625, 0.625] 31 | }, 32 | "head": { 33 | "rotation": [0, -90, 0] 34 | } 35 | } 36 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/slabs_stair/outer/side/cube.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [0, 0, 8], 10 | "to": [8, 8, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [-8, 0, 0]}, 12 | "faces": { 13 | "north": {"uv": [8, 8, 16, 16], "texture": "#side"}, 14 | "east": {"uv": [0, 8, 8, 16], "texture": "#side"}, 15 | "south": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "west"}, 17 | "up": {"uv": [0, 8, 8, 16], "texture": "#top"}, 18 | "down": {"uv": [0, 0, 8, 8], "texture": "#bottom", "cullface": "down"} 19 | } 20 | } 21 | ], 22 | "display": { 23 | "thirdperson_lefthand": { 24 | "rotation": [75, -135, 0], 25 | "translation": [0, 2.5, 0], 26 | "scale": [0.375, 0.375, 0.375] 27 | }, 28 | "gui": { 29 | "rotation": [30, 135, 0], 30 | "scale": [0.625, 0.625, 0.625] 31 | }, 32 | "head": { 33 | "rotation": [0, -90, 0] 34 | } 35 | } 36 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/slabs_stair/outer/slab.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [8, 0, 0], 10 | "to": [16, 8, 8], 11 | "faces": { 12 | "north": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "north"}, 13 | "east": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "east"}, 14 | "up": {"uv": [8, 0, 16, 8], "texture": "#top"}, 15 | "down": {"uv": [8, 8, 16, 16], "texture": "#bottom", "cullface": "down"} 16 | } 17 | }, 18 | { 19 | "from": [8, 0, 8], 20 | "to": [16, 8, 16], 21 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 0, 8]}, 22 | "faces": { 23 | "east": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "east"}, 24 | "south": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "south"}, 25 | "up": {"uv": [8, 8, 16, 16], "texture": "#top"}, 26 | "down": {"uv": [8, 0, 16, 8], "texture": "#bottom", "cullface": "down"} 27 | } 28 | }, 29 | { 30 | "from": [0, 0, 0], 31 | "to": [8, 8, 16], 32 | "faces": { 33 | "north": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "north"}, 34 | "south": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "south"}, 35 | "west": {"uv": [0, 8, 16, 16], "texture": "#side", "cullface": "west"}, 36 | "up": {"uv": [0, 0, 8, 16], "texture": "#top"}, 37 | "down": {"uv": [0, 0, 8, 16], "texture": "#bottom", "cullface": "down"} 38 | } 39 | } 40 | ], 41 | "display": { 42 | "thirdperson_lefthand": { 43 | "rotation": [75, -135, 0], 44 | "translation": [0, 2.5, 0], 45 | "scale": [0.375, 0.375, 0.375] 46 | }, 47 | "gui": { 48 | "rotation": [30, 135, 0], 49 | "scale": [0.625, 0.625, 0.625] 50 | }, 51 | "head": { 52 | "rotation": [0, -90, 0] 53 | } 54 | } 55 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/slabs_stair/side/slab.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [8, 0, 8], 10 | "to": [16, 16, 16], 11 | "faces": { 12 | "east": {"uv": [0, 0, 8, 16], "texture": "#side", "cullface": "east"}, 13 | "south": {"uv": [8, 0, 16, 16], "texture": "#side", "cullface": "south"}, 14 | "west": {"uv": [8, 0, 16, 16], "texture": "#side"}, 15 | "up": {"uv": [8, 8, 16, 16], "texture": "#top", "cullface": "up"}, 16 | "down": {"uv": [8, 0, 16, 8], "texture": "#bottom", "cullface": "down"} 17 | } 18 | }, 19 | { 20 | "from": [8, 0, 0], 21 | "to": [16, 16, 8], 22 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 0, -8]}, 23 | "faces": { 24 | "north": {"uv": [0, 0, 8, 16], "texture": "#side", "cullface": "north"}, 25 | "east": {"uv": [8, 0, 16, 16], "texture": "#side", "cullface": "east"}, 26 | "west": {"uv": [0, 0, 8, 16], "texture": "#side"}, 27 | "up": {"uv": [8, 0, 16, 8], "texture": "#top", "cullface": "up"}, 28 | "down": {"uv": [8, 8, 16, 16], "texture": "#bottom", "cullface": "down"} 29 | } 30 | } 31 | ], 32 | "display": { 33 | "thirdperson_lefthand": { 34 | "rotation": [75, -135, 0], 35 | "translation": [0, 2.5, 0], 36 | "scale": [0.375, 0.375, 0.375] 37 | }, 38 | "gui": { 39 | "rotation": [30, 135, 0], 40 | "scale": [0.625, 0.625, 0.625] 41 | }, 42 | "head": { 43 | "rotation": [0, -90, 0] 44 | } 45 | } 46 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/slabs_stair/side/step.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [0, 0, 8], 10 | "to": [8, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [-8, 0, 0]}, 12 | "faces": { 13 | "north": {"uv": [8, 0, 16, 16], "texture": "#side"}, 14 | "east": {"uv": [0, 0, 8, 16], "texture": "#side"}, 15 | "south": {"uv": [0, 0, 8, 16], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [8, 0, 16, 16], "texture": "#side", "cullface": "west"}, 17 | "up": {"uv": [0, 8, 8, 16], "texture": "#top", "cullface": "up"}, 18 | "down": {"uv": [0, 0, 8, 8], "texture": "#bottom", "cullface": "down"} 19 | } 20 | } 21 | ], 22 | "display": { 23 | "thirdperson_lefthand": { 24 | "rotation": [75, -135, 0], 25 | "translation": [0, 2.5, 0], 26 | "scale": [0.375, 0.375, 0.375] 27 | }, 28 | "gui": { 29 | "rotation": [30, 135, 0], 30 | "scale": [0.625, 0.625, 0.625] 31 | }, 32 | "head": { 33 | "rotation": [0, -90, 0] 34 | } 35 | } 36 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/slabs_stair/slab.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [8, 0, 0], 10 | "to": [16, 8, 16], 11 | "faces": { 12 | "north": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "north"}, 13 | "east": {"uv": [0, 8, 16, 16], "texture": "#side", "cullface": "east"}, 14 | "south": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "south"}, 15 | "up": {"uv": [8, 0, 16, 16], "texture": "#top"}, 16 | "down": {"uv": [8, 0, 16, 16], "texture": "#bottom", "cullface": "down"} 17 | } 18 | }, 19 | { 20 | "from": [0, 0, 0], 21 | "to": [8, 8, 16], 22 | "faces": { 23 | "north": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "north"}, 24 | "south": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "south"}, 25 | "west": {"uv": [0, 8, 16, 16], "texture": "#side", "cullface": "west"}, 26 | "up": {"uv": [0, 0, 8, 16], "texture": "#top"}, 27 | "down": {"uv": [0, 0, 8, 16], "texture": "#bottom", "cullface": "down"} 28 | } 29 | } 30 | ], 31 | "display": { 32 | "thirdperson_lefthand": { 33 | "rotation": [75, -135, 0], 34 | "translation": [0, 2.5, 0], 35 | "scale": [0.375, 0.375, 0.375] 36 | }, 37 | "gui": { 38 | "rotation": [30, 135, 0], 39 | "scale": [0.625, 0.625, 0.625] 40 | }, 41 | "head": { 42 | "rotation": [0, -90, 0] 43 | } 44 | } 45 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/slabs_stair/step.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [8, 8, 0], 10 | "to": [16, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "north"}, 14 | "east": {"uv": [0, 0, 16, 8], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [0, 0, 16, 8], "texture": "#side"}, 17 | "up": {"uv": [8, 0, 16, 16], "texture": "#top", "cullface": "up"}, 18 | "down": {"uv": [8, 0, 16, 16], "texture": "#bottom"} 19 | } 20 | } 21 | ], 22 | "display": { 23 | "thirdperson_lefthand": { 24 | "rotation": [75, -135, 0], 25 | "translation": [0, 2.5, 0], 26 | "scale": [0.375, 0.375, 0.375] 27 | }, 28 | "gui": { 29 | "rotation": [30, 135, 0], 30 | "scale": [0.625, 0.625, 0.625] 31 | }, 32 | "head": { 33 | "rotation": [0, -90, 0] 34 | } 35 | } 36 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/small_cube/base.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [8, 0, 0], 10 | "to": [16, 8, 8], 11 | "faces": { 12 | "north": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "north"}, 13 | "east": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "east"}, 14 | "south": {"uv": [8, 8, 16, 16], "texture": "#side"}, 15 | "west": {"uv": [0, 8, 8, 16], "texture": "#side"}, 16 | "up": {"uv": [8, 0, 16, 8], "texture": "#top"}, 17 | "down": {"uv": [8, 8, 16, 16], "texture": "#bottom", "cullface": "down"} 18 | } 19 | } 20 | ], 21 | "display": { 22 | "thirdperson_lefthand": { 23 | "rotation": [75, -135, 0], 24 | "translation": [0, 2.5, 0], 25 | "scale": [0.375, 0.375, 0.375] 26 | }, 27 | "gui": { 28 | "rotation": [30, 135, 0], 29 | "scale": [0.625, 0.625, 0.625] 30 | }, 31 | "head": { 32 | "rotation": [0, -90, 0] 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/small_cube/step/base.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [8, 0, 8], 10 | "to": [16, 8, 16], 11 | "faces": { 12 | "north": {"uv": [0, 8, 8, 16], "texture": "#side"}, 13 | "east": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "east"}, 14 | "south": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "south"}, 15 | "west": {"uv": [0, 8, 8, 16], "texture": "#side"}, 16 | "up": {"uv": [8, 0, 16, 8], "texture": "#top"}, 17 | "down": {"uv": [8, 8, 16, 16], "texture": "#bottom", "cullface": "down"} 18 | } 19 | } 20 | ], 21 | "display": { 22 | "thirdperson_lefthand": { 23 | "rotation": [75, -135, 0], 24 | "translation": [0, 2.5, 0], 25 | "scale": [0.375, 0.375, 0.375] 26 | }, 27 | "gui": { 28 | "rotation": [30, 135, 0], 29 | "scale": [0.625, 0.625, 0.625] 30 | }, 31 | "head": { 32 | "rotation": [0, -90, 0] 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/stair/cube/double_outer.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "minecraft:block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [8, 8, 0], 10 | "to": [16, 16, 8], 11 | "faces": { 12 | "north": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "north"}, 13 | "east": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "east"}, 14 | "south": {"uv": [8, 0, 16, 8], "texture": "#side"}, 15 | "up": {"uv": [8, 0, 16, 8], "texture": "#top", "cullface": "up"}, 16 | "down": {"uv": [8, 8, 16, 16], "texture": "#bottom"} 17 | } 18 | }, 19 | { 20 | "from": [0, 0, 0], 21 | "to": [8, 8, 8], 22 | "faces": { 23 | "north": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "north"}, 24 | "east": {"uv": [8, 8, 16, 16], "texture": "#side"}, 25 | "south": {"uv": [0, 8, 8, 16], "texture": "#side"}, 26 | "west": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "west"}, 27 | "down": {"uv": [8, 0, 16, 8], "texture": "#bottom", "cullface": "down"} 28 | } 29 | }, 30 | { 31 | "from": [0, 8, 0], 32 | "to": [8, 16, 8], 33 | "faces": { 34 | "north": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "north"}, 35 | "west": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "west"}, 36 | "up": {"uv": [0, 0, 8, 8], "texture": "#top", "cullface": "up"} 37 | } 38 | }, 39 | { 40 | "from": [0, 8, 8], 41 | "to": [8, 16, 16], 42 | "faces": { 43 | "east": {"uv": [0, 0, 8, 8], "texture": "#side"}, 44 | "south": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "south"}, 45 | "west": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "west"}, 46 | "up": {"uv": [0, 8, 8, 16], "texture": "#top", "cullface": "up"}, 47 | "down": {"uv": [0, 0, 8, 8], "texture": "#bottom"} 48 | } 49 | } 50 | ] 51 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/stair/cube/inner.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "textures": { 4 | "particle": "#side" 5 | }, 6 | "elements": [ 7 | { 8 | "from": [0, 8, 0], 9 | "to": [8, 16, 8], 10 | "faces": { 11 | "north": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "north"}, 12 | "east": {"uv": [8, 0, 16, 8], "texture": "#side"}, 13 | "south": {"uv": [0, 0, 8, 8], "texture": "#side"}, 14 | "west": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "west"}, 15 | "up": {"uv": [0, 0, 8, 8], "texture": "#top", "cullface": "up"}, 16 | "down": {"uv": [0, 8, 8, 16], "texture": "#bottom"} 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/stair/cube/outer.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "textures": { 4 | "particle": "#side" 5 | }, 6 | "elements": [ 7 | { 8 | "from": [0, 8, 8], 9 | "to": [8, 16, 16], 10 | "faces": { 11 | "east": {"uv": [0, 0, 8, 8], "texture": "#side"}, 12 | "south": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "south"}, 13 | "west": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "west"}, 14 | "up": {"uv": [0, 8, 8, 16], "texture": "#top", "cullface": "up"}, 15 | "down": {"uv": [0, 0, 8, 8], "texture": "#bottom"} 16 | } 17 | }, 18 | { 19 | "from": [8, 8, 0], 20 | "to": [16, 16, 8], 21 | "faces": { 22 | "north": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "north"}, 23 | "east": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "east"}, 24 | "south": {"uv": [9, 0, 16, 8], "texture": "#side"}, 25 | "up": {"uv": [8, 0, 16, 8], "texture": "#top", "cullface": "up"}, 26 | "down": {"uv": [8, 8, 16, 16], "texture": "#bottom"} 27 | } 28 | }, 29 | { 30 | "from": [0, 8, 0], 31 | "to": [8, 16, 8], 32 | "faces": { 33 | "north": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "north"}, 34 | "west": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "west"}, 35 | "up": {"uv": [0, 0, 8, 8], "texture": "#top", "cullface": "up"}, 36 | "down": {"uv": [0, 8, 8, 16], "texture": "#bottom"} 37 | } 38 | } 39 | ] 40 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/stair/cube/outer_side.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "textures": { 4 | "particle": "#side" 5 | }, 6 | "elements": [ 7 | { 8 | "from": [0, 8, 0], 9 | "to": [8, 16, 8], 10 | "faces": { 11 | "north": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "north"}, 12 | "east": {"uv": [8, 0, 16, 8], "texture": "#side"}, 13 | "west": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "west"}, 14 | "up": {"uv": [0, 0, 8, 8], "texture": "#top", "cullface": "up"} 15 | } 16 | }, 17 | { 18 | "from": [0, 8, 8], 19 | "to": [8, 16, 16], 20 | "faces": { 21 | "east": {"uv": [0, 0, 8, 8], "texture": "#side"}, 22 | "south": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "south"}, 23 | "west": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "west"}, 24 | "up": {"uv": [0, 8, 8, 16], "texture": "#top", "cullface": "up"}, 25 | "down": {"uv": [0, 0, 8, 8], "texture": "#bottom"} 26 | } 27 | }, 28 | { 29 | "from": [0, 0, 0], 30 | "to": [8, 8, 8], 31 | "faces": { 32 | "north": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "north"}, 33 | "east": {"uv": [8, 8, 16, 16], "texture": "#side"}, 34 | "south": {"uv": [0, 8, 8, 16], "texture": "#side"}, 35 | "west": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "west"}, 36 | "down": {"uv": [0, 8, 8, 16], "texture": "#bottom", "cullface": "down"} 37 | } 38 | } 39 | ], 40 | "groups": [ 41 | { 42 | "name": "outer_stairs", 43 | "origin": [8, 8, 8], 44 | "color": 0, 45 | "children": [0, 1, 2] 46 | } 47 | ] 48 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/stair/cube/straight.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [0, 8, 0], 10 | "to": [8, 16, 16], 11 | "faces": { 12 | "north": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "north"}, 13 | "east": {"uv": [0, 0, 16, 8], "texture": "#side"}, 14 | "south": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "south"}, 15 | "west": {"uv": [0, 8, 16, 16], "texture": "#side", "cullface": "west"}, 16 | "up": {"uv": [0, 0, 8, 16], "texture": "#top", "cullface": "up"}, 17 | "down": {"uv": [0, 0, 8, 16], "texture": "#bottom"} 18 | } 19 | } 20 | ], 21 | "display": { 22 | "thirdperson_lefthand": { 23 | "rotation": [75, -135, 0], 24 | "translation": [0, 2.5, 0], 25 | "scale": [0.375, 0.375, 0.375] 26 | }, 27 | "gui": { 28 | "rotation": [30, 135, 0], 29 | "scale": [0.625, 0.625, 0.625] 30 | }, 31 | "head": { 32 | "rotation": [0, -90, 0] 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/stair/double_outer.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/block", 3 | "textures": { 4 | "particle": "#side" 5 | }, 6 | "elements": [ 7 | { 8 | "from": [8, 0, 0], 9 | "to": [16, 8, 8], 10 | "faces": { 11 | "north": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "north"}, 12 | "east": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "east"}, 13 | "west": {"uv": [0, 8, 8, 16], "texture": "#side"}, 14 | "up": {"uv": [8, 0, 16, 8], "texture": "#top"}, 15 | "down": {"uv": [8, 8, 16, 16], "texture": "#bottom", "cullface": "down"} 16 | } 17 | }, 18 | { 19 | "from": [8, 0, 8], 20 | "to": [16, 8, 16], 21 | "faces": { 22 | "east": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "east"}, 23 | "south": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "south"}, 24 | "down": {"uv": [8, 0, 16, 8], "texture": "#bottom", "cullface": "down"} 25 | } 26 | }, 27 | { 28 | "from": [8, 8, 8], 29 | "to": [16, 16, 16], 30 | "faces": { 31 | "north": {"uv": [0, 0, 8, 8], "texture": "#side"}, 32 | "east": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "east"}, 33 | "south": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "south"}, 34 | "west": {"uv": [8, 0, 16, 8], "texture": "#side"}, 35 | "up": {"uv": [8, 8, 16, 16], "texture": "#top", "cullface": "up"} 36 | } 37 | }, 38 | { 39 | "from": [0, 0, 8], 40 | "to": [8, 8, 16], 41 | "faces": { 42 | "north": {"uv": [8, 8, 16, 16], "texture": "#side"}, 43 | "south": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "south"}, 44 | "west": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "west"}, 45 | "up": {"uv": [0, 8, 8, 16], "texture": "#top"}, 46 | "down": {"uv": [0, 0, 8, 8], "texture": "#bottom", "cullface": "down"} 47 | } 48 | } 49 | ] 50 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/stair/outer.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": { 3 | "particle": "#side" 4 | }, 5 | "elements": [ 6 | { 7 | "from": [0, 0, 0], 8 | "to": [8, 8, 16], 9 | "faces": { 10 | "north": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "north"}, 11 | "south": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "south"}, 12 | "west": {"uv": [0, 8, 16, 16], "texture": "#side", "cullface": "west"}, 13 | "up": {"uv": [0, 0, 8, 16], "texture": "#top"}, 14 | "down": {"uv": [0, 0, 8, 16], "texture": "#bottom", "cullface": "down"} 15 | } 16 | }, 17 | { 18 | "from": [8, 0, 0], 19 | "to": [16, 8, 8], 20 | "faces": { 21 | "north": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "north"}, 22 | "east": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "east"}, 23 | "up": {"uv": [8, 0, 16, 8], "texture": "#top"}, 24 | "down": {"uv": [8, 8, 16, 16], "texture": "#bottom", "cullface": "down"} 25 | } 26 | }, 27 | { 28 | "from": [8, 0, 8], 29 | "to": [16, 8, 16], 30 | "faces": { 31 | "east": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "east"}, 32 | "south": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "south"}, 33 | "down": {"uv": [8, 0, 16, 8], "texture": "#bottom", "cullface": "down"} 34 | } 35 | }, 36 | { 37 | "from": [8, 8, 8], 38 | "to": [16, 16, 16], 39 | "faces": { 40 | "north": {"uv": [0, 0, 8, 8], "texture": "#side"}, 41 | "east": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "east"}, 42 | "south": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "south"}, 43 | "west": {"uv": [8, 0, 16, 8], "texture": "#side"}, 44 | "up": {"uv": [8, 8, 16, 16], "texture": "#top", "cullface": "up"} 45 | } 46 | } 47 | ] 48 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/stair/straight.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "block/block", 3 | "textures": { 4 | "particle": "#side" 5 | }, 6 | "elements": [ 7 | { 8 | "from": [0, 0, 0], 9 | "to": [8, 8, 16], 10 | "faces": { 11 | "north": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "north"}, 12 | "south": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "south"}, 13 | "west": {"uv": [0, 8, 16, 16], "texture": "#side", "cullface": "west"}, 14 | "up": {"uv": [0, 0, 8, 16], "texture": "#top"}, 15 | "down": {"uv": [0, 0, 8, 16], "texture": "#bottom", "cullface": "down"} 16 | } 17 | }, 18 | { 19 | "from": [8, 0, 0], 20 | "to": [16, 8, 16], 21 | "faces": { 22 | "north": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "north"}, 23 | "east": {"uv": [0, 8, 16, 16], "texture": "#side", "cullface": "east"}, 24 | "south": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "south"}, 25 | "down": {"uv": [8, 0, 16, 16], "texture": "#bottom", "cullface": "down"} 26 | } 27 | }, 28 | { 29 | "from": [8, 8, 0], 30 | "to": [16, 16, 16], 31 | "faces": { 32 | "north": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "north"}, 33 | "east": {"uv": [0, 0, 16, 8], "texture": "#side", "cullface": "east"}, 34 | "south": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "south"}, 35 | "west": {"uv": [0, 0, 16, 8], "texture": "#side"}, 36 | "up": {"uv": [8, 0, 16, 16], "texture": "#top", "cullface": "up"} 37 | } 38 | } 39 | ], 40 | "display": { 41 | "thirdperson_lefthand": { 42 | "rotation": [75, -135, 0], 43 | "translation": [0, 2.5, 0], 44 | "scale": [0.375, 0.375, 0.375] 45 | }, 46 | "gui": { 47 | "rotation": [30, 135, 0], 48 | "scale": [0.625, 0.625, 0.625] 49 | }, 50 | "head": { 51 | "rotation": [0, -90, 0] 52 | } 53 | } 54 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/step/cross.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [0, 8, 0], 10 | "to": [8, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [-8, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "north"}, 14 | "east": {"uv": [0, 0, 16, 8], "texture": "#side"}, 15 | "south": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [0, 0, 16, 8], "texture": "#side", "cullface": "west"}, 17 | "up": {"uv": [0, 0, 8, 16], "texture": "#top", "cullface": "up"}, 18 | "down": {"uv": [0, 0, 8, 16], "texture": "#bottom"} 19 | } 20 | } 21 | ], 22 | "display": { 23 | "thirdperson_lefthand": { 24 | "rotation": [75, -135, 0], 25 | "translation": [0, 2.5, 0], 26 | "scale": [0.375, 0.375, 0.375] 27 | }, 28 | "gui": { 29 | "rotation": [30, 135, 0], 30 | "scale": [0.625, 0.625, 0.625] 31 | }, 32 | "head": { 33 | "rotation": [0, -90, 0] 34 | } 35 | } 36 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/step/down.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [8, 0, 0], 10 | "to": [16, 8, 16], 11 | "faces": { 12 | "north": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "north"}, 13 | "east": {"uv": [0, 8, 16, 16], "texture": "#side", "cullface": "east"}, 14 | "south": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "south"}, 15 | "west": {"uv": [0, 8, 16, 16], "texture": "#side"}, 16 | "up": {"uv": [8, 0, 16, 16], "texture": "#top"}, 17 | "down": {"uv": [8, 0, 16, 16], "texture": "#bottom", "cullface": "down"} 18 | } 19 | } 20 | ], 21 | "display": { 22 | "thirdperson_lefthand": { 23 | "rotation": [75, -135, 0], 24 | "translation": [0, 2.5, 0], 25 | "scale": [0.375, 0.375, 0.375] 26 | }, 27 | "gui": { 28 | "rotation": [30, 135, 0], 29 | "scale": [0.625, 0.625, 0.625] 30 | }, 31 | "head": { 32 | "rotation": [0, -90, 0] 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/step/side.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [8, 0, 0], 10 | "to": [16, 16, 8], 11 | "faces": { 12 | "north": {"uv": [0, 0, 8, 16], "texture": "#side", "cullface": "north"}, 13 | "east": {"uv": [8, 0, 16, 16], "texture": "#side", "cullface": "east"}, 14 | "south": {"uv": [8, 0, 16, 16], "texture": "#side"}, 15 | "west": {"uv": [0, 0, 8, 16], "texture": "#side"}, 16 | "up": {"uv": [8, 0, 16, 8], "texture": "#top", "cullface": "up"}, 17 | "down": {"uv": [8, 8, 16, 16], "texture": "#bottom", "cullface": "down"} 18 | } 19 | } 20 | ], 21 | "display": { 22 | "thirdperson_lefthand": { 23 | "rotation": [75, -135, 0], 24 | "translation": [0, 2.5, 0], 25 | "scale": [0.375, 0.375, 0.375] 26 | }, 27 | "gui": { 28 | "rotation": [30, 135, 0], 29 | "scale": [0.625, 0.625, 0.625] 30 | }, 31 | "head": { 32 | "rotation": [0, -90, 0] 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/step/slab/down.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [0, 0, 0], 10 | "to": [8, 8, 16], 11 | "faces": { 12 | "north": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "north"}, 13 | "east": {"uv": [0, 8, 16, 16], "texture": "#side"}, 14 | "south": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "south"}, 15 | "west": {"uv": [0, 8, 16, 16], "texture": "#side", "cullface": "west"}, 16 | "up": {"uv": [0, 0, 8, 16], "texture": "#top"}, 17 | "down": {"uv": [0, 0, 8, 16], "texture": "#bottom", "cullface": "down"} 18 | } 19 | } 20 | ], 21 | "display": { 22 | "thirdperson_lefthand": { 23 | "rotation": [75, -135, 0], 24 | "translation": [0, 2.5, 0], 25 | "scale": [0.375, 0.375, 0.375] 26 | }, 27 | "gui": { 28 | "rotation": [30, 135, 0], 29 | "scale": [0.625, 0.625, 0.625] 30 | }, 31 | "head": { 32 | "rotation": [0, -90, 0] 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/step/slab/side.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [8, 0, 8], 10 | "to": [16, 16, 16], 11 | "faces": { 12 | "north": {"uv": [0, 0, 8, 16], "texture": "#side"}, 13 | "east": {"uv": [0, 0, 8, 16], "texture": "#side", "cullface": "east"}, 14 | "south": {"uv": [8, 0, 16, 16], "texture": "#side", "cullface": "south"}, 15 | "west": {"uv": [8, 0, 16, 16], "texture": "#side"}, 16 | "up": {"uv": [8, 8, 16, 16], "texture": "#top", "cullface": "up"}, 17 | "down": {"uv": [8, 0, 16, 8], "texture": "#bottom", "cullface": "down"} 18 | } 19 | } 20 | ], 21 | "display": { 22 | "thirdperson_lefthand": { 23 | "rotation": [75, -135, 0], 24 | "translation": [0, 2.5, 0], 25 | "scale": [0.375, 0.375, 0.375] 26 | }, 27 | "gui": { 28 | "rotation": [30, 135, 0], 29 | "scale": [0.625, 0.625, 0.625] 30 | }, 31 | "head": { 32 | "rotation": [0, -90, 0] 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/step/up.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [8, 8, 0], 10 | "to": [16, 16, 16], 11 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 0]}, 12 | "faces": { 13 | "north": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "north"}, 14 | "east": {"uv": [0, 8, 16, 16], "texture": "#side", "cullface": "east"}, 15 | "south": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "south"}, 16 | "west": {"uv": [0, 8, 16, 16], "texture": "#side"}, 17 | "up": {"uv": [8, 0, 16, 16], "texture": "#top", "cullface": "up"}, 18 | "down": {"uv": [8, 0, 16, 16], "texture": "#bottom"} 19 | } 20 | } 21 | ], 22 | "display": { 23 | "thirdperson_lefthand": { 24 | "rotation": [75, -135, 0], 25 | "translation": [0, 2.5, 0], 26 | "scale": [0.375, 0.375, 0.375] 27 | }, 28 | "gui": { 29 | "rotation": [30, 135, 0], 30 | "scale": [0.625, 0.625, 0.625] 31 | }, 32 | "head": { 33 | "rotation": [0, -90, 0] 34 | } 35 | } 36 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/wall/full/inventory/sides.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [5, 0, 0], 10 | "to": [11, 14, 4], 11 | "faces": { 12 | "north": {"uv": [5, 2, 11, 16], "texture": "#side", "cullface": "north"}, 13 | "east": {"uv": [12, 2, 16, 16], "texture": "#side"}, 14 | "south": {"uv": [5, 2, 11, 16], "texture": "#side"}, 15 | "west": {"uv": [0, 2, 4, 16], "texture": "#side"}, 16 | "up": {"uv": [5, 0, 11, 4], "texture": "#top"}, 17 | "down": {"uv": [5, 12, 11, 16], "texture": "#bottom"} 18 | } 19 | }, 20 | { 21 | "from": [5, 0, 12], 22 | "to": [11, 14, 16], 23 | "faces": { 24 | "north": {"uv": [5, 2, 11, 16], "texture": "#side"}, 25 | "east": {"uv": [0, 2, 4, 16], "texture": "#side"}, 26 | "south": {"uv": [5, 2, 11, 16], "texture": "#side", "cullface": "south"}, 27 | "west": {"uv": [12, 2, 16, 16], "texture": "#side"}, 28 | "up": {"uv": [5, 12, 11, 16], "texture": "#top"}, 29 | "down": {"uv": [5, 0, 11, 4], "texture": "#bottom"} 30 | } 31 | } 32 | ] 33 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/wall/full/pillar/low.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [4, 0, 4], 10 | "to": [5, 14, 5], 11 | "faces": { 12 | "north": {"uv": [11, 2, 12, 16], "texture": "#side"}, 13 | "west": {"uv": [4, 2, 5, 16], "texture": "#side"}, 14 | "down": {"uv": [4, 11, 5, 12], "texture": "#bottom", "cullface": "down"} 15 | } 16 | }, 17 | { 18 | "from": [5, 0, 4], 19 | "to": [11, 14, 5], 20 | "faces": { 21 | "north": {"uv": [5, 2, 11, 16], "texture": "#side"}, 22 | "down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"} 23 | } 24 | }, 25 | { 26 | "from": [4, 14, 4], 27 | "to": [11, 16, 5], 28 | "faces": { 29 | "north": {"uv": [5, 0, 12, 2], "texture": "#side"}, 30 | "west": {"uv": [4, 0, 5, 2], "texture": "#side"}, 31 | "up": {"uv": [5, 4, 12, 5], "texture": "#top", "cullface": "up"} 32 | } 33 | } 34 | ] 35 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/wall/full/pillar/tall.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [4, 0, 4], 10 | "to": [5, 16, 5], 11 | "faces": { 12 | "north": {"uv": [11, 0, 12, 16], "texture": "#side"}, 13 | "west": {"uv": [4, 0, 5, 16], "texture": "#side"}, 14 | "up": {"uv": [4, 4, 5, 5], "texture": "#top", "cullface": "up"}, 15 | "down": {"uv": [4, 11, 5, 12], "texture": "#bottom", "cullface": "down"} 16 | } 17 | }, 18 | { 19 | "from": [5, 0, 4], 20 | "to": [11, 16, 5], 21 | "faces": { 22 | "north": {"uv": [5, 0, 11, 16], "texture": "#side"}, 23 | "up": {"uv": [5, 4, 11, 5], "texture": "#top", "cullface": "up"}, 24 | "down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"} 25 | } 26 | } 27 | ] 28 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/wall/full/side/low.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [5, 0, 0], 10 | "to": [11, 14, 4], 11 | "faces": { 12 | "north": {"uv": [5, 2, 11, 16], "texture": "#side", "cullface": "north"}, 13 | "east": {"uv": [12, 2, 16, 16], "texture": "#side"}, 14 | "south": {"uv": [5, 2, 11, 16], "texture": "#side"}, 15 | "west": {"uv": [0, 2, 4, 16], "texture": "#side"}, 16 | "up": {"uv": [5, 0, 11, 4], "texture": "#top"}, 17 | "down": {"uv": [5, 12, 11, 16], "texture": "#bottom", "cullface": "down"} 18 | } 19 | } 20 | ] 21 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/wall/full/side/tall.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [5, 0, 0], 10 | "to": [11, 16, 4], 11 | "faces": { 12 | "north": {"uv": [5, 0, 11, 16], "texture": "#side", "cullface": "north"}, 13 | "east": {"uv": [12, 0, 16, 16], "texture": "#side"}, 14 | "south": {"uv": [5, 0, 11, 16], "texture": "#side"}, 15 | "west": {"uv": [0, 0, 4, 16], "texture": "#side"}, 16 | "up": {"uv": [5, 0, 11, 4], "texture": "#top", "cullface": "up"}, 17 | "down": {"uv": [5, 12, 11, 16], "texture": "#bottom", "cullface": "down"} 18 | } 19 | } 20 | ] 21 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/wall/inventory/default.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [5, 0, 0], 10 | "to": [11, 14, 4], 11 | "faces": { 12 | "north": {"uv": [5, 2, 11, 16], "texture": "#side", "cullface": "north"}, 13 | "east": {"uv": [12, 2, 16, 16], "texture": "#side"}, 14 | "west": {"uv": [0, 2, 4, 16], "texture": "#side"}, 15 | "up": {"uv": [5, 0, 11, 4], "texture": "#top"}, 16 | "down": {"uv": [5, 12, 11, 16], "texture": "#bottom"} 17 | } 18 | }, 19 | { 20 | "from": [5, 0, 12], 21 | "to": [11, 14, 16], 22 | "faces": { 23 | "east": {"uv": [0, 2, 4, 16], "texture": "#side"}, 24 | "south": {"uv": [5, 2, 11, 16], "texture": "#side", "cullface": "south"}, 25 | "west": {"uv": [12, 2, 16, 16], "texture": "#side"}, 26 | "up": {"uv": [5, 12, 11, 16], "texture": "#top"}, 27 | "down": {"uv": [5, 0, 11, 4], "texture": "#bottom"} 28 | } 29 | }, 30 | { 31 | "from": [4, 0, 4], 32 | "to": [12, 16, 12], 33 | "faces": { 34 | "north": {"uv": [4, 0, 12, 16], "texture": "#side"}, 35 | "east": {"uv": [4, 0, 12, 16], "texture": "#side"}, 36 | "south": {"uv": [4, 0, 12, 16], "texture": "#side", "cullface": "south"}, 37 | "west": {"uv": [4, 0, 12, 16], "texture": "#side"}, 38 | "up": {"uv": [4, 4, 12, 12], "texture": "#top"}, 39 | "down": {"uv": [4, 4, 12, 12], "texture": "#bottom"} 40 | } 41 | } 42 | ] 43 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/wall/junction/low.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [5, 0, 4], 10 | "to": [11, 14, 8], 11 | "faces": { 12 | "east": {"uv": [8, 2, 12, 16], "texture": "#side"}, 13 | "south": {"uv": [5, 2, 11, 16], "texture": "#side"}, 14 | "west": {"uv": [4, 2, 8, 16], "texture": "#side"}, 15 | "up": {"uv": [5, 4, 11, 8], "texture": "#top"}, 16 | "down": {"uv": [5, 8, 11, 12], "texture": "#bottom", "cullface": "down"} 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/wall/junction/low_c.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [5, 0, 4], 10 | "to": [11, 14, 5], 11 | "faces": { 12 | "east": {"uv": [11, 2, 12, 16], "texture": "#side"}, 13 | "west": {"uv": [4, 2, 5, 16], "texture": "#side"}, 14 | "up": {"uv": [5, 4, 11, 5], "texture": "#top"}, 15 | "down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"} 16 | } 17 | }, 18 | { 19 | "from": [8, 0, 5], 20 | "to": [11, 14, 8], 21 | "faces": { 22 | "east": {"uv": [8, 2, 11, 16], "texture": "#side"}, 23 | "south": {"uv": [8, 2, 11, 16], "texture": "#side"}, 24 | "up": {"uv": [8, 5, 11, 8], "texture": "#top"}, 25 | "down": {"uv": [8, 8, 11, 11], "texture": "#bottom", "cullface": "down"} 26 | } 27 | }, 28 | { 29 | "from": [5, 0, 8], 30 | "to": [8, 14, 11], 31 | "faces": { 32 | "east": {"uv": [5, 2, 8, 16], "texture": "#side"}, 33 | "south": {"uv": [5, 2, 8, 16], "texture": "#side"}, 34 | "up": {"uv": [5, 8, 8, 11], "texture": "#top"}, 35 | "down": {"uv": [5, 5, 8, 8], "texture": "#bottom", "cullface": "down"} 36 | } 37 | }, 38 | { 39 | "from": [5, 0, 5], 40 | "to": [8, 14, 8], 41 | "faces": { 42 | "up": {"uv": [5, 5, 8, 8], "texture": "#top"}, 43 | "down": {"uv": [5, 8, 8, 11], "texture": "#bottom", "cullface": "down"} 44 | } 45 | }, 46 | { 47 | "from": [4, 0, 5], 48 | "to": [5, 14, 11], 49 | "faces": { 50 | "north": {"uv": [11, 2, 12, 16], "texture": "#side"}, 51 | "south": {"uv": [4, 2, 5, 16], "texture": "#side"}, 52 | "up": {"uv": [4, 5, 5, 11], "texture": "#top"}, 53 | "down": {"uv": [4, 5, 5, 11], "texture": "#bottom", "cullface": "down"} 54 | } 55 | } 56 | ] 57 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/wall/junction/low_i.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [5, 0, 4], 10 | "to": [11, 14, 12], 11 | "faces": { 12 | "east": {"uv": [4, 2, 12, 16], "texture": "#side"}, 13 | "west": {"uv": [4, 2, 12, 16], "texture": "#side"}, 14 | "up": {"uv": [5, 4, 11, 12], "texture": "#top"}, 15 | "down": {"uv": [5, 4, 11, 12], "texture": "#bottom", "cullface": "down"} 16 | } 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/wall/junction/low_t.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [5, 0, 4], 10 | "to": [11, 14, 5], 11 | "faces": { 12 | "east": {"uv": [11, 2, 12, 16], "texture": "#side"}, 13 | "west": {"uv": [4, 2, 5, 16], "texture": "#side"}, 14 | "up": {"uv": [5, 4, 11, 5], "texture": "#top"}, 15 | "down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"} 16 | } 17 | }, 18 | { 19 | "from": [5, 0, 5], 20 | "to": [11, 14, 11], 21 | "faces": { 22 | "south": {"uv": [5, 2, 11, 16], "texture": "#side"}, 23 | "up": {"uv": [5, 5, 11, 11], "texture": "#top"}, 24 | "down": {"uv": [5, 5, 11, 11], "texture": "#bottom", "cullface": "down"} 25 | } 26 | }, 27 | { 28 | "from": [4, 0, 5], 29 | "to": [5, 14, 11], 30 | "faces": { 31 | "north": {"uv": [11, 2, 12, 16], "texture": "#side"}, 32 | "south": {"uv": [4, 2, 5, 16], "texture": "#side"}, 33 | "up": {"uv": [4, 5, 5, 11], "texture": "#top"}, 34 | "down": {"uv": [4, 5, 5, 11], "texture": "#bottom", "cullface": "down"} 35 | } 36 | }, 37 | { 38 | "from": [11, 0, 5], 39 | "to": [12, 14, 11], 40 | "faces": { 41 | "north": {"uv": [4, 2, 5, 16], "texture": "#side"}, 42 | "south": {"uv": [11, 2, 12, 16], "texture": "#side"}, 43 | "up": {"uv": [11, 5, 12, 11], "texture": "#top"}, 44 | "down": {"uv": [11, 5, 12, 11], "texture": "#bottom", "cullface": "down"} 45 | } 46 | } 47 | ] 48 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/wall/junction/low_tall_i.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [5, 0, 4], 10 | "to": [11, 14, 8], 11 | "faces": { 12 | "east": {"uv": [8, 2, 12, 16], "texture": "#side"}, 13 | "west": {"uv": [4, 2, 8, 16], "texture": "#side"}, 14 | "up": {"uv": [5, 4, 11, 8], "texture": "#top"}, 15 | "down": {"uv": [5, 8, 11, 12], "texture": "#bottom", "cullface": "down"} 16 | } 17 | }, 18 | { 19 | "from": [5, 14, 8], 20 | "to": [11, 16, 12], 21 | "faces": { 22 | "north": {"uv": [5, 0, 11, 2], "texture": "#side"}, 23 | "east": {"uv": [4, 0, 8, 2], "texture": "#side"}, 24 | "west": {"uv": [8, 0, 12, 2], "texture": "#side"}, 25 | "up": {"uv": [5, 8, 11, 12], "texture": "#top", "cullface": "up"} 26 | } 27 | }, 28 | { 29 | "from": [5, 0, 8], 30 | "to": [11, 14, 12], 31 | "faces": { 32 | "east": {"uv": [4, 2, 8, 16], "texture": "#side"}, 33 | "west": {"uv": [8, 2, 12, 16], "texture": "#side"}, 34 | "down": {"uv": [5, 4, 11, 8], "texture": "#bottom", "cullface": "down"} 35 | } 36 | } 37 | ] 38 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/wall/junction/low_x.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [5, 0, 4], 10 | "to": [11, 14, 5], 11 | "faces": { 12 | "east": {"uv": [11, 2, 12, 16], "texture": "#side"}, 13 | "west": {"uv": [4, 2, 5, 16], "texture": "#side"}, 14 | "up": {"uv": [5, 4, 11, 5], "texture": "#top"}, 15 | "down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"} 16 | } 17 | }, 18 | { 19 | "from": [5, 0, 11], 20 | "to": [11, 14, 12], 21 | "faces": { 22 | "east": {"uv": [4, 2, 5, 16], "texture": "#side"}, 23 | "west": {"uv": [11, 2, 12, 16], "texture": "#side"}, 24 | "up": {"uv": [5, 11, 11, 12], "texture": "#top"}, 25 | "down": {"uv": [5, 4, 11, 5], "texture": "#bottom", "cullface": "down"} 26 | } 27 | }, 28 | { 29 | "from": [5, 0, 5], 30 | "to": [11, 14, 11], 31 | "faces": { 32 | "up": {"uv": [5, 5, 11, 11], "texture": "#top"}, 33 | "down": {"uv": [5, 5, 11, 11], "texture": "#bottom", "cullface": "down"} 34 | } 35 | }, 36 | { 37 | "from": [4, 0, 5], 38 | "to": [5, 14, 11], 39 | "faces": { 40 | "north": {"uv": [11, 2, 12, 16], "texture": "#side"}, 41 | "south": {"uv": [4, 2, 5, 16], "texture": "#side"}, 42 | "up": {"uv": [4, 5, 5, 11], "texture": "#top"}, 43 | "down": {"uv": [4, 5, 5, 11], "texture": "#bottom", "cullface": "down"} 44 | } 45 | }, 46 | { 47 | "from": [11, 0, 5], 48 | "to": [12, 14, 11], 49 | "faces": { 50 | "north": {"uv": [4, 2, 5, 16], "texture": "#side"}, 51 | "south": {"uv": [11, 2, 12, 16], "texture": "#side"}, 52 | "up": {"uv": [11, 5, 12, 11], "texture": "#top"}, 53 | "down": {"uv": [11, 5, 12, 11], "texture": "#bottom", "cullface": "down"} 54 | } 55 | } 56 | ] 57 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/wall/junction/tall.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [5, 0, 4], 10 | "to": [11, 16, 8], 11 | "faces": { 12 | "east": {"uv": [8, 0, 12, 16], "texture": "#side"}, 13 | "south": {"uv": [5, 0, 11, 16], "texture": "#side"}, 14 | "west": {"uv": [4, 0, 8, 16], "texture": "#side"}, 15 | "up": {"uv": [5, 4, 11, 8], "texture": "#top", "cullface": "up"}, 16 | "down": {"uv": [5, 8, 11, 12], "texture": "#bottom", "cullface": "down"} 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/wall/junction/tall_i.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [5, 0, 4], 10 | "to": [11, 16, 12], 11 | "faces": { 12 | "east": {"uv": [4, 0, 12, 16], "texture": "#side"}, 13 | "west": {"uv": [4, 0, 12, 16], "texture": "#side"}, 14 | "up": {"uv": [5, 4, 11, 12], "texture": "#top", "cullface": "up"}, 15 | "down": {"uv": [5, 4, 11, 12], "texture": "#bottom", "cullface": "down"} 16 | } 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/wall/junction/tall_i_low_t.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [5, 0, 4], 10 | "to": [11, 14, 5], 11 | "faces": { 12 | "east": {"uv": [11, 2, 12, 16], "texture": "#side"}, 13 | "west": {"uv": [4, 2, 5, 16], "texture": "#side"}, 14 | "up": {"uv": [5, 4, 11, 5], "texture": "#top"}, 15 | "down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"} 16 | } 17 | }, 18 | { 19 | "from": [5, 14, 5], 20 | "to": [11, 16, 11], 21 | "faces": { 22 | "north": {"uv": [5, 0, 11, 2], "texture": "#side"}, 23 | "south": {"uv": [5, 0, 11, 2], "texture": "#side"}, 24 | "up": {"uv": [5, 5, 11, 11], "texture": "#top", "cullface": "up"} 25 | } 26 | }, 27 | { 28 | "from": [5, 0, 5], 29 | "to": [11, 14, 11], 30 | "faces": { 31 | "south": {"uv": [5, 2, 11, 16], "texture": "#side"}, 32 | "down": {"uv": [5, 5, 11, 11], "texture": "#bottom", "cullface": "down"} 33 | } 34 | }, 35 | { 36 | "from": [4, 0, 5], 37 | "to": [5, 16, 11], 38 | "faces": { 39 | "north": {"uv": [11, 0, 12, 16], "texture": "#side"}, 40 | "south": {"uv": [4, 0, 5, 16], "texture": "#side"}, 41 | "up": {"uv": [4, 5, 5, 11], "texture": "#top", "cullface": "up"}, 42 | "down": {"uv": [4, 5, 5, 11], "texture": "#bottom", "cullface": "down"} 43 | } 44 | }, 45 | { 46 | "from": [11, 0, 5], 47 | "to": [12, 16, 11], 48 | "faces": { 49 | "north": {"uv": [4, 0, 5, 16], "texture": "#side"}, 50 | "south": {"uv": [11, 0, 12, 16], "texture": "#side"}, 51 | "up": {"uv": [11, 5, 12, 11], "texture": "#top", "cullface": "up"}, 52 | "down": {"uv": [11, 5, 12, 11], "texture": "#bottom", "cullface": "down"} 53 | } 54 | } 55 | ] 56 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/wall/junction/tall_t.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [5, 0, 4], 10 | "to": [11, 16, 5], 11 | "faces": { 12 | "east": {"uv": [11, 0, 12, 16], "texture": "#side"}, 13 | "west": {"uv": [4, 0, 5, 16], "texture": "#side"}, 14 | "up": {"uv": [5, 4, 11, 5], "texture": "#top", "cullface": "up"}, 15 | "down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"} 16 | } 17 | }, 18 | { 19 | "from": [5, 0, 5], 20 | "to": [11, 16, 11], 21 | "faces": { 22 | "south": {"uv": [5, 0, 11, 16], "texture": "#side"}, 23 | "up": {"uv": [5, 5, 11, 11], "texture": "#top", "cullface": "up"}, 24 | "down": {"uv": [5, 5, 11, 11], "texture": "#bottom", "cullface": "down"} 25 | } 26 | }, 27 | { 28 | "from": [4, 0, 5], 29 | "to": [5, 16, 11], 30 | "faces": { 31 | "north": {"uv": [11, 0, 12, 16], "texture": "#side"}, 32 | "south": {"uv": [4, 0, 5, 16], "texture": "#side"}, 33 | "up": {"uv": [4, 5, 5, 11], "texture": "#top", "cullface": "up"}, 34 | "down": {"uv": [4, 5, 5, 11], "texture": "#bottom", "cullface": "down"} 35 | } 36 | }, 37 | { 38 | "from": [11, 0, 5], 39 | "to": [12, 16, 11], 40 | "faces": { 41 | "north": {"uv": [4, 0, 5, 16], "texture": "#side"}, 42 | "south": {"uv": [11, 0, 12, 16], "texture": "#side"}, 43 | "up": {"uv": [11, 5, 12, 11], "texture": "#top", "cullface": "up"}, 44 | "down": {"uv": [11, 5, 12, 11], "texture": "#bottom", "cullface": "down"} 45 | } 46 | } 47 | ] 48 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/wall/pillar/core.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [5, 0, 5], 10 | "to": [11, 16, 11], 11 | "faces": { 12 | "up": {"uv": [5, 5, 11, 11], "texture": "#top", "cullface": "up"}, 13 | "down": {"uv": [5, 5, 11, 11], "texture": "#bottom", "cullface": "down"} 14 | } 15 | } 16 | ] 17 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/wall/pillar/low.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [4, 0, 4], 10 | "to": [5, 14, 5], 11 | "faces": { 12 | "north": {"uv": [11, 2, 12, 16], "texture": "#side"}, 13 | "west": {"uv": [4, 2, 5, 16], "texture": "#side"}, 14 | "down": {"uv": [4, 11, 5, 12], "texture": "#bottom", "cullface": "down"} 15 | } 16 | }, 17 | { 18 | "from": [5, 0, 4], 19 | "to": [11, 14, 5], 20 | "faces": { 21 | "down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"} 22 | } 23 | }, 24 | { 25 | "from": [4, 14, 4], 26 | "to": [11, 16, 5], 27 | "faces": { 28 | "north": {"uv": [5, 0, 12, 2], "texture": "#side"}, 29 | "west": {"uv": [4, 0, 5, 2], "texture": "#side"}, 30 | "up": {"uv": [5, 4, 12, 5], "texture": "#top", "cullface": "up"} 31 | } 32 | } 33 | ] 34 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/wall/pillar/none.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [4, 0, 4], 10 | "to": [5, 16, 5], 11 | "faces": { 12 | "north": {"uv": [11, 0, 12, 16], "texture": "#side"}, 13 | "west": {"uv": [4, 0, 5, 16], "texture": "#side"}, 14 | "up": {"uv": [4, 4, 5, 5], "texture": "#top", "cullface": "up"}, 15 | "down": {"uv": [4, 11, 5, 12], "texture": "#bottom", "cullface": "down"} 16 | } 17 | }, 18 | { 19 | "from": [5, 0, 4], 20 | "to": [11, 16, 5], 21 | "faces": { 22 | "north": {"uv": [5, 0, 11, 16], "texture": "#side"}, 23 | "up": {"uv": [5, 4, 11, 5], "texture": "#top", "cullface": "up"}, 24 | "down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"} 25 | } 26 | } 27 | ] 28 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/wall/pillar/tall.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [4, 0, 4], 10 | "to": [5, 16, 5], 11 | "faces": { 12 | "north": {"uv": [11, 0, 12, 16], "texture": "#side"}, 13 | "west": {"uv": [4, 0, 5, 16], "texture": "#side"}, 14 | "up": {"uv": [4, 4, 5, 5], "texture": "#top", "cullface": "up"}, 15 | "down": {"uv": [4, 11, 5, 12], "texture": "#bottom", "cullface": "down"} 16 | } 17 | }, 18 | { 19 | "from": [5, 0, 4], 20 | "to": [11, 16, 5], 21 | "faces": { 22 | "up": {"uv": [5, 4, 11, 5], "texture": "#top", "cullface": "up"}, 23 | "down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"} 24 | } 25 | } 26 | ] 27 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/wall/side/low.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [5, 0, 0], 10 | "to": [11, 14, 4], 11 | "faces": { 12 | "north": {"uv": [5, 2, 11, 16], "texture": "#side", "cullface": "north"}, 13 | "east": {"uv": [12, 2, 16, 16], "texture": "#side"}, 14 | "west": {"uv": [0, 2, 4, 16], "texture": "#side"}, 15 | "up": {"uv": [5, 0, 11, 4], "texture": "#top"}, 16 | "down": {"uv": [5, 12, 11, 16], "texture": "#bottom", "cullface": "down"} 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/models/block/wall/side/tall.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "parent": "block/block", 4 | "textures": { 5 | "particle": "#side" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [5, 0, 0], 10 | "to": [11, 16, 4], 11 | "faces": { 12 | "north": {"uv": [5, 0, 11, 16], "texture": "#side", "cullface": "north"}, 13 | "east": {"uv": [12, 0, 16, 16], "texture": "#side"}, 14 | "west": {"uv": [0, 0, 4, 16], "texture": "#side"}, 15 | "up": {"uv": [5, 0, 11, 4], "texture": "#top", "cullface": "up"}, 16 | "down": {"uv": [5, 12, 11, 16], "texture": "#bottom", "cullface": "down"} 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/textures/block/framed_accent_block.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DriHut/ReFramed/e592db1ea2ada2cede7911cd7e45bf6f61ac9e91/src/main/resources/assets/reframed/textures/block/framed_accent_block.png -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/textures/block/framed_block.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DriHut/ReFramed/e592db1ea2ada2cede7911cd7e45bf6f61ac9e91/src/main/resources/assets/reframed/textures/block/framed_block.png -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/textures/item/blueprint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DriHut/ReFramed/e592db1ea2ada2cede7911cd7e45bf6f61ac9e91/src/main/resources/assets/reframed/textures/item/blueprint.png -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/textures/item/blueprint_written.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DriHut/ReFramed/e592db1ea2ada2cede7911cd7e45bf6f61ac9e91/src/main/resources/assets/reframed/textures/item/blueprint_written.png -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/textures/item/hammer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DriHut/ReFramed/e592db1ea2ada2cede7911cd7e45bf6f61ac9e91/src/main/resources/assets/reframed/textures/item/hammer.png -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/textures/item/screwdriver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DriHut/ReFramed/e592db1ea2ada2cede7911cd7e45bf6f61ac9e91/src/main/resources/assets/reframed/textures/item/screwdriver.png -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/textures/reframed_special/down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DriHut/ReFramed/e592db1ea2ada2cede7911cd7e45bf6f61ac9e91/src/main/resources/assets/reframed/textures/reframed_special/down.png -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/textures/reframed_special/east.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DriHut/ReFramed/e592db1ea2ada2cede7911cd7e45bf6f61ac9e91/src/main/resources/assets/reframed/textures/reframed_special/east.png -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/textures/reframed_special/north.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DriHut/ReFramed/e592db1ea2ada2cede7911cd7e45bf6f61ac9e91/src/main/resources/assets/reframed/textures/reframed_special/north.png -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/textures/reframed_special/south.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DriHut/ReFramed/e592db1ea2ada2cede7911cd7e45bf6f61ac9e91/src/main/resources/assets/reframed/textures/reframed_special/south.png -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/textures/reframed_special/up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DriHut/ReFramed/e592db1ea2ada2cede7911cd7e45bf6f61ac9e91/src/main/resources/assets/reframed/textures/reframed_special/up.png -------------------------------------------------------------------------------- /src/main/resources/assets/reframed/textures/reframed_special/west.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DriHut/ReFramed/e592db1ea2ada2cede7911cd7e45bf6f61ac9e91/src/main/resources/assets/reframed/textures/reframed_special/west.png -------------------------------------------------------------------------------- /src/main/resources/fabric.mod.json: -------------------------------------------------------------------------------- 1 | { 2 | "schemaVersion": 1, 3 | "id": "${mod_id}", 4 | "version": "${version}", 5 | "name": "ReFramed", 6 | "description": "A remake of forge framed blocks", 7 | "authors": [ 8 | "Adrien1106" 9 | ], 10 | "contact": {}, 11 | "license": "MIT AND LGPL-3.0", 12 | "icon": "assets/reframed-icon.png", 13 | "environment": "*", 14 | "entrypoints": { 15 | "fabric-datagen": [ 16 | "fr.adrien1106.reframed.generator.Generator" 17 | ], 18 | "main": [ 19 | "fr.adrien1106.reframed.ReFramed" 20 | ], 21 | "client": [ 22 | "fr.adrien1106.reframed.client.ReFramedClient" 23 | ] 24 | }, 25 | "mixins": [ 26 | "reframed.mixins.json" 27 | ], 28 | "depends": { 29 | "minecraft": "${minecraft_version}", 30 | "fabricloader": "^${loader_version}", 31 | "fabric-api": "*" 32 | }, 33 | "suggests": { 34 | "athena": "^${athena_version}", 35 | "sodium": "^${sodium_version}", 36 | "indium": "^${indium_version}", 37 | "continuity": "^${continuity_version}" 38 | } 39 | } --------------------------------------------------------------------------------