Crystalite Elytra
This commit is contained in:
parent
1ad72cbe88
commit
a6895004c7
22 changed files with 160 additions and 100 deletions
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<T extends LivingEntity, M extends EntityModel<T>> extends ElytraLayer<T, M> {
|
||||
|
@ -28,8 +28,8 @@ public class ArmoredElytraLayer<T extends LivingEntity, M extends EntityModel<T>
|
|||
|
||||
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) {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
package ru.betterend.interfaces;
|
||||
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
|
||||
public interface FallFlyingItem {
|
||||
ResourceLocation getModelTexture();
|
||||
double getMovementFactor();
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
68
src/main/java/ru/betterend/item/CrystaliteElytra.java
Normal file
68
src/main/java/ru/betterend/item/CrystaliteElytra.java
Normal file
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -1,17 +1,22 @@
|
|||
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.BetterEnd;
|
||||
import ru.betterend.registry.EndItems;
|
||||
|
||||
public class EnchantedPetalItem extends ModelProviderItem {
|
||||
public EnchantedPetalItem() {
|
||||
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
|
||||
|
@ -21,6 +26,7 @@ public class EnchantedPetalItem extends ModelProviderItem {
|
|||
|
||||
@Override
|
||||
public BlockModel getItemModel(ResourceLocation resourceLocation) {
|
||||
return ModelsHelper.createItemModel(BetterEnd.makeID("hydralux_petal"));
|
||||
ResourceLocation sourceId = Registry.ITEM.getKey(source);
|
||||
return ModelsHelper.createItemModel(sourceId);
|
||||
}
|
||||
}
|
|
@ -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<Item> 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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ public class CrystaliteChestplateModel extends HumanoidModel<LivingEntity> {
|
|||
|
||||
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);
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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<Boolean> 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);
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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,12 +51,13 @@ 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);
|
||||
|
@ -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()));
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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": "Вуаль Края",
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 751 B |
Binary file not shown.
After Width: | Height: | Size: 594 B |
Binary file not shown.
After Width: | Height: | Size: 591 B |
|
@ -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",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue