├── .github └── workflows │ ├── CI.yml │ └── publish.yml ├── .gitignore ├── LICENSE ├── README.md ├── build.gradle ├── changelog.md ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── readme images ├── HUD.png ├── cauldrons.png ├── darksky.gif ├── loading screen.png ├── menu.gif └── reacharound.gif ├── recipeReplacer.py ├── recipeReplacer1_21_4.py ├── settings.gradle ├── spanishLangGenerator.sh └── src ├── main ├── generated │ └── data │ │ └── bedrockify │ │ └── worldgen │ │ ├── configured_feature │ │ ├── dying_birch_tree.json │ │ ├── dying_dark_oak_tree.json │ │ ├── dying_oak_tree.json │ │ ├── dying_pine_tree.json │ │ ├── dying_spruce_tree.json │ │ └── single_piece_of_fern.json │ │ └── placed_feature │ │ ├── dying_birch_tree.json │ │ ├── dying_dark_oak_tree.json │ │ ├── dying_oak_tree.json │ │ ├── dying_oak_tree_plains.json │ │ ├── dying_pine_tree.json │ │ ├── dying_spruce_tree.json │ │ └── single_piece_of_fern_placed.json ├── java │ └── me │ │ └── juancarloscp52 │ │ └── bedrockify │ │ ├── Bedrockify.java │ │ ├── BedrockifySettings.java │ │ ├── client │ │ ├── BedrockifyClient.java │ │ ├── BedrockifyClientSettings.java │ │ ├── BedrockifyModMenu.java │ │ ├── features │ │ │ ├── bedrockShading │ │ │ │ ├── BedrockBlockShading.java │ │ │ │ └── BedrockSunGlareShading.java │ │ │ ├── eatingAnimations │ │ │ │ └── IEatingState.java │ │ │ ├── fishingBobber │ │ │ │ └── FishingBobber3DModel.java │ │ │ ├── heldItemTooltips │ │ │ │ ├── HeldItemTooltips.java │ │ │ │ └── tooltip │ │ │ │ │ ├── ContainerTooltip.java │ │ │ │ │ ├── EnchantmentTooltip.java │ │ │ │ │ ├── PotionTooltip.java │ │ │ │ │ └── Tooltip.java │ │ │ ├── hudOpacity │ │ │ │ └── HudOpacity.java │ │ │ ├── loadingScreens │ │ │ │ ├── ExternalLoadingTips.java │ │ │ │ └── LoadingScreenWidget.java │ │ │ ├── paperDoll │ │ │ │ └── PaperDoll.java │ │ │ ├── reacharoundPlacement │ │ │ │ └── ReachAroundPlacement.java │ │ │ ├── savingOverlay │ │ │ │ └── SavingOverlay.java │ │ │ ├── useAnimations │ │ │ │ └── AnimationsHelper.java │ │ │ └── worldColorNoise │ │ │ │ └── WorldColorNoiseSampler.java │ │ └── gui │ │ │ ├── Overlay.java │ │ │ └── SettingsGUI.java │ │ ├── common │ │ ├── block │ │ │ ├── AbstractBECauldronBlock.java │ │ │ ├── ColoredWaterCauldronBlock.java │ │ │ ├── PotionCauldronBlock.java │ │ │ ├── cauldron │ │ │ │ └── BedrockCauldronBehavior.java │ │ │ └── entity │ │ │ │ └── WaterCauldronBlockEntity.java │ │ ├── features │ │ │ ├── animalEatingParticles │ │ │ │ └── EatingParticlesUtil.java │ │ │ ├── cauldron │ │ │ │ ├── BedrockCauldronBlocks.java │ │ │ │ ├── BedrockCauldronProperties.java │ │ │ │ └── ColorBlenderHelper.java │ │ │ ├── fernBonemeal │ │ │ │ └── FernBonemeal.java │ │ │ ├── fireAspectLight │ │ │ │ └── FireAspectLightHelper.java │ │ │ ├── recipes │ │ │ │ └── DyeHelper.java │ │ │ └── worldGeneration │ │ │ │ ├── DyingTrees.java │ │ │ │ └── FullTrunkVineTreeDecorator.java │ │ └── payloads │ │ │ ├── AbstractVelocityParticlePayload.java │ │ │ ├── CauldronParticlePayload.java │ │ │ └── EatParticlePayload.java │ │ ├── datagen │ │ ├── BedrockIfyDatagen.java │ │ ├── BedrockIfyWorldGenBootstrap.java │ │ └── BedrockIfyWorldGenProvider.java │ │ └── mixin │ │ ├── BedrockIfyMixinPlugin.java │ │ ├── client │ │ ├── core │ │ │ ├── bedrockIfyButton │ │ │ │ └── OptionsScreenMixin.java │ │ │ └── clientRenderTimer │ │ │ │ └── MinecraftClientMixin.java │ │ └── features │ │ │ ├── babyVillagerHeads │ │ │ └── VillagerResemblingModelMixin.java │ │ │ ├── bedrockShading │ │ │ ├── lightBlock │ │ │ │ ├── AbstractTerrainRenderContextMixin.java │ │ │ │ ├── BlockModelRendererMixin.java │ │ │ │ └── FluidRendererMixin.java │ │ │ └── sunGlare │ │ │ │ ├── ClientWorldMixin.java │ │ │ │ ├── SkyRenderingMixin.java │ │ │ │ └── WorldRendererMixin.java │ │ │ ├── biggerDraggingItem │ │ │ └── HandledScreenMixin.java │ │ │ ├── chat │ │ │ └── ChatHudMixin.java │ │ │ ├── eatingAnimations │ │ │ ├── PlayerEntityModelMixin.java │ │ │ ├── PlayerEntityRenderStateMixin.java │ │ │ └── PlayerEntityRendererMixin.java │ │ │ ├── editionBranding │ │ │ └── LogoDrawerMixin.java │ │ │ ├── fishingBobber │ │ │ └── FishingBobberEntityRendererMixin.java │ │ │ ├── heldItemTooltips │ │ │ └── ItemTooltipsMixin.java │ │ │ ├── hudOpacity │ │ │ ├── BossBarHudMixin.java │ │ │ ├── InGameHudMixin.java │ │ │ ├── ItemRendererMixin.java │ │ │ ├── SubtitlesHudMixin.java │ │ │ ├── appleskin │ │ │ │ └── HUDOverlayHandlerMixin.java │ │ │ └── detailArmorBar │ │ │ │ ├── ArmorBarRendererMixin.java │ │ │ │ └── InGameDrawerMixin.java │ │ │ ├── idleHandAnimations │ │ │ └── HeldItemRendererMixin.java │ │ │ ├── loadingScreens │ │ │ ├── ConnectScreenMixin.java │ │ │ ├── DisconnectedScreenMixin.java │ │ │ ├── DownloadingTerrainScreenMixin.java │ │ │ ├── ExtendScreenMixin.java │ │ │ ├── LevelLoadingScreenMixin.java │ │ │ ├── ProgressScreenMixin.java │ │ │ └── SaveLevelScreenMixin.java │ │ │ ├── pickupAnimations │ │ │ └── InGameHudMixin.java │ │ │ ├── reacharoundPlacement │ │ │ └── MinecraftClientMixin.java │ │ │ ├── savingOverlay │ │ │ └── MinecraftServerMixin.java │ │ │ ├── screenSafeArea │ │ │ ├── BossBarHudMixin.java │ │ │ ├── InGameHudMixin.java │ │ │ ├── SubtitlesHudMixin.java │ │ │ └── detailArmorBar │ │ │ │ └── ArmorBarRendererMixin.java │ │ │ ├── slotHighlight │ │ │ └── HandledScreenMixin.java │ │ │ ├── useAnimations │ │ │ ├── ClientPlayNetworkHandlerMixin.java │ │ │ ├── ClientPlayerEntityMixin.java │ │ │ └── ClientPlayerInteractionManagerMixin.java │ │ │ └── worldColorNoise │ │ │ └── BiomeColorsMixin.java │ │ ├── common │ │ ├── features │ │ │ ├── animalEatingParticles │ │ │ │ ├── AnimalEntityMixin.java │ │ │ │ ├── AxolotlEntityMixin.java │ │ │ │ ├── HorseEntityMixin.java │ │ │ │ └── WolfEntityMixin.java │ │ │ ├── cauldron │ │ │ │ ├── ArmorDyeRecipeMixin.java │ │ │ │ └── CauldronBehaviorMixin.java │ │ │ ├── fernBonemeal │ │ │ │ └── GrassBlockMixin.java │ │ │ ├── fertilizableBlocks │ │ │ │ ├── FlowerBlockMixin.java │ │ │ │ └── SugarCaneBlockMixin.java │ │ │ ├── fireAspect │ │ │ │ ├── CampfireBlockMixin.java │ │ │ │ ├── CandleBlockMixin.java │ │ │ │ ├── CandleCakeBlockMixin.java │ │ │ │ ├── PlayerEntityMixin.java │ │ │ │ └── TntBlockMixin.java │ │ │ ├── recipes │ │ │ │ ├── FireworkStarFadeRecipeMixin.java │ │ │ │ ├── FireworkStarRecipeMixin.java │ │ │ │ └── RecipeManagerMixin.java │ │ │ └── worldGeneration │ │ │ │ └── TreeConfiguredFeaturesInvoker.java │ │ └── workaround │ │ │ └── cauldron │ │ │ └── TagGroupLoaderMixin.java │ │ └── featureManager │ │ └── MixinFeatureManager.java └── resources │ ├── assets │ ├── bedrockify │ │ ├── blockstates │ │ │ ├── colored_water_cauldron.json │ │ │ └── potion_cauldron.json │ │ ├── icon.png │ │ ├── lang │ │ │ ├── ar_sa.json │ │ │ ├── de_de.json │ │ │ ├── en_us.json │ │ │ ├── es_ar.json │ │ │ ├── es_cl.json │ │ │ ├── es_ec.json │ │ │ ├── es_es.json │ │ │ ├── es_mx.json │ │ │ ├── es_uy.json │ │ │ ├── es_ve.json │ │ │ ├── et_ee.json │ │ │ ├── fr_fr.json │ │ │ ├── pl_pl.json │ │ │ ├── pt_br.json │ │ │ ├── ru_ru.json │ │ │ ├── sr_sp.json │ │ │ ├── tr_tr.json │ │ │ ├── uk_ua.json │ │ │ ├── vi_vn.json │ │ │ ├── zh_cn.json │ │ │ └── zh_tw.json │ │ ├── models │ │ │ └── block │ │ │ │ ├── colored_water_cauldron_level1.json │ │ │ │ ├── colored_water_cauldron_level3.json │ │ │ │ ├── colored_water_cauldron_level5.json │ │ │ │ ├── potion_cauldron_level1.json │ │ │ │ ├── potion_cauldron_level2.json │ │ │ │ ├── potion_cauldron_level3.json │ │ │ │ ├── potion_cauldron_level4.json │ │ │ │ ├── potion_cauldron_level5.json │ │ │ │ ├── potion_cauldron_level6.json │ │ │ │ ├── potion_cauldron_level7.json │ │ │ │ ├── template_cauldron_6_level1.json │ │ │ │ ├── template_cauldron_6_level3.json │ │ │ │ ├── template_cauldron_6_level5.json │ │ │ │ ├── template_cauldron_8_level1.json │ │ │ │ ├── template_cauldron_8_level2.json │ │ │ │ ├── template_cauldron_8_level3.json │ │ │ │ ├── template_cauldron_8_level4.json │ │ │ │ ├── template_cauldron_8_level5.json │ │ │ │ ├── template_cauldron_8_level6.json │ │ │ │ └── template_cauldron_8_level7.json │ │ └── textures │ │ │ ├── entity │ │ │ └── fishing_hook.png │ │ │ └── gui │ │ │ ├── bedrockify_widgets.png │ │ │ ├── footer_separator.png │ │ │ └── header_separator.png │ └── minecraft │ │ └── textures │ │ └── item │ │ ├── dried_kelp.png │ │ └── seagrass.png │ ├── bedrockify.accesswidener │ ├── bedrockify.mixins.json │ ├── data │ ├── bedrockify │ │ ├── loot_table │ │ │ └── blocks │ │ │ │ ├── colored_water_cauldron.json │ │ │ │ └── potion_cauldron.json │ │ └── recipe │ │ │ ├── barrel.json │ │ │ ├── black_bed_from_white_bed.json │ │ │ ├── black_bed_from_white_bed_ink_sac.json │ │ │ ├── black_bundle_ink_sac.json │ │ │ ├── black_carpet_from_white_carpet_ink_sac.json │ │ │ ├── black_concrete_powder_ink_sac.json │ │ │ ├── black_shulker_box_ink_sac.json │ │ │ ├── black_stained_glass_ink_sac.json │ │ │ ├── black_stained_glass_pane_from_glass_pane_ink_sac.json │ │ │ ├── black_terracotta_ink_sac.json │ │ │ ├── black_wool.json │ │ │ ├── black_wool_ink_sac.json │ │ │ ├── blue_bed_from_white_bed.json │ │ │ ├── blue_bed_from_white_bed_lapis_lazuli.json │ │ │ ├── blue_bundle_lapis_lazuli.json │ │ │ ├── blue_carpet_from_white_carpet.json │ │ │ ├── blue_concrete_powder_lapis_lazuli.json │ │ │ ├── blue_shulker_box_lapis_lazuli.json │ │ │ ├── blue_stained_glass_lapis_lazuli.json │ │ │ ├── blue_stained_glass_pane_from_glass_pane_lapis_lazuli.json │ │ │ ├── blue_terracotta_lapis_lazuli.json │ │ │ ├── blue_wool.json │ │ │ ├── blue_wool_lapis_lazuli.json │ │ │ ├── brown_bed_from_white_bed.json │ │ │ ├── brown_bed_from_white_bed_cocoa_beans.json │ │ │ ├── brown_bundle_cocoa_beans.json │ │ │ ├── brown_carpet_from_white_carpet_cocoa_beans.json │ │ │ ├── brown_concrete_powder_cocoa_beans.json │ │ │ ├── brown_shulker_box_cocoa_beans.json │ │ │ ├── brown_stained_glass_cocoa_beans.json │ │ │ ├── brown_stained_glass_pane_from_glass_pane_cocoa_beans.json │ │ │ ├── brown_terracotta_cocoa_beans.json │ │ │ ├── brown_wool.json │ │ │ ├── brown_wool_cocoa_beans.json │ │ │ ├── carrot_on_a_stick.json │ │ │ ├── cyan_bed_from_white_bed.json │ │ │ ├── cyan_dye_from_lapis_lazuli.json │ │ │ ├── cyan_wool.json │ │ │ ├── dark_prismarine.json │ │ │ ├── dark_prismarine_extra.json │ │ │ ├── gray_bed_from_white_bed.json │ │ │ ├── gray_dye_bone_meal.json │ │ │ ├── gray_dye_ink_sac.json │ │ │ ├── gray_dye_ink_sac_bone_meal.json │ │ │ ├── gray_wool.json │ │ │ ├── green_bed_from_white_bed.json │ │ │ ├── green_wool.json │ │ │ ├── light_blue_bed_from_white_bed.json │ │ │ ├── light_blue_dye_from_blue_dye_bone_meal.json │ │ │ ├── light_blue_dye_from_lapis_lazuli_bone_meal.json │ │ │ ├── light_blue_dye_from_lapis_lazuli_white_dye.json │ │ │ ├── light_blue_wool.json │ │ │ ├── light_gray_bed_from_white_bed.json │ │ │ ├── light_gray_dye_from_black_dye_bone_meal.json │ │ │ ├── light_gray_dye_from_gray_dye_bone_meal.json │ │ │ ├── light_gray_wool.json │ │ │ ├── lime_bed_from_white_bed.json │ │ │ ├── lime_dye_with_bone_meal.json │ │ │ ├── lime_wool.json │ │ │ ├── magenta_bed_from_white_bed.json │ │ │ ├── magenta_dye_from_blue_red_bone_meal_dye.json │ │ │ ├── magenta_dye_from_lapis_lazuli_red_bone_meal_dye.json │ │ │ ├── magenta_dye_from_lapis_lazuli_red_pink.json │ │ │ ├── magenta_dye_from_lapis_lazuli_red_white_dye.json │ │ │ ├── magenta_wool.json │ │ │ ├── orange_bed_from_white_bed.json │ │ │ ├── orange_wool.json │ │ │ ├── pink_bed_from_white_bed.json │ │ │ ├── pink_dye_from_red_dye_bone_meal.json │ │ │ ├── pink_wool.json │ │ │ ├── purple_bed_from_white_bed.json │ │ │ ├── purple_dye_from_lapis_lazuli.json │ │ │ ├── purple_wool.json │ │ │ ├── red_bed_from_white_bed.json │ │ │ ├── red_wool.json │ │ │ ├── string_from_cobweb.json │ │ │ ├── white_bed_from_white_bed.json │ │ │ ├── white_bed_from_white_bed_bone_meal.json │ │ │ ├── white_bundle_bone_meal.json │ │ │ ├── white_concrete_powder_bone_meal.json │ │ │ ├── white_shulker_box_bone_meal.json │ │ │ ├── white_stained_glass_bone_meal.json │ │ │ ├── white_stained_glass_pane_from_glass_pane_bone_meal.json │ │ │ ├── white_terracotta_bone_meal.json │ │ │ ├── white_wool_bone_meal.json │ │ │ ├── white_wool_from_colored.json │ │ │ ├── yellow_bed_from_white_bed.json │ │ │ └── yellow_wool.json │ └── minecraft │ │ └── tags │ │ └── block │ │ └── cauldrons.json │ └── fabric.mod.json └── test └── java └── me └── juancarloscp52 └── bedrockify └── test └── client └── features └── bedrockShading └── sunGlare └── IrisCompatTest.java /.github/workflows/CI.yml: -------------------------------------------------------------------------------- 1 | name: Build Bedrockify dev 2 | 3 | on: [push] 4 | 5 | jobs: 6 | build: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - name: Checkout Repository 10 | uses: actions/checkout@v3 11 | with: 12 | submodules: true 13 | 14 | - name: Get Commit hash 15 | run: echo "SHORT_SHA=`echo ${GITHUB_SHA} | cut -c1-8`" >> $GITHUB_ENV 16 | 17 | - name: Change Mod Version 18 | uses: dschanoeh/change-property@v1 19 | with: 20 | file: gradle.properties 21 | property: mod_version 22 | value: "dev-${{env.SHORT_SHA}}" 23 | 24 | - name: Setup Java 25 | uses: actions/setup-java@v2 26 | with: 27 | distribution: "temurin" 28 | java-version: 21 29 | 30 | - name: Make Gradle Wrapper Executable 31 | if: ${{ runner.os != 'Windows' }} 32 | run: chmod +x ./gradlew 33 | 34 | - name: Build 35 | run: ./gradlew clean build 36 | 37 | - name: Publish BedrockIfy 38 | uses: actions/upload-artifact@v4 39 | with: 40 | name: "BedrockIfy Dev ${{env.SHORT_SHA}}" 41 | path: ${{github.workspace}}/build/libs/*.jar -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # eclipse 2 | bin 3 | *.launch 4 | .settings 5 | .metadata 6 | .classpath 7 | .project 8 | classes 9 | 10 | # idea 11 | out 12 | *.ipr 13 | *.iws 14 | *.iml 15 | .idea 16 | 17 | # gradle 18 | build 19 | .gradle 20 | 21 | # other 22 | eclipse 23 | run 24 | logs 25 | 26 | Thumbs.db 27 | *.psd 28 | /src/main/generated/.cache/ 29 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx2048m 2 | # Fabric Properties 3 | # check these on https://fabricmc.net/develop/ 4 | minecraft_version=1.21.5 5 | yarn_mappings=1.21.5+build.1 6 | loader_version=0.16.10 7 | 8 | # Mod Properties 9 | mod_version = 1.11.1 10 | maven_group = me.juancarloscp52 11 | archives_base_name = bedrockify 12 | 13 | # Dependencies 14 | fabric_version=0.119.5+1.21.5 15 | modmenu_version=14.0.0-rc.2 16 | cloth_config_version=18.0.145 17 | apple_skin=mc1.21.3-3.0.6 18 | dab_version=2.6.3+1.21.3-fabric 19 | iris_version=1.7.1+1.21 20 | sodium_version=mc1.20.1-0.5.10 -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/juancarloscp52/BedrockIfy/f49269c0f4cc0f9f2882fea781b11915727b0887/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.12-bin.zip 4 | networkTimeout=10000 5 | validateDistributionUrl=true 6 | zipStoreBase=GRADLE_USER_HOME 7 | zipStorePath=wrapper/dists 8 | -------------------------------------------------------------------------------- /readme images/HUD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/juancarloscp52/BedrockIfy/f49269c0f4cc0f9f2882fea781b11915727b0887/readme images/HUD.png -------------------------------------------------------------------------------- /readme images/cauldrons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/juancarloscp52/BedrockIfy/f49269c0f4cc0f9f2882fea781b11915727b0887/readme images/cauldrons.png -------------------------------------------------------------------------------- /readme images/darksky.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/juancarloscp52/BedrockIfy/f49269c0f4cc0f9f2882fea781b11915727b0887/readme images/darksky.gif -------------------------------------------------------------------------------- /readme images/loading screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/juancarloscp52/BedrockIfy/f49269c0f4cc0f9f2882fea781b11915727b0887/readme images/loading screen.png -------------------------------------------------------------------------------- /readme images/menu.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/juancarloscp52/BedrockIfy/f49269c0f4cc0f9f2882fea781b11915727b0887/readme images/menu.gif -------------------------------------------------------------------------------- /readme images/reacharound.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/juancarloscp52/BedrockIfy/f49269c0f4cc0f9f2882fea781b11915727b0887/readme images/reacharound.gif -------------------------------------------------------------------------------- /recipeReplacer.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | """ Recipe Replacer for Minecraft 1.20.5 4 | Created at Apr 30, 2024 by lonefelidae16 5 | 6 | Usage: 7 | > recipeReplacer.py [--help | -h] [--test | -t] /path/to/target/recipe.json 8 | 9 | """ 10 | 11 | import json 12 | import sys 13 | import argparse 14 | 15 | parser = argparse.ArgumentParser( 16 | prog='RecipeReplacer', 17 | description='Make recipe.json compatible with MC1.20.5') 18 | parser.add_argument('filename') 19 | parser.add_argument('-t', '--test', action='store_true', help='show result JSON to STDOUT, no changes to the specified file') 20 | args = parser.parse_args() 21 | 22 | if __name__ == '__main__': 23 | 24 | struct = {} 25 | replaced = False 26 | with open(args.filename, 'r') as target_file: 27 | struct = json.load(target_file) 28 | if not 'result' in struct: 29 | exit() 30 | if 'item' in struct['result']: 31 | struct['result']['id'] = struct['result']['item'] 32 | del struct['result']['item'] 33 | replaced = True 34 | elif type(struct['result']) is str: 35 | _result = struct['result'] 36 | struct['result'] = {} 37 | struct['result']['id'] = _result 38 | replaced = True 39 | 40 | if replaced: 41 | if args.test: 42 | print(json.dumps(struct, indent=2)) 43 | else: 44 | with open(args.filename, 'w') as target_file: 45 | json.dump(struct, target_file, indent=2) 46 | else: 47 | print(args.filename + ": no changes made") 48 | -------------------------------------------------------------------------------- /recipeReplacer1_21_4.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | """ Recipe Replacer for Minecraft 1.21.4 4 | Created at Dec 12, 2024 by lonefelidae16 5 | 6 | Usage: 7 | > recipeReplacer1_21_4.py [--help | -h] [--test | -t] /path/to/target/recipe.json 8 | 9 | """ 10 | 11 | import json 12 | import sys 13 | import argparse 14 | 15 | parser = argparse.ArgumentParser( 16 | prog='RecipeReplacer', 17 | description='Make recipe.json compatible with MC1.21.4') 18 | parser.add_argument('filename') 19 | parser.add_argument('-t', '--test', action='store_true', help='show result JSON to STDOUT, no changes to the specified file') 20 | args = parser.parse_args() 21 | 22 | if __name__ == '__main__': 23 | 24 | struct = {} 25 | replaced = False 26 | with open(args.filename, 'r') as target_file: 27 | struct = json.load(target_file) 28 | if not 'type' in struct or not 'result' in struct: 29 | exit() 30 | if struct['type'] == 'minecraft:crafting_shapeless': 31 | ingredient_arr = [] 32 | for ing in struct['ingredients']: 33 | if 'item' in ing: 34 | ingredient_arr.append(ing['item']) 35 | elif 'tag' in ing: 36 | ingredient_arr.append('#' + ing['tag']) 37 | struct['ingredients'] = ingredient_arr 38 | replaced = True 39 | elif struct['type'] == 'minecraft:crafting_shaped': 40 | if not 'key' in struct: 41 | exit() 42 | for k in struct['key']: 43 | if 'item' in struct['key'][k]: 44 | _item = struct['key'][k]['item'] 45 | del struct['key'][k]['item'] 46 | struct['key'][k] = _item 47 | replaced = True 48 | elif 'tag' in struct['key'][k]: 49 | _tag = '#' + struct['key'][k]['tag'] 50 | del struct['key'][k]['tag'] 51 | struct['key'][k] = _tag 52 | replaced = True 53 | if type(struct['result']) is not str and not 'count' in struct['result']: 54 | struct['result']['count'] = 1 55 | replaced = True 56 | 57 | if replaced: 58 | if args.test: 59 | print(json.dumps(struct, indent=2)) 60 | else: 61 | with open(args.filename, 'w') as target_file: 62 | json.dump(struct, target_file, indent=2) 63 | else: 64 | print(args.filename + ": no changes made") 65 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | jcenter() 4 | maven { 5 | name = 'Fabric' 6 | url = 'https://maven.fabricmc.net/' 7 | } 8 | gradlePluginPortal() 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /spanishLangGenerator.sh: -------------------------------------------------------------------------------- 1 | 2 | cd src/main/resources/assets/bedrockify/lang 3 | list=("ar" "cl" "ec" "mx" "uy" "ve") 4 | for elem in ar cl ec mx uy ve; do 5 | echo $elem 6 | cp es_es.json es_$elem.json 7 | done -------------------------------------------------------------------------------- /src/main/generated/data/bedrockify/worldgen/configured_feature/dying_birch_tree.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:tree", 3 | "config": { 4 | "decorators": [ 5 | { 6 | "type": "bedrockify:vinedecorator" 7 | } 8 | ], 9 | "dirt_provider": { 10 | "type": "minecraft:simple_state_provider", 11 | "state": { 12 | "Name": "minecraft:dirt" 13 | } 14 | }, 15 | "foliage_placer": { 16 | "type": "minecraft:blob_foliage_placer", 17 | "height": 3, 18 | "offset": 0, 19 | "radius": 2 20 | }, 21 | "foliage_provider": { 22 | "type": "minecraft:simple_state_provider", 23 | "state": { 24 | "Name": "minecraft:birch_leaves", 25 | "Properties": { 26 | "distance": "7", 27 | "persistent": "false", 28 | "waterlogged": "false" 29 | } 30 | } 31 | }, 32 | "force_dirt": false, 33 | "ignore_vines": true, 34 | "minimum_size": { 35 | "type": "minecraft:two_layers_feature_size", 36 | "limit": 1, 37 | "lower_size": 0, 38 | "upper_size": 1 39 | }, 40 | "trunk_placer": { 41 | "type": "minecraft:straight_trunk_placer", 42 | "base_height": 5, 43 | "height_rand_a": 2, 44 | "height_rand_b": 0 45 | }, 46 | "trunk_provider": { 47 | "type": "minecraft:simple_state_provider", 48 | "state": { 49 | "Name": "minecraft:birch_log", 50 | "Properties": { 51 | "axis": "y" 52 | } 53 | } 54 | } 55 | } 56 | } -------------------------------------------------------------------------------- /src/main/generated/data/bedrockify/worldgen/configured_feature/dying_dark_oak_tree.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:tree", 3 | "config": { 4 | "decorators": [ 5 | { 6 | "type": "bedrockify:vinedecorator" 7 | } 8 | ], 9 | "dirt_provider": { 10 | "type": "minecraft:simple_state_provider", 11 | "state": { 12 | "Name": "minecraft:dirt" 13 | } 14 | }, 15 | "foliage_placer": { 16 | "type": "minecraft:dark_oak_foliage_placer", 17 | "offset": 0, 18 | "radius": 0 19 | }, 20 | "foliage_provider": { 21 | "type": "minecraft:simple_state_provider", 22 | "state": { 23 | "Name": "minecraft:dark_oak_leaves", 24 | "Properties": { 25 | "distance": "7", 26 | "persistent": "false", 27 | "waterlogged": "false" 28 | } 29 | } 30 | }, 31 | "force_dirt": false, 32 | "ignore_vines": true, 33 | "minimum_size": { 34 | "type": "minecraft:three_layers_feature_size", 35 | "limit": 1, 36 | "lower_size": 0, 37 | "middle_size": 1, 38 | "upper_limit": 1, 39 | "upper_size": 2 40 | }, 41 | "trunk_placer": { 42 | "type": "minecraft:dark_oak_trunk_placer", 43 | "base_height": 6, 44 | "height_rand_a": 2, 45 | "height_rand_b": 1 46 | }, 47 | "trunk_provider": { 48 | "type": "minecraft:simple_state_provider", 49 | "state": { 50 | "Name": "minecraft:dark_oak_log", 51 | "Properties": { 52 | "axis": "y" 53 | } 54 | } 55 | } 56 | } 57 | } -------------------------------------------------------------------------------- /src/main/generated/data/bedrockify/worldgen/configured_feature/dying_oak_tree.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:tree", 3 | "config": { 4 | "decorators": [ 5 | { 6 | "type": "bedrockify:vinedecorator" 7 | } 8 | ], 9 | "dirt_provider": { 10 | "type": "minecraft:simple_state_provider", 11 | "state": { 12 | "Name": "minecraft:dirt" 13 | } 14 | }, 15 | "foliage_placer": { 16 | "type": "minecraft:blob_foliage_placer", 17 | "height": 3, 18 | "offset": 0, 19 | "radius": 2 20 | }, 21 | "foliage_provider": { 22 | "type": "minecraft:simple_state_provider", 23 | "state": { 24 | "Name": "minecraft:oak_leaves", 25 | "Properties": { 26 | "distance": "7", 27 | "persistent": "false", 28 | "waterlogged": "false" 29 | } 30 | } 31 | }, 32 | "force_dirt": false, 33 | "ignore_vines": true, 34 | "minimum_size": { 35 | "type": "minecraft:two_layers_feature_size", 36 | "limit": 1, 37 | "lower_size": 0, 38 | "upper_size": 1 39 | }, 40 | "trunk_placer": { 41 | "type": "minecraft:straight_trunk_placer", 42 | "base_height": 4, 43 | "height_rand_a": 2, 44 | "height_rand_b": 0 45 | }, 46 | "trunk_provider": { 47 | "type": "minecraft:simple_state_provider", 48 | "state": { 49 | "Name": "minecraft:oak_log", 50 | "Properties": { 51 | "axis": "y" 52 | } 53 | } 54 | } 55 | } 56 | } -------------------------------------------------------------------------------- /src/main/generated/data/bedrockify/worldgen/configured_feature/dying_pine_tree.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:tree", 3 | "config": { 4 | "decorators": [ 5 | { 6 | "type": "bedrockify:vinedecorator" 7 | } 8 | ], 9 | "dirt_provider": { 10 | "type": "minecraft:simple_state_provider", 11 | "state": { 12 | "Name": "minecraft:dirt" 13 | } 14 | }, 15 | "foliage_placer": { 16 | "type": "minecraft:pine_foliage_placer", 17 | "height": { 18 | "type": "minecraft:uniform", 19 | "max_inclusive": 4, 20 | "min_inclusive": 3 21 | }, 22 | "offset": 1, 23 | "radius": 1 24 | }, 25 | "foliage_provider": { 26 | "type": "minecraft:simple_state_provider", 27 | "state": { 28 | "Name": "minecraft:spruce_leaves", 29 | "Properties": { 30 | "distance": "7", 31 | "persistent": "false", 32 | "waterlogged": "false" 33 | } 34 | } 35 | }, 36 | "force_dirt": false, 37 | "ignore_vines": true, 38 | "minimum_size": { 39 | "type": "minecraft:two_layers_feature_size", 40 | "limit": 2, 41 | "lower_size": 0, 42 | "upper_size": 2 43 | }, 44 | "trunk_placer": { 45 | "type": "minecraft:straight_trunk_placer", 46 | "base_height": 6, 47 | "height_rand_a": 4, 48 | "height_rand_b": 0 49 | }, 50 | "trunk_provider": { 51 | "type": "minecraft:simple_state_provider", 52 | "state": { 53 | "Name": "minecraft:spruce_log", 54 | "Properties": { 55 | "axis": "y" 56 | } 57 | } 58 | } 59 | } 60 | } -------------------------------------------------------------------------------- /src/main/generated/data/bedrockify/worldgen/configured_feature/dying_spruce_tree.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:tree", 3 | "config": { 4 | "decorators": [ 5 | { 6 | "type": "bedrockify:vinedecorator" 7 | } 8 | ], 9 | "dirt_provider": { 10 | "type": "minecraft:simple_state_provider", 11 | "state": { 12 | "Name": "minecraft:dirt" 13 | } 14 | }, 15 | "foliage_placer": { 16 | "type": "minecraft:spruce_foliage_placer", 17 | "offset": { 18 | "type": "minecraft:uniform", 19 | "max_inclusive": 2, 20 | "min_inclusive": 0 21 | }, 22 | "radius": { 23 | "type": "minecraft:uniform", 24 | "max_inclusive": 3, 25 | "min_inclusive": 2 26 | }, 27 | "trunk_height": { 28 | "type": "minecraft:uniform", 29 | "max_inclusive": 2, 30 | "min_inclusive": 1 31 | } 32 | }, 33 | "foliage_provider": { 34 | "type": "minecraft:simple_state_provider", 35 | "state": { 36 | "Name": "minecraft:spruce_leaves", 37 | "Properties": { 38 | "distance": "7", 39 | "persistent": "false", 40 | "waterlogged": "false" 41 | } 42 | } 43 | }, 44 | "force_dirt": false, 45 | "ignore_vines": true, 46 | "minimum_size": { 47 | "type": "minecraft:two_layers_feature_size", 48 | "limit": 2, 49 | "lower_size": 0, 50 | "upper_size": 2 51 | }, 52 | "trunk_placer": { 53 | "type": "minecraft:straight_trunk_placer", 54 | "base_height": 5, 55 | "height_rand_a": 2, 56 | "height_rand_b": 1 57 | }, 58 | "trunk_provider": { 59 | "type": "minecraft:simple_state_provider", 60 | "state": { 61 | "Name": "minecraft:spruce_log", 62 | "Properties": { 63 | "axis": "y" 64 | } 65 | } 66 | } 67 | } 68 | } -------------------------------------------------------------------------------- /src/main/generated/data/bedrockify/worldgen/configured_feature/single_piece_of_fern.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:simple_block", 3 | "config": { 4 | "to_place": { 5 | "type": "minecraft:simple_state_provider", 6 | "state": { 7 | "Name": "minecraft:fern" 8 | } 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /src/main/generated/data/bedrockify/worldgen/placed_feature/dying_birch_tree.json: -------------------------------------------------------------------------------- 1 | { 2 | "feature": "bedrockify:dying_birch_tree", 3 | "placement": [ 4 | { 5 | "type": "minecraft:count", 6 | "count": { 7 | "type": "minecraft:weighted_list", 8 | "distribution": [ 9 | { 10 | "data": 0, 11 | "weight": 3 12 | }, 13 | { 14 | "data": 2, 15 | "weight": 1 16 | } 17 | ] 18 | } 19 | }, 20 | { 21 | "type": "minecraft:in_square" 22 | }, 23 | { 24 | "type": "minecraft:surface_water_depth_filter", 25 | "max_water_depth": 0 26 | }, 27 | { 28 | "type": "minecraft:heightmap", 29 | "heightmap": "OCEAN_FLOOR" 30 | }, 31 | { 32 | "type": "minecraft:biome" 33 | }, 34 | { 35 | "type": "minecraft:block_predicate_filter", 36 | "predicate": { 37 | "type": "minecraft:would_survive", 38 | "state": { 39 | "Name": "minecraft:birch_sapling", 40 | "Properties": { 41 | "stage": "0" 42 | } 43 | } 44 | } 45 | } 46 | ] 47 | } -------------------------------------------------------------------------------- /src/main/generated/data/bedrockify/worldgen/placed_feature/dying_dark_oak_tree.json: -------------------------------------------------------------------------------- 1 | { 2 | "feature": "bedrockify:dying_dark_oak_tree", 3 | "placement": [ 4 | { 5 | "type": "minecraft:count", 6 | "count": { 7 | "type": "minecraft:weighted_list", 8 | "distribution": [ 9 | { 10 | "data": 1, 11 | "weight": 9 12 | }, 13 | { 14 | "data": 1, 15 | "weight": 1 16 | } 17 | ] 18 | } 19 | }, 20 | { 21 | "type": "minecraft:in_square" 22 | }, 23 | { 24 | "type": "minecraft:surface_water_depth_filter", 25 | "max_water_depth": 0 26 | }, 27 | { 28 | "type": "minecraft:heightmap", 29 | "heightmap": "OCEAN_FLOOR" 30 | }, 31 | { 32 | "type": "minecraft:biome" 33 | }, 34 | { 35 | "type": "minecraft:block_predicate_filter", 36 | "predicate": { 37 | "type": "minecraft:would_survive", 38 | "state": { 39 | "Name": "minecraft:dark_oak_sapling", 40 | "Properties": { 41 | "stage": "0" 42 | } 43 | } 44 | } 45 | } 46 | ] 47 | } -------------------------------------------------------------------------------- /src/main/generated/data/bedrockify/worldgen/placed_feature/dying_oak_tree.json: -------------------------------------------------------------------------------- 1 | { 2 | "feature": "bedrockify:dying_oak_tree", 3 | "placement": [ 4 | { 5 | "type": "minecraft:count", 6 | "count": { 7 | "type": "minecraft:weighted_list", 8 | "distribution": [ 9 | { 10 | "data": 1, 11 | "weight": 9 12 | }, 13 | { 14 | "data": 1, 15 | "weight": 1 16 | } 17 | ] 18 | } 19 | }, 20 | { 21 | "type": "minecraft:in_square" 22 | }, 23 | { 24 | "type": "minecraft:surface_water_depth_filter", 25 | "max_water_depth": 0 26 | }, 27 | { 28 | "type": "minecraft:heightmap", 29 | "heightmap": "OCEAN_FLOOR" 30 | }, 31 | { 32 | "type": "minecraft:biome" 33 | }, 34 | { 35 | "type": "minecraft:block_predicate_filter", 36 | "predicate": { 37 | "type": "minecraft:would_survive", 38 | "state": { 39 | "Name": "minecraft:oak_sapling", 40 | "Properties": { 41 | "stage": "0" 42 | } 43 | } 44 | } 45 | } 46 | ] 47 | } -------------------------------------------------------------------------------- /src/main/generated/data/bedrockify/worldgen/placed_feature/dying_oak_tree_plains.json: -------------------------------------------------------------------------------- 1 | { 2 | "feature": "bedrockify:dying_oak_tree", 3 | "placement": [ 4 | { 5 | "type": "minecraft:count", 6 | "count": { 7 | "type": "minecraft:weighted_list", 8 | "distribution": [ 9 | { 10 | "data": 0, 11 | "weight": 99 12 | }, 13 | { 14 | "data": 1, 15 | "weight": 1 16 | } 17 | ] 18 | } 19 | }, 20 | { 21 | "type": "minecraft:in_square" 22 | }, 23 | { 24 | "type": "minecraft:surface_water_depth_filter", 25 | "max_water_depth": 0 26 | }, 27 | { 28 | "type": "minecraft:heightmap", 29 | "heightmap": "OCEAN_FLOOR" 30 | }, 31 | { 32 | "type": "minecraft:biome" 33 | }, 34 | { 35 | "type": "minecraft:block_predicate_filter", 36 | "predicate": { 37 | "type": "minecraft:would_survive", 38 | "state": { 39 | "Name": "minecraft:oak_sapling", 40 | "Properties": { 41 | "stage": "0" 42 | } 43 | } 44 | } 45 | } 46 | ] 47 | } -------------------------------------------------------------------------------- /src/main/generated/data/bedrockify/worldgen/placed_feature/dying_pine_tree.json: -------------------------------------------------------------------------------- 1 | { 2 | "feature": "bedrockify:dying_pine_tree", 3 | "placement": [ 4 | { 5 | "type": "minecraft:count", 6 | "count": { 7 | "type": "minecraft:weighted_list", 8 | "distribution": [ 9 | { 10 | "data": 1, 11 | "weight": 9 12 | }, 13 | { 14 | "data": 1, 15 | "weight": 1 16 | } 17 | ] 18 | } 19 | }, 20 | { 21 | "type": "minecraft:in_square" 22 | }, 23 | { 24 | "type": "minecraft:surface_water_depth_filter", 25 | "max_water_depth": 0 26 | }, 27 | { 28 | "type": "minecraft:heightmap", 29 | "heightmap": "OCEAN_FLOOR" 30 | }, 31 | { 32 | "type": "minecraft:biome" 33 | }, 34 | { 35 | "type": "minecraft:block_predicate_filter", 36 | "predicate": { 37 | "type": "minecraft:would_survive", 38 | "state": { 39 | "Name": "minecraft:spruce_sapling", 40 | "Properties": { 41 | "stage": "0" 42 | } 43 | } 44 | } 45 | } 46 | ] 47 | } -------------------------------------------------------------------------------- /src/main/generated/data/bedrockify/worldgen/placed_feature/dying_spruce_tree.json: -------------------------------------------------------------------------------- 1 | { 2 | "feature": "bedrockify:dying_spruce_tree", 3 | "placement": [ 4 | { 5 | "type": "minecraft:count", 6 | "count": { 7 | "type": "minecraft:weighted_list", 8 | "distribution": [ 9 | { 10 | "data": 1, 11 | "weight": 9 12 | }, 13 | { 14 | "data": 1, 15 | "weight": 1 16 | } 17 | ] 18 | } 19 | }, 20 | { 21 | "type": "minecraft:in_square" 22 | }, 23 | { 24 | "type": "minecraft:surface_water_depth_filter", 25 | "max_water_depth": 0 26 | }, 27 | { 28 | "type": "minecraft:heightmap", 29 | "heightmap": "OCEAN_FLOOR" 30 | }, 31 | { 32 | "type": "minecraft:biome" 33 | }, 34 | { 35 | "type": "minecraft:block_predicate_filter", 36 | "predicate": { 37 | "type": "minecraft:would_survive", 38 | "state": { 39 | "Name": "minecraft:spruce_sapling", 40 | "Properties": { 41 | "stage": "0" 42 | } 43 | } 44 | } 45 | } 46 | ] 47 | } -------------------------------------------------------------------------------- /src/main/generated/data/bedrockify/worldgen/placed_feature/single_piece_of_fern_placed.json: -------------------------------------------------------------------------------- 1 | { 2 | "feature": "bedrockify:single_piece_of_fern", 3 | "placement": [ 4 | { 5 | "type": "minecraft:block_predicate_filter", 6 | "predicate": { 7 | "type": "minecraft:matching_blocks", 8 | "blocks": "minecraft:air" 9 | } 10 | } 11 | ] 12 | } -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/BedrockifySettings.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify; 2 | 3 | public class BedrockifySettings { 4 | 5 | public boolean bedrockRecipes = true; 6 | public boolean dyingTrees = true; 7 | public boolean fireAspectLight = true; 8 | public boolean fernBonemeal = true; 9 | public boolean bedrockCauldron = true; 10 | 11 | public boolean isBedrockRecipesEnabled() { 12 | return bedrockRecipes; 13 | } 14 | 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/client/BedrockifyModMenu.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.client; 2 | 3 | import com.terraformersmc.modmenu.api.ConfigScreenFactory; 4 | import com.terraformersmc.modmenu.api.ModMenuApi; 5 | 6 | public class BedrockifyModMenu implements ModMenuApi { 7 | 8 | @Override 9 | public ConfigScreenFactory getModConfigScreenFactory() { 10 | return (parent)-> BedrockifyClient.getInstance().settingsGUI.getConfigScreen(parent); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/client/features/bedrockShading/BedrockBlockShading.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.client.features.bedrockShading; 2 | 3 | import net.minecraft.client.MinecraftClient; 4 | import net.minecraft.util.math.Direction; 5 | import net.minecraft.world.World; 6 | 7 | /** 8 | * @author Shaddatic 9 | */ 10 | public class BedrockBlockShading { 11 | 12 | public float getBlockShade (Direction direction){ 13 | MinecraftClient client = MinecraftClient.getInstance(); 14 | return switch (direction) { 15 | case UP -> 1.0f; 16 | case DOWN -> client.player.getWorld().getRegistryKey() == World.NETHER ? 0.9f : 0.87f; 17 | case NORTH, SOUTH -> 0.95f; 18 | default -> 0.9f; 19 | }; 20 | } 21 | public float getLiquidShade(Direction direction, boolean isLuminous){ 22 | return switch (direction) { 23 | case UP -> 1.0f; 24 | case DOWN -> isLuminous ? 0.9f : 0.5f; 25 | default -> isLuminous ? 0.9f : 0.6f; 26 | }; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/client/features/eatingAnimations/IEatingState.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.client.features.eatingAnimations; 2 | 3 | import net.minecraft.util.Hand; 4 | 5 | import java.util.Optional; 6 | 7 | public interface IEatingState { 8 | default void setEatingHand(Hand hand) { 9 | } 10 | 11 | default Optional getEatingHand() { 12 | return Optional.empty(); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/client/features/fishingBobber/FishingBobber3DModel.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.client.features.fishingBobber; 2 | 3 | import me.juancarloscp52.bedrockify.Bedrockify; 4 | import net.minecraft.client.model.*; 5 | import net.minecraft.client.render.RenderLayer; 6 | import net.minecraft.client.render.entity.model.EntityModel; 7 | import net.minecraft.client.render.entity.model.EntityModelLayer; 8 | import net.minecraft.client.render.entity.state.FishingBobberEntityState; 9 | import net.minecraft.util.Identifier; 10 | import org.jetbrains.annotations.NotNull; 11 | 12 | public class FishingBobber3DModel extends EntityModel { 13 | public static final EntityModelLayer MODEL_LAYER = new EntityModelLayer(Identifier.of(Bedrockify.MOD_ID, "fishing_hook"), "main"); 14 | public static final Identifier TEXTURE = Identifier.of(Bedrockify.MOD_ID, "textures/entity/fishing_hook.png"); 15 | public static final RenderLayer RENDER_LAYER = RenderLayer.getEntityTranslucent(TEXTURE); 16 | 17 | private static final String NAME_HEAD_X = "head_axis_x"; 18 | private static final String NAME_HEAD_Z = "head_axis_z"; 19 | private static final String NAME_BOBBER = "bobber"; 20 | private static final String NAME_HOOK = "hook"; 21 | private static final float ANGLE_180_DEGREES = (float) (1f * Math.PI); 22 | 23 | public FishingBobber3DModel(@NotNull ModelPart root) { 24 | super(root); 25 | } 26 | 27 | @NotNull 28 | public static TexturedModelData generateModel() { 29 | ModelData modelData = new ModelData(); 30 | ModelPartData modelPartData = modelData.getRoot(); 31 | 32 | modelPartData.addChild(NAME_HEAD_X, ModelPartBuilder.create().cuboid(-0.5f, 3f, 0f, 1f, 1f, 0f), ModelTransform.NONE); 33 | modelPartData.addChild(NAME_HEAD_Z, ModelPartBuilder.create().cuboid(0f, 3f, -0.5f, 0f, 1f, 1f), ModelTransform.NONE); 34 | modelPartData.addChild(NAME_BOBBER, ModelPartBuilder.create().uv(0, 0).cuboid(-1.5f, 0f, -1.5f, 3f, 3f, 3f), ModelTransform.of(0f, 3f, 0f, ANGLE_180_DEGREES, 0f, 0f)); 35 | modelPartData.addChild(NAME_HOOK, ModelPartBuilder.create().uv(0, 6).cuboid(-0.5f, -3f, 0f, 3f, 3f, 0f), ModelTransform.of(0f, -3f, 0f, ANGLE_180_DEGREES, 0f, 0f)); 36 | 37 | return TexturedModelData.of(modelData, 12, 9); 38 | } 39 | 40 | @Override 41 | public void setAngles(T state) { 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/client/features/heldItemTooltips/tooltip/ContainerTooltip.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.client.features.heldItemTooltips.tooltip; 2 | 3 | import net.minecraft.item.ItemStack; 4 | import net.minecraft.text.MutableText; 5 | import net.minecraft.text.Text; 6 | 7 | public class ContainerTooltip extends Tooltip { 8 | String translationKey; 9 | 10 | public ContainerTooltip(ItemStack item){ 11 | this.translationKey = item.getItem().getTranslationKey(); 12 | this.primaryValue = item.getCount(); 13 | } 14 | 15 | @Override 16 | public MutableText getTooltipText() { 17 | MutableText tooltip = Text.translatable(translationKey); 18 | tooltip.append(" x").append(String.valueOf(primaryValue)); 19 | return tooltip; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/client/features/heldItemTooltips/tooltip/EnchantmentTooltip.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.client.features.heldItemTooltips.tooltip; 2 | 3 | import net.minecraft.enchantment.Enchantment; 4 | import net.minecraft.text.MutableText; 5 | import net.minecraft.text.Text; 6 | 7 | public class EnchantmentTooltip extends Tooltip { 8 | boolean showLevels=true; 9 | MutableText text; 10 | 11 | public EnchantmentTooltip(Enchantment enchantment, int level){ 12 | this.text = enchantment.description().copy(); 13 | this.primaryValue = level; 14 | if(enchantment.getMaxLevel()==1) 15 | showLevels=false; 16 | } 17 | 18 | @Override 19 | public MutableText getTooltipText(){ 20 | MutableText tooltip =text; 21 | if(showLevels) 22 | tooltip.append(" ").append(Text.translatable("enchantment.level." + primaryValue)); 23 | return tooltip; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/client/features/heldItemTooltips/tooltip/PotionTooltip.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.client.features.heldItemTooltips.tooltip; 2 | 3 | import net.minecraft.text.MutableText; 4 | import net.minecraft.text.Text; 5 | 6 | public class PotionTooltip extends Tooltip { 7 | 8 | Text tooltip; 9 | 10 | public PotionTooltip (Text tooltip){ 11 | this.tooltip = tooltip; 12 | } 13 | 14 | @Override 15 | public MutableText getTooltipText() { 16 | return (MutableText) this.tooltip; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/client/features/heldItemTooltips/tooltip/Tooltip.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.client.features.heldItemTooltips.tooltip; 2 | 3 | import net.minecraft.text.MutableText; 4 | 5 | public abstract class Tooltip { 6 | public int primaryValue; 7 | 8 | public abstract MutableText getTooltipText(); 9 | 10 | /** 11 | * Overrides the original equals method to compare easier. 12 | * @param that Another {@link Tooltip} object. 13 | * @return true if they {@link Tooltip#getTooltipText()} are equal. 14 | */ 15 | @Override 16 | public boolean equals(Object that) { 17 | if (!(that instanceof Tooltip tooltip)) { 18 | return false; 19 | } 20 | return tooltip.getTooltipText().equals(this.getTooltipText()); 21 | } 22 | } 23 | 24 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/client/features/hudOpacity/HudOpacity.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.client.features.hudOpacity; 2 | 3 | import me.juancarloscp52.bedrockify.client.BedrockifyClient; 4 | import net.minecraft.client.MinecraftClient; 5 | import net.minecraft.util.math.MathHelper; 6 | 7 | public class HudOpacity { 8 | 9 | private static final int maxInactiveTicks = 120; // 6 seconds. 10 | private static final int FADE_OUT_START_TICK = 100; 11 | private static final int FADE_IN_DURATION_TICK = 5; 12 | int inactiveTicks = 0; 13 | int previousSelectedSlot = -1; 14 | float currentOpacity = 1f; 15 | 16 | public float getHudOpacity(boolean isHotBarBackground){ 17 | float max = BedrockifyClient.getInstance().settings.isBedrockToolbarEnabled() && isHotBarBackground? 0.6F:1.0F; 18 | return Math.min(currentOpacity, max); 19 | } 20 | 21 | public void resetTicks(){ 22 | inactiveTicks=0; 23 | } 24 | 25 | public void tick(){ 26 | if(inactiveTicks< maxInactiveTicks) 27 | inactiveTicks++; 28 | 29 | if(MinecraftClient.getInstance().currentScreen!=null) { 30 | resetTicks(); 31 | currentOpacity = 1; 32 | } 33 | 34 | if(MinecraftClient.getInstance().player!= null){ 35 | int selectedSlot = MinecraftClient.getInstance().player.getInventory().getSelectedSlot(); 36 | if(selectedSlot != previousSelectedSlot){ 37 | previousSelectedSlot=selectedSlot; 38 | resetTicks(); 39 | } 40 | } 41 | 42 | float opacity = BedrockifyClient.getInstance().settings.hudOpacity/100f; 43 | float delta = 1f - opacity; 44 | if(inactiveTicks > FADE_OUT_START_TICK && currentOpacity > opacity){ 45 | currentOpacity -= delta / (maxInactiveTicks - FADE_OUT_START_TICK); 46 | clampOpacity(opacity); 47 | }else if(inactiveTicks<=FADE_IN_DURATION_TICK && currentOpacity < 1f){ 48 | currentOpacity += delta / FADE_IN_DURATION_TICK; 49 | clampOpacity(opacity); 50 | } 51 | } 52 | 53 | private void clampOpacity(float minimum) { 54 | currentOpacity = MathHelper.clamp(currentOpacity, minimum, 1f); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/client/features/loadingScreens/ExternalLoadingTips.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.client.features.loadingScreens; 2 | 3 | import com.google.gson.Gson; 4 | import org.apache.logging.log4j.LogManager; 5 | 6 | import java.io.File; 7 | import java.io.FileReader; 8 | import java.io.FileWriter; 9 | import java.io.IOException; 10 | 11 | public class ExternalLoadingTips { 12 | 13 | boolean alwaysExternalTips = false; 14 | 15 | String [] externalLoadingTips = new String[]{} ; 16 | 17 | public String get(int index){ 18 | return externalLoadingTips[index]; 19 | } 20 | 21 | public int length(){ 22 | return externalLoadingTips.length; 23 | } 24 | 25 | public static ExternalLoadingTips loadSettings() { 26 | ExternalLoadingTips loadingTips = new ExternalLoadingTips(); 27 | File file = new File("./config/bedrockify/bedrockify-ExternalLoadingTips.json"); 28 | Gson gson = new Gson(); 29 | try { 30 | FileReader fileReader = new FileReader(file); 31 | loadingTips = gson.fromJson(fileReader, ExternalLoadingTips.class); 32 | fileReader.close(); 33 | } catch (IOException e) { 34 | LogManager.getLogger().warn("Could not load external loading tips: " + e.getLocalizedMessage()); 35 | } 36 | return loadingTips; 37 | } 38 | 39 | public void saveSettings() { 40 | Gson gson = new Gson(); 41 | File file = new File("./config/bedrockify/bedrockify-ExternalLoadingTips.json"); 42 | if (!file.getParentFile().exists()) { 43 | file.getParentFile().mkdir(); 44 | } 45 | try { 46 | FileWriter fileWriter = new FileWriter(file); 47 | fileWriter.write(gson.toJson(this)); 48 | fileWriter.close(); 49 | } catch (IOException e) { 50 | LogManager.getLogger().warn("Could not save external loading tips: " + e.getLocalizedMessage()); 51 | } 52 | } 53 | 54 | } 55 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/client/features/savingOverlay/SavingOverlay.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.client.features.savingOverlay; 2 | 3 | import com.mojang.blaze3d.systems.RenderSystem; 4 | import me.juancarloscp52.bedrockify.client.BedrockifyClient; 5 | import me.juancarloscp52.bedrockify.client.BedrockifyClientSettings; 6 | import net.minecraft.client.MinecraftClient; 7 | import net.minecraft.client.gui.DrawContext; 8 | import net.minecraft.client.render.RenderLayer; 9 | import net.minecraft.util.Identifier; 10 | import net.minecraft.util.math.MathHelper; 11 | 12 | public class SavingOverlay{ 13 | 14 | private final Identifier WIDGET_TEXTURE = Identifier.of("bedrockify", "textures/gui/bedrockify_widgets.png"); 15 | private boolean saving = false; 16 | private long timer=0; 17 | private float renderTimer=0; 18 | private final MinecraftClient client = MinecraftClient.getInstance(); 19 | 20 | public void render(DrawContext drawContext){ 21 | final BedrockifyClientSettings settings = BedrockifyClient.getInstance().settings; 22 | if(saving || System.currentTimeMillis()-timer<3000){ 23 | RenderSystem.setShaderColor(1,1,1,BedrockifyClient.getInstance().hudOpacity.getHudOpacity(false)); 24 | // Draw chest 25 | drawContext.drawTexture(RenderLayer::getGuiTextured, WIDGET_TEXTURE, client.getWindow().getScaledWidth()-(21+settings.getScreenSafeArea()), 19 + settings.getScreenSafeArea(), 0, 99, 16, 17, 256, 256); 26 | // Draw arrow 27 | renderTimer+= BedrockifyClient.getInstance().deltaTime*0.000000001f; 28 | drawContext.drawTexture(RenderLayer::getGuiTextured, WIDGET_TEXTURE, client.getWindow().getScaledWidth()-(19+settings.getScreenSafeArea()), 5 + settings.getScreenSafeArea() + MathHelper.floor(MathHelper.abs(MathHelper.sin(renderTimer * 3.1415926F) * 6)), 16, 100, 12, 15, 256, 256); 29 | RenderSystem.setShaderColor(1,1,1,1); 30 | } 31 | } 32 | 33 | public void setSaving(boolean saving) { 34 | if(this.saving && !saving) 35 | timer=System.currentTimeMillis(); 36 | this.saving = saving; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/client/features/useAnimations/AnimationsHelper.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.client.features.useAnimations; 2 | 3 | import me.juancarloscp52.bedrockify.client.BedrockifyClient; 4 | import net.minecraft.item.ItemStack; 5 | 6 | public final class AnimationsHelper { 7 | public static final int ANIMATION_TIME = 5; 8 | 9 | private static int updatedItemIdx = -1; 10 | 11 | private AnimationsHelper() { 12 | } 13 | 14 | /** 15 | * Bobbing! 16 | * 17 | * @param target the ItemStack 18 | */ 19 | public static void doBobbingAnimation(ItemStack target) { 20 | if (!BedrockifyClient.getInstance().settings.isPickupAnimationsEnabled()) { 21 | return; 22 | } 23 | if (target.isEmpty()) { 24 | return; 25 | } 26 | 27 | target.setBobbingAnimationTime(AnimationsHelper.ANIMATION_TIME); 28 | } 29 | 30 | /** 31 | * Stores the slot index where the item changed. 32 | * 33 | * @param slotIdx Target slot index. 34 | */ 35 | public static void notifyChangedSlot(int slotIdx) { 36 | updatedItemIdx = slotIdx; 37 | } 38 | 39 | /** 40 | * Returns the stored slot index and reset it. 41 | * 42 | * @return Target item. 43 | */ 44 | public static int consumeChangedSlot() { 45 | final int ret = updatedItemIdx; 46 | updatedItemIdx = -1; 47 | return ret; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/client/features/worldColorNoise/WorldColorNoiseSampler.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.client.features.worldColorNoise; 2 | 3 | import com.google.common.collect.ImmutableList; 4 | import net.minecraft.util.math.BlockPos; 5 | import net.minecraft.util.math.MathHelper; 6 | import net.minecraft.util.math.noise.OctaveSimplexNoiseSampler; 7 | import net.minecraft.util.math.random.CheckedRandom; 8 | import net.minecraft.util.math.random.ChunkRandom; 9 | 10 | public class WorldColorNoiseSampler { 11 | OctaveSimplexNoiseSampler noiseSampler; 12 | public WorldColorNoiseSampler(){ 13 | noiseSampler = new OctaveSimplexNoiseSampler(new ChunkRandom(new CheckedRandom(98756L)), ImmutableList.of(-1, 0, 1)); 14 | } 15 | 16 | public double getSample (double x, double z, float scale){ 17 | return noiseSampler.sample(x/scale,z/scale, true); 18 | } 19 | 20 | public int applyNoise(BlockPos pos, int previousColor, float scale, float intensity){ 21 | double noiseValue = this.getSample(pos.getX(),pos.getZ(),scale); 22 | double d1=noiseValue*2; // round noiseValue to nearest half number to reduce softness 23 | d1=Math.round(d1); 24 | noiseValue=d1/2; 25 | 26 | d1=this.getSample(pos.getX(),pos.getZ(),0.2f); // get noise value for per-block noise 27 | 28 | int noiseValueInt=blend(previousColor,(float)noiseValue*intensity); // combine noiseValue and per-block noise value 29 | return blend(noiseValueInt,(float)d1*(intensity*0.6f)); 30 | } 31 | 32 | private float[] getAlphaColorArray(final int hex) { 33 | return new float[]{((hex >> 24) & 255) / 255f, ((hex >> 16) & 255) / 255f, ((hex >> 8) & 255) / 255f, ((hex) & 255) / 255f}; 34 | } 35 | 36 | private int toIntColor(final float[] alphaColorArray) { 37 | return (((int) Math.floor(alphaColorArray[0] * 255) & 255) << 24) + (((int) Math.floor(alphaColorArray[1] * 255) & 255) << 16) + (((int) Math.floor(alphaColorArray[2] * 255) & 255) << 8) + ((int) Math.floor(alphaColorArray[3] * 255) & 255); 38 | } 39 | 40 | private int blend(final int color1, final float ratio) { 41 | final float[] rgb1 = getAlphaColorArray(color1); 42 | final float[] rgb2 = getAlphaColorArray(0); 43 | final float negative = 1-ratio; 44 | return toIntColor(new float[]{MathHelper.clamp(rgb2[0] * ratio + rgb1[0] * negative,0,1), MathHelper.clamp(rgb2[1] * ratio + rgb1[1] * negative,0,1), MathHelper.clamp(rgb2[2] * ratio + rgb1[2] * negative,0,1), MathHelper.clamp(rgb2[3] * ratio + rgb1[3] * negative,0,1)}); 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/common/block/AbstractBECauldronBlock.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.common.block; 2 | 3 | import me.juancarloscp52.bedrockify.Bedrockify; 4 | import me.juancarloscp52.bedrockify.common.block.entity.WaterCauldronBlockEntity; 5 | import net.minecraft.block.AbstractCauldronBlock; 6 | import net.minecraft.block.BlockEntityProvider; 7 | import net.minecraft.block.BlockState; 8 | import net.minecraft.block.Blocks; 9 | import net.minecraft.block.cauldron.CauldronBehavior; 10 | import net.minecraft.block.entity.BlockEntity; 11 | import net.minecraft.entity.player.PlayerEntity; 12 | import net.minecraft.item.ItemStack; 13 | import net.minecraft.util.ActionResult; 14 | import net.minecraft.util.Hand; 15 | import net.minecraft.util.hit.BlockHitResult; 16 | import net.minecraft.util.math.BlockPos; 17 | import net.minecraft.world.World; 18 | import net.minecraft.world.WorldView; 19 | import org.jetbrains.annotations.Nullable; 20 | 21 | public abstract class AbstractBECauldronBlock extends AbstractCauldronBlock implements BlockEntityProvider { 22 | public AbstractBECauldronBlock(Settings settings, CauldronBehavior.CauldronBehaviorMap behaviorMap) { 23 | super(settings, behaviorMap); 24 | } 25 | 26 | @Override 27 | public ActionResult onUseWithItem(ItemStack stack, BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { 28 | if (!Bedrockify.getInstance().settings.bedrockCauldron) { 29 | return ActionResult.FAIL; 30 | } 31 | 32 | return super.onUseWithItem(stack, state, world, pos, player, hand, hit); 33 | } 34 | 35 | @Override 36 | protected ItemStack getPickStack(WorldView world, BlockPos pos, BlockState state, boolean includeData) { 37 | return new ItemStack(Blocks.CAULDRON); 38 | } 39 | 40 | /** 41 | * Allows to keep water state. 42 | */ 43 | @Nullable 44 | @Override 45 | public BlockEntity createBlockEntity(BlockPos pos, BlockState state) { 46 | return new WaterCauldronBlockEntity(pos, state); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/common/features/animalEatingParticles/EatingParticlesUtil.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.common.features.animalEatingParticles; 2 | 3 | import me.juancarloscp52.bedrockify.common.payloads.EatParticlePayload; 4 | import net.fabricmc.fabric.api.networking.v1.PlayerLookup; 5 | import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; 6 | import net.minecraft.entity.passive.AnimalEntity; 7 | import net.minecraft.entity.player.PlayerEntity; 8 | import net.minecraft.item.ItemStack; 9 | import net.minecraft.server.world.ServerWorld; 10 | import net.minecraft.util.math.Vec3d; 11 | 12 | public class EatingParticlesUtil { 13 | 14 | public static void spawnItemParticles(PlayerEntity player, ItemStack stack, AnimalEntity entity) { 15 | if (player.getWorld().isClient) 16 | return; 17 | int count = 16; 18 | for (int i = 0; i < count; ++i) { 19 | final EatParticlePayload particlePayload = new EatParticlePayload(); 20 | Vec3d vec3d = new Vec3d(((double)entity.getRandom().nextFloat() - 0.5) * 0.1, Math.random() * 0.1 + 0.1, 0.0); 21 | vec3d = vec3d.rotateX(-entity.getPitch() * ((float)Math.PI / 180)); 22 | vec3d = vec3d.rotateY(-entity.getYaw() * ((float)Math.PI / 180)); 23 | double d = (double)(-entity.getRandom().nextFloat()) * 0.6 - 0.3; 24 | Vec3d vec3d2 = new Vec3d(((double)entity.getRandom().nextFloat()- 0.5) * 0.3, d, 0.6); 25 | vec3d2 = vec3d2.rotateX(-entity.getPitch() * ((float)Math.PI / 180)); 26 | vec3d2 = vec3d2.rotateY(-entity.getHeadYaw() * ((float)Math.PI / 180)); 27 | vec3d2 = vec3d2.add(entity.getX(), entity.getEyeY(), entity.getZ()); 28 | particlePayload.setPosition(vec3d2); 29 | particlePayload.setVelocity(vec3d); 30 | particlePayload.setItemStack(stack); 31 | PlayerLookup.world((ServerWorld) player.getWorld()).forEach(serverPlayerEntity -> 32 | ServerPlayNetworking.send(serverPlayerEntity, particlePayload)); 33 | } 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/common/features/cauldron/BedrockCauldronBlocks.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.common.features.cauldron; 2 | 3 | import me.juancarloscp52.bedrockify.Bedrockify; 4 | import me.juancarloscp52.bedrockify.common.block.ColoredWaterCauldronBlock; 5 | import me.juancarloscp52.bedrockify.common.block.PotionCauldronBlock; 6 | import me.juancarloscp52.bedrockify.common.block.entity.WaterCauldronBlockEntity; 7 | import net.fabricmc.fabric.api.object.builder.v1.block.entity.FabricBlockEntityTypeBuilder; 8 | import net.minecraft.block.AbstractBlock; 9 | import net.minecraft.block.Block; 10 | import net.minecraft.block.Blocks; 11 | import net.minecraft.block.entity.BlockEntityType; 12 | import net.minecraft.registry.Registries; 13 | import net.minecraft.registry.Registry; 14 | import net.minecraft.registry.RegistryKey; 15 | import net.minecraft.registry.RegistryKeys; 16 | import net.minecraft.util.Identifier; 17 | 18 | import java.util.function.Function; 19 | 20 | public final class BedrockCauldronBlocks { 21 | public static final Block POTION_CAULDRON; 22 | public static final Block COLORED_WATER_CAULDRON; 23 | 24 | private static final Identifier ID_POTION_CAULDRON = Identifier.of(Bedrockify.MOD_ID, "potion_cauldron"); 25 | private static final Identifier ID_COLORED_WATER_CAULDRON = Identifier.of(Bedrockify.MOD_ID, "colored_water_cauldron"); 26 | 27 | public static final BlockEntityType WATER_CAULDRON_ENTITY; 28 | 29 | public static void register() { 30 | Registry.register(Registries.BLOCK, ID_POTION_CAULDRON, POTION_CAULDRON); 31 | Registry.register(Registries.BLOCK, ID_COLORED_WATER_CAULDRON, COLORED_WATER_CAULDRON); 32 | 33 | Registry.register(Registries.BLOCK_ENTITY_TYPE, Identifier.of(Bedrockify.MOD_ID, "water_cauldron_entity"), WATER_CAULDRON_ENTITY); 34 | } 35 | 36 | private static Block prepare(Identifier id, Function factory, AbstractBlock.Settings settings) { 37 | RegistryKey key = RegistryKey.of(RegistryKeys.BLOCK, id); 38 | return factory.apply(settings.registryKey(key)); 39 | } 40 | 41 | static { 42 | POTION_CAULDRON = prepare(ID_POTION_CAULDRON, PotionCauldronBlock::new, AbstractBlock.Settings.copy(Blocks.CAULDRON).emissiveLighting((state, world, pos) -> true)); 43 | COLORED_WATER_CAULDRON = prepare(ID_COLORED_WATER_CAULDRON, ColoredWaterCauldronBlock::new, AbstractBlock.Settings.copy(Blocks.CAULDRON)); 44 | 45 | WATER_CAULDRON_ENTITY = FabricBlockEntityTypeBuilder.create(WaterCauldronBlockEntity::new, POTION_CAULDRON, COLORED_WATER_CAULDRON).build(); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/common/features/cauldron/BedrockCauldronProperties.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.common.features.cauldron; 2 | 3 | import net.minecraft.state.property.IntProperty; 4 | 5 | public final class BedrockCauldronProperties { 6 | private BedrockCauldronProperties() { 7 | } 8 | 9 | public static final int MAX_LEVEL_6 = 6; 10 | public static final int MAX_LEVEL_8 = 8; 11 | 12 | public static final IntProperty LEVEL_6 = IntProperty.of("c_level", 1, MAX_LEVEL_6); 13 | public static final IntProperty LEVEL_8 = IntProperty.of("c_level", 1, MAX_LEVEL_8); 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/common/features/fernBonemeal/FernBonemeal.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.common.features.fernBonemeal; 2 | 3 | import net.minecraft.registry.RegistryKey; 4 | import net.minecraft.registry.RegistryKeys; 5 | import net.minecraft.util.Identifier; 6 | import net.minecraft.world.gen.feature.ConfiguredFeature; 7 | import net.minecraft.world.gen.feature.PlacedFeature; 8 | 9 | 10 | public class FernBonemeal { 11 | public static final RegistryKey> SINGLE_PIECE_OF_FERN = RegistryKey.of(RegistryKeys.CONFIGURED_FEATURE, Identifier.of("bedrockify", "single_piece_of_fern")); 12 | public static final RegistryKey SINGLE_PIECE_OF_FERN_PLACED = RegistryKey.of(RegistryKeys.PLACED_FEATURE, Identifier.of("bedrockify", "single_piece_of_fern_placed")); 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/common/features/fireAspectLight/FireAspectLightHelper.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.common.features.fireAspectLight; 2 | 3 | import net.minecraft.enchantment.EnchantmentHelper; 4 | import net.minecraft.enchantment.Enchantments; 5 | import net.minecraft.item.ItemStack; 6 | 7 | public final class FireAspectLightHelper { 8 | public static boolean canLitWith(ItemStack itemStack) { 9 | if (itemStack == null) { 10 | return false; 11 | } 12 | 13 | if (itemStack.isEmpty()) { 14 | return false; 15 | } 16 | 17 | return EnchantmentHelper.getEnchantments(itemStack).getEnchantments().stream().anyMatch(e -> e.matchesId(Enchantments.FIRE_ASPECT.getValue())); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/common/features/recipes/DyeHelper.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.common.features.recipes; 2 | 3 | import net.minecraft.item.BoneMealItem; 4 | import net.minecraft.item.DyeItem; 5 | import net.minecraft.item.Item; 6 | import net.minecraft.item.Items; 7 | 8 | public class DyeHelper { 9 | 10 | public static boolean isDyeableItem(Item item){ 11 | return item instanceof DyeItem || item instanceof BoneMealItem || item.equals(Items.COCOA_BEANS) || item.equals(Items.LAPIS_LAZULI) || item.equals(Items.INK_SAC); 12 | } 13 | public static DyeItem getDyeItem (Item item){ 14 | if(item instanceof DyeItem) 15 | return (DyeItem) item; 16 | if(item instanceof BoneMealItem) 17 | return (DyeItem) Items.WHITE_DYE; 18 | if(item.equals(Items.INK_SAC)) 19 | return (DyeItem) Items.BLACK_DYE; 20 | if(item.equals(Items.LAPIS_LAZULI)) 21 | return (DyeItem) Items.BLUE_DYE; 22 | if(item.equals(Items.COCOA_BEANS)) 23 | return (DyeItem) Items.BROWN_DYE; 24 | return (DyeItem)Items.WHITE_DYE; 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/common/features/worldGeneration/FullTrunkVineTreeDecorator.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.common.features.worldGeneration; 2 | 3 | import com.mojang.serialization.MapCodec; 4 | import net.minecraft.block.AbstractBlock; 5 | import net.minecraft.block.Blocks; 6 | import net.minecraft.block.VineBlock; 7 | import net.minecraft.util.math.BlockPos; 8 | import net.minecraft.util.math.Direction; 9 | import net.minecraft.world.TestableWorld; 10 | import net.minecraft.world.gen.treedecorator.TreeDecorator; 11 | import net.minecraft.world.gen.treedecorator.TreeDecoratorType; 12 | 13 | public class FullTrunkVineTreeDecorator extends TreeDecorator { 14 | public static final FullTrunkVineTreeDecorator INSTANCE = new FullTrunkVineTreeDecorator(); 15 | 16 | public static final MapCodec CODEC = MapCodec.unit(() -> INSTANCE); 17 | 18 | protected TreeDecoratorType getType() { 19 | return DyingTrees.VINE_DECORATOR; 20 | } 21 | 22 | @Override 23 | public void generate(Generator generator) { 24 | generator.getLogPositions().forEach((pos) -> setVines(generator.getWorld(),generator,pos)); 25 | } 26 | 27 | 28 | 29 | public void setVines(TestableWorld world, Generator generator,BlockPos trunkPos){ 30 | for(Direction direction: Direction.Type.HORIZONTAL){ 31 | setVineOnTrunk(world,generator,trunkPos,direction); 32 | } 33 | } 34 | 35 | public void setVineOnTrunk(TestableWorld world, Generator generator, BlockPos trunkPos, Direction direction){ 36 | BlockPos vinePos = trunkPos.offset(direction.getOpposite()); 37 | if (world.testBlockState(vinePos, AbstractBlock.AbstractBlockState::isAir)) 38 | generator.replace(vinePos,Blocks.VINE.getDefaultState().with(VineBlock.getFacingProperty(direction),true)); 39 | } 40 | } -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/common/payloads/AbstractVelocityParticlePayload.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.common.payloads; 2 | 3 | import net.minecraft.network.RegistryByteBuf; 4 | import net.minecraft.network.packet.CustomPayload; 5 | import net.minecraft.util.math.Vec3d; 6 | 7 | public abstract class AbstractVelocityParticlePayload implements CustomPayload { 8 | protected Vec3d position; 9 | protected Vec3d velocity; 10 | 11 | public void setPosition(Vec3d position) { 12 | this.position = position; 13 | } 14 | 15 | public void setVelocity(Vec3d velocity) { 16 | this.velocity = velocity; 17 | } 18 | 19 | public static final class OptionalCodec { 20 | public static void encode(RegistryByteBuf buf, AbstractVelocityParticlePayload target) { 21 | buf.writeVec3d(target.position); 22 | buf.writeVec3d(target.velocity); 23 | } 24 | 25 | public static void decode(RegistryByteBuf buf, AbstractVelocityParticlePayload target) { 26 | target.position = buf.readVec3d(); 27 | target.velocity = buf.readVec3d(); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/common/payloads/EatParticlePayload.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.common.payloads; 2 | 3 | import me.juancarloscp52.bedrockify.Bedrockify; 4 | import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; 5 | import net.minecraft.client.MinecraftClient; 6 | import net.minecraft.item.ItemStack; 7 | import net.minecraft.network.RegistryByteBuf; 8 | import net.minecraft.network.codec.PacketCodec; 9 | import net.minecraft.particle.ItemStackParticleEffect; 10 | import net.minecraft.particle.ParticleTypes; 11 | import net.minecraft.util.Identifier; 12 | 13 | import java.util.Objects; 14 | 15 | public final class EatParticlePayload extends AbstractVelocityParticlePayload { 16 | private ItemStack itemStack; 17 | 18 | public static final PacketCodec CODEC = new PacketCodec<>() { 19 | @Override 20 | public EatParticlePayload decode(RegistryByteBuf buf) { 21 | EatParticlePayload result = new EatParticlePayload(); 22 | result.itemStack = ItemStack.OPTIONAL_PACKET_CODEC.decode(buf); 23 | OptionalCodec.decode(buf, result); 24 | return result; 25 | } 26 | 27 | @Override 28 | public void encode(RegistryByteBuf buf, EatParticlePayload value) { 29 | ItemStack.OPTIONAL_PACKET_CODEC.encode(buf, value.itemStack); 30 | OptionalCodec.encode(buf, value); 31 | } 32 | }; 33 | 34 | @Override 35 | public Id getId() { 36 | return new Id<>(Identifier.of(Bedrockify.MOD_ID, "eat-particles")); 37 | } 38 | 39 | public void setItemStack(ItemStack itemStack) { 40 | this.itemStack = itemStack.copy(); 41 | } 42 | 43 | public static final class EatParticleHandler implements ClientPlayNetworking.PlayPayloadHandler { 44 | @Override 45 | public void receive(EatParticlePayload payload, ClientPlayNetworking.Context context) { 46 | if (payload == null || context == null) { 47 | return; 48 | } 49 | final MinecraftClient client = context.client(); 50 | try { 51 | ItemStack stack = Objects.requireNonNull(payload.itemStack); 52 | double x = payload.position.x; 53 | double y = payload.position.y; 54 | double z = payload.position.z; 55 | double velx = payload.velocity.x; 56 | double vely = payload.velocity.y; 57 | double velz = payload.velocity.z; 58 | 59 | client.execute(() -> { 60 | if (null != client.world) 61 | client.world.addParticleClient(new ItemStackParticleEffect(ParticleTypes.ITEM, stack), x, y, z, velx, vely, velz); 62 | }); 63 | } catch (Exception ignored) { 64 | } 65 | } 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/datagen/BedrockIfyDatagen.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.datagen; 2 | 3 | import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint; 4 | import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator; 5 | import net.minecraft.registry.RegistryBuilder; 6 | import net.minecraft.registry.RegistryKeys; 7 | import org.jetbrains.annotations.Nullable; 8 | 9 | public class BedrockIfyDatagen implements DataGeneratorEntrypoint { 10 | @Override 11 | public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) { 12 | FabricDataGenerator.Pack pack = fabricDataGenerator.createPack(); 13 | pack.addProvider(BedrockIfyWorldGenProvider::new); 14 | } 15 | 16 | @Override 17 | public void buildRegistry(RegistryBuilder registryBuilder) { 18 | registryBuilder.addRegistry(RegistryKeys.CONFIGURED_FEATURE, BedrockIfyWorldGenBootstrap::configureFeatures); 19 | registryBuilder.addRegistry(RegistryKeys.PLACED_FEATURE, BedrockIfyWorldGenBootstrap::placedFeatures); 20 | } 21 | 22 | @Override 23 | public @Nullable String getEffectiveModId() { 24 | return "bedrockify"; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/datagen/BedrockIfyWorldGenProvider.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.datagen; 2 | 3 | import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; 4 | import net.fabricmc.fabric.api.datagen.v1.provider.FabricDynamicRegistryProvider; 5 | import net.minecraft.registry.RegistryKeys; 6 | import net.minecraft.registry.RegistryWrapper; 7 | 8 | import java.util.concurrent.CompletableFuture; 9 | 10 | public class BedrockIfyWorldGenProvider extends FabricDynamicRegistryProvider { 11 | 12 | 13 | public BedrockIfyWorldGenProvider(FabricDataOutput output, CompletableFuture registriesFuture) { 14 | super(output, registriesFuture); 15 | } 16 | 17 | @Override 18 | protected void configure(RegistryWrapper.WrapperLookup registries, Entries entries) { 19 | entries.addAll(registries.getOrThrow(RegistryKeys.CONFIGURED_FEATURE)); 20 | entries.addAll(registries.getOrThrow(RegistryKeys.PLACED_FEATURE)); 21 | } 22 | 23 | @Override 24 | public String getName() { 25 | return "BedrockIfy World Generation Modifications"; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/core/clientRenderTimer/MinecraftClientMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.core.clientRenderTimer; 2 | 3 | import me.juancarloscp52.bedrockify.client.BedrockifyClient; 4 | import net.minecraft.client.MinecraftClient; 5 | import net.minecraft.client.gui.screen.Screen; 6 | import org.spongepowered.asm.mixin.Mixin; 7 | import org.spongepowered.asm.mixin.Shadow; 8 | import org.spongepowered.asm.mixin.injection.At; 9 | import org.spongepowered.asm.mixin.injection.Inject; 10 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 11 | 12 | @Mixin(MinecraftClient.class) 13 | public class MinecraftClientMixin { 14 | 15 | @Shadow public Screen currentScreen; 16 | long newTime=0; 17 | @Inject(method = "render", at=@At("HEAD")) 18 | private void computeDeltaTime(boolean tick, CallbackInfo ci){ 19 | long oldTime = newTime; 20 | newTime = System.nanoTime(); 21 | BedrockifyClient.getInstance().deltaTime= newTime - oldTime; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/babyVillagerHeads/VillagerResemblingModelMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.babyVillagerHeads; 2 | 3 | import me.juancarloscp52.bedrockify.client.BedrockifyClient; 4 | import net.minecraft.client.model.ModelPart; 5 | import net.minecraft.client.render.entity.model.VillagerResemblingModel; 6 | import net.minecraft.client.render.entity.state.VillagerEntityRenderState; 7 | import org.joml.Vector3f; 8 | import org.spongepowered.asm.mixin.Final; 9 | import org.spongepowered.asm.mixin.Mixin; 10 | import org.spongepowered.asm.mixin.Shadow; 11 | import org.spongepowered.asm.mixin.injection.At; 12 | import org.spongepowered.asm.mixin.injection.Inject; 13 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 14 | 15 | @Mixin(VillagerResemblingModel.class) 16 | public abstract class VillagerResemblingModelMixin { 17 | @Shadow @Final private ModelPart head; 18 | 19 | @Inject(method = "setAngles", at = @At("RETURN")) 20 | private void bedrockify$customBabyHeadScale(VillagerEntityRenderState villagerEntityRenderState, CallbackInfo ci) { 21 | if (villagerEntityRenderState.baby && BedrockifyClient.getInstance().settings.babyVillagerHeads) { 22 | this.head.scale(new Vector3f(0.5f)); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/bedrockShading/lightBlock/AbstractTerrainRenderContextMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.bedrockShading.lightBlock; 2 | 3 | import me.juancarloscp52.bedrockify.client.BedrockifyClient; 4 | import net.fabricmc.fabric.impl.client.indigo.renderer.render.AbstractTerrainRenderContext; 5 | import net.fabricmc.fabric.impl.client.indigo.renderer.render.BlockRenderInfo; 6 | import net.minecraft.util.math.Direction; 7 | import net.minecraft.world.BlockRenderView; 8 | import org.spongepowered.asm.mixin.Final; 9 | import org.spongepowered.asm.mixin.Mixin; 10 | import org.spongepowered.asm.mixin.Shadow; 11 | import org.spongepowered.asm.mixin.injection.At; 12 | import org.spongepowered.asm.mixin.injection.Redirect; 13 | /** 14 | * @author Shaddatic 15 | */ 16 | @Mixin(AbstractTerrainRenderContext.class) 17 | public class AbstractTerrainRenderContextMixin { 18 | 19 | @Shadow @Final protected BlockRenderInfo blockInfo; 20 | 21 | @Redirect(method = "shadeFlatQuad", at=@At(value = "INVOKE",target = "Lnet/minecraft/world/BlockRenderView;getBrightness(Lnet/minecraft/util/math/Direction;Z)F")) 22 | private float getBlockShade(BlockRenderView blockRenderView, Direction direction, boolean shaded){ 23 | 24 | if(blockInfo.blockState.getLuminance()>2 && shaded && BedrockifyClient.getInstance().settings.bedrockShading) 25 | return BedrockifyClient.getInstance().bedrockBlockShading.getBlockShade(direction); 26 | else 27 | return blockRenderView.getBrightness(direction, shaded); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/bedrockShading/lightBlock/BlockModelRendererMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.bedrockShading.lightBlock; 2 | 3 | import me.juancarloscp52.bedrockify.client.BedrockifyClient; 4 | import net.minecraft.block.BlockState; 5 | import net.minecraft.client.render.VertexConsumer; 6 | import net.minecraft.client.render.block.BlockModelRenderer; 7 | import net.minecraft.client.render.model.BakedQuad; 8 | import net.minecraft.client.util.math.MatrixStack; 9 | import net.minecraft.util.math.BlockPos; 10 | import net.minecraft.util.math.Direction; 11 | import net.minecraft.world.BlockRenderView; 12 | import org.spongepowered.asm.mixin.Mixin; 13 | import org.spongepowered.asm.mixin.injection.At; 14 | import org.spongepowered.asm.mixin.injection.Inject; 15 | import org.spongepowered.asm.mixin.injection.Redirect; 16 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 17 | 18 | import java.util.List; 19 | /** 20 | * @author Shaddatic 21 | */ 22 | @Mixin(BlockModelRenderer.class) 23 | public class BlockModelRendererMixin { 24 | private boolean luminant = false; 25 | @Inject(method = "renderQuadsFlat",at=@At(value = "INVOKE",target = "Lnet/minecraft/world/BlockRenderView;getBrightness(Lnet/minecraft/util/math/Direction;Z)F",ordinal = 0)) 26 | private void getLuminant(BlockRenderView world, BlockState state, BlockPos pos, int light, int overlay, boolean useWorldLight, MatrixStack matrices, VertexConsumer vertexConsumer, List quads, BlockModelRenderer.LightmapCache lightmap, CallbackInfo ci){ 27 | this.luminant = state.getLuminance() > 2; 28 | } 29 | 30 | @Redirect(method = "renderQuadsFlat", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/BlockRenderView;getBrightness(Lnet/minecraft/util/math/Direction;Z)F")) 31 | private float getBlockShade(BlockRenderView blockRenderView, Direction direction, boolean shaded){ 32 | if(luminant && shaded && BedrockifyClient.getInstance().settings.bedrockShading) 33 | return BedrockifyClient.getInstance().bedrockBlockShading.getBlockShade(direction); 34 | else 35 | return blockRenderView.getBrightness(direction, shaded); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/bedrockShading/lightBlock/FluidRendererMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.bedrockShading.lightBlock; 2 | 3 | import me.juancarloscp52.bedrockify.client.BedrockifyClient; 4 | import net.minecraft.block.BlockState; 5 | import net.minecraft.client.render.VertexConsumer; 6 | import net.minecraft.client.render.block.FluidRenderer; 7 | import net.minecraft.fluid.FluidState; 8 | import net.minecraft.util.math.BlockPos; 9 | import net.minecraft.util.math.Direction; 10 | import net.minecraft.world.BlockRenderView; 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.Redirect; 15 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 16 | /** 17 | * @author Shaddatic 18 | */ 19 | @Mixin(FluidRenderer.class) 20 | public class FluidRendererMixin { 21 | private boolean isLuminous; 22 | 23 | @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/BlockRenderView;getBrightness(Lnet/minecraft/util/math/Direction;Z)F", ordinal = 0)) 24 | private void getFluidType(BlockRenderView world, BlockPos pos, VertexConsumer vertexConsumer, BlockState blockState, FluidState fluidState, CallbackInfo ci) { 25 | this.isLuminous = 0 < world.getLuminance(pos); //state.isIn(FluidTags.LAVA); 26 | } 27 | 28 | @Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/BlockRenderView;getBrightness(Lnet/minecraft/util/math/Direction;Z)F")) 29 | private float getLavaShade(BlockRenderView blockRenderView, Direction direction, boolean shaded) { 30 | if(!BedrockifyClient.getInstance().settings.bedrockShading) 31 | return blockRenderView.getBrightness(direction,shaded); 32 | 33 | return BedrockifyClient.getInstance().bedrockBlockShading.getLiquidShade(direction,isLuminous); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/bedrockShading/sunGlare/SkyRenderingMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.bedrockShading.sunGlare; 2 | 3 | import com.llamalad7.mixinextras.injector.ModifyExpressionValue; 4 | import com.mojang.blaze3d.systems.RenderSystem; 5 | import me.juancarloscp52.bedrockify.client.BedrockifyClient; 6 | import me.juancarloscp52.bedrockify.client.features.bedrockShading.BedrockSunGlareShading; 7 | import net.minecraft.client.render.SkyRendering; 8 | import net.minecraft.util.math.MathHelper; 9 | import org.spongepowered.asm.mixin.Mixin; 10 | import org.spongepowered.asm.mixin.injection.At; 11 | import org.spongepowered.asm.mixin.injection.Inject; 12 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 13 | 14 | @Mixin(SkyRendering.class) 15 | public abstract class SkyRenderingMixin { 16 | /** 17 | * Modify the Sun radius from stored delta.
18 | * Original radius is 30.0F. 19 | */ 20 | @ModifyExpressionValue(method = "renderSun", at = { 21 | @At(value = "CONSTANT", args = "floatValue=30.0f"), 22 | @At(value = "CONSTANT", args = "floatValue=-30.0f") 23 | }) 24 | private float bedrockify$modifySunRadius(float original) { 25 | BedrockSunGlareShading sunGlareShading = BedrockifyClient.getInstance().bedrockSunGlareShading; 26 | if (!sunGlareShading.shouldApplyShading() || sunGlareShading.getSunRadiusDelta() >= 1f) { 27 | return original; 28 | } 29 | 30 | return MathHelper.clampedLerp(original * 1.3f, original, sunGlareShading.getSunRadiusDelta()); 31 | } 32 | 33 | @Inject(method = "renderCelestialBodies", at = @At("HEAD")) 34 | private void bedrockify$modifySunIntensity(CallbackInfo ci) { 35 | BedrockSunGlareShading sunGlareShading = BedrockifyClient.getInstance().bedrockSunGlareShading; 36 | if (!sunGlareShading.shouldApplyShading() || sunGlareShading.getSunRadiusDelta() >= 1f) { 37 | return; 38 | } 39 | 40 | float value = MathHelper.clampedLerp(2.0f, 1.0f, sunGlareShading.getSunRadiusDelta()); 41 | 42 | RenderSystem.setShaderColor(value, value, value, 1.0f); 43 | } 44 | 45 | @Inject(method = "renderCelestialBodies", at = @At("RETURN")) 46 | private void bedrockify$restoreShaderColor(CallbackInfo ci) { 47 | RenderSystem.setShaderColor(1f, 1f, 1f, 1.0f); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/bedrockShading/sunGlare/WorldRendererMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.bedrockShading.sunGlare; 2 | 3 | import me.juancarloscp52.bedrockify.client.BedrockifyClient; 4 | import me.juancarloscp52.bedrockify.client.features.bedrockShading.BedrockSunGlareShading; 5 | import net.minecraft.client.MinecraftClient; 6 | import net.minecraft.client.render.DimensionEffects; 7 | import net.minecraft.client.render.Fog; 8 | import net.minecraft.client.render.WorldRenderer; 9 | import org.spongepowered.asm.mixin.Final; 10 | import org.spongepowered.asm.mixin.Mixin; 11 | import org.spongepowered.asm.mixin.Shadow; 12 | import org.spongepowered.asm.mixin.injection.At; 13 | import org.spongepowered.asm.mixin.injection.Inject; 14 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 15 | 16 | @Mixin(WorldRenderer.class) 17 | public abstract class WorldRendererMixin { 18 | @Shadow 19 | private @Final MinecraftClient client; 20 | 21 | /** 22 | * Inject and Observe the reload event to be compatible with Iris shaders. 23 | */ 24 | @Inject(method = "reload()V", at = @At("HEAD")) 25 | private void bedrockify$reloadWorldRendererCallback(CallbackInfo ci) { 26 | BedrockifyClient.getInstance().bedrockSunGlareShading.reloadCustomShaderState(); 27 | } 28 | 29 | /** 30 | * Calculate the angle difference between Camera and Sun, and Store the delta including the rain factor. 31 | */ 32 | @Inject(method = "method_62215", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/world/ClientWorld;getSkyColor(Lnet/minecraft/util/math/Vec3d;F)I")) 33 | private static void bedrockify$updateSunAngleDiff(Fog fog, DimensionEffects.SkyType skyType, float tickDelta, DimensionEffects dimensionEffects, CallbackInfo ci) { 34 | final BedrockSunGlareShading sunGlareShading = BedrockifyClient.getInstance().bedrockSunGlareShading; 35 | sunGlareShading.updateSunRadiusDelta(tickDelta); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/biggerDraggingItem/HandledScreenMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.biggerDraggingItem; 2 | 3 | import me.juancarloscp52.bedrockify.client.BedrockifyClient; 4 | import me.juancarloscp52.bedrockify.client.BedrockifyClientSettings; 5 | import net.minecraft.client.gui.DrawContext; 6 | import net.minecraft.client.gui.screen.ingame.HandledScreen; 7 | import net.minecraft.client.util.math.MatrixStack; 8 | import net.minecraft.item.ItemStack; 9 | import net.minecraft.util.math.MathHelper; 10 | import org.spongepowered.asm.mixin.Mixin; 11 | import org.spongepowered.asm.mixin.Shadow; 12 | import org.spongepowered.asm.mixin.injection.At; 13 | import org.spongepowered.asm.mixin.injection.Redirect; 14 | 15 | @Mixin(HandledScreen.class) 16 | public abstract class HandledScreenMixin { 17 | 18 | 19 | @Shadow protected int x; 20 | 21 | @Shadow protected abstract void drawItem(DrawContext context, ItemStack stack, int x, int y, String amountText); 22 | 23 | @Redirect(method = "render", at= @At(value = "INVOKE",target = "Lnet/minecraft/client/gui/screen/ingame/HandledScreen;drawItem(Lnet/minecraft/client/gui/DrawContext;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V")) 24 | private void drawBiggerItem(HandledScreen instance, DrawContext drawContext, ItemStack stack, int xPosition, int yPosition, String amountText){ 25 | BedrockifyClientSettings settings = BedrockifyClient.getInstance().settings; 26 | if(!settings.isBiggerIconsEnabled()){ 27 | this.drawItem(drawContext,stack, xPosition, yPosition, amountText); 28 | return; 29 | } 30 | MatrixStack matrices = drawContext.getMatrices(); 31 | matrices.push(); 32 | float multiplier = 1.3f; 33 | matrices.scale(multiplier,multiplier,multiplier); 34 | this.drawItem(drawContext, stack, MathHelper.ceil(xPosition/multiplier)-2, MathHelper.ceil(yPosition/multiplier)-2, amountText); 35 | matrices.pop(); 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/eatingAnimations/PlayerEntityRenderStateMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.eatingAnimations; 2 | 3 | import me.juancarloscp52.bedrockify.client.features.eatingAnimations.IEatingState; 4 | import net.minecraft.client.render.entity.state.PlayerEntityRenderState; 5 | import net.minecraft.util.Hand; 6 | import org.spongepowered.asm.mixin.Mixin; 7 | import org.spongepowered.asm.mixin.Unique; 8 | 9 | import java.util.Optional; 10 | 11 | @Mixin(PlayerEntityRenderState.class) 12 | public abstract class PlayerEntityRenderStateMixin implements IEatingState { 13 | @Unique 14 | private Hand eatingHand = null; 15 | 16 | @Override 17 | public void setEatingHand(Hand hand) { 18 | this.eatingHand = hand; 19 | } 20 | 21 | @Override 22 | public Optional getEatingHand() { 23 | return Optional.ofNullable(this.eatingHand); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/eatingAnimations/PlayerEntityRendererMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.eatingAnimations; 2 | 3 | import me.juancarloscp52.bedrockify.client.BedrockifyClient; 4 | import me.juancarloscp52.bedrockify.client.features.eatingAnimations.IEatingState; 5 | import net.minecraft.client.network.AbstractClientPlayerEntity; 6 | import net.minecraft.client.render.entity.PlayerEntityRenderer; 7 | import net.minecraft.client.render.entity.state.PlayerEntityRenderState; 8 | import net.minecraft.item.ItemStack; 9 | import net.minecraft.item.consume.UseAction; 10 | import net.minecraft.util.Hand; 11 | import org.spongepowered.asm.mixin.Mixin; 12 | import org.spongepowered.asm.mixin.Unique; 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(PlayerEntityRenderer.class) 18 | public abstract class PlayerEntityRendererMixin { 19 | @Inject(method = "updateRenderState", at = @At("HEAD")) 20 | private void bedrockify$storeEatingState(AbstractClientPlayerEntity abstractClientPlayerEntity, PlayerEntityRenderState playerEntityRenderState, float f, CallbackInfo ci) { 21 | if (!BedrockifyClient.getInstance().settings.isEatingAnimationsEnabled() || !(playerEntityRenderState instanceof IEatingState state)) { 22 | return; 23 | } 24 | 25 | ItemStack mainHandStack = abstractClientPlayerEntity.getMainHandStack(); 26 | ItemStack offHandStack = abstractClientPlayerEntity.getOffHandStack(); 27 | if (bedrockify$checkEatingAction(playerEntityRenderState, Hand.MAIN_HAND, mainHandStack)) { 28 | state.setEatingHand(Hand.MAIN_HAND); 29 | } else if (bedrockify$checkEatingAction(playerEntityRenderState, Hand.OFF_HAND, offHandStack)) { 30 | state.setEatingHand(Hand.OFF_HAND); 31 | } else { 32 | state.setEatingHand(null); 33 | } 34 | } 35 | 36 | @Unique 37 | private boolean bedrockify$checkEatingAction(PlayerEntityRenderState state, Hand hand, ItemStack itemStack) { 38 | return state.itemUseTimeLeft > 0 && state.activeHand == hand && (itemStack.getUseAction() == UseAction.EAT || itemStack.getUseAction() == UseAction.DRINK); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/editionBranding/LogoDrawerMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.editionBranding; 2 | 3 | import me.juancarloscp52.bedrockify.client.BedrockifyClient; 4 | import net.minecraft.client.gui.DrawContext; 5 | import net.minecraft.client.gui.LogoDrawer; 6 | import net.minecraft.client.render.RenderLayer; 7 | import net.minecraft.util.Identifier; 8 | import org.spongepowered.asm.mixin.Final; 9 | import org.spongepowered.asm.mixin.Mixin; 10 | import org.spongepowered.asm.mixin.Shadow; 11 | import org.spongepowered.asm.mixin.injection.At; 12 | import org.spongepowered.asm.mixin.injection.Redirect; 13 | 14 | import java.util.function.Function; 15 | 16 | @Mixin(LogoDrawer.class) 17 | public class LogoDrawerMixin { 18 | 19 | @Shadow @Final public static Identifier EDITION_TEXTURE; 20 | 21 | @Redirect(method = "draw(Lnet/minecraft/client/gui/DrawContext;IFI)V", at= @At(value = "INVOKE",target = "Lnet/minecraft/client/gui/DrawContext;drawTexture(Ljava/util/function/Function;Lnet/minecraft/util/Identifier;IIFFIIIII)V",ordinal = 1)) 22 | public void drawTexture(DrawContext drawContext, Function function, Identifier texture, int x, int y, float u, float v, int width, int height, int textureWidth, int textureHeight, int color){ 23 | if(!BedrockifyClient.getInstance().settings.hideEditionBranding){ 24 | drawContext.drawTexture(RenderLayer::getGuiTextured, EDITION_TEXTURE, x, y, u, v, width, height, textureWidth, textureHeight, color); 25 | } 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/fishingBobber/FishingBobberEntityRendererMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.fishingBobber; 2 | 3 | import me.juancarloscp52.bedrockify.client.BedrockifyClient; 4 | import me.juancarloscp52.bedrockify.client.features.fishingBobber.FishingBobber3DModel; 5 | import net.minecraft.client.model.Model; 6 | import net.minecraft.client.render.OverlayTexture; 7 | import net.minecraft.client.render.VertexConsumer; 8 | import net.minecraft.client.render.VertexConsumerProvider; 9 | import net.minecraft.client.render.entity.EntityRendererFactory; 10 | import net.minecraft.client.render.entity.FishingBobberEntityRenderer; 11 | import net.minecraft.client.render.entity.state.FishingBobberEntityState; 12 | import net.minecraft.client.util.math.MatrixStack; 13 | import net.minecraft.util.Colors; 14 | import org.spongepowered.asm.mixin.Mixin; 15 | import org.spongepowered.asm.mixin.Unique; 16 | import org.spongepowered.asm.mixin.injection.At; 17 | import org.spongepowered.asm.mixin.injection.Inject; 18 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 19 | 20 | @Mixin(FishingBobberEntityRenderer.class) 21 | public abstract class FishingBobberEntityRendererMixin { 22 | @Unique 23 | private Model bobberModel; 24 | 25 | @Inject(method = "", at = @At("RETURN")) 26 | private void bedrockify$injectCtor(EntityRendererFactory.Context context, CallbackInfo ci) { 27 | this.bobberModel = new FishingBobber3DModel<>(context.getPart(FishingBobber3DModel.MODEL_LAYER)); 28 | } 29 | 30 | @Inject(method = "vertex", at = @At("HEAD"), cancellable = true) 31 | private static void bedrockify$cancelOriginalBobberRendering(VertexConsumer buffer, MatrixStack.Entry matrix, int light, float x, int y, int u, int v, CallbackInfo ci) { 32 | if (!BedrockifyClient.getInstance().settings.fishingBobber3D) { 33 | return; 34 | } 35 | 36 | ci.cancel(); 37 | } 38 | 39 | @Inject(method = "render", at = @At("RETURN")) 40 | private void bedrockify$render3DBobber(FishingBobberEntityState fishingBobberEntityState, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int light, CallbackInfo ci) { 41 | if (!BedrockifyClient.getInstance().settings.fishingBobber3D) { 42 | return; 43 | } 44 | 45 | matrixStack.push(); 46 | matrixStack.translate(0f, -0.0075f, 0f); 47 | VertexConsumer vertexConsumer = vertexConsumerProvider.getBuffer(FishingBobber3DModel.RENDER_LAYER); 48 | this.bobberModel.render(matrixStack, vertexConsumer, light, OverlayTexture.DEFAULT_UV, Colors.WHITE); 49 | matrixStack.pop(); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/heldItemTooltips/ItemTooltipsMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.heldItemTooltips; 2 | 3 | import me.juancarloscp52.bedrockify.client.BedrockifyClient; 4 | import me.juancarloscp52.bedrockify.client.features.heldItemTooltips.HeldItemTooltips; 5 | import net.minecraft.client.MinecraftClient; 6 | import net.minecraft.client.font.TextRenderer; 7 | import net.minecraft.client.gui.DrawContext; 8 | import net.minecraft.client.gui.hud.InGameHud; 9 | import net.minecraft.item.ItemStack; 10 | import net.minecraft.text.Text; 11 | import org.spongepowered.asm.mixin.Final; 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(InGameHud.class) 18 | public class ItemTooltipsMixin { 19 | @Shadow private ItemStack currentStack; 20 | 21 | @Shadow private int heldItemTooltipFade; 22 | 23 | @Shadow @Final private MinecraftClient client; 24 | 25 | /** 26 | * Draw custom tooltips for effects and enchantments before the heldItemTooltip is rendered. 27 | */ 28 | @Redirect(method = "renderHeldItemTooltip", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawTextWithBackground(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/text/Text;IIII)I")) 29 | private int drawCustomTooltips(DrawContext instance, TextRenderer textRenderer, Text text, int x, int y, int width, int color) { 30 | return BedrockifyClient.getInstance().heldItemTooltips.drawItemWithCustomTooltips(instance,textRenderer, text, x, MinecraftClient.getInstance().getWindow().getScaledHeight() - 38, color, currentStack); 31 | } 32 | 33 | /** 34 | * Show the item tooltip when changing from an item to another of the same type and name IFF different tooltips. 35 | */ 36 | @Redirect(method = "tick()V", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;isEmpty()Z", ordinal = 1)) 37 | private boolean interceptItemStack(ItemStack itemStack) { 38 | ItemStack nextItem = this.client.player.getMainHandStack(); 39 | HeldItemTooltips heldItemTooltips = BedrockifyClient.getInstance().heldItemTooltips; 40 | if(itemStack.getItem() == this.currentStack.getItem() && !heldItemTooltips.equals(currentStack,nextItem)){ 41 | this.heldItemTooltipFade = 41; 42 | return true; 43 | } 44 | 45 | return currentStack.isEmpty(); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/hudOpacity/BossBarHudMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.hudOpacity; 2 | 3 | import com.mojang.blaze3d.systems.RenderSystem; 4 | import me.juancarloscp52.bedrockify.client.BedrockifyClient; 5 | import net.minecraft.client.gui.DrawContext; 6 | import net.minecraft.client.gui.hud.BossBarHud; 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.ModifyArg; 11 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 12 | 13 | @Mixin(BossBarHud.class) 14 | public class BossBarHudMixin { 15 | 16 | @Inject(method = "render", at = @At(value = "INVOKE",target = "Lnet/minecraft/client/gui/hud/BossBarHud;renderBossBar(Lnet/minecraft/client/gui/DrawContext;IILnet/minecraft/entity/boss/BossBar;)V")) 17 | public void applyAlphaBossBar (DrawContext context, CallbackInfo ci){ 18 | RenderSystem.setShaderColor(1,1,1,BedrockifyClient.getInstance().hudOpacity.getHudOpacity(false)); 19 | } 20 | 21 | @ModifyArg(method = "render", at = @At(value = "INVOKE",target = "Lnet/minecraft/client/gui/DrawContext;drawTextWithShadow(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/text/Text;III)I"),index = 4) 22 | public int applyAlphaTextBossBar(int color){ 23 | int alpha = (int) Math.ceil(BedrockifyClient.getInstance().hudOpacity.getHudOpacity(false)*255); 24 | return color | (alpha << 24); 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/hudOpacity/ItemRendererMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.hudOpacity; 2 | 3 | import net.minecraft.client.render.RenderLayer; 4 | import net.minecraft.client.render.TexturedRenderLayers; 5 | import net.minecraft.client.render.item.ItemRenderer; 6 | import org.spongepowered.asm.mixin.Mixin; 7 | import org.spongepowered.asm.mixin.injection.At; 8 | import org.spongepowered.asm.mixin.injection.ModifyVariable; 9 | 10 | @Mixin(ItemRenderer.class) 11 | public abstract class ItemRendererMixin { 12 | @ModifyVariable( 13 | method = "renderItem(Lnet/minecraft/item/ItemDisplayContext;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;II[ILjava/util/List;Lnet/minecraft/client/render/RenderLayer;Lnet/minecraft/client/render/item/ItemRenderState$Glint;)V", 14 | at = @At("HEAD"), 15 | argsOnly = true) 16 | private static RenderLayer bedrockify$applyTranslucencyForBakedItemModel(RenderLayer original) { 17 | return TexturedRenderLayers.getItemEntityTranslucentCull(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/hudOpacity/SubtitlesHudMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.hudOpacity; 2 | 3 | import com.mojang.blaze3d.systems.RenderSystem; 4 | import net.minecraft.client.gui.DrawContext; 5 | import net.minecraft.client.gui.hud.SubtitlesHud; 6 | import org.spongepowered.asm.mixin.Mixin; 7 | import org.spongepowered.asm.mixin.injection.At; 8 | import org.spongepowered.asm.mixin.injection.Inject; 9 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 10 | 11 | @Mixin(SubtitlesHud.class) 12 | public class SubtitlesHudMixin { 13 | 14 | @Inject(method = "render", at = @At("HEAD")) 15 | public void resetOpacity(DrawContext context, CallbackInfo ci){ 16 | RenderSystem.setShaderColor(1,1,1,1); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/hudOpacity/appleskin/HUDOverlayHandlerMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.hudOpacity.appleskin; 2 | 3 | import me.juancarloscp52.bedrockify.client.BedrockifyClient; 4 | import org.spongepowered.asm.mixin.Mixin; 5 | import org.spongepowered.asm.mixin.Pseudo; 6 | import org.spongepowered.asm.mixin.injection.At; 7 | import org.spongepowered.asm.mixin.injection.ModifyVariable; 8 | import squeek.appleskin.client.HUDOverlayHandler; 9 | 10 | @Pseudo 11 | @Mixin(HUDOverlayHandler.class) 12 | public class HUDOverlayHandlerMixin { 13 | @ModifyVariable(method = "drawHungerOverlay(Lnet/minecraft/client/gui/DrawContext;IILnet/minecraft/client/MinecraftClient;IIFZI)V", at = @At("HEAD"),ordinal = 0) 14 | public float clampAlphaHungerOverlay(float alpha){ 15 | return BedrockifyClient.getInstance().hudOpacity.getHudOpacity(false)*alpha; 16 | } 17 | @ModifyVariable(method = "drawHealthOverlay(Lnet/minecraft/client/gui/DrawContext;FFLnet/minecraft/client/MinecraftClient;IIFI)V", at = @At("HEAD"),ordinal = 2) 18 | public float clampAlphaHealthOverlay(float alpha){ 19 | return BedrockifyClient.getInstance().hudOpacity.getHudOpacity(false)*alpha; 20 | } 21 | 22 | } -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/hudOpacity/detailArmorBar/ArmorBarRendererMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.hudOpacity.detailArmorBar; 2 | 3 | import com.redlimerl.detailab.render.ArmorBarRenderer; 4 | import me.juancarloscp52.bedrockify.client.BedrockifyClient; 5 | import org.spongepowered.asm.mixin.Mixin; 6 | import org.spongepowered.asm.mixin.Pseudo; 7 | import org.spongepowered.asm.mixin.injection.At; 8 | import org.spongepowered.asm.mixin.injection.ModifyArg; 9 | 10 | @Pseudo 11 | @Mixin(ArmorBarRenderer.class) 12 | public class ArmorBarRendererMixin { 13 | 14 | @ModifyArg(method = "render", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/RenderSystem;setShaderColor(FFFF)V"),index = 3) 15 | private float clampAlpha(float value){ 16 | return BedrockifyClient.getInstance().hudOpacity.getHudOpacity(false)*value; 17 | } 18 | } -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/hudOpacity/detailArmorBar/InGameDrawerMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.hudOpacity.detailArmorBar; 2 | 3 | import com.mojang.blaze3d.systems.RenderSystem; 4 | import com.redlimerl.detailab.render.InGameDrawer; 5 | import me.juancarloscp52.bedrockify.client.BedrockifyClient; 6 | import net.minecraft.util.Identifier; 7 | import org.joml.Matrix4f; 8 | import org.spongepowered.asm.mixin.Mixin; 9 | import org.spongepowered.asm.mixin.Pseudo; 10 | import org.spongepowered.asm.mixin.injection.At; 11 | import org.spongepowered.asm.mixin.injection.Inject; 12 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 13 | 14 | @Pseudo 15 | @Mixin(InGameDrawer.class) 16 | public class InGameDrawerMixin { 17 | 18 | @Inject(method = "drawTexturedQuad", at = @At(value = "HEAD")) 19 | private static void applyOpacity(Identifier identifier, Matrix4f matrices, int x0, int x1, int y0, int y1, int z, float u0, float u1, float v0, float v1, boolean mirror, CallbackInfo ci){ 20 | var currentColors = RenderSystem.getShaderColor(); 21 | //Cap original transparency to one 22 | if(currentColors[3] > 1){ 23 | currentColors[3] = 1.f; 24 | } 25 | RenderSystem.setShaderColor(currentColors[0],currentColors[1],currentColors[2],BedrockifyClient.getInstance().hudOpacity.getHudOpacity(false)*(currentColors[3])); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/idleHandAnimations/HeldItemRendererMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.idleHandAnimations; 2 | 3 | import me.juancarloscp52.bedrockify.client.BedrockifyClient; 4 | import net.minecraft.client.MinecraftClient; 5 | import net.minecraft.client.network.ClientPlayerEntity; 6 | import net.minecraft.client.render.VertexConsumerProvider; 7 | import net.minecraft.client.render.item.HeldItemRenderer; 8 | import net.minecraft.client.util.math.MatrixStack; 9 | import net.minecraft.util.Arm; 10 | import net.minecraft.util.math.MathHelper; 11 | import org.spongepowered.asm.mixin.Mixin; 12 | import org.spongepowered.asm.mixin.Unique; 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 | 18 | @Mixin(HeldItemRenderer.class) 19 | public class HeldItemRendererMixin { 20 | @Unique 21 | float timer = 0; 22 | @Unique 23 | private static final double ONE_CYCLE = 2 * Math.PI; 24 | 25 | @Inject(method = "renderItem(FLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider$Immediate;Lnet/minecraft/client/network/ClientPlayerEntity;I)V", at = @At("HEAD")) 26 | private void bedrockify$updateSwayDelta(float tickDelta, MatrixStack matrices, VertexConsumerProvider.Immediate vertexConsumers, ClientPlayerEntity player, int light, CallbackInfo ci) { 27 | if (MinecraftClient.getInstance().isPaused()) { 28 | return; 29 | } 30 | timer += BedrockifyClient.getInstance().deltaTime * 0.000000002f; 31 | if (timer > ONE_CYCLE) { 32 | // Prevents float overflow 33 | timer = (float) MathHelper.floorMod(timer, ONE_CYCLE); 34 | } 35 | } 36 | 37 | /** 38 | * Adds "breathing" idle animation to items in hand. 39 | */ 40 | @Inject(method = "applyEquipOffset", at=@At("HEAD"),cancellable = true) 41 | public void applyEquipOffset (MatrixStack matrices, Arm arm, float equipProgress, CallbackInfo info){ 42 | int i = arm == Arm.RIGHT ? 1 : -1; 43 | double breath = (i==1 ? MathHelper.sin(((timer))* BedrockifyClient.getInstance().settings.getIdleAnimation()) : MathHelper.cos((timer)* BedrockifyClient.getInstance().settings.getIdleAnimation()))*0.01D; 44 | matrices.translate(((float)i * 0.56F), (-0.52F + equipProgress * -0.6F) + breath, -0.7200000286102295D); 45 | info.cancel(); 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/loadingScreens/DisconnectedScreenMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.loadingScreens; 2 | 3 | import me.juancarloscp52.bedrockify.client.BedrockifyClient; 4 | import me.juancarloscp52.bedrockify.client.features.loadingScreens.LoadingScreenWidget; 5 | import net.minecraft.client.MinecraftClient; 6 | import net.minecraft.client.gui.DrawContext; 7 | import net.minecraft.client.gui.screen.DisconnectedScreen; 8 | import net.minecraft.client.gui.screen.Screen; 9 | import net.minecraft.client.gui.screen.TitleScreen; 10 | import net.minecraft.client.gui.widget.ButtonWidget; 11 | import net.minecraft.network.DisconnectionInfo; 12 | import net.minecraft.text.Text; 13 | import org.spongepowered.asm.mixin.Final; 14 | import org.spongepowered.asm.mixin.Mixin; 15 | import org.spongepowered.asm.mixin.Shadow; 16 | import org.spongepowered.asm.mixin.injection.At; 17 | import org.spongepowered.asm.mixin.injection.Inject; 18 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 19 | 20 | @Mixin(DisconnectedScreen.class) 21 | public class DisconnectedScreenMixin extends Screen { 22 | 23 | @Shadow @Final private Text buttonLabel; 24 | @Shadow @Final private Screen parent; 25 | @Shadow @Final private static Text TO_TITLE_TEXT; 26 | @Shadow @Final private DisconnectionInfo info; 27 | 28 | 29 | protected DisconnectedScreenMixin(Text title) { 30 | super(title); 31 | } 32 | 33 | /** 34 | * Move the Back to Menu button down. 35 | */ 36 | @Inject(method = "init", at=@At("HEAD"), cancellable = true) 37 | public void init(CallbackInfo ci){ 38 | if(BedrockifyClient.getInstance().settings.isLoadingScreenEnabled()){ 39 | ButtonWidget.Builder buttonWidget = this.client.isMultiplayerEnabled() ? ButtonWidget.builder(this.buttonLabel, button -> this.client.setScreen(this.parent)) : ButtonWidget.builder(TO_TITLE_TEXT, button -> this.client.setScreen(new TitleScreen())); 40 | this.addDrawableChild(buttonWidget.position(this.width / 2 - 100, (int) Math.ceil(MinecraftClient.getInstance().getWindow().getScaledHeight() * 0.75D)).width(200).build()); 41 | ci.cancel(); 42 | } 43 | } 44 | /** 45 | * Renders the loading screen widget. 46 | */ 47 | @Override 48 | public void render(DrawContext drawContext, int mouseX, int mouseY, float delta) { 49 | super.render(drawContext, mouseX, mouseY, delta); 50 | if(!BedrockifyClient.getInstance().settings.isLoadingScreenEnabled()) 51 | return; 52 | LoadingScreenWidget.getInstance().render(drawContext, width / 2, height / 2, this.title, this.info.reason(), -1); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/loadingScreens/DownloadingTerrainScreenMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.loadingScreens; 2 | 3 | import me.juancarloscp52.bedrockify.client.BedrockifyClient; 4 | import me.juancarloscp52.bedrockify.client.features.loadingScreens.LoadingScreenWidget; 5 | import net.minecraft.client.MinecraftClient; 6 | import net.minecraft.client.font.TextRenderer; 7 | import net.minecraft.client.gui.DrawContext; 8 | import net.minecraft.client.gui.screen.DownloadingTerrainScreen; 9 | import net.minecraft.text.Text; 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(DownloadingTerrainScreen.class) 15 | public class DownloadingTerrainScreenMixin { 16 | 17 | /** 18 | * Renders the loading screen widget. 19 | */ 20 | @Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawCenteredTextWithShadow(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/text/Text;III)V")) 21 | public void drawLoadingScreenWidget(DrawContext drawContext, TextRenderer textRenderer, Text text, int x, int y, int color) { 22 | if(BedrockifyClient.getInstance().settings.isLoadingScreenEnabled()){ 23 | LoadingScreenWidget.getInstance().render(drawContext, MinecraftClient.getInstance().getWindow().getScaledWidth() / 2, MinecraftClient.getInstance().getWindow().getScaledHeight() / 2, Text.translatable("multiplayer.downloadingTerrain"), null, -1); 24 | }else{ 25 | drawContext.drawCenteredTextWithShadow(textRenderer, text, x, y, color); 26 | } 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/loadingScreens/ExtendScreenMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.loadingScreens; 2 | 3 | import net.minecraft.client.gui.DrawContext; 4 | import net.minecraft.client.gui.screen.Screen; 5 | import net.minecraft.text.Text; 6 | import org.spongepowered.asm.mixin.Final; 7 | import org.spongepowered.asm.mixin.Mixin; 8 | import org.spongepowered.asm.mixin.Shadow; 9 | import org.spongepowered.asm.mixin.injection.At; 10 | import org.spongepowered.asm.mixin.injection.Inject; 11 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 12 | 13 | @Mixin(Screen.class) 14 | public abstract class ExtendScreenMixin { 15 | @Shadow 16 | protected @Final Text title; 17 | 18 | @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/Screen;renderBackground(Lnet/minecraft/client/gui/DrawContext;IIF)V", shift = At.Shift.AFTER), cancellable = true) 19 | protected void bedrockify$screenRender_AfterRenderBG(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) { 20 | // Empty body for overridable mixin 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/loadingScreens/LevelLoadingScreenMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.loadingScreens; 2 | 3 | import me.juancarloscp52.bedrockify.client.BedrockifyClient; 4 | import me.juancarloscp52.bedrockify.client.features.loadingScreens.LoadingScreenWidget; 5 | import net.minecraft.client.gui.DrawContext; 6 | import net.minecraft.client.gui.screen.Screen; 7 | import net.minecraft.client.gui.screen.world.LevelLoadingScreen; 8 | import net.minecraft.server.WorldGenerationProgressTracker; 9 | import net.minecraft.text.Text; 10 | import net.minecraft.util.Util; 11 | import org.spongepowered.asm.mixin.Final; 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.Inject; 16 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 17 | 18 | @Mixin(LevelLoadingScreen.class) 19 | public abstract class LevelLoadingScreenMixin extends Screen { 20 | @Shadow @Final private WorldGenerationProgressTracker progressProvider; 21 | 22 | @Shadow private long lastNarrationTime; 23 | 24 | protected LevelLoadingScreenMixin(Text title) { 25 | super(title); 26 | } 27 | 28 | /** 29 | * Draws the loading screen widget and allows to toggle the chunk map loading widget. 30 | */ 31 | @Inject(method = "render", at = @At("HEAD"), cancellable = true) 32 | public void render(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo info) { 33 | if(!BedrockifyClient.getInstance().settings.isLoadingScreenEnabled()) 34 | return; 35 | this.renderBackground(context, mouseX, mouseY, delta); 36 | int xPosition = this.width / 2; 37 | int yPosition = this.height / 2; 38 | LoadingScreenWidget.getInstance().render(context, xPosition, yPosition, Text.translatable("narrator.loading", Text.translatable("loading.progress", this.progressProvider.getProgressPercentage()).getString()), null, this.progressProvider.getProgressPercentage()); 39 | 40 | long l = Util.getMeasuringTimeMs(); 41 | if (l - this.lastNarrationTime > 2000L) { 42 | this.lastNarrationTime = l; 43 | this.narrateScreenIfNarrationEnabled(true); 44 | } 45 | 46 | if (BedrockifyClient.getInstance().settings.isShowChunkMapEnabled()) 47 | LevelLoadingScreen.drawChunkMap(context, this.progressProvider, xPosition, yPosition + yPosition / 2 + 89 / 4, 1, 0); 48 | 49 | info.cancel(); 50 | } 51 | 52 | } 53 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/loadingScreens/ProgressScreenMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.loadingScreens; 2 | 3 | import me.juancarloscp52.bedrockify.client.BedrockifyClient; 4 | import me.juancarloscp52.bedrockify.client.features.loadingScreens.LoadingScreenWidget; 5 | import net.minecraft.client.gui.DrawContext; 6 | import net.minecraft.client.gui.screen.ProgressScreen; 7 | import net.minecraft.client.gui.screen.Screen; 8 | import net.minecraft.text.Text; 9 | import org.spongepowered.asm.mixin.Mixin; 10 | import org.spongepowered.asm.mixin.Shadow; 11 | import org.spongepowered.asm.mixin.injection.At; 12 | import org.spongepowered.asm.mixin.injection.Inject; 13 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 14 | 15 | @Mixin(ProgressScreen.class) 16 | public class ProgressScreenMixin extends Screen { 17 | 18 | 19 | @Shadow private Text task; 20 | @Shadow private int progress; 21 | protected ProgressScreenMixin(Text title) { 22 | super(title); 23 | } 24 | 25 | /** 26 | * Renders the loading screen widgets with progress bar if necessary. 27 | */ 28 | @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/Screen;render(Lnet/minecraft/client/gui/DrawContext;IIF)V"), cancellable = true) 29 | public void renderLoadScreen(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo info) { 30 | if(!BedrockifyClient.getInstance().settings.isLoadingScreenEnabled() || client == null){ 31 | return; 32 | } 33 | super.render(context, mouseX, mouseY, delta); 34 | if (title != null) { 35 | if (this.task != null && this.progress != 0) { 36 | LoadingScreenWidget.getInstance().render(context, client.getWindow().getScaledWidth() / 2, client.getWindow().getScaledHeight() / 2, this.title, this.task, this.progress); 37 | } else { 38 | LoadingScreenWidget.getInstance().render(context, client.getWindow().getScaledWidth() / 2, client.getWindow().getScaledHeight() / 2, this.title, null, -1); 39 | } 40 | } else if (this.task != null && this.progress != 0) { 41 | LoadingScreenWidget.getInstance().render(context, client.getWindow().getScaledWidth() / 2, client.getWindow().getScaledHeight() / 2, this.task, null, this.progress); 42 | } else { 43 | LoadingScreenWidget.getInstance().render(context, client.getWindow().getScaledWidth() / 2, client.getWindow().getScaledHeight() / 2, Text.literal(""), null, -1); 44 | } 45 | 46 | info.cancel(); 47 | } 48 | 49 | } 50 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/loadingScreens/SaveLevelScreenMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.loadingScreens; 2 | 3 | import me.juancarloscp52.bedrockify.client.BedrockifyClient; 4 | import me.juancarloscp52.bedrockify.client.features.loadingScreens.LoadingScreenWidget; 5 | import net.minecraft.client.MinecraftClient; 6 | import net.minecraft.client.gui.DrawContext; 7 | import net.minecraft.client.gui.screen.MessageScreen; 8 | import net.minecraft.text.Text; 9 | import org.spongepowered.asm.mixin.Mixin; 10 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 11 | 12 | @Mixin(MessageScreen.class) 13 | public class SaveLevelScreenMixin extends ExtendScreenMixin { 14 | 15 | /** 16 | * Renders the loading screen widget. 17 | */ 18 | @Override 19 | protected void bedrockify$screenRender_AfterRenderBG(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) { 20 | super.bedrockify$screenRender_AfterRenderBG(context, mouseX, mouseY, delta, ci); 21 | if(BedrockifyClient.getInstance().settings.isLoadingScreenEnabled()){ 22 | LoadingScreenWidget.getInstance().render(context, MinecraftClient.getInstance().getWindow().getScaledWidth() / 2, MinecraftClient.getInstance().getWindow().getScaledHeight() / 2, Text.literal(title.getString()), null, -1); 23 | ci.cancel(); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/pickupAnimations/InGameHudMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.pickupAnimations; 2 | 3 | import com.llamalad7.mixinextras.injector.wrapoperation.Operation; 4 | import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; 5 | import me.juancarloscp52.bedrockify.client.BedrockifyClient; 6 | import net.fabricmc.api.EnvType; 7 | import net.fabricmc.api.Environment; 8 | import net.minecraft.client.gui.DrawContext; 9 | import net.minecraft.client.gui.hud.InGameHud; 10 | import net.minecraft.client.render.RenderTickCounter; 11 | import net.minecraft.client.util.math.MatrixStack; 12 | import net.minecraft.entity.player.PlayerEntity; 13 | import net.minecraft.item.ItemStack; 14 | import org.spongepowered.asm.mixin.Mixin; 15 | import org.spongepowered.asm.mixin.Unique; 16 | import org.spongepowered.asm.mixin.injection.At; 17 | import org.spongepowered.asm.mixin.injection.Inject; 18 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 19 | 20 | 21 | @Environment(EnvType.CLIENT) 22 | @Mixin(InGameHud.class) 23 | public abstract class InGameHudMixin{ 24 | 25 | @Unique 26 | private float pickedItemCooldownLeft =0.0f; 27 | 28 | @Inject(method = "renderHotbarItem", at=@At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;getBobbingAnimationTime()I")) 29 | private void captureItemStack(DrawContext context, int x, int y, RenderTickCounter tickCounter, PlayerEntity player, ItemStack stack, int seed, CallbackInfo ci){ 30 | pickedItemCooldownLeft = stack.getBobbingAnimationTime()-tickCounter.getTickProgress(true); 31 | } 32 | @WrapOperation(method = "renderHotbarItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/MatrixStack;scale(FFF)V")) 33 | private void applyAnimation(MatrixStack matrixStack, float x, float y, float z, Operation original){ 34 | if(!BedrockifyClient.getInstance().settings.isPickupAnimationsEnabled()){ 35 | original.call(matrixStack, x,y,z); 36 | return; 37 | } 38 | if(pickedItemCooldownLeft >0.0f){ 39 | float animation = 1.0f + pickedItemCooldownLeft / 12.5f; 40 | original.call(matrixStack, animation, animation, 1.0f); 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/reacharoundPlacement/MinecraftClientMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.reacharoundPlacement; 2 | 3 | 4 | import me.juancarloscp52.bedrockify.client.BedrockifyClient; 5 | import me.juancarloscp52.bedrockify.client.features.reacharoundPlacement.ReachAroundPlacement; 6 | import net.minecraft.client.MinecraftClient; 7 | import net.minecraft.client.network.ClientPlayerEntity; 8 | import net.minecraft.util.hit.BlockHitResult; 9 | import net.minecraft.util.hit.HitResult; 10 | import net.minecraft.util.math.BlockPos; 11 | import net.minecraft.util.math.Vec3d; 12 | import net.minecraft.util.thread.ReentrantThreadExecutor; 13 | import org.jetbrains.annotations.Nullable; 14 | import org.spongepowered.asm.mixin.Mixin; 15 | import org.spongepowered.asm.mixin.Shadow; 16 | import org.spongepowered.asm.mixin.injection.At; 17 | import org.spongepowered.asm.mixin.injection.Inject; 18 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 19 | 20 | 21 | @Mixin(MinecraftClient.class) 22 | public abstract class MinecraftClientMixin extends ReentrantThreadExecutor { 23 | @Shadow 24 | public ClientPlayerEntity player; 25 | @Shadow 26 | @Nullable 27 | public HitResult crosshairTarget; 28 | @Shadow 29 | public abstract boolean isInSingleplayer(); 30 | 31 | public MinecraftClientMixin(String string) { 32 | super(string); 33 | } 34 | 35 | 36 | /** 37 | * Allows the player to use the reachAround placement feature if enabled. 38 | */ 39 | @Inject(method = "doItemUse", at = @At("HEAD")) 40 | private void bedrockify$modifyCrosshairTarget(CallbackInfo ci) { 41 | if (this.player == null) { 42 | return; 43 | } 44 | if (!BedrockifyClient.getInstance().settings.isReacharoundEnabled() || (!isInSingleplayer() && !BedrockifyClient.getInstance().settings.isReacharoundMultiplayerEnabled())) { 45 | return; 46 | } 47 | 48 | if (BedrockifyClient.getInstance().reachAroundPlacement.canReachAround()) { 49 | final ClientPlayerEntity player = this.player; 50 | final BlockPos targetPos = ReachAroundPlacement.getFacingSteppingBlockPos(player); 51 | this.crosshairTarget = new BlockHitResult(new Vec3d(targetPos.getX(), player.getY(), targetPos.getZ()), player.getHorizontalFacing(), targetPos, false); 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/savingOverlay/MinecraftServerMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.savingOverlay; 2 | 3 | import me.juancarloscp52.bedrockify.client.BedrockifyClient; 4 | import net.minecraft.server.MinecraftServer; 5 | import org.spongepowered.asm.mixin.Mixin; 6 | import org.spongepowered.asm.mixin.Shadow; 7 | import org.spongepowered.asm.mixin.injection.At; 8 | import org.spongepowered.asm.mixin.injection.Inject; 9 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 10 | 11 | @Mixin(MinecraftServer.class) 12 | /* 13 | * Updates the saving status for the saving overlay. 14 | */ 15 | public abstract class MinecraftServerMixin { 16 | 17 | @Shadow public abstract boolean isDedicated(); 18 | 19 | @Inject(method = "save", at= @At("HEAD")) 20 | private void startSaving(CallbackInfoReturnable info){ 21 | if(!this.isDedicated() && BedrockifyClient.getInstance().settings.isSavingOverlayEnabled()) 22 | BedrockifyClient.getInstance().overlay.savingOverlay.setSaving(true); 23 | } 24 | 25 | @Inject(method = "save", at= @At("RETURN")) 26 | private void stopSaving(CallbackInfoReturnable info){ 27 | if(!this.isDedicated() && BedrockifyClient.getInstance().settings.isSavingOverlayEnabled()) 28 | BedrockifyClient.getInstance().overlay.savingOverlay.setSaving(false); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/screenSafeArea/BossBarHudMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.screenSafeArea; 2 | 3 | import me.juancarloscp52.bedrockify.client.BedrockifyClient; 4 | import net.minecraft.client.gui.hud.BossBarHud; 5 | import org.spongepowered.asm.mixin.Mixin; 6 | import org.spongepowered.asm.mixin.injection.At; 7 | import org.spongepowered.asm.mixin.injection.ModifyArg; 8 | 9 | @Mixin(BossBarHud.class) 10 | 11 | /* 12 | Apply screen safe area to BossBar Hud. 13 | */ 14 | public abstract class BossBarHudMixin { 15 | 16 | @ModifyArg(method = "render", at = @At(value = "INVOKE",target = "Lnet/minecraft/client/gui/hud/BossBarHud;renderBossBar(Lnet/minecraft/client/gui/DrawContext;IILnet/minecraft/entity/boss/BossBar;)V"),index = 2) 17 | public int applyScreenBorderToBossBar(int y){ 18 | return y + BedrockifyClient.getInstance().settings.getScreenSafeArea(); 19 | } 20 | 21 | @ModifyArg(method = "render", at = @At(value = "INVOKE",target = "Lnet/minecraft/client/gui/DrawContext;drawTextWithShadow(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/text/Text;III)I"),index = 3) 22 | public int applyScreenBorderToBossName(int y){ 23 | return y + BedrockifyClient.getInstance().settings.getScreenSafeArea(); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/screenSafeArea/SubtitlesHudMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.screenSafeArea; 2 | 3 | import me.juancarloscp52.bedrockify.client.BedrockifyClient; 4 | import net.minecraft.client.gui.hud.SubtitlesHud; 5 | import org.spongepowered.asm.mixin.Mixin; 6 | import org.spongepowered.asm.mixin.injection.At; 7 | import org.spongepowered.asm.mixin.injection.ModifyArgs; 8 | import org.spongepowered.asm.mixin.injection.invoke.arg.Args; 9 | 10 | @Mixin(SubtitlesHud.class) 11 | /* 12 | * Applies the screen border distance to the subtitles widget. 13 | */ 14 | public class SubtitlesHudMixin { 15 | @ModifyArgs(method = "render", at = @At(value = "INVOKE",target = "Lnet/minecraft/client/gui/DrawContext;drawTextWithShadow(Lnet/minecraft/client/font/TextRenderer;Ljava/lang/String;III)I")) 16 | private void modifyDrawText(Args args){ 17 | int screenBorder = BedrockifyClient.getInstance().settings.getScreenSafeArea(); 18 | int x = args.get(2); 19 | int y = args.get(3); 20 | args.set(2, x - screenBorder); 21 | args.set(3, y - screenBorder); 22 | } 23 | 24 | @ModifyArgs(method = "render", at = @At(value = "INVOKE",target = "Lnet/minecraft/client/gui/DrawContext;drawTextWithShadow(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/text/Text;III)I")) 25 | public void modifyDrawText2(Args args){ 26 | int screenBorder = BedrockifyClient.getInstance().settings.getScreenSafeArea(); 27 | int x = args.get(2); 28 | int y = args.get(3); 29 | args.set(2, x - screenBorder); 30 | args.set(3, y - screenBorder); 31 | } 32 | 33 | @ModifyArgs(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;fill(IIIII)V")) 34 | public void ModifyDrawText3(Args args){ 35 | int screenBorder = BedrockifyClient.getInstance().settings.getScreenSafeArea(); 36 | int x1 = args.get(0); 37 | int y1 = args.get(1); 38 | int x2 = args.get(2); 39 | int y2 = args.get(3); 40 | args.set(0, x1 - screenBorder); 41 | args.set(2, x2 - screenBorder); 42 | args.set(1, y1 - screenBorder); 43 | args.set(3, y2 - screenBorder); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/screenSafeArea/detailArmorBar/ArmorBarRendererMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.screenSafeArea.detailArmorBar; 2 | 3 | import com.redlimerl.detailab.render.ArmorBarRenderer; 4 | import me.juancarloscp52.bedrockify.client.BedrockifyClient; 5 | import org.spongepowered.asm.mixin.Mixin; 6 | import org.spongepowered.asm.mixin.Pseudo; 7 | import org.spongepowered.asm.mixin.injection.At; 8 | import org.spongepowered.asm.mixin.injection.ModifyVariable; 9 | 10 | @Pseudo 11 | @Mixin(ArmorBarRenderer.class) 12 | public class ArmorBarRendererMixin { 13 | 14 | @ModifyVariable(method = "render", at = @At("STORE"),name = "yPos") 15 | private int modifyYPos(int value){ 16 | return value - BedrockifyClient.getInstance().settings.getScreenSafeArea(); 17 | } 18 | 19 | } -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/useAnimations/ClientPlayNetworkHandlerMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.useAnimations; 2 | 3 | import me.juancarloscp52.bedrockify.client.features.useAnimations.AnimationsHelper; 4 | import net.fabricmc.api.EnvType; 5 | import net.fabricmc.api.Environment; 6 | import net.minecraft.client.MinecraftClient; 7 | import net.minecraft.client.network.ClientPlayNetworkHandler; 8 | import net.minecraft.entity.player.PlayerEntity; 9 | import net.minecraft.entity.player.PlayerInventory; 10 | import net.minecraft.item.ItemStack; 11 | import net.minecraft.network.packet.s2c.play.InventoryS2CPacket; 12 | import net.minecraft.network.packet.s2c.play.ScreenHandlerSlotUpdateS2CPacket; 13 | import net.minecraft.screen.PlayerScreenHandler; 14 | import org.spongepowered.asm.mixin.Mixin; 15 | import org.spongepowered.asm.mixin.injection.At; 16 | import org.spongepowered.asm.mixin.injection.Inject; 17 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 18 | 19 | @Environment(EnvType.CLIENT) 20 | @Mixin(ClientPlayNetworkHandler.class) 21 | public abstract class ClientPlayNetworkHandlerMixin { 22 | 23 | /** 24 | * Animate always by receiving S2C packet.
25 | * Original method prevents the bobbing animation when decrementing and damaging. 26 | * 27 | * @see ClientPlayNetworkHandler#onScreenHandlerSlotUpdate 28 | */ 29 | @Inject(method = "onScreenHandlerSlotUpdate", at = @At("RETURN")) 30 | private void bedrockify$animateAlwaysSlotUpdate(ScreenHandlerSlotUpdateS2CPacket packet, CallbackInfo ci) { 31 | final ItemStack itemStack = packet.getStack(); 32 | final int slotIdx = packet.getSlot(); 33 | if (packet.getSyncId() != 0 && !PlayerScreenHandler.isInHotbar(slotIdx) || itemStack == null) { 34 | return; 35 | } 36 | 37 | AnimationsHelper.doBobbingAnimation(itemStack); 38 | } 39 | 40 | /** 41 | * Animate always by receiving S2C packet.
42 | * This handles a packet that could not be caught by {@link ClientPlayNetworkHandler#onScreenHandlerSlotUpdate}. 43 | * 44 | * @see ClientPlayNetworkHandler#onInventory 45 | */ 46 | @Inject(method = "onInventory", at = @At("RETURN")) 47 | private void bedrockify$animateAlwaysInventory(InventoryS2CPacket packet, CallbackInfo ci) { 48 | final PlayerEntity player = MinecraftClient.getInstance().player; 49 | if (packet.syncId() != 0 || player == null) { 50 | return; 51 | } 52 | 53 | final int target = AnimationsHelper.consumeChangedSlot(); 54 | if (!PlayerInventory.isValidHotbarIndex(target) && target != PlayerInventory.OFF_HAND_SLOT) { 55 | return; 56 | } 57 | 58 | AnimationsHelper.doBobbingAnimation(player.getInventory().getStack(target)); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/useAnimations/ClientPlayerEntityMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.useAnimations; 2 | 3 | import com.mojang.authlib.GameProfile; 4 | import me.juancarloscp52.bedrockify.client.features.useAnimations.AnimationsHelper; 5 | import net.fabricmc.api.EnvType; 6 | import net.fabricmc.api.Environment; 7 | import net.minecraft.client.network.AbstractClientPlayerEntity; 8 | import net.minecraft.client.network.ClientPlayerEntity; 9 | import net.minecraft.client.world.ClientWorld; 10 | import org.spongepowered.asm.mixin.Mixin; 11 | import org.spongepowered.asm.mixin.injection.At; 12 | import org.spongepowered.asm.mixin.injection.Inject; 13 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 14 | 15 | @Environment(EnvType.CLIENT) 16 | @Mixin(ClientPlayerEntity.class) 17 | public abstract class ClientPlayerEntityMixin extends AbstractClientPlayerEntity { 18 | public ClientPlayerEntityMixin(ClientWorld world, GameProfile profile) { 19 | super(world, profile); 20 | } 21 | 22 | /** 23 | * Drop animation for Hotbar item. 24 | */ 25 | @Inject(method = "dropSelectedItem", at = @At("HEAD")) 26 | private void bedrockify$animateHotbarItemDrop(boolean entireStack, CallbackInfoReturnable cir) { 27 | if (entireStack) { 28 | return; 29 | } 30 | 31 | AnimationsHelper.doBobbingAnimation(this.getMainHandStack()); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/useAnimations/ClientPlayerInteractionManagerMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.useAnimations; 2 | 3 | import me.juancarloscp52.bedrockify.client.features.useAnimations.AnimationsHelper; 4 | import net.fabricmc.api.EnvType; 5 | import net.fabricmc.api.Environment; 6 | import net.minecraft.client.network.ClientPlayerInteractionManager; 7 | import net.minecraft.entity.player.PlayerEntity; 8 | import net.minecraft.entity.player.PlayerInventory; 9 | import net.minecraft.item.ItemStack; 10 | import net.minecraft.item.Items; 11 | import net.minecraft.util.ActionResult; 12 | import net.minecraft.util.Hand; 13 | import org.spongepowered.asm.mixin.Mixin; 14 | import org.spongepowered.asm.mixin.injection.At; 15 | import org.spongepowered.asm.mixin.injection.Inject; 16 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 17 | 18 | @Environment(EnvType.CLIENT) 19 | @Mixin(ClientPlayerInteractionManager.class) 20 | public abstract class ClientPlayerInteractionManagerMixin { 21 | /** 22 | * This targets the lambda of {@link net.minecraft.client.network.SequencedPacketCreator} in {@link ClientPlayerInteractionManager#interactItem}.
23 | * It is not possible to retrieve their changes in {@link net.minecraft.client.network.ClientPlayNetworkHandler#onScreenHandlerSlotUpdate}.
24 | * This result is used in {@link AnimationsHelper#consumeChangedSlot}. 25 | */ 26 | @Inject(method = "interactItem", at = @At("RETURN")) 27 | private void bedrockify$consumeItem(PlayerEntity player, Hand hand, CallbackInfoReturnable cir) { 28 | if (player == null || !(cir.getReturnValue() instanceof ActionResult.Success)) { 29 | return; 30 | } 31 | 32 | final ItemStack itemStack = player.getStackInHand(hand); 33 | if (itemStack.isOf(Items.GOAT_HORN)) { 34 | AnimationsHelper.doBobbingAnimation(itemStack); 35 | return; 36 | } 37 | 38 | if (player.isCreative()) { 39 | return; 40 | } 41 | 42 | AnimationsHelper.notifyChangedSlot((hand == Hand.OFF_HAND) ? PlayerInventory.OFF_HAND_SLOT : player.getInventory().getSelectedSlot()); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/worldColorNoise/BiomeColorsMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.client.features.worldColorNoise; 2 | 3 | import me.juancarloscp52.bedrockify.client.BedrockifyClient; 4 | import net.minecraft.client.color.world.BiomeColors; 5 | import net.minecraft.util.math.BlockPos; 6 | import net.minecraft.world.BlockRenderView; 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(BiomeColors.class) 13 | public class BiomeColorsMixin { 14 | 15 | @Inject(method = "getGrassColor", at=@At("RETURN"), cancellable = true) 16 | private static void getGrassColorWithNoise(BlockRenderView world, BlockPos pos, CallbackInfoReturnable info){ 17 | info.setReturnValue(BedrockifyClient.getInstance().worldColorNoiseSampler.applyNoise(pos,info.getReturnValue(),15f,0.06f)); 18 | } 19 | 20 | @Inject(method = "getWaterColor", at=@At("RETURN"), cancellable = true) 21 | private static void getWaterColorWithNoise(BlockRenderView world, BlockPos pos, CallbackInfoReturnable info){ 22 | info.setReturnValue(BedrockifyClient.getInstance().worldColorNoiseSampler.applyNoise(pos,info.getReturnValue(),15f,0.06f)); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/common/features/animalEatingParticles/AnimalEntityMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.common.features.animalEatingParticles; 2 | 3 | import me.juancarloscp52.bedrockify.common.features.animalEatingParticles.EatingParticlesUtil; 4 | import net.minecraft.entity.passive.AnimalEntity; 5 | import net.minecraft.entity.player.PlayerEntity; 6 | import net.minecraft.item.ItemStack; 7 | import net.minecraft.util.Hand; 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.CallbackInfo; 12 | 13 | @Mixin(AnimalEntity.class) 14 | public class AnimalEntityMixin{ 15 | 16 | @Inject(method = "eat", at=@At("HEAD")) 17 | public void spawnEatingParticles(PlayerEntity player, Hand hand, ItemStack stack, CallbackInfo ci){ 18 | EatingParticlesUtil.spawnItemParticles(player, stack, ((AnimalEntity)(Object)this)); 19 | } 20 | 21 | 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/common/features/animalEatingParticles/AxolotlEntityMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.common.features.animalEatingParticles; 2 | 3 | import me.juancarloscp52.bedrockify.common.features.animalEatingParticles.EatingParticlesUtil; 4 | import net.minecraft.entity.passive.AnimalEntity; 5 | import net.minecraft.entity.passive.AxolotlEntity; 6 | import net.minecraft.entity.player.PlayerEntity; 7 | import net.minecraft.item.ItemStack; 8 | import net.minecraft.item.Items; 9 | import net.minecraft.util.Hand; 10 | import org.spongepowered.asm.mixin.Mixin; 11 | import org.spongepowered.asm.mixin.injection.At; 12 | import org.spongepowered.asm.mixin.injection.Inject; 13 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 14 | 15 | @Mixin(AxolotlEntity.class) 16 | public class AxolotlEntityMixin { 17 | 18 | @Inject(method = "eat", at = @At(value = "INVOKE",target = "Lnet/minecraft/entity/player/PlayerEntity;setStackInHand(Lnet/minecraft/util/Hand;Lnet/minecraft/item/ItemStack;)V")) 19 | public void eat(PlayerEntity player, Hand hand, ItemStack stack, CallbackInfo ci){ 20 | EatingParticlesUtil.spawnItemParticles(player,new ItemStack(Items.TROPICAL_FISH),((AnimalEntity)(Object)this)); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/common/features/animalEatingParticles/HorseEntityMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.common.features.animalEatingParticles; 2 | 3 | import me.juancarloscp52.bedrockify.common.features.animalEatingParticles.EatingParticlesUtil; 4 | import net.minecraft.entity.passive.AbstractHorseEntity; 5 | import net.minecraft.entity.passive.AnimalEntity; 6 | import net.minecraft.entity.player.PlayerEntity; 7 | import net.minecraft.item.ItemStack; 8 | import net.minecraft.util.ActionResult; 9 | import org.spongepowered.asm.mixin.Mixin; 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(AbstractHorseEntity.class) 15 | public class HorseEntityMixin{ 16 | 17 | @Inject(method = "interactHorse",at=@At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;decrementUnlessCreative(ILnet/minecraft/entity/LivingEntity;)V")) 18 | public void eat (PlayerEntity player, ItemStack stack, CallbackInfoReturnable cir){ 19 | EatingParticlesUtil.spawnItemParticles(player, stack, ((AnimalEntity)(Object)this)); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/common/features/animalEatingParticles/WolfEntityMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.common.features.animalEatingParticles; 2 | 3 | import me.juancarloscp52.bedrockify.common.features.animalEatingParticles.EatingParticlesUtil; 4 | import net.minecraft.entity.passive.AnimalEntity; 5 | import net.minecraft.entity.passive.WolfEntity; 6 | import net.minecraft.entity.player.PlayerEntity; 7 | import net.minecraft.util.ActionResult; 8 | import net.minecraft.util.Hand; 9 | import org.spongepowered.asm.mixin.Mixin; 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(WolfEntity.class) 15 | public class WolfEntityMixin { 16 | 17 | @Inject(method = "interactMob",at=@At(value = "RETURN", ordinal = 0)) 18 | public void interactMob(PlayerEntity player, Hand hand, CallbackInfoReturnable cir){ 19 | if (cir.getReturnValue() == ActionResult.CONSUME) { 20 | EatingParticlesUtil.spawnItemParticles(player, player.getStackInHand(hand), ((AnimalEntity) (Object) this)); 21 | } 22 | } 23 | @Inject(method = "interactMob",at=@At(value = "INVOKE",target = "Lnet/minecraft/entity/passive/WolfEntity;heal(F)V")) 24 | public void interactMobOnHeal(PlayerEntity player, Hand hand, CallbackInfoReturnable cir){ 25 | EatingParticlesUtil.spawnItemParticles(player,player.getStackInHand(hand),((AnimalEntity)(Object)this)); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/common/features/cauldron/ArmorDyeRecipeMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.common.features.cauldron; 2 | 3 | import me.juancarloscp52.bedrockify.Bedrockify; 4 | import net.minecraft.recipe.ArmorDyeRecipe; 5 | import net.minecraft.recipe.input.CraftingRecipeInput; 6 | import net.minecraft.world.World; 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(ArmorDyeRecipe.class) 13 | public abstract class ArmorDyeRecipeMixin { 14 | /** 15 | * Revokes all dye recipes for the DyeableItem while bedrockCauldron feature is enabled. 16 | */ 17 | @Inject(method = "matches(Lnet/minecraft/recipe/input/CraftingRecipeInput;Lnet/minecraft/world/World;)Z", at = @At("HEAD"), cancellable = true) 18 | private void bedrockify$revokeOriginalDyeingRecipe(CraftingRecipeInput craftingRecipeInput, World world, CallbackInfoReturnable cir) { 19 | if (!Bedrockify.getInstance().settings.bedrockCauldron) { 20 | return; 21 | } 22 | 23 | cir.setReturnValue(false); 24 | cir.cancel(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/common/features/cauldron/CauldronBehaviorMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.common.features.cauldron; 2 | 3 | import me.juancarloscp52.bedrockify.Bedrockify; 4 | import me.juancarloscp52.bedrockify.common.block.cauldron.BedrockCauldronBehavior; 5 | import net.minecraft.block.BlockState; 6 | import net.minecraft.block.cauldron.CauldronBehavior; 7 | import net.minecraft.component.DataComponentTypes; 8 | import net.minecraft.entity.player.PlayerEntity; 9 | import net.minecraft.item.ItemStack; 10 | import net.minecraft.potion.Potions; 11 | import net.minecraft.util.ActionResult; 12 | import net.minecraft.util.Hand; 13 | import net.minecraft.util.math.BlockPos; 14 | import net.minecraft.world.World; 15 | import org.spongepowered.asm.mixin.Mixin; 16 | import org.spongepowered.asm.mixin.injection.At; 17 | import org.spongepowered.asm.mixin.injection.Inject; 18 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 19 | 20 | @Mixin(CauldronBehavior.class) 21 | public interface CauldronBehaviorMixin { 22 | /** 23 | * The lambda of EMPTY_CAULDRON_BEHAVIOR.put(Items.POTION, (state, world, pos, player, hand, stack) -> { ... }); 24 | */ 25 | @Inject(method = "method_32222", at = @At("RETURN"), cancellable = true) 26 | private static void bedrockify$addCauldronEmptyBehavior(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, ItemStack stack, CallbackInfoReturnable cir) { 27 | var components = stack.get(DataComponentTypes.POTION_CONTENTS); 28 | if (!Bedrockify.getInstance().settings.bedrockCauldron || components != null && components.matches(Potions.WATER)) { 29 | return; 30 | } 31 | 32 | // Redirect to customized behavior. 33 | final ActionResult result = BedrockCauldronBehavior.PLACE_POTION_FLUID.interact(state, world, pos, player, hand, stack); 34 | cir.setReturnValue(result); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/common/features/fernBonemeal/GrassBlockMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.common.features.fernBonemeal; 2 | 3 | import me.juancarloscp52.bedrockify.Bedrockify; 4 | import me.juancarloscp52.bedrockify.common.features.fernBonemeal.FernBonemeal; 5 | import net.minecraft.block.BlockState; 6 | import net.minecraft.block.GrassBlock; 7 | import net.minecraft.registry.RegistryKey; 8 | import net.minecraft.registry.RegistryKeys; 9 | import net.minecraft.registry.entry.RegistryEntry; 10 | import net.minecraft.server.world.ServerWorld; 11 | import net.minecraft.util.math.BlockPos; 12 | import net.minecraft.util.math.random.Random; 13 | import net.minecraft.world.biome.Biome; 14 | import net.minecraft.world.biome.BiomeKeys; 15 | import org.spongepowered.asm.mixin.Mixin; 16 | import org.spongepowered.asm.mixin.injection.At; 17 | import org.spongepowered.asm.mixin.injection.ModifyVariable; 18 | 19 | @Mixin(GrassBlock.class) 20 | public class GrassBlockMixin { 21 | @ModifyVariable(method = "grow",at=@At("STORE"), ordinal = 0) 22 | public RegistryEntry addFern(RegistryEntry registryEntry, ServerWorld world, Random random, BlockPos pos, BlockState state) { 23 | 24 | if(!Bedrockify.getInstance().settings.fernBonemeal) 25 | return registryEntry; 26 | 27 | if(registryEntry.getKey().isPresent() && registryEntry.getKey().get() instanceof RegistryKey key){ 28 | RegistryKey biome = world.getBiome(pos).getKey().orElseThrow(); 29 | if(biome.equals(BiomeKeys.TAIGA) || biome.equals(BiomeKeys.OLD_GROWTH_SPRUCE_TAIGA) || biome.equals(BiomeKeys.SNOWY_TAIGA) || biome.equals(BiomeKeys.OLD_GROWTH_PINE_TAIGA) || biome.equals(BiomeKeys.JUNGLE) || biome.equals(BiomeKeys.BAMBOO_JUNGLE) || biome.equals(BiomeKeys.SPARSE_JUNGLE)) { 30 | if (key.getValue().getPath().equals("grass_bonemeal") && random.nextInt(4) == 0) { 31 | return world.getRegistryManager().getOrThrow(RegistryKeys.PLACED_FEATURE).getEntry(FernBonemeal.SINGLE_PIECE_OF_FERN_PLACED.getValue()).orElse(null); 32 | } 33 | } 34 | } 35 | 36 | return registryEntry; 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/me/juancarloscp52/bedrockify/mixin/common/features/fertilizableBlocks/FlowerBlockMixin.java: -------------------------------------------------------------------------------- 1 | package me.juancarloscp52.bedrockify.mixin.common.features.fertilizableBlocks; 2 | 3 | import net.minecraft.block.BlockState; 4 | import net.minecraft.block.Blocks; 5 | import net.minecraft.block.Fertilizable; 6 | import net.minecraft.block.FlowerBlock; 7 | import net.minecraft.registry.tag.BlockTags; 8 | import net.minecraft.server.world.ServerWorld; 9 | import net.minecraft.util.math.BlockPos; 10 | import net.minecraft.util.math.random.Random; 11 | import net.minecraft.world.World; 12 | import net.minecraft.world.WorldView; 13 | import org.spongepowered.asm.mixin.Mixin; 14 | 15 | 16 | @Mixin(FlowerBlock.class) 17 | public class FlowerBlockMixin implements Fertilizable { 18 | @Override 19 | public boolean isFertilizable(WorldView world, BlockPos pos, BlockState state) { 20 | return !state.isOf(Blocks.WITHER_ROSE); 21 | } 22 | 23 | @Override 24 | public boolean canGrow(World world, Random random, BlockPos pos, BlockState state) { 25 | return true; 26 | } 27 | 28 | @Override 29 | public void grow(ServerWorld world, Random random, BlockPos pos, BlockState state) { 30 | int amount = random.nextBetween(1,5); 31 | for(int i = 0; itagFile.entries().forEach((entryx) -> { ... } ); */ 17 | @Inject(method = "method_43954(Ljava/util/List;Ljava/lang/String;Lnet/minecraft/registry/tag/TagEntry;)V", at = @At("HEAD"), cancellable = true) 18 | private static void bedrockify$removeCauldronFromTag(List instance, String packName, TagEntry entryx, CallbackInfo ci) { 19 | if (packName.equals(Bedrockify.MOD_ID) && !MixinFeatureManager.features.get(MixinFeatureManager.FEAT_CAULDRON) && entryx.toString().contains("cauldron")) { 20 | ci.cancel(); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/resources/assets/bedrockify/blockstates/colored_water_cauldron.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "c_level=1": { 4 | "model": "bedrockify:block/colored_water_cauldron_level1" 5 | }, 6 | "c_level=2": { 7 | "model": "minecraft:block/water_cauldron_level1" 8 | }, 9 | "c_level=3": { 10 | "model": "bedrockify:block/colored_water_cauldron_level3" 11 | }, 12 | "c_level=4": { 13 | "model": "minecraft:block/water_cauldron_level2" 14 | }, 15 | "c_level=5": { 16 | "model": "bedrockify:block/colored_water_cauldron_level5" 17 | }, 18 | "c_level=6": { 19 | "model": "minecraft:block/water_cauldron_full" 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/resources/assets/bedrockify/blockstates/potion_cauldron.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "c_level=1": { 4 | "model": "bedrockify:block/potion_cauldron_level1" 5 | }, 6 | "c_level=2": { 7 | "model": "bedrockify:block/potion_cauldron_level2" 8 | }, 9 | "c_level=3": { 10 | "model": "bedrockify:block/potion_cauldron_level3" 11 | }, 12 | "c_level=4": { 13 | "model": "bedrockify:block/potion_cauldron_level4" 14 | }, 15 | "c_level=5": { 16 | "model": "bedrockify:block/potion_cauldron_level5" 17 | }, 18 | "c_level=6": { 19 | "model": "bedrockify:block/potion_cauldron_level6" 20 | }, 21 | "c_level=7": { 22 | "model": "bedrockify:block/potion_cauldron_level7" 23 | }, 24 | "c_level=8": { 25 | "model": "minecraft:block/water_cauldron_full" 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/resources/assets/bedrockify/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/juancarloscp52/BedrockIfy/f49269c0f4cc0f9f2882fea781b11915727b0887/src/main/resources/assets/bedrockify/icon.png -------------------------------------------------------------------------------- /src/main/resources/assets/bedrockify/lang/ar_sa.json: -------------------------------------------------------------------------------- 1 | { 2 | "bedrockify.hud.position": "الموقع:", 3 | "bedrockify.hud.fps": "Fps:", 4 | "bedrockify.options.on": "مفعل", 5 | "bedrockify.options.off": "موقف", 6 | "bedrockify.options.withPosition": "مع الموقع", 7 | "bedrockify.options.underPosition": "أسفل الموقع", 8 | "bedrockify.options.withBackground": "مع الخلفية", 9 | "bedrockify.options.settings": "Bedrockify إعدادات", 10 | "bedrockify.options.screenSafeArea": "منطقة الشاشة الآمنة:", 11 | "bedrockify.options.coordinatesPosition": "مكان نص الإحداثيات:", 12 | "bedrockify.options.showCoordinates": "إظهار الإحداثيات:", 13 | "bedrockify.options.showFPS": "FPSإظهار ال:", 14 | "bedrockify.options.showPaperDoll": "عرض دمية الورق:", 15 | "bedrockify.options.loadingScreenChunkMap": "شاشة تحميل قطع الخريطة:", 16 | "bedrockify.options.loadingScreenChunkMap.tooltip": "تمكن أداة Chunk Map Progress في شاشات التحميل.", 17 | "bedrockify.options.reachAround": "تمكين التوصل إلي الحوالي:", 18 | "bedrockify.options.reachAround.multiplayer": "التوصل إلي الحوالي لطور اللاعب المتعدد:", 19 | "bedrockify.options.chatStyle": "شكل دردشة", 20 | "bedrockify.options.chatStyle.bedrock": "بيدروك", 21 | "bedrockify.options.chatStyle.vanilla": "فانيلا", 22 | "bedrockify.options.tooltips": "تلميحات أدوات العنصر:", 23 | "bedrockify.options.inventoryHighlight": "تسليط الضوء على فتحة عنصر المخزون:", 24 | "bedrockify.options.idleAnimation": "سرعة حركة اليد الخاملة:", 25 | "bedrockify.options.showBedrockIfyButton": "إظهار زر إعدادات BedrockIfy:", 26 | "bedrockify.options.showBedrockIfyButton.tooltip": "يعرض زر إعدادات BedrockIfy على شاشة خيارات اللعبة. إذا تم تعطيله ، يمكنك الوصول إلى إعدادات BedrockIfy من خلال Mod Menu أو بالضغط على B" 27 | } 28 | -------------------------------------------------------------------------------- /src/main/resources/assets/bedrockify/lang/et_ee.json: -------------------------------------------------------------------------------- 1 | { 2 | "bedrockify.hud.position": "Asukoht:", 3 | "bedrockify.hud.fps": "K/S:", 4 | "bedrockify.options.on": "Sees", 5 | "bedrockify.options.off": "Väljas", 6 | "bedrockify.options.withPosition": "Asukohaga koos", 7 | "bedrockify.options.underPosition": "Asukoha all", 8 | "bedrockify.options.withBackground": "Taustaga koos", 9 | "bedrockify.options.subCategory.bedrockOverlay": "Bedrocki ülekate...", 10 | "bedrockify.options.subCategory.bedrockOverlay.description": "Seadista ülal vasakul asuvat ülekatet.", 11 | "bedrockify.options.subCategory.visualImprovements": "Liidese/visuaalsed täiendused...", 12 | "bedrockify.options.subCategory.Reach-Around": "Ümber-ulatuse plokiasetus...", 13 | "bedrockify.options.subCategory.Reach-Around.description": "Aseta plokke selle ploki ette, millel seisad.", 14 | "bedrockify.options.subCategory.other": "Teised seaded...", 15 | "bedrockify.options.settings": "Bedrockify seaded", 16 | "bedrockify.options.screenSafeArea": "Ekraani servaala:", 17 | "bedrockify.options.coordinatesPosition": "Koordinaatide teksti asukoht:", 18 | "bedrockify.options.showCoordinates": "Koordinaatide kuva:", 19 | "bedrockify.options.showFPS": "Kaadrisageduse kuva:", 20 | "bedrockify.options.showPaperDoll": "Pabernuku kuva:", 21 | "bedrockify.options.loadingScreenChunkMap": "Laadimiskuva kamakakaart:", 22 | "bedrockify.options.loadingScreenChunkMap.tooltip": "Lubab laadimiskuvadel kamakakaardi progressividina.", 23 | "bedrockify.options.reachAround": "Ümber-ulatuse lubamine:", 24 | "bedrockify.options.reachAround.sneaking": "Aseta plokke vaid hiilides:", 25 | "bedrockify.options.reachAround.indicator": "Kuva ümber-ulatuse indikaator:", 26 | "bedrockify.options.reachAround.multiplayer": "Mitmikmängija ümber-ulatus:", 27 | "bedrockify.options.recipes": "Kasuta Bedrocki meisterdusretsepte:", 28 | "bedrockify.options.recipes.tooltip": "Muudatuste rakendamiseks tuleb maailm taasavada.", 29 | "bedrockify.options.chatStyle": "Vestluse stiil:", 30 | "bedrockify.options.chatStyle.bedrock": "Bedrock", 31 | "bedrockify.options.chatStyle.vanilla": "Java", 32 | "bedrockify.options.tooltips": "Esemete vihjetekstid:", 33 | "bedrockify.options.inventoryHighlight": "Seljakoti esemelahtri esiletõst:", 34 | "bedrockify.options.idleAnimation": "Tegevusetu käe animatsioonikiirus:", 35 | "bedrockify.options.showBedrockIfyButton": "BedrockIfy seadistusnupu kuva:", 36 | "bedrockify.options.showBedrockIfyButton.tooltip": "Kuvab BedrockIfy seadistusnuppu mängu valikute kuval. Keelamisel saad sa BedrockIfy seadetele ligi Mod Menu või B kaudu.", 37 | "bedrockify.options.showSavingOverlay": "Salvestusülekatte kuva:", 38 | "bedrockify.options.eatingAnimations": "Söömisanimatsioonid kolmandas isikus:", 39 | "bedrockify.options.pickupAnimations": "Esemete üleskorjamise animatsioonid:", 40 | "bedrockify.options.pickupAnimations.tooltip": "Lubab plokiribal Bedrocki esemete üleskorjamise animatsioonid." 41 | } 42 | -------------------------------------------------------------------------------- /src/main/resources/assets/bedrockify/models/block/colored_water_cauldron_level1.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "bedrockify:block/template_cauldron_6_level1", 3 | "textures": { 4 | "bottom": "minecraft:block/cauldron_bottom", 5 | "content": "minecraft:block/water_still", 6 | "inside": "minecraft:block/cauldron_inner", 7 | "particle": "minecraft:block/cauldron_side", 8 | "side": "minecraft:block/cauldron_side", 9 | "top": "minecraft:block/cauldron_top" 10 | } 11 | } -------------------------------------------------------------------------------- /src/main/resources/assets/bedrockify/models/block/colored_water_cauldron_level3.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "bedrockify:block/template_cauldron_6_level3", 3 | "textures": { 4 | "bottom": "minecraft:block/cauldron_bottom", 5 | "content": "minecraft:block/water_still", 6 | "inside": "minecraft:block/cauldron_inner", 7 | "particle": "minecraft:block/cauldron_side", 8 | "side": "minecraft:block/cauldron_side", 9 | "top": "minecraft:block/cauldron_top" 10 | } 11 | } -------------------------------------------------------------------------------- /src/main/resources/assets/bedrockify/models/block/colored_water_cauldron_level5.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "bedrockify:block/template_cauldron_6_level5", 3 | "textures": { 4 | "bottom": "minecraft:block/cauldron_bottom", 5 | "content": "minecraft:block/water_still", 6 | "inside": "minecraft:block/cauldron_inner", 7 | "particle": "minecraft:block/cauldron_side", 8 | "side": "minecraft:block/cauldron_side", 9 | "top": "minecraft:block/cauldron_top" 10 | } 11 | } -------------------------------------------------------------------------------- /src/main/resources/assets/bedrockify/models/block/potion_cauldron_level1.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "bedrockify:block/template_cauldron_8_level1", 3 | "textures": { 4 | "bottom": "minecraft:block/cauldron_bottom", 5 | "content": "minecraft:block/water_still", 6 | "inside": "minecraft:block/cauldron_inner", 7 | "particle": "minecraft:block/cauldron_side", 8 | "side": "minecraft:block/cauldron_side", 9 | "top": "minecraft:block/cauldron_top" 10 | } 11 | } -------------------------------------------------------------------------------- /src/main/resources/assets/bedrockify/models/block/potion_cauldron_level2.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "bedrockify:block/template_cauldron_8_level2", 3 | "textures": { 4 | "bottom": "minecraft:block/cauldron_bottom", 5 | "content": "minecraft:block/water_still", 6 | "inside": "minecraft:block/cauldron_inner", 7 | "particle": "minecraft:block/cauldron_side", 8 | "side": "minecraft:block/cauldron_side", 9 | "top": "minecraft:block/cauldron_top" 10 | } 11 | } -------------------------------------------------------------------------------- /src/main/resources/assets/bedrockify/models/block/potion_cauldron_level3.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "bedrockify:block/template_cauldron_8_level3", 3 | "textures": { 4 | "bottom": "minecraft:block/cauldron_bottom", 5 | "content": "minecraft:block/water_still", 6 | "inside": "minecraft:block/cauldron_inner", 7 | "particle": "minecraft:block/cauldron_side", 8 | "side": "minecraft:block/cauldron_side", 9 | "top": "minecraft:block/cauldron_top" 10 | } 11 | } -------------------------------------------------------------------------------- /src/main/resources/assets/bedrockify/models/block/potion_cauldron_level4.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "bedrockify:block/template_cauldron_8_level4", 3 | "textures": { 4 | "bottom": "minecraft:block/cauldron_bottom", 5 | "content": "minecraft:block/water_still", 6 | "inside": "minecraft:block/cauldron_inner", 7 | "particle": "minecraft:block/cauldron_side", 8 | "side": "minecraft:block/cauldron_side", 9 | "top": "minecraft:block/cauldron_top" 10 | } 11 | } -------------------------------------------------------------------------------- /src/main/resources/assets/bedrockify/models/block/potion_cauldron_level5.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "bedrockify:block/template_cauldron_8_level5", 3 | "textures": { 4 | "bottom": "minecraft:block/cauldron_bottom", 5 | "content": "minecraft:block/water_still", 6 | "inside": "minecraft:block/cauldron_inner", 7 | "particle": "minecraft:block/cauldron_side", 8 | "side": "minecraft:block/cauldron_side", 9 | "top": "minecraft:block/cauldron_top" 10 | } 11 | } -------------------------------------------------------------------------------- /src/main/resources/assets/bedrockify/models/block/potion_cauldron_level6.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "bedrockify:block/template_cauldron_8_level6", 3 | "textures": { 4 | "bottom": "minecraft:block/cauldron_bottom", 5 | "content": "minecraft:block/water_still", 6 | "inside": "minecraft:block/cauldron_inner", 7 | "particle": "minecraft:block/cauldron_side", 8 | "side": "minecraft:block/cauldron_side", 9 | "top": "minecraft:block/cauldron_top" 10 | } 11 | } -------------------------------------------------------------------------------- /src/main/resources/assets/bedrockify/models/block/potion_cauldron_level7.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "bedrockify:block/template_cauldron_8_level7", 3 | "textures": { 4 | "bottom": "minecraft:block/cauldron_bottom", 5 | "content": "minecraft:block/water_still", 6 | "inside": "minecraft:block/cauldron_inner", 7 | "particle": "minecraft:block/cauldron_side", 8 | "side": "minecraft:block/cauldron_side", 9 | "top": "minecraft:block/cauldron_top" 10 | } 11 | } -------------------------------------------------------------------------------- /src/main/resources/assets/bedrockify/textures/entity/fishing_hook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/juancarloscp52/BedrockIfy/f49269c0f4cc0f9f2882fea781b11915727b0887/src/main/resources/assets/bedrockify/textures/entity/fishing_hook.png -------------------------------------------------------------------------------- /src/main/resources/assets/bedrockify/textures/gui/bedrockify_widgets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/juancarloscp52/BedrockIfy/f49269c0f4cc0f9f2882fea781b11915727b0887/src/main/resources/assets/bedrockify/textures/gui/bedrockify_widgets.png -------------------------------------------------------------------------------- /src/main/resources/assets/bedrockify/textures/gui/footer_separator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/juancarloscp52/BedrockIfy/f49269c0f4cc0f9f2882fea781b11915727b0887/src/main/resources/assets/bedrockify/textures/gui/footer_separator.png -------------------------------------------------------------------------------- /src/main/resources/assets/bedrockify/textures/gui/header_separator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/juancarloscp52/BedrockIfy/f49269c0f4cc0f9f2882fea781b11915727b0887/src/main/resources/assets/bedrockify/textures/gui/header_separator.png -------------------------------------------------------------------------------- /src/main/resources/assets/minecraft/textures/item/dried_kelp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/juancarloscp52/BedrockIfy/f49269c0f4cc0f9f2882fea781b11915727b0887/src/main/resources/assets/minecraft/textures/item/dried_kelp.png -------------------------------------------------------------------------------- /src/main/resources/assets/minecraft/textures/item/seagrass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/juancarloscp52/BedrockIfy/f49269c0f4cc0f9f2882fea781b11915727b0887/src/main/resources/assets/minecraft/textures/item/seagrass.png -------------------------------------------------------------------------------- /src/main/resources/bedrockify.accesswidener: -------------------------------------------------------------------------------- 1 | accessWidener v1 named 2 | 3 | accessible method net/minecraft/world/gen/treedecorator/TreeDecoratorType register (Ljava/lang/String;Lcom/mojang/serialization/MapCodec;)Lnet/minecraft/world/gen/treedecorator/TreeDecoratorType; 4 | accessible method net/minecraft/block/CandleCakeBlock isHittingCandle (Lnet/minecraft/util/hit/BlockHitResult;)Z 5 | accessible class net/minecraft/client/render/block/BlockModelRenderer$LightmapCache 6 | accessible method net/minecraft/client/gui/DrawContext drawSpriteRegion (Ljava/util/function/Function;Lnet/minecraft/client/texture/Sprite;IIIIIIIII)V #HudOpacity InGameHudMixin -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/loot_table/blocks/colored_water_cauldron.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "bonus_rolls": 0.0, 6 | "conditions": [ 7 | { 8 | "condition": "minecraft:survives_explosion" 9 | } 10 | ], 11 | "entries": [ 12 | { 13 | "type": "minecraft:item", 14 | "name": "minecraft:cauldron" 15 | } 16 | ], 17 | "rolls": 1.0 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/loot_table/blocks/potion_cauldron.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "bonus_rolls": 0.0, 6 | "conditions": [ 7 | { 8 | "condition": "minecraft:survives_explosion" 9 | } 10 | ], 11 | "entries": [ 12 | { 13 | "type": "minecraft:item", 14 | "name": "minecraft:cauldron" 15 | } 16 | ], 17 | "rolls": 1.0 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/barrel.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "pattern": [ 4 | "PSP", 5 | "P P", 6 | "PSP" 7 | ], 8 | "key": { 9 | "P": "minecraft:stick", 10 | "S": "#minecraft:wooden_slabs" 11 | }, 12 | "result": { 13 | "id": "minecraft:barrel", 14 | "count": 1 15 | } 16 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/black_bed_from_white_bed.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "dyed_bed", 4 | "ingredients": [ 5 | "#minecraft:beds", 6 | "minecraft:black_dye" 7 | ], 8 | "result": { 9 | "id": "minecraft:black_bed", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/black_bed_from_white_bed_ink_sac.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "dyed_bed", 4 | "ingredients": [ 5 | "#minecraft:beds", 6 | "minecraft:ink_sac" 7 | ], 8 | "result": { 9 | "id": "minecraft:black_bed", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/black_bundle_ink_sac.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_transmute", 3 | "category": "equipment", 4 | "group": "bundle_dye", 5 | "input": "#minecraft:bundles", 6 | "material": "minecraft:ink_sac", 7 | "result": "minecraft:black_bundle" 8 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/black_carpet_from_white_carpet_ink_sac.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "group": "carpet", 4 | "pattern": [ 5 | "###", 6 | "#$#", 7 | "###" 8 | ], 9 | "key": { 10 | "#": "minecraft:white_carpet", 11 | "$": "minecraft:ink_sac" 12 | }, 13 | "result": { 14 | "count": 8, 15 | "id": "minecraft:black_carpet" 16 | } 17 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/black_concrete_powder_ink_sac.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "concrete_powder", 4 | "ingredients": [ 5 | "minecraft:ink_sac", 6 | "minecraft:sand", 7 | "minecraft:sand", 8 | "minecraft:sand", 9 | "minecraft:sand", 10 | "minecraft:gravel", 11 | "minecraft:gravel", 12 | "minecraft:gravel", 13 | "minecraft:gravel" 14 | ], 15 | "result": { 16 | "count": 8, 17 | "id": "minecraft:black_concrete_powder" 18 | } 19 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/black_shulker_box_ink_sac.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_transmute", 3 | "category": "misc", 4 | "group": "shulker_box_dye", 5 | "input": "#minecraft:shulker_boxes", 6 | "material": "minecraft:ink_sac", 7 | "result": "minecraft:black_shulker_box" 8 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/black_stained_glass_ink_sac.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "group": "stained_glass", 4 | "pattern": [ 5 | "###", 6 | "#X#", 7 | "###" 8 | ], 9 | "key": { 10 | "#": "minecraft:glass", 11 | "X": "minecraft:ink_sac" 12 | }, 13 | "result": { 14 | "count": 8, 15 | "id": "minecraft:black_stained_glass" 16 | } 17 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/black_stained_glass_pane_from_glass_pane_ink_sac.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "group": "stained_glass_pane", 4 | "pattern": [ 5 | "###", 6 | "#$#", 7 | "###" 8 | ], 9 | "key": { 10 | "#": "minecraft:glass_pane", 11 | "$": "minecraft:ink_sac" 12 | }, 13 | "result": { 14 | "count": 8, 15 | "id": "minecraft:black_stained_glass_pane" 16 | } 17 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/black_terracotta_ink_sac.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "group": "stained_terracotta", 4 | "pattern": [ 5 | "###", 6 | "#X#", 7 | "###" 8 | ], 9 | "key": { 10 | "#": "minecraft:terracotta", 11 | "X": "minecraft:ink_sac" 12 | }, 13 | "result": { 14 | "count": 8, 15 | "id": "minecraft:black_terracotta" 16 | } 17 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/black_wool.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "wool", 4 | "ingredients": [ 5 | "minecraft:black_dye", 6 | "#minecraft:wool" 7 | ], 8 | "result": { 9 | "id": "minecraft:black_wool", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/black_wool_ink_sac.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "wool", 4 | "ingredients": [ 5 | "minecraft:ink_sac", 6 | "#minecraft:wool" 7 | ], 8 | "result": { 9 | "id": "minecraft:black_wool", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/blue_bed_from_white_bed.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "dyed_bed", 4 | "ingredients": [ 5 | "#minecraft:beds", 6 | "minecraft:blue_dye" 7 | ], 8 | "result": { 9 | "id": "minecraft:blue_bed", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/blue_bed_from_white_bed_lapis_lazuli.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "dyed_bed", 4 | "ingredients": [ 5 | "#minecraft:beds", 6 | "minecraft:lapis_lazuli" 7 | ], 8 | "result": { 9 | "id": "minecraft:blue_bed", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/blue_bundle_lapis_lazuli.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_transmute", 3 | "category": "equipment", 4 | "group": "bundle_dye", 5 | "input": "#minecraft:bundles", 6 | "material": "minecraft:lapis_lazuli", 7 | "result": "minecraft:blue_bundle" 8 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/blue_carpet_from_white_carpet.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "group": "carpet", 4 | "pattern": [ 5 | "###", 6 | "#$#", 7 | "###" 8 | ], 9 | "key": { 10 | "#": "minecraft:white_carpet", 11 | "$": "minecraft:lapis_lazuli" 12 | }, 13 | "result": { 14 | "count": 8, 15 | "id": "minecraft:blue_carpet" 16 | } 17 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/blue_concrete_powder_lapis_lazuli.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "concrete_powder", 4 | "ingredients": [ 5 | "minecraft:lapis_lazuli", 6 | "minecraft:sand", 7 | "minecraft:sand", 8 | "minecraft:sand", 9 | "minecraft:sand", 10 | "minecraft:gravel", 11 | "minecraft:gravel", 12 | "minecraft:gravel", 13 | "minecraft:gravel" 14 | ], 15 | "result": { 16 | "count": 8, 17 | "id": "minecraft:blue_concrete_powder" 18 | } 19 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/blue_shulker_box_lapis_lazuli.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_transmute", 3 | "category": "misc", 4 | "group": "shulker_box_dye", 5 | "input": "#minecraft:shulker_boxes", 6 | "material": "minecraft:lapis_lazuli", 7 | "result": "minecraft:blue_shulker_box" 8 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/blue_stained_glass_lapis_lazuli.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "group": "stained_glass", 4 | "pattern": [ 5 | "###", 6 | "#X#", 7 | "###" 8 | ], 9 | "key": { 10 | "#": "minecraft:glass", 11 | "X": "minecraft:lapis_lazuli" 12 | }, 13 | "result": { 14 | "count": 8, 15 | "id": "minecraft:blue_stained_glass" 16 | } 17 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/blue_stained_glass_pane_from_glass_pane_lapis_lazuli.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "group": "stained_glass_pane", 4 | "pattern": [ 5 | "###", 6 | "#$#", 7 | "###" 8 | ], 9 | "key": { 10 | "#": "minecraft:glass_pane", 11 | "$": "minecraft:lapis_lazuli" 12 | }, 13 | "result": { 14 | "count": 8, 15 | "id": "minecraft:blue_stained_glass_pane" 16 | } 17 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/blue_terracotta_lapis_lazuli.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "group": "stained_terracotta", 4 | "pattern": [ 5 | "###", 6 | "#X#", 7 | "###" 8 | ], 9 | "key": { 10 | "#": "minecraft:terracotta", 11 | "X": "minecraft:lapis_lazuli" 12 | }, 13 | "result": { 14 | "id": "minecraft:blue_terracotta", 15 | "count": 8 16 | } 17 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/blue_wool.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "wool", 4 | "ingredients": [ 5 | "minecraft:blue_dye", 6 | "#minecraft:wool" 7 | ], 8 | "result": { 9 | "id": "minecraft:blue_wool", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/blue_wool_lapis_lazuli.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "wool", 4 | "ingredients": [ 5 | "minecraft:lapis_lazuli", 6 | "#minecraft:wool" 7 | ], 8 | "result": { 9 | "id": "minecraft:blue_wool", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/brown_bed_from_white_bed.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "dyed_bed", 4 | "ingredients": [ 5 | "#minecraft:beds", 6 | "minecraft:brown_dye" 7 | ], 8 | "result": { 9 | "id": "minecraft:brown_bed", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/brown_bed_from_white_bed_cocoa_beans.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "dyed_bed", 4 | "ingredients": [ 5 | "#minecraft:beds", 6 | "minecraft:cocoa_beans" 7 | ], 8 | "result": { 9 | "id": "minecraft:brown_bed", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/brown_bundle_cocoa_beans.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_transmute", 3 | "category": "equipment", 4 | "group": "bundle_dye", 5 | "input": "#minecraft:bundles", 6 | "material": "minecraft:cocoa_beans", 7 | "result": "minecraft:brown_bundle" 8 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/brown_carpet_from_white_carpet_cocoa_beans.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "group": "carpet", 4 | "pattern": [ 5 | "###", 6 | "#$#", 7 | "###" 8 | ], 9 | "key": { 10 | "#": "minecraft:white_carpet", 11 | "$": "minecraft:cocoa_beans" 12 | }, 13 | "result": { 14 | "count": 8, 15 | "id": "minecraft:brown_carpet" 16 | } 17 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/brown_concrete_powder_cocoa_beans.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "concrete_powder", 4 | "ingredients": [ 5 | "minecraft:cocoa_beans", 6 | "minecraft:sand", 7 | "minecraft:sand", 8 | "minecraft:sand", 9 | "minecraft:sand", 10 | "minecraft:gravel", 11 | "minecraft:gravel", 12 | "minecraft:gravel", 13 | "minecraft:gravel" 14 | ], 15 | "result": { 16 | "count": 8, 17 | "id": "minecraft:brown_concrete_powder" 18 | } 19 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/brown_shulker_box_cocoa_beans.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_transmute", 3 | "category": "misc", 4 | "group": "shulker_box_dye", 5 | "input": "#minecraft:shulker_boxes", 6 | "material": "minecraft:cocoa_beans", 7 | "result": "minecraft:brown_shulker_box" 8 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/brown_stained_glass_cocoa_beans.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "group": "stained_glass", 4 | "pattern": [ 5 | "###", 6 | "#X#", 7 | "###" 8 | ], 9 | "key": { 10 | "#": "minecraft:glass", 11 | "X": "minecraft:cocoa_beans" 12 | }, 13 | "result": { 14 | "count": 8, 15 | "id": "minecraft:brown_stained_glass" 16 | } 17 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/brown_stained_glass_pane_from_glass_pane_cocoa_beans.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "group": "stained_glass_pane", 4 | "pattern": [ 5 | "###", 6 | "#$#", 7 | "###" 8 | ], 9 | "key": { 10 | "#": "minecraft:glass_pane", 11 | "$": "minecraft:cocoa_beans" 12 | }, 13 | "result": { 14 | "count": 8, 15 | "id": "minecraft:brown_stained_glass_pane" 16 | } 17 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/brown_terracotta_cocoa_beans.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "group": "stained_terracotta", 4 | "pattern": [ 5 | "###", 6 | "#X#", 7 | "###" 8 | ], 9 | "key": { 10 | "#": "minecraft:terracotta", 11 | "X": "minecraft:cocoa_beans" 12 | }, 13 | "result": { 14 | "count": 8, 15 | "id": "minecraft:brown_terracotta" 16 | } 17 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/brown_wool.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "wool", 4 | "ingredients": [ 5 | "minecraft:brown_dye", 6 | "#minecraft:wool" 7 | ], 8 | "result": { 9 | "id": "minecraft:brown_wool", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/brown_wool_cocoa_beans.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "wool", 4 | "ingredients": [ 5 | "minecraft:cocoa_beans", 6 | "#minecraft:wool" 7 | ], 8 | "result": { 9 | "id": "minecraft:brown_wool", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/carrot_on_a_stick.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "pattern": [ 4 | "#X" 5 | ], 6 | "key": { 7 | "#": "minecraft:fishing_rod", 8 | "X": "minecraft:carrot" 9 | }, 10 | "result": { 11 | "id": "minecraft:carrot_on_a_stick", 12 | "count": 1 13 | } 14 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/cyan_bed_from_white_bed.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "dyed_bed", 4 | "ingredients": [ 5 | "#minecraft:beds", 6 | "minecraft:cyan_dye" 7 | ], 8 | "result": { 9 | "id": "minecraft:cyan_bed", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/cyan_dye_from_lapis_lazuli.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "ingredients": [ 4 | "minecraft:lapis_lazuli", 5 | "minecraft:green_dye" 6 | ], 7 | "result": { 8 | "count": 2, 9 | "id": "minecraft:cyan_dye" 10 | } 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/cyan_wool.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "wool", 4 | "ingredients": [ 5 | "minecraft:cyan_dye", 6 | "#minecraft:wool" 7 | ], 8 | "result": { 9 | "id": "minecraft:cyan_wool", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/dark_prismarine.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "group": "dark_prismarine", 4 | "pattern": [ 5 | "SSS", 6 | "SIS", 7 | "SSS" 8 | ], 9 | "key": { 10 | "S": "minecraft:prismarine_shard", 11 | "I": "minecraft:black_dye" 12 | }, 13 | "result": { 14 | "id": "minecraft:dark_prismarine", 15 | "count": 1 16 | } 17 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/dark_prismarine_extra.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "group": "dark_prismarine", 4 | "pattern": [ 5 | "SSS", 6 | "SIS", 7 | "SSS" 8 | ], 9 | "key": { 10 | "S": "minecraft:prismarine_shard", 11 | "I": "minecraft:ink_sac" 12 | }, 13 | "result": { 14 | "id": "minecraft:dark_prismarine", 15 | "count": 1 16 | } 17 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/gray_bed_from_white_bed.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "dyed_bed", 4 | "ingredients": [ 5 | "#minecraft:beds", 6 | "minecraft:gray_dye" 7 | ], 8 | "result": { 9 | "id": "minecraft:gray_bed", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/gray_dye_bone_meal.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "ingredients": [ 4 | "minecraft:black_dye", 5 | "minecraft:bone_meal" 6 | ], 7 | "result": { 8 | "count": 2, 9 | "id": "minecraft:gray_dye" 10 | } 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/gray_dye_ink_sac.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "ingredients": [ 4 | "minecraft:ink_sac", 5 | "minecraft:white_dye" 6 | ], 7 | "result": { 8 | "count": 2, 9 | "id": "minecraft:gray_dye" 10 | } 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/gray_dye_ink_sac_bone_meal.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "ingredients": [ 4 | "minecraft:ink_sac", 5 | "minecraft:bone_meal" 6 | ], 7 | "result": { 8 | "count": 2, 9 | "id": "minecraft:gray_dye" 10 | } 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/gray_wool.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "wool", 4 | "ingredients": [ 5 | "minecraft:gray_dye", 6 | "#minecraft:wool" 7 | ], 8 | "result": { 9 | "id": "minecraft:gray_wool", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/green_bed_from_white_bed.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "dyed_bed", 4 | "ingredients": [ 5 | "#minecraft:beds", 6 | "minecraft:green_dye" 7 | ], 8 | "result": { 9 | "id": "minecraft:green_bed", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/green_wool.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "wool", 4 | "ingredients": [ 5 | "minecraft:green_dye", 6 | "#minecraft:wool" 7 | ], 8 | "result": { 9 | "id": "minecraft:green_wool", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/light_blue_bed_from_white_bed.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "dyed_bed", 4 | "ingredients": [ 5 | "#minecraft:beds", 6 | "minecraft:light_blue_dye" 7 | ], 8 | "result": { 9 | "id": "minecraft:light_blue_bed", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/light_blue_dye_from_blue_dye_bone_meal.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "light_blue_dye", 4 | "ingredients": [ 5 | "minecraft:blue_dye", 6 | "minecraft:bone_meal" 7 | ], 8 | "result": { 9 | "count": 2, 10 | "id": "minecraft:light_blue_dye" 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/light_blue_dye_from_lapis_lazuli_bone_meal.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "light_blue_dye", 4 | "ingredients": [ 5 | "minecraft:lapis_lazuli", 6 | "minecraft:bone_meal" 7 | ], 8 | "result": { 9 | "count": 2, 10 | "id": "minecraft:light_blue_dye" 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/light_blue_dye_from_lapis_lazuli_white_dye.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "light_blue_dye", 4 | "ingredients": [ 5 | "minecraft:lapis_lazuli", 6 | "minecraft:white_dye" 7 | ], 8 | "result": { 9 | "count": 2, 10 | "id": "minecraft:light_blue_dye" 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/light_blue_wool.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "wool", 4 | "ingredients": [ 5 | "minecraft:light_blue_dye", 6 | "#minecraft:wool" 7 | ], 8 | "result": { 9 | "id": "minecraft:light_blue_wool", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/light_gray_bed_from_white_bed.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "dyed_bed", 4 | "ingredients": [ 5 | "#minecraft:beds", 6 | "minecraft:light_gray_dye" 7 | ], 8 | "result": { 9 | "id": "minecraft:light_gray_bed", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/light_gray_dye_from_black_dye_bone_meal.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "light_gray_dye", 4 | "ingredients": [ 5 | "minecraft:black_dye", 6 | "minecraft:bone_meal", 7 | "minecraft:bone_meal" 8 | ], 9 | "result": { 10 | "count": 3, 11 | "id": "minecraft:light_gray_dye" 12 | } 13 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/light_gray_dye_from_gray_dye_bone_meal.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "light_gray_dye", 4 | "ingredients": [ 5 | "minecraft:gray_dye", 6 | "minecraft:bone_meal" 7 | ], 8 | "result": { 9 | "count": 2, 10 | "id": "minecraft:light_gray_dye" 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/light_gray_wool.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "wool", 4 | "ingredients": [ 5 | "minecraft:light_gray_dye", 6 | "#minecraft:wool" 7 | ], 8 | "result": { 9 | "id": "minecraft:light_gray_wool", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/lime_bed_from_white_bed.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "dyed_bed", 4 | "ingredients": [ 5 | "#minecraft:beds", 6 | "minecraft:lime_dye" 7 | ], 8 | "result": { 9 | "id": "minecraft:lime_bed", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/lime_dye_with_bone_meal.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "ingredients": [ 4 | "minecraft:green_dye", 5 | "minecraft:bone_meal" 6 | ], 7 | "result": { 8 | "count": 2, 9 | "id": "minecraft:lime_dye" 10 | } 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/lime_wool.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "wool", 4 | "ingredients": [ 5 | "minecraft:lime_dye", 6 | "#minecraft:wool" 7 | ], 8 | "result": { 9 | "id": "minecraft:lime_wool", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/magenta_bed_from_white_bed.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "dyed_bed", 4 | "ingredients": [ 5 | "#minecraft:beds", 6 | "minecraft:magenta_dye" 7 | ], 8 | "result": { 9 | "id": "minecraft:magenta_bed", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/magenta_dye_from_blue_red_bone_meal_dye.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "magenta_dye", 4 | "ingredients": [ 5 | "minecraft:blue_dye", 6 | "minecraft:red_dye", 7 | "minecraft:red_dye", 8 | "minecraft:bone_meal" 9 | ], 10 | "result": { 11 | "count": 4, 12 | "id": "minecraft:magenta_dye" 13 | } 14 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/magenta_dye_from_lapis_lazuli_red_bone_meal_dye.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "magenta_dye", 4 | "ingredients": [ 5 | "minecraft:lapis_lazuli", 6 | "minecraft:red_dye", 7 | "minecraft:red_dye", 8 | "minecraft:bone_meal" 9 | ], 10 | "result": { 11 | "count": 4, 12 | "id": "minecraft:magenta_dye" 13 | } 14 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/magenta_dye_from_lapis_lazuli_red_pink.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "magenta_dye", 4 | "ingredients": [ 5 | "minecraft:lapis_lazuli", 6 | "minecraft:red_dye", 7 | "minecraft:pink_dye" 8 | ], 9 | "result": { 10 | "count": 3, 11 | "id": "minecraft:magenta_dye" 12 | } 13 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/magenta_dye_from_lapis_lazuli_red_white_dye.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "magenta_dye", 4 | "ingredients": [ 5 | "minecraft:lapis_lazuli", 6 | "minecraft:red_dye", 7 | "minecraft:red_dye", 8 | "minecraft:white_dye" 9 | ], 10 | "result": { 11 | "count": 4, 12 | "id": "minecraft:magenta_dye" 13 | } 14 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/magenta_wool.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "wool", 4 | "ingredients": [ 5 | "minecraft:magenta_dye", 6 | "#minecraft:wool" 7 | ], 8 | "result": { 9 | "id": "minecraft:magenta_wool", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/orange_bed_from_white_bed.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "dyed_bed", 4 | "ingredients": [ 5 | "#minecraft:beds", 6 | "minecraft:orange_dye" 7 | ], 8 | "result": { 9 | "id": "minecraft:orange_bed", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/orange_wool.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "wool", 4 | "ingredients": [ 5 | "minecraft:orange_dye", 6 | "#minecraft:wool" 7 | ], 8 | "result": { 9 | "id": "minecraft:orange_wool", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/pink_bed_from_white_bed.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "dyed_bed", 4 | "ingredients": [ 5 | "#minecraft:beds", 6 | "minecraft:pink_dye" 7 | ], 8 | "result": { 9 | "id": "minecraft:pink_bed", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/pink_dye_from_red_dye_bone_meal.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "pink_dye", 4 | "ingredients": [ 5 | "minecraft:red_dye", 6 | "minecraft:bone_meal" 7 | ], 8 | "result": { 9 | "count": 2, 10 | "id": "minecraft:pink_dye" 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/pink_wool.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "wool", 4 | "ingredients": [ 5 | "minecraft:pink_dye", 6 | "#minecraft:wool" 7 | ], 8 | "result": { 9 | "id": "minecraft:pink_wool", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/purple_bed_from_white_bed.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "dyed_bed", 4 | "ingredients": [ 5 | "#minecraft:beds", 6 | "minecraft:purple_dye" 7 | ], 8 | "result": { 9 | "id": "minecraft:purple_bed", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/purple_dye_from_lapis_lazuli.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "ingredients": [ 4 | "minecraft:lapis_lazuli", 5 | "minecraft:red_dye" 6 | ], 7 | "result": { 8 | "count": 2, 9 | "id": "minecraft:purple_dye" 10 | } 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/purple_wool.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "wool", 4 | "ingredients": [ 5 | "minecraft:purple_dye", 6 | "#minecraft:wool" 7 | ], 8 | "result": { 9 | "id": "minecraft:purple_wool", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/red_bed_from_white_bed.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "dyed_bed", 4 | "ingredients": [ 5 | "#minecraft:beds", 6 | "minecraft:red_dye" 7 | ], 8 | "result": { 9 | "id": "minecraft:red_bed", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/red_wool.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "wool", 4 | "ingredients": [ 5 | "minecraft:red_dye", 6 | "#minecraft:wool" 7 | ], 8 | "result": { 9 | "id": "minecraft:red_wool", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/string_from_cobweb.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "ingredients": [ 4 | "minecraft:cobweb" 5 | ], 6 | "result": { 7 | "count": 9, 8 | "id": "minecraft:string" 9 | } 10 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/white_bed_from_white_bed.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "dyed_bed", 4 | "ingredients": [ 5 | "#minecraft:beds", 6 | "minecraft:white_dye" 7 | ], 8 | "result": { 9 | "id": "minecraft:white_bed", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/white_bed_from_white_bed_bone_meal.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "dyed_bed", 4 | "ingredients": [ 5 | "#minecraft:beds", 6 | "minecraft:bone_meal" 7 | ], 8 | "result": { 9 | "id": "minecraft:white_bed", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/white_bundle_bone_meal.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_transmute", 3 | "category": "equipment", 4 | "group": "bundle_dye", 5 | "input": "#minecraft:bundles", 6 | "material": "minecraft:bone_meal", 7 | "result": "minecraft:white_bundle" 8 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/white_concrete_powder_bone_meal.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "concrete_powder", 4 | "ingredients": [ 5 | "minecraft:bone_meal", 6 | "minecraft:sand", 7 | "minecraft:sand", 8 | "minecraft:sand", 9 | "minecraft:sand", 10 | "minecraft:gravel", 11 | "minecraft:gravel", 12 | "minecraft:gravel", 13 | "minecraft:gravel" 14 | ], 15 | "result": { 16 | "count": 8, 17 | "id": "minecraft:white_concrete_powder" 18 | } 19 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/white_shulker_box_bone_meal.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_transmute", 3 | "category": "misc", 4 | "group": "shulker_box_dye", 5 | "input": "#minecraft:shulker_boxes", 6 | "material": "minecraft:bone_meal", 7 | "result": "minecraft:white_shulker_box" 8 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/white_stained_glass_bone_meal.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "group": "stained_glass", 4 | "pattern": [ 5 | "###", 6 | "#X#", 7 | "###" 8 | ], 9 | "key": { 10 | "#": "minecraft:glass", 11 | "X": "minecraft:bone_meal" 12 | }, 13 | "result": { 14 | "count": 8, 15 | "id": "minecraft:white_stained_glass" 16 | } 17 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/white_stained_glass_pane_from_glass_pane_bone_meal.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "group": "stained_glass_pane", 4 | "pattern": [ 5 | "###", 6 | "#$#", 7 | "###" 8 | ], 9 | "key": { 10 | "#": "minecraft:glass_pane", 11 | "$": "minecraft:bone_meal" 12 | }, 13 | "result": { 14 | "count": 8, 15 | "id": "minecraft:white_stained_glass_pane" 16 | } 17 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/white_terracotta_bone_meal.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "group": "stained_terracotta", 4 | "pattern": [ 5 | "###", 6 | "#X#", 7 | "###" 8 | ], 9 | "key": { 10 | "#": "minecraft:terracotta", 11 | "X": "minecraft:bone_meal" 12 | }, 13 | "result": { 14 | "count": 8, 15 | "id": "minecraft:white_terracotta" 16 | } 17 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/white_wool_bone_meal.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "wool", 4 | "ingredients": [ 5 | "minecraft:bone_meal", 6 | "#minecraft:wool" 7 | ], 8 | "result": { 9 | "id": "minecraft:white_wool", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/white_wool_from_colored.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "wool", 4 | "ingredients": [ 5 | "minecraft:white_dye", 6 | "#minecraft:wool" 7 | ], 8 | "result": { 9 | "id": "minecraft:white_wool", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/yellow_bed_from_white_bed.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "dyed_bed", 4 | "ingredients": [ 5 | "#minecraft:beds", 6 | "minecraft:yellow_dye" 7 | ], 8 | "result": { 9 | "id": "minecraft:yellow_bed", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/bedrockify/recipe/yellow_wool.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "group": "wool", 4 | "ingredients": [ 5 | "minecraft:yellow_dye", 6 | "#minecraft:wool" 7 | ], 8 | "result": { 9 | "id": "minecraft:yellow_wool", 10 | "count": 1 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/minecraft/tags/block/cauldrons.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "bedrockify:potion_cauldron", 4 | "bedrockify:colored_water_cauldron" 5 | ], 6 | "replace": false 7 | } -------------------------------------------------------------------------------- /src/main/resources/fabric.mod.json: -------------------------------------------------------------------------------- 1 | { 2 | "schemaVersion": 1, 3 | "id": "bedrockify", 4 | "version": "${version}", 5 | "name": "BedrockIfy", 6 | "description": "BedrockIfy implements some Minecraft Bedrock features into Java edition.", 7 | "authors": [ 8 | "juancarloscp52", 9 | "lonefelidae16" 10 | ], 11 | "contact": { 12 | "homepage": "https://www.curseforge.com/minecraft/mc-mods/bedrockify", 13 | "sources": "https://github.com/juancarloscp52/BedrockIfy", 14 | "issues": "https://github.com/juancarloscp52/BedrockIfy/issues" 15 | }, 16 | "license": "GPL-3.0", 17 | "icon": "assets/bedrockify/icon.png", 18 | "environment": "*", 19 | "entrypoints": { 20 | "main": [ 21 | "me.juancarloscp52.bedrockify.Bedrockify" 22 | ], 23 | "client": [ 24 | "me.juancarloscp52.bedrockify.client.BedrockifyClient" 25 | ], 26 | "fabric-datagen": [ 27 | "me.juancarloscp52.bedrockify.datagen.BedrockIfyDatagen" 28 | ], 29 | "modmenu": ["me.juancarloscp52.bedrockify.client.BedrockifyModMenu"] 30 | }, 31 | "accessWidener": "bedrockify.accesswidener", 32 | "mixins": [ 33 | "bedrockify.mixins.json" 34 | ], 35 | "depends": { 36 | "fabricloader": ">=0.16.0", 37 | "minecraft": ">=1.21.5", 38 | "java":">=21" 39 | }, 40 | "suggests": { 41 | "modmenu": ">=13.0.0" 42 | }, 43 | "conflicts": { 44 | "held-item-info": "*" 45 | } 46 | } 47 | --------------------------------------------------------------------------------