diff --git a/build.gradle b/build.gradle index 69851754..552bf46d 100644 --- a/build.gradle +++ b/build.gradle @@ -121,7 +121,7 @@ def env = System.getenv() import org.kohsuke.github.GHReleaseBuilder import org.kohsuke.github.GitHub -task github(dependsOn: [remapJar, sourcesJar, javadocJar]) { +task release(dependsOn: [remapJar, sourcesJar, javadocJar]) { onlyIf { env.GITHUB_TOKEN } diff --git a/gradle.properties b/gradle.properties index 0ba7a761..ab0e74ed 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,5 +17,5 @@ archives_base_name = better-end patchouli_version = 50-FABRIC fabric_version = 0.32.9+1.16 canvas_version = 1.0.+ -bclib_version = 0.1.24 +bclib_version = 0.1.26 rei_version = 5.8.10 \ No newline at end of file diff --git a/src/main/java/ru/betterend/blocks/entities/BlockEntityHydrothermalVent.java b/src/main/java/ru/betterend/blocks/entities/BlockEntityHydrothermalVent.java index 0d545129..0692fd54 100644 --- a/src/main/java/ru/betterend/blocks/entities/BlockEntityHydrothermalVent.java +++ b/src/main/java/ru/betterend/blocks/entities/BlockEntityHydrothermalVent.java @@ -15,6 +15,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import ru.betterend.blocks.HydrothermalVentBlock; +import ru.betterend.interfaces.FallFlyingItem; import ru.betterend.item.ArmoredElytra; import ru.betterend.registry.EndBlockEntities; import ru.betterend.registry.EndBlocks; @@ -65,6 +66,6 @@ public class BlockEntityHydrothermalVent extends BlockEntity implements Tickable private boolean hasElytra(LivingEntity entity) { Item item = entity.getItemBySlot(EquipmentSlot.CHEST).getItem(); - return item instanceof ElytraItem || item instanceof ArmoredElytra; + return item instanceof ElytraItem || item instanceof FallFlyingItem; } } diff --git a/src/main/java/ru/betterend/client/render/ArmoredElytraLayer.java b/src/main/java/ru/betterend/client/render/ArmoredElytraLayer.java index ed1fc9e8..6f729286 100644 --- a/src/main/java/ru/betterend/client/render/ArmoredElytraLayer.java +++ b/src/main/java/ru/betterend/client/render/ArmoredElytraLayer.java @@ -16,7 +16,7 @@ import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.PlayerModelPart; import net.minecraft.world.item.ItemStack; -import ru.betterend.item.ArmoredElytra; +import ru.betterend.interfaces.FallFlyingItem; import ru.betterend.item.model.ArmoredElytraModel; public class ArmoredElytraLayer> extends ElytraLayer { @@ -28,8 +28,8 @@ public class ArmoredElytraLayer public void render(PoseStack poseStack, MultiBufferSource multiBufferSource, int i, T livingEntity, float f, float g, float h, float j, float k, float l) { ItemStack itemStack = livingEntity.getItemBySlot(EquipmentSlot.CHEST); - if (itemStack.getItem() instanceof ArmoredElytra) { - ResourceLocation wingsTexture = ((ArmoredElytra) itemStack.getItem()).getWingTexture(); + if (itemStack.getItem() instanceof FallFlyingItem) { + ResourceLocation wingsTexture = ((FallFlyingItem) itemStack.getItem()).getModelTexture(); if (livingEntity instanceof AbstractClientPlayer) { AbstractClientPlayer abstractClientPlayer = (AbstractClientPlayer) livingEntity; if (abstractClientPlayer.isElytraLoaded() && abstractClientPlayer.getElytraTextureLocation() != null) { diff --git a/src/main/java/ru/betterend/client/render/EndCrystalRenderer.java b/src/main/java/ru/betterend/client/render/EndCrystalRenderer.java index 54a1d540..889982ad 100644 --- a/src/main/java/ru/betterend/client/render/EndCrystalRenderer.java +++ b/src/main/java/ru/betterend/client/render/EndCrystalRenderer.java @@ -47,42 +47,6 @@ public class EndCrystalRenderer { matrices.popPose(); } - public static void renderBeam(BlockPos start, BlockPos end, float tickDelta, int age, PoseStack matrices, MultiBufferSource vertexConsumers, int light) { - float dx = start.getX() - end.getX() + 1.0F; - float dy = start.getY() - end.getY() + 1.0F; - float dz = start.getZ() - end.getZ() + 1.0F; - float f = Mth.sqrt(dx * dx + dz * dz); - float g = Mth.sqrt(dx * dx + dy * dy + dz * dz); - matrices.pushPose(); - matrices.translate(0.0D, 2.0D, 0.0D); - matrices.mulPose(Vector3f.YP.rotation((float)(-Math.atan2((double) dz, (double) dx)) - 1.5707964F)); - matrices.mulPose(Vector3f.XP.rotation((float)(-Math.atan2((double) f, (double) dy)) - 1.5707964F)); - VertexConsumer vertexConsumer = vertexConsumers.getBuffer(CRYSTAL_BEAM_LAYER); - float h = 0.0F - ((float) age + tickDelta) * 0.01F; - float i = Mth.sqrt(dx * dx + dy * dy + dz * dz) / 32.0F - ((float) age + tickDelta) * 0.01F; - float k = 0.0F; - float l = 0.75F; - float m = 0.0F; - PoseStack.Pose entry = matrices.last(); - Matrix4f matrix4f = entry.pose(); - Matrix3f matrix3f = entry.normal(); - - for(int n = 1; n <= 8; ++n) { - float o = Mth.sin((float) n * 6.2831855F / 8.0F) * 0.75F; - float p = Mth.cos((float) n * 6.2831855F / 8.0F) * 0.75F; - float q = (float) n / 8.0F; - vertexConsumer.vertex(matrix4f, k * 0.2F, l * 0.2F, 0.0F).color(0, 0, 0, 255).uv(m, h).overlayCoords(OverlayTexture.NO_OVERLAY).uv2(light).normal(matrix3f, 0.0F, -1.0F, 0.0F).endVertex(); - vertexConsumer.vertex(matrix4f, k, l, g).color(255, 255, 255, 255).uv(m, i).overlayCoords(OverlayTexture.NO_OVERLAY).uv2(light).normal(matrix3f, 0.0F, -1.0F, 0.0F).endVertex(); - vertexConsumer.vertex(matrix4f, o, p, g).color(255, 255, 255, 255).uv(q, i).overlayCoords(OverlayTexture.NO_OVERLAY).uv2(light).normal(matrix3f, 0.0F, -1.0F, 0.0F).endVertex(); - vertexConsumer.vertex(matrix4f, o * 0.2F, p * 0.2F, 0.0F).color(0, 0, 0, 255).uv(q, h).overlayCoords(OverlayTexture.NO_OVERLAY).uv2(light).normal(matrix3f, 0.0F, -1.0F, 0.0F).endVertex(); - k = o; - l = p; - m = q; - } - - matrices.popPose(); - } - static { END_CRYSTAL = RenderType.entityCutoutNoCull(CRYSTAL_TEXTURE); CRYSTAL_BEAM_LAYER = RenderType.entitySmoothCutout(CRYSTAL_BEAM_TEXTURE); diff --git a/src/main/java/ru/betterend/interfaces/FallFlyingItem.java b/src/main/java/ru/betterend/interfaces/FallFlyingItem.java new file mode 100644 index 00000000..e75888d7 --- /dev/null +++ b/src/main/java/ru/betterend/interfaces/FallFlyingItem.java @@ -0,0 +1,8 @@ +package ru.betterend.interfaces; + +import net.minecraft.resources.ResourceLocation; + +public interface FallFlyingItem { + ResourceLocation getModelTexture(); + double getMovementFactor(); +} diff --git a/src/main/java/ru/betterend/item/ArmoredElytra.java b/src/main/java/ru/betterend/item/ArmoredElytra.java index bd605059..b1953792 100644 --- a/src/main/java/ru/betterend/item/ArmoredElytra.java +++ b/src/main/java/ru/betterend/item/ArmoredElytra.java @@ -1,7 +1,5 @@ package ru.betterend.item; -import java.util.UUID; - import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.client.model.FabricModelPredicateProviderRegistry; @@ -14,13 +12,13 @@ import net.minecraft.world.item.ElytraItem; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Rarity; +import ru.bclib.items.BaseArmorItem; import ru.betterend.BetterEnd; +import ru.betterend.interfaces.FallFlyingItem; import ru.betterend.interfaces.MultiModelItem; import ru.betterend.registry.EndItems; -public class ArmoredElytra extends EndArmorItem implements MultiModelItem { - - private static final UUID ARMOR_MODIFIER_UUID_CHEST = ARMOR_MODIFIER_UUID_PER_SLOT[2]; +public class ArmoredElytra extends BaseArmorItem implements MultiModelItem, FallFlyingItem { private final ResourceLocation wingTexture; private final Item repairItem; @@ -37,18 +35,20 @@ public class ArmoredElytra extends EndArmorItem implements MultiModelItem { this.movementFactor = movementFactor; this.defense = (int) ((double) material.getDefenseForSlot(EquipmentSlot.CHEST) / 1.75); this.toughness = material.getToughness() / 1.75F; - addAttributeModifier(Attributes.ARMOR, new AttributeModifier(ARMOR_MODIFIER_UUID_CHEST, + addAttributeModifier(Attributes.ARMOR, new AttributeModifier(ARMOR_MODIFIER_UUID_PER_SLOT[2], "Armor modifier", defense, AttributeModifier.Operation.ADDITION)); - addAttributeModifier(Attributes.ARMOR_TOUGHNESS, new AttributeModifier(ARMOR_MODIFIER_UUID_CHEST, + addAttributeModifier(Attributes.ARMOR_TOUGHNESS, new AttributeModifier(ARMOR_MODIFIER_UUID_PER_SLOT[2], "Armor toughness", toughness, AttributeModifier.Operation.ADDITION)); } + @Override public double getMovementFactor() { return movementFactor; } + @Override @Environment(EnvType.CLIENT) - public ResourceLocation getWingTexture() { + public ResourceLocation getModelTexture() { return wingTexture; } diff --git a/src/main/java/ru/betterend/item/CrystaliteElytra.java b/src/main/java/ru/betterend/item/CrystaliteElytra.java new file mode 100644 index 00000000..489eaf3f --- /dev/null +++ b/src/main/java/ru/betterend/item/CrystaliteElytra.java @@ -0,0 +1,68 @@ +package ru.betterend.item; + +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.fabricmc.fabric.api.object.builder.v1.client.model.FabricModelPredicateProviderRegistry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.item.ElytraItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Rarity; +import ru.betterend.BetterEnd; +import ru.betterend.interfaces.FallFlyingItem; +import ru.betterend.interfaces.MultiModelItem; +import ru.betterend.registry.EndItems; + +public class CrystaliteElytra extends CrystaliteArmor implements MultiModelItem, FallFlyingItem { + + private final ResourceLocation wingTexture; + private final double movementFactor; + private final int defense; + private final float toughness; + + public CrystaliteElytra(int durability, double movementFactor) { + super(EquipmentSlot.CHEST, EndItems.makeEndItemSettings().durability(durability).rarity(Rarity.EPIC)); + this.wingTexture = BetterEnd.makeID("textures/entity/elytra_crystalite.png"); + this.movementFactor = movementFactor; + this.defense = (int) ((double) material.getDefenseForSlot(EquipmentSlot.CHEST) / 1.75); + this.toughness = material.getToughness() / 1.75F; + addAttributeModifier(Attributes.ARMOR, new AttributeModifier(ARMOR_MODIFIER_UUID_PER_SLOT[2], + "Armor modifier", defense, AttributeModifier.Operation.ADDITION)); + addAttributeModifier(Attributes.ARMOR_TOUGHNESS, new AttributeModifier(ARMOR_MODIFIER_UUID_PER_SLOT[2], + "Armor toughness", toughness, AttributeModifier.Operation.ADDITION)); + } + + @Override + public boolean isValidRepairItem(ItemStack itemStack, ItemStack itemStack2) { + return super.isValidRepairItem(itemStack, itemStack2) || itemStack2.getItem() == EndItems.ENCHANTED_MEMBRANE; + } + + @Override + public double getMovementFactor() { + return movementFactor; + } + + @Override + @Environment(EnvType.CLIENT) + public ResourceLocation getModelTexture() { + return wingTexture; + } + + @Override + public int getDefense() { + return defense; + } + + @Override + public float getToughness() { + return toughness; + } + + @Override + public void registerModelPredicate() { + FabricModelPredicateProviderRegistry.register(this, new ResourceLocation("broken"), + (itemStack, clientLevel, livingEntity) -> ElytraItem.isFlyEnabled(itemStack) ? 0.0F : 1.0F); + } +} diff --git a/src/main/java/ru/betterend/item/EnchantedPetalItem.java b/src/main/java/ru/betterend/item/EnchantedItem.java similarity index 61% rename from src/main/java/ru/betterend/item/EnchantedPetalItem.java rename to src/main/java/ru/betterend/item/EnchantedItem.java index 9fd42565..d210c855 100644 --- a/src/main/java/ru/betterend/item/EnchantedPetalItem.java +++ b/src/main/java/ru/betterend/item/EnchantedItem.java @@ -1,26 +1,32 @@ -package ru.betterend.item; - -import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Rarity; -import ru.bclib.client.models.ModelsHelper; -import ru.bclib.items.ModelProviderItem; -import ru.betterend.BetterEnd; -import ru.betterend.registry.EndItems; - -public class EnchantedPetalItem extends ModelProviderItem { - public EnchantedPetalItem() { - super(EndItems.makeEndItemSettings().rarity(Rarity.RARE).stacksTo(16)); - } - - @Override - public boolean isFoil(ItemStack stack) { - return true; - } - - @Override - public BlockModel getItemModel(ResourceLocation resourceLocation) { - return ModelsHelper.createItemModel(BetterEnd.makeID("hydralux_petal")); - } -} +package ru.betterend.item; + +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Rarity; +import ru.bclib.client.models.ModelsHelper; +import ru.bclib.items.ModelProviderItem; +import ru.betterend.registry.EndItems; + +public class EnchantedItem extends ModelProviderItem { + + private final Item source; + + public EnchantedItem(Item source) { + super(EndItems.makeEndItemSettings().rarity(Rarity.RARE).stacksTo(16)); + this.source = source; + } + + @Override + public boolean isFoil(ItemStack stack) { + return true; + } + + @Override + public BlockModel getItemModel(ResourceLocation resourceLocation) { + ResourceLocation sourceId = Registry.ITEM.getKey(source); + return ModelsHelper.createItemModel(sourceId); + } +} diff --git a/src/main/java/ru/betterend/item/model/CrystaliteArmorProvider.java b/src/main/java/ru/betterend/item/model/CrystaliteArmorProvider.java index 28e02a03..b631ad7e 100644 --- a/src/main/java/ru/betterend/item/model/CrystaliteArmorProvider.java +++ b/src/main/java/ru/betterend/item/model/CrystaliteArmorProvider.java @@ -16,6 +16,7 @@ import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import ru.betterend.item.CrystaliteArmor; import ru.betterend.registry.EndItems; @Environment(EnvType.CLIENT) @@ -67,13 +68,15 @@ public class CrystaliteArmorProvider implements ModelProvider, TextureProvider { } public Iterable getRenderedItems() { - return Lists.newArrayList(EndItems.CRYSTALITE_HELMET, EndItems.CRYSTALITE_CHESTPLATE, EndItems.CRYSTALITE_LEGGINGS, EndItems.CRYSTALITE_BOOTS); + return Lists.newArrayList( + EndItems.CRYSTALITE_HELMET, + EndItems.CRYSTALITE_CHESTPLATE, + EndItems.CRYSTALITE_ELYTRA, + EndItems.CRYSTALITE_LEGGINGS, + EndItems.CRYSTALITE_BOOTS); } private boolean isStackValid(ItemStack stack) { - return stack.getItem() == EndItems.CRYSTALITE_HELMET || - stack.getItem() == EndItems.CRYSTALITE_CHESTPLATE || - stack.getItem() == EndItems.CRYSTALITE_LEGGINGS || - stack.getItem() == EndItems.CRYSTALITE_BOOTS; + return stack.getItem() instanceof CrystaliteArmor; } } diff --git a/src/main/java/ru/betterend/item/model/CrystaliteChestplateModel.java b/src/main/java/ru/betterend/item/model/CrystaliteChestplateModel.java index d0dd72f0..1942f9d6 100644 --- a/src/main/java/ru/betterend/item/model/CrystaliteChestplateModel.java +++ b/src/main/java/ru/betterend/item/model/CrystaliteChestplateModel.java @@ -15,7 +15,7 @@ public class CrystaliteChestplateModel extends HumanoidModel { public ModelPart leftShoulder; public ModelPart rightShoulder; - private boolean thinArms; + private final boolean thinArms; public CrystaliteChestplateModel(float scale, boolean thinArms) { super(RenderType::entityTranslucent, scale, 0.0F, 64, 48); diff --git a/src/main/java/ru/betterend/mixin/client/LocalPlayerMixin.java b/src/main/java/ru/betterend/mixin/client/LocalPlayerMixin.java index a72def2a..ea597606 100644 --- a/src/main/java/ru/betterend/mixin/client/LocalPlayerMixin.java +++ b/src/main/java/ru/betterend/mixin/client/LocalPlayerMixin.java @@ -18,6 +18,7 @@ import net.minecraft.network.protocol.game.ServerboundPlayerCommandPacket; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.item.ElytraItem; import net.minecraft.world.item.ItemStack; +import ru.betterend.interfaces.FallFlyingItem; import ru.betterend.item.ArmoredElytra; @Mixin(LocalPlayer.class) @@ -36,7 +37,7 @@ public abstract class LocalPlayerMixin extends AbstractClientPlayer { shift = Shift.AFTER)) public void be_aiStep(CallbackInfo info) { ItemStack itemStack = getItemBySlot(EquipmentSlot.CHEST); - if (itemStack.getItem() instanceof ArmoredElytra && ElytraItem.isFlyEnabled(itemStack) && tryToStartFallFlying()) { + if (itemStack.getItem() instanceof FallFlyingItem && ElytraItem.isFlyEnabled(itemStack) && tryToStartFallFlying()) { connection.send(new ServerboundPlayerCommandPacket(LocalPlayer.class.cast(this), ServerboundPlayerCommandPacket.Action.START_FALL_FLYING)); } } diff --git a/src/main/java/ru/betterend/mixin/common/LivingEntityMixin.java b/src/main/java/ru/betterend/mixin/common/LivingEntityMixin.java index d89d4f7f..f969a8c1 100644 --- a/src/main/java/ru/betterend/mixin/common/LivingEntityMixin.java +++ b/src/main/java/ru/betterend/mixin/common/LivingEntityMixin.java @@ -33,7 +33,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; import ru.betterend.interfaces.MobEffectApplier; -import ru.betterend.item.ArmoredElytra; +import ru.betterend.interfaces.FallFlyingItem; import ru.betterend.item.CrystaliteArmor; import ru.betterend.registry.EndAttributes; @@ -111,7 +111,7 @@ public abstract class LivingEntityMixin extends Entity { @Inject(method = "updateFallFlying", at = @At("HEAD"), cancellable = true) private void be_updateFallFlying(CallbackInfo info) { ItemStack itemStack = getItemBySlot(EquipmentSlot.CHEST); - if (!level.isClientSide && itemStack.getItem() instanceof ArmoredElytra) { + if (!level.isClientSide && itemStack.getItem() instanceof FallFlyingItem) { boolean isFlying = getSharedFlag(7); if (isFlying && !onGround && !isPassenger() && !hasEffect(MobEffects.LEVITATION)) { if (ElytraItem.isFlyEnabled(itemStack)) { @@ -136,7 +136,7 @@ public abstract class LivingEntityMixin extends Entity { shift = Shift.AFTER), cancellable = true) public void be_travel(Vec3 vec3, CallbackInfo info) { ItemStack itemStack = getItemBySlot(EquipmentSlot.CHEST); - if (isFallFlying() && itemStack.getItem() instanceof ArmoredElytra) { + if (isFallFlying() && itemStack.getItem() instanceof FallFlyingItem) { Vec3 moveDelta = getDeltaMovement(); if (moveDelta.y > -0.5D) { fallDistance = 1.0F; @@ -166,7 +166,7 @@ public abstract class LivingEntityMixin extends Entity { moveDelta = moveDelta.add((lookAngle.x / k * l - moveDelta.x) * 0.1D, 0.0D, (lookAngle.z / k * l - moveDelta.z) * 0.1D); } moveDelta = moveDelta.multiply(0.9900000095367432D, 0.9800000190734863D, 0.9900000095367432D); - double movementFactor = ((ArmoredElytra) itemStack.getItem()).getMovementFactor(); + double movementFactor = ((FallFlyingItem) itemStack.getItem()).getMovementFactor(); moveDelta = moveDelta.multiply(movementFactor, 1.0D, movementFactor); setDeltaMovement(moveDelta); move(MoverType.SELF, moveDelta); diff --git a/src/main/java/ru/betterend/mixin/common/PlayerMixin.java b/src/main/java/ru/betterend/mixin/common/PlayerMixin.java index bfd931d5..3512ec0f 100644 --- a/src/main/java/ru/betterend/mixin/common/PlayerMixin.java +++ b/src/main/java/ru/betterend/mixin/common/PlayerMixin.java @@ -24,6 +24,7 @@ import ru.bclib.util.BlocksHelper; import ru.bclib.util.MHelper; import ru.betterend.blocks.BlockProperties; import ru.betterend.blocks.BlockProperties.TripleShape; +import ru.betterend.interfaces.FallFlyingItem; import ru.betterend.item.ArmoredElytra; import ru.betterend.registry.EndBlocks; @@ -49,7 +50,7 @@ public abstract class PlayerMixin extends LivingEntity { public void be_tryToStartFlying(CallbackInfoReturnable info) { if (!onGround && !isFallFlying() && !isInWater() && !hasEffect(MobEffects.LEVITATION)) { ItemStack itemStack = getItemBySlot(EquipmentSlot.CHEST); - if (itemStack.getItem() instanceof ArmoredElytra && ElytraItem.isFlyEnabled(itemStack)) { + if (itemStack.getItem() instanceof FallFlyingItem && ElytraItem.isFlyEnabled(itemStack)) { setSharedFlag(7, true); info.setReturnValue(true); } diff --git a/src/main/java/ru/betterend/recipe/InfusionRecipes.java b/src/main/java/ru/betterend/recipe/InfusionRecipes.java index 64569b97..68da8b7c 100644 --- a/src/main/java/ru/betterend/recipe/InfusionRecipes.java +++ b/src/main/java/ru/betterend/recipe/InfusionRecipes.java @@ -82,6 +82,15 @@ public class InfusionRecipes { .addCatalyst(6, EndItems.CRYSTAL_SHARDS) .setTime(75) .build(); + InfusionRecipe.Builder.create("enchanted_membrane") + .setInput(Items.PHANTOM_MEMBRANE) + .setOutput(EndItems.ENCHANTED_MEMBRANE) + .addCatalyst(0, EndItems.CRYSTAL_SHARDS) + .addCatalyst(2, EndItems.CRYSTAL_SHARDS) + .addCatalyst(4, EndItems.CRYSTAL_SHARDS) + .addCatalyst(6, EndItems.CRYSTAL_SHARDS) + .setTime(75) + .build(); InfusionRecipe.Builder.create("protection_book") .setInput(Items.BOOK) diff --git a/src/main/java/ru/betterend/registry/EndItems.java b/src/main/java/ru/betterend/registry/EndItems.java index ff63ada4..3c29ae50 100644 --- a/src/main/java/ru/betterend/registry/EndItems.java +++ b/src/main/java/ru/betterend/registry/EndItems.java @@ -28,14 +28,7 @@ import ru.bclib.items.tool.BaseSwordItem; import ru.bclib.registry.ItemsRegistry; import ru.betterend.BetterEnd; import ru.betterend.config.Configs; -import ru.betterend.item.ArmoredElytra; -import ru.betterend.item.CrystaliteBoots; -import ru.betterend.item.CrystaliteChestplate; -import ru.betterend.item.CrystaliteHelmet; -import ru.betterend.item.CrystaliteLeggings; -import ru.betterend.item.EnchantedPetalItem; -import ru.betterend.item.EndBucketItem; -import ru.betterend.item.EternalCrystalItem; +import ru.betterend.item.*; import ru.betterend.item.material.EndArmorMaterial; import ru.betterend.item.material.EndToolMaterial; import ru.betterend.item.tool.EndHammerItem; @@ -58,13 +51,14 @@ public class EndItems extends ItemsRegistry { public final static Item HYDRALUX_PETAL = registerEndItem("hydralux_petal"); public final static Item GELATINE = registerEndItem("gelatine"); public static final Item ETERNAL_CRYSTAL = registerEndItem("eternal_crystal", new EternalCrystalItem()); - public final static Item ENCHANTED_PETAL = registerEndItem("enchanted_petal", new EnchantedPetalItem()); + public final static Item ENCHANTED_PETAL = registerEndItem("enchanted_petal", new EnchantedItem(HYDRALUX_PETAL)); public final static Item LEATHER_STRIPE = registerEndItem("leather_stripe"); public final static Item LEATHER_WRAPPED_STICK = registerEndItem("leather_wrapped_stick"); public final static Item SILK_FIBER = registerEndItem("silk_fiber"); public final static Item LUMECORN_ROD = registerEndItem("lumecorn_rod"); public final static Item SILK_MOTH_MATRIX = registerEndItem("silk_moth_matrix"); - + public final static Item ENCHANTED_MEMBRANE = registerEndItem("enchanted_membrane", new EnchantedItem(Items.PHANTOM_MEMBRANE)); + // Music Discs public final static Item MUSIC_DISC_STRANGE_AND_ALIEN = registerEndDisc("music_disc_strange_and_alien", 0, EndSounds.RECORD_STRANGE_AND_ALIEN); public final static Item MUSIC_DISC_GRASPING_AT_STARS = registerEndDisc("music_disc_grasping_at_stars", 0, EndSounds.RECORD_GRASPING_AT_STARS); @@ -81,6 +75,7 @@ public class EndItems extends ItemsRegistry { public static final Item CRYSTALITE_LEGGINGS = registerEndItem("crystalite_leggings", new CrystaliteLeggings()); public static final Item CRYSTALITE_BOOTS = registerEndItem("crystalite_boots", new CrystaliteBoots()); public static final Item ARMORED_ELYTRA = registerEndItem("elytra_armored", new ArmoredElytra("elytra_armored", EndArmorMaterial.AETERNIUM, Items.PHANTOM_MEMBRANE, 900, 0.96D, true)); + public static final Item CRYSTALITE_ELYTRA = registerEndItem("elytra_crystalite", new CrystaliteElytra(650, 0.98D)); // Tools // public static final TieredItem AETERNIUM_SHOVEL = registerEndTool("aeternium_shovel", new BaseShovelItem(EndToolMaterial.AETERNIUM, 1.5F, -3.0F, makeEndItemSettings().fireResistant())); diff --git a/src/main/resources/assets/betterend/lang/en_us.json b/src/main/resources/assets/betterend/lang/en_us.json index 7c4b8d02..32e011b0 100644 --- a/src/main/resources/assets/betterend/lang/en_us.json +++ b/src/main/resources/assets/betterend/lang/en_us.json @@ -76,6 +76,8 @@ "item.betterend.leather_stripe": "Leather Stripe", "item.betterend.leather_wrapped_stick": "Leather Wrapped Stick", "item.betterend.elytra_armored": "Armored Elytra", + "item.betterend.elytra_crystalite": "Elytra Crystalite", + "item.betterend.enchanted_membrane": "Enchanted Membrane", "effect.betterend.end_veil": "End Veil", "enchantment.betterend.end_veil": "End Veil", diff --git a/src/main/resources/assets/betterend/lang/ru_ru.json b/src/main/resources/assets/betterend/lang/ru_ru.json index c45162ae..1db5508b 100644 --- a/src/main/resources/assets/betterend/lang/ru_ru.json +++ b/src/main/resources/assets/betterend/lang/ru_ru.json @@ -75,7 +75,9 @@ "item.betterend.aeternium_sword_handle": "Рукоятка этериевого меча", "item.betterend.leather_stripe": "Полоска кожи", "item.betterend.leather_wrapped_stick": "Обернутая кожей палка", - "item.betterend.elytra_armored": "Армированная Элитра", + "item.betterend.elytra_armored": "Армированная элитра", + "item.betterend.elytra_crystalite": "Кристалитовая элитра", + "item.betterend.enchanted_membrane": "Зачарованная мембрана", "effect.betterend.end_veil": "Вуаль Края", "enchantment.betterend.end_veil": "Вуаль Края", diff --git a/src/main/resources/assets/betterend/textures/entity/elytra_crystalite.png b/src/main/resources/assets/betterend/textures/entity/elytra_crystalite.png new file mode 100644 index 00000000..6f970955 Binary files /dev/null and b/src/main/resources/assets/betterend/textures/entity/elytra_crystalite.png differ diff --git a/src/main/resources/assets/betterend/textures/item/elytra_crystalite.png b/src/main/resources/assets/betterend/textures/item/elytra_crystalite.png new file mode 100644 index 00000000..01f80018 Binary files /dev/null and b/src/main/resources/assets/betterend/textures/item/elytra_crystalite.png differ diff --git a/src/main/resources/assets/betterend/textures/item/elytra_crystalite_broken.png b/src/main/resources/assets/betterend/textures/item/elytra_crystalite_broken.png new file mode 100644 index 00000000..d568e329 Binary files /dev/null and b/src/main/resources/assets/betterend/textures/item/elytra_crystalite_broken.png differ diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index c4d43434..ad8086dc 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -46,7 +46,7 @@ "fabricloader": ">=0.11.0", "fabric": ">=0.32.0", "minecraft": ">=1.16.4", - "bclib": ">=0.1.15" + "bclib": ">=0.1.26" }, "suggests": { "byg": ">=1.1.3",