From cc05c21f6293bbf4733d350be95fff1b5b5e49ef Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Wed, 7 Oct 2020 08:57:22 +0300 Subject: [PATCH] Aurora crystal --- .../betterend/blocks/AuroraCrystalBlock.java | 76 ++++++++++++++++++ .../ru/betterend/client/BetterEndClient.java | 3 + .../mixin/client/MinecraftClientMixin.java | 28 +++++++ .../ru/betterend/registry/BlockRegistry.java | 2 + .../ru/betterend/util/IColorProvider.java | 10 +++ .../betterend/blockstates/aurora_crystal.json | 5 ++ .../models/block/aurora_crystal.json | 6 ++ .../betterend/models/block/tint_cube.json | 21 +++++ .../betterend/models/item/aurora_crystal.json | 3 + .../textures/block/aurora_crystal.png | Bin 0 -> 2075 bytes 10 files changed, 154 insertions(+) create mode 100644 src/main/java/ru/betterend/blocks/AuroraCrystalBlock.java create mode 100644 src/main/java/ru/betterend/util/IColorProvider.java create mode 100644 src/main/resources/assets/betterend/blockstates/aurora_crystal.json create mode 100644 src/main/resources/assets/betterend/models/block/aurora_crystal.json create mode 100644 src/main/resources/assets/betterend/models/block/tint_cube.json create mode 100644 src/main/resources/assets/betterend/models/item/aurora_crystal.json create mode 100644 src/main/resources/assets/betterend/textures/block/aurora_crystal.png diff --git a/src/main/java/ru/betterend/blocks/AuroraCrystalBlock.java b/src/main/java/ru/betterend/blocks/AuroraCrystalBlock.java new file mode 100644 index 00000000..06dea056 --- /dev/null +++ b/src/main/java/ru/betterend/blocks/AuroraCrystalBlock.java @@ -0,0 +1,76 @@ +package ru.betterend.blocks; + +import java.util.Collections; +import java.util.List; + +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; +import net.minecraft.block.AbstractGlassBlock; +import net.minecraft.block.BlockState; +import net.minecraft.block.Material; +import net.minecraft.client.color.block.BlockColorProvider; +import net.minecraft.client.color.item.ItemColorProvider; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.context.LootContext; +import net.minecraft.sound.BlockSoundGroup; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3i; +import ru.betterend.client.ERenderLayer; +import ru.betterend.client.IRenderTypeable; +import ru.betterend.util.IColorProvider; +import ru.betterend.util.MHelper; + +public class AuroraCrystalBlock extends AbstractGlassBlock implements IRenderTypeable, IColorProvider { + private static final Vec3i[] COLORS; + + public AuroraCrystalBlock() { + super(FabricBlockSettings.of(Material.GLASS).breakByTool(FabricToolTags.PICKAXES).sounds(BlockSoundGroup.GLASS).lightLevel(15).nonOpaque()); + } + + @Override + public BlockColorProvider getProvider() { + return (state, world, pos, tintIndex) -> { + long i = (long) pos.getX() + (long) pos.getY() + (long) pos.getZ(); + double delta = i * 0.1; + int index = MHelper.floor(delta); + int index2 = (index + 1) & 3; + delta -= index; + index &= 3; + + Vec3i color1 = COLORS[index]; + Vec3i color2 = COLORS[index2]; + + int r = MHelper.floor(MathHelper.lerp(delta, color1.getX(), color2.getX())); + int g = MHelper.floor(MathHelper.lerp(delta, color1.getY(), color2.getY())); + int b = MHelper.floor(MathHelper.lerp(delta, color1.getZ(), color2.getZ())); + + return MHelper.color(r, g, b); + }; + } + + @Override + public ItemColorProvider getItemProvider() { + return (stack, tintIndex) -> { + return MHelper.color(COLORS[3].getX(), COLORS[3].getY(), COLORS[3].getZ()); + }; + } + + @Override + public ERenderLayer getRenderLayer() { + return ERenderLayer.TRANSLUCENT; + } + + @Override + public List getDroppedStacks(BlockState state, LootContext.Builder builder) { + return Collections.singletonList(new ItemStack(this)); + } + + static { + COLORS = new Vec3i[] { + new Vec3i(247, 77, 161), + new Vec3i(120, 184, 255), + new Vec3i(120, 255, 168), + new Vec3i(243, 58, 255) + }; + } +} diff --git a/src/main/java/ru/betterend/client/BetterEndClient.java b/src/main/java/ru/betterend/client/BetterEndClient.java index c7c4dfdf..bb58aff2 100644 --- a/src/main/java/ru/betterend/client/BetterEndClient.java +++ b/src/main/java/ru/betterend/client/BetterEndClient.java @@ -2,12 +2,15 @@ package ru.betterend.client; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.color.block.BlockColors; import net.minecraft.client.render.RenderLayer; import net.minecraft.util.registry.Registry; import ru.betterend.registry.BlockEntityRenderRegistry; import ru.betterend.registry.EntityRenderRegistry; import ru.betterend.registry.ParticleRegistry; import ru.betterend.registry.ScreensRegistry; +import ru.betterend.util.IColorProvider; public class BetterEndClient implements ClientModInitializer { @Override diff --git a/src/main/java/ru/betterend/mixin/client/MinecraftClientMixin.java b/src/main/java/ru/betterend/mixin/client/MinecraftClientMixin.java index 61f14958..d7e4b602 100644 --- a/src/main/java/ru/betterend/mixin/client/MinecraftClientMixin.java +++ b/src/main/java/ru/betterend/mixin/client/MinecraftClientMixin.java @@ -5,9 +5,14 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.RunArgs; +import net.minecraft.client.color.block.BlockColors; +import net.minecraft.client.color.item.ItemColors; import net.minecraft.client.gui.hud.InGameHud; import net.minecraft.client.gui.screen.CreditsScreen; import net.minecraft.client.gui.screen.Screen; @@ -15,7 +20,11 @@ import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.sound.MusicType; import net.minecraft.client.world.ClientWorld; import net.minecraft.sound.MusicSound; +import net.minecraft.util.registry.Registry; import net.minecraft.world.World; +import ru.betterend.client.ERenderLayer; +import ru.betterend.client.IRenderTypeable; +import ru.betterend.util.IColorProvider; import ru.betterend.util.MHelper; @Mixin(MinecraftClient.class) @@ -33,6 +42,25 @@ public class MinecraftClientMixin { @Shadow public ClientWorld world; + @Shadow + @Final + private BlockColors blockColors; + + @Shadow + @Final + private ItemColors itemColors; + + @Inject(method = "*", at = @At("TAIL")) + private void onInit(RunArgs args, CallbackInfo info) { + Registry.BLOCK.forEach(block -> { + if (block instanceof IColorProvider) { + IColorProvider provider = (IColorProvider) block; + blockColors.registerColorProvider(provider.getProvider(), block); + itemColors.register(provider.getItemProvider(), block.asItem()); + } + }); + } + @Inject(method = "getMusicType", at = @At("HEAD"), cancellable = true) private void getEndMusic(CallbackInfoReturnable info) { if (!(this.currentScreen instanceof CreditsScreen) && this.player != null) { diff --git a/src/main/java/ru/betterend/registry/BlockRegistry.java b/src/main/java/ru/betterend/registry/BlockRegistry.java index 9df1c286..4910b8c0 100644 --- a/src/main/java/ru/betterend/registry/BlockRegistry.java +++ b/src/main/java/ru/betterend/registry/BlockRegistry.java @@ -7,6 +7,7 @@ import net.minecraft.item.Item; import net.minecraft.util.registry.Registry; import ru.betterend.BetterEnd; import ru.betterend.blocks.AeterniumBlock; +import ru.betterend.blocks.AuroraCrystalBlock; import ru.betterend.blocks.BlockBlueVine; import ru.betterend.blocks.BlockBlueVineLantern; import ru.betterend.blocks.BlockBlueVineSeed; @@ -65,6 +66,7 @@ public class BlockRegistry { public static final Block TERMINITE_BLOCK = registerBlock("terminite_block", new TerminiteBlock()); public static final Block AETERNIUM_BLOCK = registerBlock("aeternium_block", new AeterniumBlock()); public static final Block ENDER_BLOCK = registerBlock("ender_block", new EnderBlock()); + public static final Block AURORA_CRYSTAL = registerBlock("aurora_crystal", new AuroraCrystalBlock()); // Block With Entities // public static final Block END_STONE_SMELTER = registerBlock("end_stone_smelter", new EndStoneSmelter()); diff --git a/src/main/java/ru/betterend/util/IColorProvider.java b/src/main/java/ru/betterend/util/IColorProvider.java new file mode 100644 index 00000000..61f1982d --- /dev/null +++ b/src/main/java/ru/betterend/util/IColorProvider.java @@ -0,0 +1,10 @@ +package ru.betterend.util; + +import net.minecraft.client.color.block.BlockColorProvider; +import net.minecraft.client.color.item.ItemColorProvider; + +public interface IColorProvider { + BlockColorProvider getProvider(); + + ItemColorProvider getItemProvider(); +} diff --git a/src/main/resources/assets/betterend/blockstates/aurora_crystal.json b/src/main/resources/assets/betterend/blockstates/aurora_crystal.json new file mode 100644 index 00000000..92b720e0 --- /dev/null +++ b/src/main/resources/assets/betterend/blockstates/aurora_crystal.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "betterend:block/aurora_crystal" } + } +} diff --git a/src/main/resources/assets/betterend/models/block/aurora_crystal.json b/src/main/resources/assets/betterend/models/block/aurora_crystal.json new file mode 100644 index 00000000..ab9e23f2 --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/aurora_crystal.json @@ -0,0 +1,6 @@ +{ + "parent": "betterend:block/tint_cube", + "textures": { + "texture": "betterend:block/aurora_crystal" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/tint_cube.json b/src/main/resources/assets/betterend/models/block/tint_cube.json new file mode 100644 index 00000000..f65b5c05 --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/tint_cube.json @@ -0,0 +1,21 @@ +{ + "parent": "block/block", + "textures": { + "particle": "#texture" + }, + "elements": [ + { + "__comment": "Box1", + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down", "tintindex": 0 }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "up", "tintindex": 0 }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "north", "tintindex": 0 }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "south", "tintindex": 0 }, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "west", "tintindex": 0 }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "east", "tintindex": 0 } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/item/aurora_crystal.json b/src/main/resources/assets/betterend/models/item/aurora_crystal.json new file mode 100644 index 00000000..4d45547c --- /dev/null +++ b/src/main/resources/assets/betterend/models/item/aurora_crystal.json @@ -0,0 +1,3 @@ +{ + "parent": "betterend:block/aurora_crystal" +} diff --git a/src/main/resources/assets/betterend/textures/block/aurora_crystal.png b/src/main/resources/assets/betterend/textures/block/aurora_crystal.png new file mode 100644 index 0000000000000000000000000000000000000000..e304350fab49d1b647a8c679e06e4cb5c6273e6b GIT binary patch literal 2075 zcmbVN4N%io950HxF_{A57b2lDMWIbv3T*>bO95e{g@Ym}w`oYylG!#j2~tod;>0SP zAi@yF`~n5Phn^cB6E+1I!;f>g(+xN07!JhA9D2$SSqi1M+qun|yO;M~-tYbX-~Vij zRxNXMnC-yfa2zATLt@x@s%5+~k$rpg48&EdS}Vi|Uv(z2Nxj(tC&PGAz0 zkuXZ?`3OcP;e3?Z}R50{ljVH!9lB+M#{-O0Gg z3}b{rFf}!mpX$daDJ>|FN~Itq1cgE#i{Q~|1_m+l4D`G)h7g=aDZ(j%;+2tA_3L8C!CB2B4;BMdZy7*ISS zM8;)Rn=u`%C4H z!P$0TS=#y#yRmgL+`zUkitSUkBg#BEoN<>ULgZ>mTgKOI2Ddm)=IxD_%Sxo5w9wV= z3sj}=7m7j`xw-;zuFgqYnqq&S?t9}jH!d+b*yX^@If2z^o_0ftDM&oM=mziy=hpr9 z_XY;8pP$l~x6olzZ(3Dd>sR?T^^0qLOCpzfA8tRD@laj4kqR~XFGZjo8gu#eK4?+g zcO7~x4#i6(^@|VMwKq>axxAbhG#6d?rlYZE@5AIXiIKnfy}swyd4*`Z>Ds=0ABVPz z+V*`hXLj3Xlx@!w9`U+8{%kpYK;Crviev zE-N27Mj|m6dZS!{CbgN2mU*(;X<*gcSesoEB%zsP1v^lA@DlqJB-RGZr zh3%IwdXQ0k6&Uwq$_btN3*WSvdD|x0bp^>+D%~=6mOG4B%*xGfk6LXm_WU3pa4mA2 z(sS>aXO`>0P{D)l;p&e?hjP~6E6q7LYj>U-wsJ>8V&VcNu>H=o=E`cces_%1t^z`u zBUyT}PjhpXmT{{W0w&z;WIk7IQ-}9Vv0W^8wY3tnc z_jxM{JROp2`7K-f7Sf?R!V2C9clM1te>{EimA;xKy`EXExs_l;#l}Fdh!|Z