From de2e5c3d1da35952d945c758fe73e31f222644e3 Mon Sep 17 00:00:00 2001 From: Basique Evangelist Date: Thu, 2 Jun 2022 20:57:13 +0300 Subject: [PATCH] AFFINITEA --- .../impl/AffineInfuserBlockEntity.java | 7 ++++ .../AffinityBlockStateDefinitionProvider.java | 3 +- .../affinity/item/AffiniteaItem.java | 30 ++++++++++++++++++ .../affinity/object/AffinityItems.java | 1 + .../object/AffinityStatusEffects.java | 2 ++ .../statuseffects/BanishedStatusEffect.java | 13 +++++--- .../resources/assets/affinity/lang/en_us.json | 2 ++ .../affinity/models/item/affinitea.json | 6 ++++ .../affinity/textures/item/affinitea.png | Bin 0 -> 7571 bytes .../affinity/textures/mob_effect/affine.png | Bin 0 -> 7571 bytes 10 files changed, 58 insertions(+), 6 deletions(-) create mode 100644 src/main/java/io/wispforest/affinity/item/AffiniteaItem.java create mode 100644 src/main/resources/assets/affinity/models/item/affinitea.json create mode 100644 src/main/resources/assets/affinity/textures/item/affinitea.png create mode 100644 src/main/resources/assets/affinity/textures/mob_effect/affine.png diff --git a/src/main/java/io/wispforest/affinity/blockentity/impl/AffineInfuserBlockEntity.java b/src/main/java/io/wispforest/affinity/blockentity/impl/AffineInfuserBlockEntity.java index 592c4a5c..b5c71152 100644 --- a/src/main/java/io/wispforest/affinity/blockentity/impl/AffineInfuserBlockEntity.java +++ b/src/main/java/io/wispforest/affinity/blockentity/impl/AffineInfuserBlockEntity.java @@ -4,10 +4,12 @@ import io.wispforest.affinity.blockentity.template.TickedBlockEntity; import io.wispforest.affinity.object.AffinityBlocks; import io.wispforest.affinity.object.AffinityEnchantments; +import io.wispforest.affinity.object.AffinityStatusEffects; import net.minecraft.block.BlockState; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.ItemEntity; +import net.minecraft.entity.LivingEntity; import net.minecraft.entity.decoration.ItemFrameEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; @@ -38,6 +40,11 @@ public void tickServer() { for (var entity : this.world.getNonSpectatingEntities(Entity.class, searchArea)) { if (currentRepairCost.getValue() > this.flux() - REPAIR_COST_PER_ITEM) break; + if (entity instanceof LivingEntity living && living.hasStatusEffect(AffinityStatusEffects.AFFINE) && living.getMaxHealth() > living.getHealth()) { + ((LivingEntity) entity).heal(1); + currentRepairCost.add(REPAIR_COST_PER_ITEM); + } + if (entity instanceof PlayerEntity) { entity.getItemsEquipped().forEach(AffineInfuserBlockEntity::repairIfEnchanted); } else if (entity instanceof ItemFrameEntity frame) { diff --git a/src/main/java/io/wispforest/affinity/datagen/AffinityBlockStateDefinitionProvider.java b/src/main/java/io/wispforest/affinity/datagen/AffinityBlockStateDefinitionProvider.java index d1240858..f6a6fea2 100644 --- a/src/main/java/io/wispforest/affinity/datagen/AffinityBlockStateDefinitionProvider.java +++ b/src/main/java/io/wispforest/affinity/datagen/AffinityBlockStateDefinitionProvider.java @@ -51,7 +51,8 @@ public void generateItemModels(ItemModelGenerator generator) { generated(generator, AZALEA_FLOWERS, AETHUM_FLUX_BOTTLE, AZALEA_BOAT, MILDLY_ATTUNED_AMETHYST_SHARD, FAIRLY_ATTUNED_AMETHYST_SHARD, GREATLY_ATTUNED_AMETHYST_SHARD, STONE_SOCLE_ORNAMENT, PRISMARINE_SOCLE_ORNAMENT, PURPUR_SOCLE_ORNAMENT, - AETHUM_MAP_PROTOTYPE, REALIZED_AETHUM_MAP, ANTHRACITE_POWDER, RESPLENDENT_GEM, ECHO_SHARD); + AETHUM_MAP_PROTOTYPE, REALIZED_AETHUM_MAP, ANTHRACITE_POWDER, RESPLENDENT_GEM, ECHO_SHARD, + AFFINITEA); handheld(generator, COLLECTION_STAFF, WAND_OF_INQUIRY); diff --git a/src/main/java/io/wispforest/affinity/item/AffiniteaItem.java b/src/main/java/io/wispforest/affinity/item/AffiniteaItem.java new file mode 100644 index 00000000..415e0a0a --- /dev/null +++ b/src/main/java/io/wispforest/affinity/item/AffiniteaItem.java @@ -0,0 +1,30 @@ +package io.wispforest.affinity.item; + +import io.wispforest.affinity.object.AffinityItems; +import io.wispforest.affinity.object.AffinityStatusEffects; +import net.minecraft.entity.effect.StatusEffectInstance; +import net.minecraft.item.FoodComponent; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.sound.SoundEvent; +import net.minecraft.util.UseAction; + +public class AffiniteaItem extends Item { + public AffiniteaItem() { + super(AffinityItems.settings(0) + .food(new FoodComponent.Builder() + .statusEffect(new StatusEffectInstance(AffinityStatusEffects.AFFINE, 300 * 20), 1.0F) + .alwaysEdible() + .build())); + } + + @Override + public UseAction getUseAction(ItemStack stack) { + return UseAction.DRINK; + } + + @Override + public SoundEvent getEatSound() { + return getDrinkSound(); + } +} diff --git a/src/main/java/io/wispforest/affinity/object/AffinityItems.java b/src/main/java/io/wispforest/affinity/object/AffinityItems.java index d0136455..91e5fe83 100644 --- a/src/main/java/io/wispforest/affinity/object/AffinityItems.java +++ b/src/main/java/io/wispforest/affinity/object/AffinityItems.java @@ -48,6 +48,7 @@ public class AffinityItems implements ItemRegistryContainer { public static final Item AZALEA_BOAT = new BoatItem(AffinityBlocks.AZALEA_BOAT_TYPE, settings(AffinityItemGroup.NATURE).maxCount(1)); public static final Item ECHO_SHARD = new EchoShardItem(); + public static final Item AFFINITEA = new AffiniteaItem(); public static OwoItemSettings settings(int tab) { return new OwoItemSettings().tab(tab).group(Affinity.AFFINITY_GROUP); diff --git a/src/main/java/io/wispforest/affinity/object/AffinityStatusEffects.java b/src/main/java/io/wispforest/affinity/object/AffinityStatusEffects.java index 13d2ea25..6212139d 100644 --- a/src/main/java/io/wispforest/affinity/object/AffinityStatusEffects.java +++ b/src/main/java/io/wispforest/affinity/object/AffinityStatusEffects.java @@ -25,6 +25,7 @@ public class AffinityStatusEffects { public static final StatusEffect IMPENDING_DOOM = new ImpendingDoomStatusEffect(StatusEffectCategory.HARMFUL, 0x000000); public static final StatusEffect BASTION_REGENERATION = new BastionRegeneration(StatusEffectCategory.BENEFICIAL, 0xfd5c5b); public static final StatusEffect BANISHED = new BanishedStatusEffect(StatusEffectCategory.BENEFICIAL, 0xc9b6b3); + public static final StatusEffect AFFINE = new AffinityStatusEffect(StatusEffectCategory.BENEFICIAL, 0x0000ff); public static final StatusEffect STEADFAST = new AffinityStatusEffect(StatusEffectCategory.BENEFICIAL, 0x222222) .addAttributeModifier( @@ -49,6 +50,7 @@ public static void register() { Registry.register(Registry.STATUS_EFFECT, Affinity.id("dripping"), DRIPPING); Registry.register(Registry.STATUS_EFFECT, Affinity.id("bastion_regeneration"), BASTION_REGENERATION); + Registry.register(Registry.STATUS_EFFECT, Affinity.id("affine"), AFFINE); Registry.register(Registry.POTION, Affinity.id("dubious"), PotionMixture.DUBIOUS_POTION); Registry.register(Registry.RECIPE_SERIALIZER, Affinity.id("crafting_special_potiondye"), GlowingPotionDyeRecipe.SERIALIZER); diff --git a/src/main/java/io/wispforest/affinity/statuseffects/BanishedStatusEffect.java b/src/main/java/io/wispforest/affinity/statuseffects/BanishedStatusEffect.java index 8f802b7d..8f6bf52d 100644 --- a/src/main/java/io/wispforest/affinity/statuseffects/BanishedStatusEffect.java +++ b/src/main/java/io/wispforest/affinity/statuseffects/BanishedStatusEffect.java @@ -7,7 +7,9 @@ import io.wispforest.affinity.misc.potion.PotionMixture; import io.wispforest.affinity.object.AffinityParticleSystems; import io.wispforest.affinity.object.AffinityStatusEffects; +import net.fabricmc.api.EnvType; import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback; +import net.fabricmc.loader.api.FabricLoader; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.attribute.AttributeContainer; import net.minecraft.entity.effect.StatusEffectCategory; @@ -27,12 +29,13 @@ public BanishedStatusEffect(StatusEffectCategory category, int color) { } static { - ItemTooltipCallback.EVENT.register((stack, context, lines) -> { - if (PotionUtil.getPotionEffects(stack).stream().noneMatch(x -> x.getEffectType() == AffinityStatusEffects.BANISHED)) return; - if (!stack.has(PotionMixture.EXTRA_DATA)) return; + if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) + ItemTooltipCallback.EVENT.register((stack, context, lines) -> { + if (PotionUtil.getPotionEffects(stack).stream().noneMatch(x -> x.getEffectType() == AffinityStatusEffects.BANISHED)) return; + if (!stack.has(PotionMixture.EXTRA_DATA)) return; - EchoShardItem.formatLocationTooltip(stack.get(PotionMixture.EXTRA_DATA), lines); - }); + EchoShardItem.formatLocationTooltip(stack.get(PotionMixture.EXTRA_DATA), lines); + }); } @Override diff --git a/src/main/resources/assets/affinity/lang/en_us.json b/src/main/resources/assets/affinity/lang/en_us.json index 961334a6..82dd9b89 100644 --- a/src/main/resources/assets/affinity/lang/en_us.json +++ b/src/main/resources/assets/affinity/lang/en_us.json @@ -69,6 +69,7 @@ "item.affinity.aethum_flux_bottle": "Bottle of Aethum Flux", "item.affinity.resplendent_gem": "Resplendent Gem", "item.affinity.echo_shard": "Echo Shard", + "item.affinity.affinitea": "Affinitea", "text.affinity.attuned_shard_range": "Range: ", "text.affinity.attuned_shard_range.value": "%d blocks", @@ -120,6 +121,7 @@ "effect.affinity.dripping": "Dripping", "effect.affinity.bastion_regeneration": "Bastion", + "effect.affinity.affine": "Affine", "effect.affinity.life_leech": "Life Leech", "item.minecraft.potion.effect.life_leech": "Potion of Life Leech", diff --git a/src/main/resources/assets/affinity/models/item/affinitea.json b/src/main/resources/assets/affinity/models/item/affinitea.json new file mode 100644 index 00000000..80bba3fd --- /dev/null +++ b/src/main/resources/assets/affinity/models/item/affinitea.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "affinity:item/affinitea" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/affinity/textures/item/affinitea.png b/src/main/resources/assets/affinity/textures/item/affinitea.png new file mode 100644 index 0000000000000000000000000000000000000000..4ff9da9bfc69dc8f1e9eca2340eb7e793d44e411 GIT binary patch literal 7571 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 p)OPIYkjIWUUd_05DyMja<9mOtaM|)chX34fNeL