From 92f95d6c0fe0f5fd9b670b03d24c405672107b7c Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Mon, 2 Nov 2020 02:21:40 +0300 Subject: [PATCH] Bookshelves mixins, textures & lang --- .../blocks/complex/WoodenMaterial.java | 3 + .../client/EnchantingTableBlockMixin.java | 46 ++++++ .../common/EnchantmentScreenHandlerMixin.java | 140 ++++++++++++++++++ .../java/ru/betterend/registry/EndTags.java | 11 +- .../assets/betterend/lang/en_us.json | 8 +- .../assets/betterend/lang/ru_ru.json | 8 +- .../textures/block/dragon_tree_bookshelf.png | Bin 0 -> 728 bytes .../textures/block/end_lotus_bookshelf.png | Bin 0 -> 1932 bytes .../textures/block/lacugrove_bookshelf.png | Bin 0 -> 694 bytes .../textures/block/pythadendron_bookshelf.png | Bin 0 -> 697 bytes .../resources/betterend.mixins.client.json | 1 + .../resources/betterend.mixins.common.json | 1 + .../data/c/tags/blocks/bookshelves.json | 6 + 13 files changed, 221 insertions(+), 3 deletions(-) create mode 100644 src/main/java/ru/betterend/mixin/client/EnchantingTableBlockMixin.java create mode 100644 src/main/java/ru/betterend/mixin/common/EnchantmentScreenHandlerMixin.java create mode 100644 src/main/resources/assets/betterend/textures/block/dragon_tree_bookshelf.png create mode 100644 src/main/resources/assets/betterend/textures/block/end_lotus_bookshelf.png create mode 100644 src/main/resources/assets/betterend/textures/block/lacugrove_bookshelf.png create mode 100644 src/main/resources/assets/betterend/textures/block/pythadendron_bookshelf.png create mode 100644 src/main/resources/data/c/tags/blocks/bookshelves.json diff --git a/src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java b/src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java index bc56ef92..53b58e00 100644 --- a/src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java +++ b/src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java @@ -29,6 +29,7 @@ import ru.betterend.blocks.basis.BlockTrapdoor; import ru.betterend.blocks.basis.BlockWoodenButton; import ru.betterend.recipe.builders.GridRecipe; import ru.betterend.registry.EndBlocks; +import ru.betterend.registry.EndTags; import ru.betterend.util.TagHelper; public class WoodenMaterial { @@ -99,6 +100,7 @@ public class WoodenMaterial { GridRecipe.make(name + "_sign", sign).setOutputCount(3).setShape("###", "###", " I ").addMaterial('#', planks).addMaterial('I', Items.STICK).setGroup("end_signs").build(); GridRecipe.make(name + "_chest", chest).setShape("###", "# #", "###").addMaterial('#', planks).setGroup("end_chests").build(); GridRecipe.make(name + "_barrel", barrel).setShape("#S#", "# #", "#S#").addMaterial('#', planks).addMaterial('S', slab).setGroup("end_barrels").build(); + GridRecipe.make(name + "_bookshelf", shelf).setShape("###", "PPP", "###").addMaterial('#', planks).addMaterial('P', Items.PAPER).setGroup("end_bookshelves").build(); // Item Tags // TagHelper.addTag(ItemTags.PLANKS, planks); @@ -125,6 +127,7 @@ public class WoodenMaterial { TagHelper.addTags(slab, BlockTags.WOODEN_SLABS, BlockTags.SLABS); TagHelper.addTags(stairs, BlockTags.WOODEN_STAIRS, BlockTags.STAIRS); TagHelper.addTags(trapdoor, BlockTags.WOODEN_TRAPDOORS, BlockTags.TRAPDOORS); + TagHelper.addTag(EndTags.BOOKSHELVES, shelf); } public boolean isTreeLog(Block block) { diff --git a/src/main/java/ru/betterend/mixin/client/EnchantingTableBlockMixin.java b/src/main/java/ru/betterend/mixin/client/EnchantingTableBlockMixin.java new file mode 100644 index 00000000..113e3c27 --- /dev/null +++ b/src/main/java/ru/betterend/mixin/client/EnchantingTableBlockMixin.java @@ -0,0 +1,46 @@ +package ru.betterend.mixin.client; + +import java.util.Random; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.EnchantingTableBlock; +import net.minecraft.particle.ParticleTypes; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import ru.betterend.registry.EndTags; + +@Mixin(EnchantingTableBlock.class) +public abstract class EnchantingTableBlockMixin extends Block { + public EnchantingTableBlockMixin(Settings settings) { + super(settings); + } + + @Inject(method = "randomDisplayTick", at = @At(value = "TAIL")) + private void beOnRandomDisplayTick(BlockState state, World world, BlockPos pos, Random random, CallbackInfo info) { + for (int px = -2; px <= 2; ++px) { + for (int pz = -2; pz <= 2; ++pz) { + if (px > -2 && px < 2 && pz == -1) { + pz = 2; + } + if (random.nextInt(16) == 0) { + for (int py = 0; py <= 1; ++py) { + BlockPos blockPos = pos.add(px, py, pz); + if (world.getBlockState(blockPos).isIn(EndTags.BOOKSHELVES)) { + if (!world.isAir(pos.add(px / 2, 0, pz / 2))) { + break; + } + world.addParticle(ParticleTypes.ENCHANT, pos.getX() + 0.5, pos.getY() + 2.0, pos.getZ() + 0.5, px + random.nextFloat() - 0.5, py - random.nextFloat() - 1.0, pz + random.nextFloat() - 0.5); + } + } + } + } + } + + } +} diff --git a/src/main/java/ru/betterend/mixin/common/EnchantmentScreenHandlerMixin.java b/src/main/java/ru/betterend/mixin/common/EnchantmentScreenHandlerMixin.java new file mode 100644 index 00000000..669666ea --- /dev/null +++ b/src/main/java/ru/betterend/mixin/common/EnchantmentScreenHandlerMixin.java @@ -0,0 +1,140 @@ +package ru.betterend.mixin.common; + +import java.util.List; +import java.util.Random; + +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.enchantment.EnchantmentLevelEntry; +import net.minecraft.inventory.Inventory; +import net.minecraft.item.ItemStack; +import net.minecraft.screen.EnchantmentScreenHandler; +import net.minecraft.screen.Property; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.screen.ScreenHandlerContext; +import net.minecraft.screen.ScreenHandlerType; +import net.minecraft.util.registry.Registry; +import ru.betterend.registry.EndTags; + +@Mixin(EnchantmentScreenHandler.class) +public abstract class EnchantmentScreenHandlerMixin extends ScreenHandler { + @Shadow + @Final + private Inventory inventory; + + @Shadow + @Final + private ScreenHandlerContext context; + + @Shadow + @Final + private Random random; + + @Shadow + @Final + private Property seed; + + @Shadow + @Final + public int[] enchantmentPower; + + @Shadow + @Final + public int[] enchantmentId; + + @Shadow + @Final + public int[] enchantmentLevel; + + protected EnchantmentScreenHandlerMixin(ScreenHandlerType type, int syncId) { + super(type, syncId); + } + + @Inject(method = "onContentChanged", at = @At("HEAD"), cancellable = true) + private void beOnContentChanged(Inventory inventory, CallbackInfo info) { + if (inventory == this.inventory) { + ItemStack itemStack = inventory.getStack(0); + if (!itemStack.isEmpty() && itemStack.isEnchantable()) { + this.context.run((world, blockPos) -> { + int i = 0; + + int j; + for (j = -1; j <= 1; ++j) { + for (int k = -1; k <= 1; ++k) { + if ((j != 0 || k != 0) && world.isAir(blockPos.add(k, 0, j)) && world.isAir(blockPos.add(k, 1, j))) { + if (world.getBlockState(blockPos.add(k * 2, 0, j * 2)).isIn(EndTags.BOOKSHELVES)) { + ++i; + } + + if (world.getBlockState(blockPos.add(k * 2, 1, j * 2)).isIn(EndTags.BOOKSHELVES)) { + ++i; + } + + if (k != 0 && j != 0) { + if (world.getBlockState(blockPos.add(k * 2, 0, j)).isIn(EndTags.BOOKSHELVES)) { + ++i; + } + + if (world.getBlockState(blockPos.add(k * 2, 1, j)).isIn(EndTags.BOOKSHELVES)) { + ++i; + } + + if (world.getBlockState(blockPos.add(k, 0, j * 2)).isIn(EndTags.BOOKSHELVES)) { + ++i; + } + + if (world.getBlockState(blockPos.add(k, 1, j * 2)).isIn(EndTags.BOOKSHELVES)) { + ++i; + } + } + } + } + } + + this.random.setSeed((long) this.seed.get()); + + for (j = 0; j < 3; ++j) { + this.enchantmentPower[j] = EnchantmentHelper.calculateRequiredExperienceLevel(this.random, j, i, itemStack); + this.enchantmentId[j] = -1; + this.enchantmentLevel[j] = -1; + if (this.enchantmentPower[j] < j + 1) { + this.enchantmentPower[j] = 0; + } + } + + for (j = 0; j < 3; ++j) { + if (this.enchantmentPower[j] > 0) { + List list = this.generateEnchantments(itemStack, j, this.enchantmentPower[j]); + if (list != null && !list.isEmpty()) { + EnchantmentLevelEntry enchantmentLevelEntry = (EnchantmentLevelEntry) list.get(this.random.nextInt(list.size())); + this.enchantmentId[j] = Registry.ENCHANTMENT.getRawId(enchantmentLevelEntry.enchantment); + this.enchantmentLevel[j] = enchantmentLevelEntry.level; + } + } + } + + this.sendContentUpdates(); + }); + } + else { + for (int i = 0; i < 3; ++i) { + this.enchantmentPower[i] = 0; + this.enchantmentId[i] = -1; + this.enchantmentLevel[i] = -1; + } + } + info.cancel(); + } + } + + @Shadow + private List generateEnchantments(ItemStack stack, int slot, int level) { + return null; + } +} diff --git a/src/main/java/ru/betterend/registry/EndTags.java b/src/main/java/ru/betterend/registry/EndTags.java index d096806d..2d038cc6 100644 --- a/src/main/java/ru/betterend/registry/EndTags.java +++ b/src/main/java/ru/betterend/registry/EndTags.java @@ -25,12 +25,21 @@ public class EndTags { // Block Tags public static final Tag.Identified END_GROUND = makeTag("end_ground"); public static final Tag.Identified GEN_TERRAIN = makeTag("gen_terrain"); + public static final Tag.Identified BOOKSHELVES = makeCommonTag("bookshelves"); // Item Tags public final static Tag HAMMERS = registerFabricItemTag("hammers"); private static Tag.Identified makeTag(String name) { - return (Identified) TagRegistry.block(BetterEnd.makeID(name)); + Identifier id = BetterEnd.makeID(name); + Tag tag = BlockTags.getTagGroup().getTag(id); + return tag == null ? (Identified) TagRegistry.block(id) : (Identified) tag; + } + + private static Tag.Identified makeCommonTag(String name) { + Identifier id = new Identifier("c", name); + Tag tag = BlockTags.getTagGroup().getTag(id); + return tag == null ? (Identified) TagRegistry.block(id) : (Identified) tag; } public static void register() { diff --git a/src/main/resources/assets/betterend/lang/en_us.json b/src/main/resources/assets/betterend/lang/en_us.json index 95ae0cfc..1e7d1768 100644 --- a/src/main/resources/assets/betterend/lang/en_us.json +++ b/src/main/resources/assets/betterend/lang/en_us.json @@ -259,5 +259,11 @@ "block.betterend.dragon_tree_sapling": "Dragon Tree Sapling", "block.betterend.shadow_grass": "Shadow Grass", "block.betterend.shadow_grass_path": "Shadow Grass Path", - "block.betterend.shadow_plant": "Shadow Plant" + "block.betterend.shadow_plant": "Shadow Plant", + + "block.betterend.dragon_tree_bookshelf": "Dragon Tree Bookshelf", + "block.betterend.end_lotus_bookshelf": "End Lotus Bookshelf", + "block.betterend.lacugrove_bookshelf": "Lacugrove Bookshelf", + "block.betterend.mossy_glowshroom_bookshelf": "Mossy Glowshroom Bookshelf", + "block.betterend.pythadendron_bookshelf": "Pythadendron Bookshelf" } \ No newline at end of file diff --git a/src/main/resources/assets/betterend/lang/ru_ru.json b/src/main/resources/assets/betterend/lang/ru_ru.json index bc30a347..ac1d8ce3 100644 --- a/src/main/resources/assets/betterend/lang/ru_ru.json +++ b/src/main/resources/assets/betterend/lang/ru_ru.json @@ -261,5 +261,11 @@ "block.betterend.dragon_tree_sapling": "Саженец драконова древа", "block.betterend.shadow_grass": "Теневая трава", "block.betterend.shadow_grass_path": "Тропа из теневой травы", - "block.betterend.shadow_plant": "Теневое растение" + "block.betterend.shadow_plant": "Теневое растение", + + "block.betterend.dragon_tree_bookshelf": "Книжные полки из драконова древа", + "block.betterend.end_lotus_bookshelf": "Книжные полки из лотоса края", + "block.betterend.lacugrove_bookshelf": "Книжные полки из оземангра", + "block.betterend.mossy_glowshroom_bookshelf": "Книжные полки из мшистого светогриба", + "block.betterend.pythadendron_bookshelf": "Книжные полки из пифадендрона" } \ No newline at end of file diff --git a/src/main/resources/assets/betterend/textures/block/dragon_tree_bookshelf.png b/src/main/resources/assets/betterend/textures/block/dragon_tree_bookshelf.png new file mode 100644 index 0000000000000000000000000000000000000000..ff3963fe84889e55be55ee7aedd3e6a9973e1e40 GIT binary patch literal 728 zcmV;}0w?{6P)>OQsY!R+P0BVaC8LBq51~J=QMeq@00oQ8F6s$kzj029BCT$ zg#T)krT^>a;}Jp%6u{tdmp}j@s?-31Eph|`fU43!Ae%g8=aI9RbjV*ne96n(UO^d~ zQ&pNsX#hSL{{g_2csD_S04{&_E8TU^^=k*9wgBmnsG>2>Amd1L&hjlR?i-vu(Qc<76HHV{@c&hKJTN9DDxM3p})T8g8yK=sAA-rbc(&mz$W) zRRC|(?|S={prCv-%VDDlX({Q-36erwwH}+8@hD{Jx887Y^TrC`hJZ2 z9H^sZ^?fN2v%`SiCO?J`f1VibNpLal$i%04L9U^1mAZ0000< KMNUMnLSTXbPhJK9 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/betterend/textures/block/end_lotus_bookshelf.png b/src/main/resources/assets/betterend/textures/block/end_lotus_bookshelf.png new file mode 100644 index 0000000000000000000000000000000000000000..dd76c8c44281878ba378289822118fbcb08d64f0 GIT binary patch literal 1932 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/betterend.mixins.client.json b/src/main/resources/betterend.mixins.client.json index 5be4b250..70fbfbd4 100644 --- a/src/main/resources/betterend.mixins.client.json +++ b/src/main/resources/betterend.mixins.client.json @@ -8,6 +8,7 @@ "ClientPlayNetworkHandlerMixin", "NamespaceResourceManagerMixin", "DeserializationContextMixin", + "EnchantingTableBlockMixin", "BackgroundRendererMixin", "ClientRecipeBookMixin", "ModelVariantMapMixin", diff --git a/src/main/resources/betterend.mixins.common.json b/src/main/resources/betterend.mixins.common.json index 3ab50090..3ade9c13 100644 --- a/src/main/resources/betterend.mixins.common.json +++ b/src/main/resources/betterend.mixins.common.json @@ -5,6 +5,7 @@ "compatibilityLevel": "JAVA_8", "mixins": [ "ServerPlayNetworkHandlerMixin", + "EnchantmentScreenHandlerMixin", "CraftingScreenHandlerMixin", "GenerationSettingsAccessor", "AnvilScreenHandlerMixin", diff --git a/src/main/resources/data/c/tags/blocks/bookshelves.json b/src/main/resources/data/c/tags/blocks/bookshelves.json new file mode 100644 index 00000000..98dee3c8 --- /dev/null +++ b/src/main/resources/data/c/tags/blocks/bookshelves.json @@ -0,0 +1,6 @@ +{ + "replace": "false", + "values": [ + "minecraft:bookshelf" + ] +} \ No newline at end of file