From 62aac0f71154ecd947453589870a6e48601d33f6 Mon Sep 17 00:00:00 2001 From: Sollace Date: Fri, 2 Jun 2023 20:20:30 +0100 Subject: [PATCH] 1.19.3 -> 1.19.4 --- gradle.properties | 24 +++---- .../com/minelittlepony/unicopia/UTags.java | 7 ++ .../unicopia/ability/AbilityDispatcher.java | 4 +- .../unicopia/ability/BatEeeeAbility.java | 6 +- .../ability/ChangelingFeedAbility.java | 22 +++---- .../ability/EarthPonyKickAbility.java | 6 +- .../ability/EarthPonyStompAbility.java | 11 ++-- .../unicopia/ability/magic/Caster.java | 4 +- .../magic/spell/RainboomAbilitySpell.java | 4 +- .../spell/crafting/SpellCraftingRecipe.java | 7 +- .../crafting/SpellDuplicatingRecipe.java | 5 +- .../spell/crafting/SpellEnhancingRecipe.java | 5 +- .../crafting/SpellShapedCraftingRecipe.java | 9 +-- .../spell/effect/AreaProtectionSpell.java | 2 +- .../magic/spell/effect/AttractiveSpell.java | 4 +- .../magic/spell/effect/DarkVortexSpell.java | 7 +- .../magic/spell/effect/DispellEvilSpell.java | 3 +- .../magic/spell/effect/DisplacementSpell.java | 10 +-- .../ability/magic/spell/effect/FireSpell.java | 10 ++- .../magic/spell/effect/HydrophobicSpell.java | 2 +- .../ability/magic/spell/effect/IceSpell.java | 4 +- .../magic/spell/effect/InfernoSpell.java | 16 +---- .../magic/spell/effect/MindSwapSpell.java | 5 +- .../magic/spell/effect/NecromancySpell.java | 6 +- .../magic/spell/effect/SiphoningSpell.java | 8 +-- .../block/BlockConstructionUtils.java | 9 ++- .../unicopia/block/UBlocks.java | 5 +- .../unicopia/block/WeatherVaneBlock.java | 2 +- .../unicopia/block/ZapBlock.java | 3 +- .../unicopia/client/DiscoveryToast.java | 4 +- .../unicopia/client/KeyBindingsHandler.java | 4 +- .../unicopia/client/URenderers.java | 14 ++-- .../client/gui/DismissSpellScreen.java | 11 +++- .../unicopia/client/gui/DrawableUtil.java | 9 +-- .../unicopia/client/gui/GradientUtil.java | 4 -- .../client/gui/ItemTraitsTooltipRenderer.java | 8 +-- .../unicopia/client/gui/TribeButton.java | 2 +- .../unicopia/client/gui/UHud.java | 10 +-- .../gui/spellbook/EquippedSpellSlot.java | 6 +- .../client/gui/spellbook/IngredientTree.java | 14 ++-- .../SpellbookCraftingPageContent.java | 4 +- .../client/gui/spellbook/SpellbookScreen.java | 6 +- .../SpellbookTraitDexPageContent.java | 10 +-- .../client/particle/GroundPoundParticle.java | 2 +- .../FloatingArtefactEntityRenderer.java | 6 +- .../client/render/PolearmRenderer.java | 6 +- .../client/render/shader/ViewportShader.java | 1 - .../unicopia/compat/emi/Main.java | 5 +- .../container/SpellbookScreenHandler.java | 8 +-- .../unicopia/entity/AirBalloonEntity.java | 4 +- .../unicopia/entity/ButterflyEntity.java | 2 +- .../unicopia/entity/CastSpellEntity.java | 2 +- .../unicopia/entity/Creature.java | 3 +- .../unicopia/entity/EntityPhysics.java | 3 +- .../unicopia/entity/FairyEntity.java | 2 +- .../entity/FloatingArtefactEntity.java | 10 ++- .../unicopia/entity/Living.java | 10 +-- .../unicopia/entity/SpellbookEntity.java | 2 +- .../unicopia/entity/UEntities.java | 3 +- .../entity/behaviour/EntityBehaviour.java | 7 +- .../behaviour/WaterCreatureBehaviour.java | 3 +- .../entity/damage/UDamageSources.java | 38 +++++++++++ .../unicopia/entity/damage/UDamageTypes.java | 34 ++++++++++ .../effect/CorruptInfluenceStatusEffect.java | 5 +- .../effect/FoodPoisoningStatusEffect.java | 5 +- .../entity/effect/RaceChangeStatusEffect.java | 5 +- .../effect/SunBlindnessStatusEffect.java | 5 +- .../entity/player/ManaConsumptionUtil.java | 5 +- .../unicopia/entity/player/PlayerPhysics.java | 17 +++-- .../unicopia/entity/player/Pony.java | 14 ++-- .../player/dummy/DummyClientPlayerEntity.java | 3 +- .../player/dummy/DummyPlayerEntity.java | 3 +- .../unicopia/item/AlicornAmuletItem.java | 9 +-- .../unicopia/item/AmuletItem.java | 2 +- .../unicopia/item/BellItem.java | 4 +- .../unicopia/item/CrystalHeartItem.java | 4 +- .../unicopia/item/EnchantedStaffItem.java | 3 +- .../unicopia/item/FilledJarItem.java | 3 +- .../unicopia/item/FriendshipBraceletItem.java | 4 +- .../unicopia/item/GlassesItem.java | 2 +- .../unicopia/item/GlowingRecipe.java | 3 +- .../unicopia/item/JarInsertRecipe.java | 3 +- .../unicopia/item/WearableItem.java | 13 ++-- .../unicopia/item/ZapAppleItem.java | 7 +- .../item/group/ItemGroupRegistry.java | 4 +- .../unicopia/mixin/MixinDamageSource.java | 30 ++++----- .../unicopia/mixin/MixinServerWorld.java | 2 +- .../client/MixinArmorFeatureRenderer.java | 3 +- .../mixin/client/MixinTranslationStorage.java | 4 +- .../projectile/MagicProjectileEntity.java | 5 +- .../server/world/FernFoliagePlacer.java | 12 ++-- .../unicopia/server/world/Tree.java | 2 +- .../trinkets/TrinketsDelegateImpl.java | 7 +- .../unicopia/trinkets/UnicopiaTrinket.java | 9 ++- .../unicopia/util/LimbAnimationUtil.java | 23 +++++++ .../unicopia/util/MagicalDamageSource.java | 66 ++++++------------- .../unicopia/util/shape/Shape.java | 4 +- .../resources/assets/unicopia/lang/en_us.json | 25 +++---- .../damage_types/avoids_guardian_thorns.json | 15 +++++ .../tags/damage_types/bypasses_armor.json | 18 +++++ .../bypasses_invulnerability.json | 6 ++ .../tags/damage_types/bypasses_shield.json | 12 ++++ .../minecraft/tags/damage_types/is_fire.json | 8 +++ .../tags/damage_types/is_lightning.json | 6 ++ .../tags/damage_types/witch_resistant_to.json | 13 ++++ .../tags/damage_types/breaks_sunglasses.json | 7 ++ 106 files changed, 516 insertions(+), 351 deletions(-) create mode 100644 src/main/java/com/minelittlepony/unicopia/entity/damage/UDamageSources.java create mode 100644 src/main/java/com/minelittlepony/unicopia/entity/damage/UDamageTypes.java create mode 100644 src/main/java/com/minelittlepony/unicopia/util/LimbAnimationUtil.java create mode 100644 src/main/resources/data/minecraft/tags/damage_types/avoids_guardian_thorns.json create mode 100644 src/main/resources/data/minecraft/tags/damage_types/bypasses_armor.json create mode 100644 src/main/resources/data/minecraft/tags/damage_types/bypasses_invulnerability.json create mode 100644 src/main/resources/data/minecraft/tags/damage_types/bypasses_shield.json create mode 100644 src/main/resources/data/minecraft/tags/damage_types/is_fire.json create mode 100644 src/main/resources/data/minecraft/tags/damage_types/is_lightning.json create mode 100644 src/main/resources/data/minecraft/tags/damage_types/witch_resistant_to.json create mode 100644 src/main/resources/data/unicopia/tags/damage_types/breaks_sunglasses.json diff --git a/gradle.properties b/gradle.properties index d58b1b4b..e60405fa 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,10 +3,10 @@ org.gradle.daemon=false # Fabric Properties # check these on https://fabricmc.net/develop - minecraft_version=1.19.3 - yarn_mappings=1.19.3+build.2 - loader_version=0.14.11 - fabric_version=0.69.1+1.19.3 + minecraft_version=1.19.4 + yarn_mappings=1.19.4+build.1 + loader_version=0.14.17 + fabric_version=0.76.0+1.19.4 # Mod Properties group=com.minelittlepony @@ -15,19 +15,19 @@ org.gradle.daemon=false description=Magical Abilities for Mine Little Pony! # Publishing - minecraft_version_range=>=1.19.3-pre1 + minecraft_version_range=>=1.19.4 modrinth_loader_type=fabric modrinth_project_id= # Dependencies fabwork_version=1.1.9 - modmenu_version=5.0.0-alpha.3 - minelp_version=4.8.7+lts.1.19.3 - kirin_version=1.13.2 - reach_attributes_version=2.3.1 - trinkets_version=3.5.0 - terraformer_api_version=5.0.0 + modmenu_version=6.1.0-rc.4 + minelp_version=4.8.7 + kirin_version=1.14.0 + reach_attributes_version=2.3.2 + trinkets_version=3.6.0 + terraformer_api_version=6.1.0 # TMI Testing tmi_type=emi - emi_version=1.0.0+1.19.3 + emi_version=1.0.0+1.19.4 diff --git a/src/main/java/com/minelittlepony/unicopia/UTags.java b/src/main/java/com/minelittlepony/unicopia/UTags.java index 1c76ab57..184383e7 100644 --- a/src/main/java/com/minelittlepony/unicopia/UTags.java +++ b/src/main/java/com/minelittlepony/unicopia/UTags.java @@ -4,6 +4,7 @@ import com.minelittlepony.unicopia.item.toxin.Toxics; import net.minecraft.block.Block; import net.minecraft.entity.EntityType; +import net.minecraft.entity.damage.DamageType; import net.minecraft.entity.effect.StatusEffect; import net.minecraft.item.Item; import net.minecraft.registry.*; @@ -39,6 +40,8 @@ public interface UTags { TagKey PINEAPPLE_EFFECTS = effect("pineapple_effects"); + TagKey BREAKS_SUNGLASSES = damage("breaks_sunglasses"); + static TagKey item(String name) { return TagKey.of(RegistryKeys.ITEM, Unicopia.id(name)); } @@ -55,6 +58,10 @@ public interface UTags { return TagKey.of(RegistryKeys.STATUS_EFFECT, Unicopia.id(name)); } + static TagKey damage(String name) { + return TagKey.of(RegistryKeys.DAMAGE_TYPE, Unicopia.id(name)); + } + static void bootstrap() { Toxics.bootstrap(); } diff --git a/src/main/java/com/minelittlepony/unicopia/ability/AbilityDispatcher.java b/src/main/java/com/minelittlepony/unicopia/ability/AbilityDispatcher.java index 2207c6de..dbd238a0 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/AbilityDispatcher.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/AbilityDispatcher.java @@ -76,7 +76,7 @@ public class AbilityDispatcher implements Tickable, NbtSerialisable { return getStat(slot).getMaxPage() > 0; } - public long getMaxPage() { + public int getMaxPage() { if (maxPage < 0 || prevRace != player.getSpecies()) { prevRace = player.getSpecies(); maxPage = 0; @@ -84,7 +84,7 @@ public class AbilityDispatcher implements Tickable, NbtSerialisable { maxPage = Math.max(maxPage, getStat(slot).getMaxPage() - 1); } } - return maxPage; + return (int)maxPage; } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/ability/BatEeeeAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/BatEeeeAbility.java index e832f273..e33e6ed3 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/BatEeeeAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/BatEeeeAbility.java @@ -9,8 +9,8 @@ import com.minelittlepony.unicopia.ability.magic.spell.effect.SpellType; import com.minelittlepony.unicopia.advancement.UCriteria; import com.minelittlepony.unicopia.client.render.PlayerPoser.Animation; import com.minelittlepony.unicopia.entity.Living; +import com.minelittlepony.unicopia.entity.damage.UDamageTypes; import com.minelittlepony.unicopia.entity.player.Pony; -import com.minelittlepony.unicopia.util.MagicalDamageSource; import com.minelittlepony.unicopia.util.VecHelper; import net.minecraft.entity.LivingEntity; @@ -82,14 +82,14 @@ public class BatEeeeAbility implements Ability { Vec3d origin = player.getOriginVector(); if (rng.nextInt(20000) == 0) { - player.asEntity().damage(MagicalDamageSource.create("eeee", player).setBreakSunglasses(), 0.1F); + player.asEntity().damage(player.damageOf(UDamageTypes.BAT_SCREECH, player), 0.1F); UCriteria.SCREECH_SELF.trigger(player.asEntity()); } int total = player.findAllEntitiesInRange(5).mapToInt(e -> { if (e instanceof LivingEntity living && !SpellType.SHIELD.isOn(e)) { boolean isEarthPony = EquinePredicates.PLAYER_EARTH.test(e); - e.damage(MagicalDamageSource.create("eeee", player).setBreakSunglasses(), isEarthPony ? 0.1F : 0.3F); + e.damage(player.damageOf(UDamageTypes.BAT_SCREECH, player), isEarthPony ? 0.1F : 0.3F); Vec3d knockVec = origin.subtract(e.getPos()); living.takeKnockback(isEarthPony ? 0.3F : 0.5F, knockVec.getX(), knockVec.getZ()); diff --git a/src/main/java/com/minelittlepony/unicopia/ability/ChangelingFeedAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/ChangelingFeedAbility.java index a3bc6583..956e1c4b 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/ChangelingFeedAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/ChangelingFeedAbility.java @@ -7,11 +7,11 @@ import org.jetbrains.annotations.Nullable; import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.ability.data.Hit; +import com.minelittlepony.unicopia.entity.damage.UDamageTypes; import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.particle.FollowingParticleEffect; import com.minelittlepony.unicopia.particle.ParticleUtils; import com.minelittlepony.unicopia.particle.UParticles; -import com.minelittlepony.unicopia.util.MagicalDamageSource; import com.minelittlepony.unicopia.util.TraceHelper; import com.minelittlepony.unicopia.util.VecHelper; @@ -112,7 +112,7 @@ public class ChangelingFeedAbility implements Ability { float healAmount = 0; for (LivingEntity i : getTargets(iplayer)) { - healAmount += drainFrom(player, i); + healAmount += drainFrom(iplayer, i); } int foodAmount = (int)Math.floor(Math.min(healAmount / 3, maximumFoodGain)); @@ -133,9 +133,9 @@ public class ChangelingFeedAbility implements Ability { } } - public float drainFrom(PlayerEntity changeling, LivingEntity living) { + public float drainFrom(Pony changeling, LivingEntity living) { - DamageSource d = MagicalDamageSource.create("feed", changeling); + DamageSource d = changeling.damageOf(UDamageTypes.LOVE_DRAINING, changeling); float damage = living.getHealth()/2; @@ -144,13 +144,13 @@ public class ChangelingFeedAbility implements Ability { } ParticleUtils.spawnParticles(UParticles.CHANGELING_MAGIC, living, 7); - ParticleUtils.spawnParticles(new FollowingParticleEffect(UParticles.HEALTH_DRAIN, changeling, 0.2F), living, 1); + ParticleUtils.spawnParticles(new FollowingParticleEffect(UParticles.HEALTH_DRAIN, changeling.asEntity(), 0.2F), living, 1); - if (changeling.hasStatusEffect(StatusEffects.NAUSEA)) { - StatusEffectInstance effect = changeling.getStatusEffect(StatusEffects.NAUSEA); - changeling.removeStatusEffect(StatusEffects.NAUSEA); + if (changeling.asEntity().hasStatusEffect(StatusEffects.NAUSEA)) { + StatusEffectInstance effect = changeling.asEntity().getStatusEffect(StatusEffects.NAUSEA); + changeling.asEntity().removeStatusEffect(StatusEffects.NAUSEA); living.addStatusEffect(effect); - } else if (changeling.getEntityWorld().random.nextInt(2300) == 0) { + } else if (changeling.asWorld().random.nextInt(2300) == 0) { living.addStatusEffect(new StatusEffectInstance(StatusEffects.WITHER, 20, 1)); } @@ -158,8 +158,8 @@ public class ChangelingFeedAbility implements Ability { damage ++; damage *= 1.6F; - if (!changeling.hasStatusEffect(StatusEffects.HEALTH_BOOST)) { - changeling.addStatusEffect(new StatusEffectInstance(StatusEffects.HEALTH_BOOST, 13000, 1)); + if (!changeling.asEntity().hasStatusEffect(StatusEffects.HEALTH_BOOST)) { + changeling.asEntity().addStatusEffect(new StatusEffectInstance(StatusEffects.HEALTH_BOOST, 13000, 1)); } } diff --git a/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyKickAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyKickAbility.java index e01a859c..3d5341f8 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyKickAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyKickAbility.java @@ -12,6 +12,7 @@ import com.minelittlepony.unicopia.ability.data.tree.TreeType; import com.minelittlepony.unicopia.client.minelittlepony.MineLPDelegate; import com.minelittlepony.unicopia.client.render.PlayerPoser.Animation; import com.minelittlepony.unicopia.entity.Living; +import com.minelittlepony.unicopia.entity.damage.UDamageTypes; import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.particle.ParticleUtils; import com.minelittlepony.unicopia.particle.UParticles; @@ -82,7 +83,8 @@ public class EarthPonyKickAbility implements Ability { for (var e : VecHelper.findInRange(player.asEntity(), w, kickLocation.vec(), 2, EntityPredicates.EXCEPT_CREATIVE_OR_SPECTATOR)) { if (e instanceof LivingEntity entity) { float calculatedStrength = 0.5F * (1 + player.getLevel().getScaled(9)); - entity.damage(MagicalDamageSource.KICK, player.asWorld().random.nextBetween(2, 10) + calculatedStrength); + + entity.damage(player.damageOf(UDamageTypes.KICK, player), player.asWorld().random.nextBetween(2, 10) + calculatedStrength); entity.takeKnockback(calculatedStrength, origin.x - entity.getX(), origin.z - entity.getZ()); Living.updateVelocity(entity); player.subtractEnergyCost(3); @@ -128,7 +130,7 @@ public class EarthPonyKickAbility implements Ability { if (MineLPDelegate.getInstance().getPlayerPonyRace(player.asEntity()).isEquine()) { kickVector = kickVector.rotateY((float)Math.PI); } - return new Pos(new BlockPos(player.getOriginVector().add(kickVector))); + return new Pos(BlockPos.ofFloored(player.getOriginVector().add(kickVector))); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyStompAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyStompAbility.java index 3370336a..1db144e3 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyStompAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyStompAbility.java @@ -6,13 +6,13 @@ import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.ability.data.Hit; import com.minelittlepony.unicopia.client.render.PlayerPoser.Animation; import com.minelittlepony.unicopia.entity.Living; +import com.minelittlepony.unicopia.entity.damage.UDamageTypes; import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.item.UItems; import com.minelittlepony.unicopia.item.enchantment.UEnchantments; import com.minelittlepony.unicopia.particle.ParticleUtils; import com.minelittlepony.unicopia.particle.UParticles; import com.minelittlepony.unicopia.server.world.BlockDestructionManager; -import com.minelittlepony.unicopia.util.MagicalDamageSource; import com.minelittlepony.unicopia.util.PosHelper; import net.minecraft.block.Block; @@ -22,10 +22,10 @@ import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.attribute.EntityAttributes; -import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.server.world.ServerWorld; +import net.minecraft.util.math.BlockBox; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Box; import net.minecraft.util.math.MathHelper; @@ -122,8 +122,6 @@ public class EarthPonyStompAbility implements Ability { -(player.getY() - i.getY() - liftAmount) / inertia + (dist < 1 ? dist : 0), -(player.getZ() - i.getZ()) / inertia); - DamageSource damage = MagicalDamageSource.create("smash", iplayer); - double amount = (1.5F * player.getAttributeInstance(EntityAttributes.GENERIC_ATTACK_DAMAGE).getValue() + heavyness * 0.4) / (float)(dist * 1.3F); if (i instanceof PlayerEntity) { @@ -141,7 +139,7 @@ public class EarthPonyStompAbility implements Ability { amount /= 1 + (EnchantmentHelper.getEquipmentLevel(UEnchantments.PADDED, (LivingEntity)i) / 6F); } - i.damage(damage, (float)amount); + i.damage(iplayer.damageOf(UDamageTypes.SMASH, iplayer), (float)amount); Living.updateVelocity(i); } }); @@ -157,8 +155,7 @@ public class EarthPonyStompAbility implements Ability { } public static void spawnEffectAround(Entity source, BlockPos center, double radius, double range) { - - BlockPos.iterate(center.add(-radius, -radius, -radius), center.add(radius, radius, radius)).forEach(i -> { + BlockPos.stream(new BlockBox(center).expand(MathHelper.ceil(radius))).forEach(i -> { double dist = Math.sqrt(i.getSquaredDistance(source.getX(), source.getY(), source.getZ())); if (dist <= radius) { diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/Caster.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/Caster.java index a69ca0d3..d8797f45 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/Caster.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/Caster.java @@ -9,6 +9,7 @@ import org.jetbrains.annotations.Nullable; import com.minelittlepony.unicopia.*; import com.minelittlepony.unicopia.ability.magic.spell.effect.SpellType; import com.minelittlepony.unicopia.entity.*; +import com.minelittlepony.unicopia.entity.damage.UDamageSources; import com.minelittlepony.unicopia.particle.ParticleSource; import com.minelittlepony.unicopia.server.world.ModificationType; import com.minelittlepony.unicopia.util.SoundEmitter; @@ -30,7 +31,8 @@ public interface Caster extends Affine, ParticleSource, SoundEmitter, - EntityConvertable { + EntityConvertable, + UDamageSources { Physics getPhysics(); diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/RainboomAbilitySpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/RainboomAbilitySpell.java index 2da08cbf..e493375c 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/RainboomAbilitySpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/RainboomAbilitySpell.java @@ -3,12 +3,12 @@ package com.minelittlepony.unicopia.ability.magic.spell; import com.minelittlepony.unicopia.UTags; import com.minelittlepony.unicopia.ability.magic.Caster; import com.minelittlepony.unicopia.ability.magic.spell.effect.*; +import com.minelittlepony.unicopia.entity.damage.UDamageTypes; import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.particle.ParticleHandle; import com.minelittlepony.unicopia.particle.ParticleHandle.Attachment; import com.minelittlepony.unicopia.server.world.ModificationType; import com.minelittlepony.unicopia.particle.UParticles; -import com.minelittlepony.unicopia.util.MagicalDamageSource; import com.minelittlepony.unicopia.util.shape.Shape; import com.minelittlepony.unicopia.util.shape.Sphere; @@ -58,7 +58,7 @@ public class RainboomAbilitySpell extends AbstractSpell { } source.findAllEntitiesInRange(RADIUS).forEach(e -> { - e.damage(MagicalDamageSource.create("rainboom", source).setBreakSunglasses(), 6); + e.damage(source.damageOf(UDamageTypes.RAINBOOM, source), 6); }); EFFECT_RANGE.translate(source.getOrigin()).getBlockPositions().forEach(pos -> { BlockState state = source.asWorld().getBlockState(pos); diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/crafting/SpellCraftingRecipe.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/crafting/SpellCraftingRecipe.java index 52c27f78..99528460 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/crafting/SpellCraftingRecipe.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/crafting/SpellCraftingRecipe.java @@ -17,6 +17,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.network.PacketByteBuf; import net.minecraft.recipe.RecipeSerializer; import net.minecraft.recipe.ShapedRecipe; +import net.minecraft.registry.DynamicRegistryManager; import net.minecraft.util.Identifier; import net.minecraft.util.JsonHelper; import net.minecraft.util.collection.DefaultedList; @@ -106,8 +107,8 @@ public class SpellCraftingRecipe implements SpellbookRecipe { } @Override - public ItemStack craft(SpellbookInventory inventory) { - return getOutput().copy(); + public ItemStack craft(SpellbookInventory inventory, DynamicRegistryManager registries) { + return getOutput(registries).copy(); } @Override @@ -116,7 +117,7 @@ public class SpellCraftingRecipe implements SpellbookRecipe { } @Override - public ItemStack getOutput() { + public ItemStack getOutput(DynamicRegistryManager registries) { return output; } diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/crafting/SpellDuplicatingRecipe.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/crafting/SpellDuplicatingRecipe.java index 3c77049c..0b29c917 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/crafting/SpellDuplicatingRecipe.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/crafting/SpellDuplicatingRecipe.java @@ -9,6 +9,7 @@ import com.minelittlepony.unicopia.util.InventoryUtil; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketByteBuf; import net.minecraft.recipe.RecipeSerializer; +import net.minecraft.registry.DynamicRegistryManager; import net.minecraft.util.Identifier; import net.minecraft.world.World; @@ -53,7 +54,7 @@ public class SpellDuplicatingRecipe implements SpellbookRecipe { } @Override - public ItemStack craft(SpellbookInventory inventory) { + public ItemStack craft(SpellbookInventory inventory, DynamicRegistryManager registries) { return InventoryUtil.stream(inventory) .filter(i -> i.isOf(UItems.GEMSTONE)) .filter(EnchantableItem::isEnchanted) @@ -71,7 +72,7 @@ public class SpellDuplicatingRecipe implements SpellbookRecipe { } @Override - public ItemStack getOutput() { + public ItemStack getOutput(DynamicRegistryManager registries) { ItemStack stack = UItems.GEMSTONE.getDefaultStack(); stack.setCount(2); return stack; diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/crafting/SpellEnhancingRecipe.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/crafting/SpellEnhancingRecipe.java index 2bd1c445..7aebd7e5 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/crafting/SpellEnhancingRecipe.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/crafting/SpellEnhancingRecipe.java @@ -8,6 +8,7 @@ import com.minelittlepony.unicopia.item.*; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketByteBuf; import net.minecraft.recipe.RecipeSerializer; +import net.minecraft.registry.DynamicRegistryManager; import net.minecraft.util.Identifier; import net.minecraft.world.World; @@ -45,7 +46,7 @@ public class SpellEnhancingRecipe implements SpellbookRecipe { } @Override - public ItemStack craft(SpellbookInventory inventory) { + public ItemStack craft(SpellbookInventory inventory, DynamicRegistryManager registries) { return SpellTraits.of(inventory.getItemToModify()) .add(inventory.getTraits()) .applyTo(inventory.getItemToModify()); @@ -57,7 +58,7 @@ public class SpellEnhancingRecipe implements SpellbookRecipe { } @Override - public ItemStack getOutput() { + public ItemStack getOutput(DynamicRegistryManager registries) { return UItems.GEMSTONE.getDefaultStack(); } diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/crafting/SpellShapedCraftingRecipe.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/crafting/SpellShapedCraftingRecipe.java index cbc2f641..65791079 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/crafting/SpellShapedCraftingRecipe.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/crafting/SpellShapedCraftingRecipe.java @@ -10,23 +10,24 @@ import net.minecraft.item.ItemStack; import net.minecraft.network.PacketByteBuf; import net.minecraft.recipe.RecipeSerializer; import net.minecraft.recipe.ShapedRecipe; +import net.minecraft.registry.DynamicRegistryManager; import net.minecraft.util.Identifier; public class SpellShapedCraftingRecipe extends ShapedRecipe { public SpellShapedCraftingRecipe(ShapedRecipe recipe) { - super(recipe.getId(), recipe.getGroup(), recipe.getCategory(), recipe.getWidth(), recipe.getHeight(), recipe.getIngredients(), recipe.getOutput()); + super(recipe.getId(), recipe.getGroup(), recipe.getCategory(), recipe.getWidth(), recipe.getHeight(), recipe.getIngredients(), recipe.getOutput(null)); } @Override - public ItemStack craft(CraftingInventory inventory) { + public ItemStack craft(CraftingInventory inventory, DynamicRegistryManager registries) { return InventoryUtil.stream(inventory) .filter(stack -> stack.getItem() instanceof EnchantableItem) .filter(EnchantableItem::isEnchanted) .map(stack -> ((EnchantableItem)stack.getItem()).getSpellEffect(stack)) .findFirst() - .map(spell -> spell.traits().applyTo(EnchantableItem.enchant(super.craft(inventory), spell.type()))) - .orElseGet(() -> super.craft(inventory)); + .map(spell -> spell.traits().applyTo(EnchantableItem.enchant(super.craft(inventory, registries), spell.type()))) + .orElseGet(() -> super.craft(inventory, registries)); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/AreaProtectionSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/AreaProtectionSpell.java index 16ebfaee..1b738656 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/AreaProtectionSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/AreaProtectionSpell.java @@ -38,7 +38,7 @@ public class AreaProtectionSpell extends AbstractAreaEffectSpell { Vec3d origin = source.getOriginVector(); source.spawnParticles(origin, new Sphere(true, radius), (int)(radius * 6), pos -> { - if (!source.asWorld().isAir(new BlockPos(pos))) { + if (!source.asWorld().isAir(BlockPos.ofFloored(pos))) { source.addParticle(new MagicParticleEffect(getType().getColor()), pos, Vec3d.ZERO); } }); diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/AttractiveSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/AttractiveSpell.java index c84dcb65..7e824d70 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/AttractiveSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/AttractiveSpell.java @@ -5,12 +5,12 @@ import com.minelittlepony.unicopia.ability.magic.spell.*; import com.minelittlepony.unicopia.ability.magic.spell.trait.Trait; import com.minelittlepony.unicopia.entity.EntityReference; import com.minelittlepony.unicopia.entity.Living; +import com.minelittlepony.unicopia.entity.damage.UDamageTypes; import com.minelittlepony.unicopia.particle.FollowingParticleEffect; import com.minelittlepony.unicopia.particle.MagicParticleEffect; import com.minelittlepony.unicopia.particle.UParticles; import com.minelittlepony.unicopia.projectile.MagicProjectileEntity; import com.minelittlepony.unicopia.projectile.ProjectileDelegate; -import com.minelittlepony.unicopia.util.MagicalDamageSource; import com.minelittlepony.unicopia.util.shape.Sphere; import net.minecraft.entity.Entity; @@ -93,7 +93,7 @@ public class AttractiveSpell extends ShieldSpell implements HomingSpell, TimedSp } if (!isGood && source.asWorld().random.nextInt(4500) == 0) { - source.asEntity().damage(MagicalDamageSource.create("vortex"), 4); + source.asEntity().damage(source.damageOf(UDamageTypes.GAVITY_WELL_RECOIL, source), 4); } AttractionUtils.applyForce(getOrigin(source), target, -force, 0, false); diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/DarkVortexSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/DarkVortexSpell.java index fb8775fd..e10b03a4 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/DarkVortexSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/DarkVortexSpell.java @@ -8,18 +8,17 @@ import com.minelittlepony.unicopia.ability.magic.Caster; import com.minelittlepony.unicopia.ability.magic.spell.Situation; import com.minelittlepony.unicopia.ability.magic.spell.trait.SpellTraits; import com.minelittlepony.unicopia.ability.magic.spell.trait.Trait; +import com.minelittlepony.unicopia.entity.damage.UDamageTypes; import com.minelittlepony.unicopia.particle.ParticleHandle.Attachment; import com.minelittlepony.unicopia.particle.ParticleUtils; import com.minelittlepony.unicopia.particle.SphereParticleEffect; import com.minelittlepony.unicopia.particle.UParticles; import com.minelittlepony.unicopia.projectile.MagicProjectileEntity; import com.minelittlepony.unicopia.projectile.ProjectileDelegate; -import com.minelittlepony.unicopia.util.MagicalDamageSource; import com.minelittlepony.unicopia.util.shape.Sphere; import net.minecraft.entity.Entity; import net.minecraft.entity.FallingBlockEntity; -import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.projectile.PersistentProjectileEntity; import net.minecraft.item.Item; @@ -220,7 +219,7 @@ public class DarkVortexSpell extends AttractiveSpell implements ProjectileDelega } } else if (target instanceof PersistentProjectileEntity) { if (master != null) { - master.damage(DamageSource.thrownProjectile(target, ((PersistentProjectileEntity)target).getOwner()), 4); + master.damage(master.getDamageSources().thrown(target, ((PersistentProjectileEntity)target).getOwner()), 4); } target.discard(); return; @@ -230,7 +229,7 @@ public class DarkVortexSpell extends AttractiveSpell implements ProjectileDelega accumulatedMass += massOfTarget; setDirty(); - target.damage(MagicalDamageSource.create("black_hole"), Integer.MAX_VALUE); + target.damage(source.damageOf(UDamageTypes.GAVITY_WELL_RECOIL, source), Integer.MAX_VALUE); if (!(target instanceof PlayerEntity)) { target.discard(); } diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/DispellEvilSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/DispellEvilSpell.java index b6951e39..5fe7fba1 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/DispellEvilSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/DispellEvilSpell.java @@ -7,7 +7,6 @@ import com.minelittlepony.unicopia.ability.magic.spell.trait.Trait; import com.minelittlepony.unicopia.particle.UParticles; import com.minelittlepony.unicopia.projectile.MagicProjectileEntity; import com.minelittlepony.unicopia.projectile.ProjectileDelegate; -import com.minelittlepony.unicopia.util.MagicalDamageSource; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; @@ -29,7 +28,7 @@ public class DispellEvilSpell extends AbstractSpell implements ProjectileDelegat } source.findAllEntitiesInRange(getTraits().get(Trait.POWER) * 10, e -> e.getType() == EntityType.PHANTOM).forEach(entity -> { - entity.damage(MagicalDamageSource.MAGIC, 50); + entity.damage(entity.getDamageSources().magic(), 50); if (entity instanceof LivingEntity l) { double d = source.getOriginVector().getX() - entity.getX(); double e = source.getOriginVector().getZ() - entity.getZ(); diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/DisplacementSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/DisplacementSpell.java index 8e26e627..bc9235a1 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/DisplacementSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/DisplacementSpell.java @@ -6,10 +6,10 @@ import com.minelittlepony.unicopia.ability.magic.spell.*; import com.minelittlepony.unicopia.ability.magic.spell.trait.Trait; import com.minelittlepony.unicopia.entity.CastSpellEntity; import com.minelittlepony.unicopia.entity.EntityReference; +import com.minelittlepony.unicopia.entity.damage.UDamageTypes; import com.minelittlepony.unicopia.particle.ParticleHandle.Attachment; import com.minelittlepony.unicopia.projectile.MagicProjectileEntity; import com.minelittlepony.unicopia.projectile.ProjectileDelegate; -import com.minelittlepony.unicopia.util.MagicalDamageSource; import net.minecraft.entity.Entity; import net.minecraft.nbt.NbtCompound; @@ -62,8 +62,8 @@ public class DisplacementSpell extends AbstractSpell implements HomingSpell, Pla Vec3d sourcePos = originator.getOriginVector(); Vec3d sourceVel = originator.asEntity().getVelocity(); - teleport(target, sourcePos, sourceVel); - teleport(originator.asEntity(), destinationPos, destinationVel); + teleport(originator, target, sourcePos, sourceVel); + teleport(originator, originator.asEntity(), destinationPos, destinationVel); originator.subtractEnergyCost(destinationPos.distanceTo(sourcePos) / 20F); } @@ -80,7 +80,7 @@ public class DisplacementSpell extends AbstractSpell implements HomingSpell, Pla }); } - private void teleport(Entity entity, Vec3d pos, Vec3d vel) { + private void teleport(Caster source, Entity entity, Vec3d pos, Vec3d vel) { entity.teleport(pos.x, pos.y, pos.z); entity.setVelocity(vel); entity.setGlowing(false); @@ -88,7 +88,7 @@ public class DisplacementSpell extends AbstractSpell implements HomingSpell, Pla float damage = getTraits().get(Trait.BLOOD); if (damage > 0) { - entity.damage(MagicalDamageSource.EXHAUSTION, damage); + entity.damage(source.damageOf(UDamageTypes.EXHAUSTION, source), damage); } } diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/FireSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/FireSpell.java index a4974aa5..cdb75bd4 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/FireSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/FireSpell.java @@ -1,7 +1,5 @@ package com.minelittlepony.unicopia.ability.magic.spell.effect; -import org.jetbrains.annotations.Nullable; - import com.minelittlepony.unicopia.EquinePredicates; import com.minelittlepony.unicopia.ability.magic.Caster; import com.minelittlepony.unicopia.ability.magic.spell.Situation; @@ -12,7 +10,6 @@ import com.minelittlepony.unicopia.block.state.StateMaps; import com.minelittlepony.unicopia.particle.ParticleUtils; import com.minelittlepony.unicopia.projectile.MagicProjectileEntity; import com.minelittlepony.unicopia.projectile.ProjectileDelegate; -import com.minelittlepony.unicopia.util.MagicalDamageSource; import com.minelittlepony.unicopia.util.shape.Sphere; import net.minecraft.block.Block; @@ -23,6 +20,7 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.ItemEntity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.damage.DamageSource; +import net.minecraft.entity.damage.DamageTypes; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.particle.ParticleTypes; import net.minecraft.sound.SoundCategory; @@ -134,7 +132,7 @@ public class FireSpell extends AbstractAreaEffectSpell implements ProjectileDele (master instanceof PlayerEntity && !EquinePredicates.PLAYER_UNICORN.test(master))) && !(e instanceof ItemEntity) && !(e instanceof Caster)) { e.setOnFireFor(60); - e.damage(getDamageCause(e, master), 0.1f); + e.damage(getDamageCause(source, e), 0.1f); playEffect(source.asWorld(), e.getBlockPos()); return true; } @@ -142,8 +140,8 @@ public class FireSpell extends AbstractAreaEffectSpell implements ProjectileDele return false; } - protected DamageSource getDamageCause(Entity target, @Nullable LivingEntity attacker) { - return MagicalDamageSource.create("fire", attacker); + protected DamageSource getDamageCause(Caster source, Entity target) { + return source.damageOf(DamageTypes.IN_FIRE, source); } /** diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/HydrophobicSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/HydrophobicSpell.java index ba22ec7b..177d8b61 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/HydrophobicSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/HydrophobicSpell.java @@ -84,7 +84,7 @@ public class HydrophobicSpell extends AbstractSpell { setDead(); } source.spawnParticles(new Sphere(true, getRange(source)), 10, pos -> { - BlockPos bp = new BlockPos(pos); + BlockPos bp = BlockPos.ofFloored(pos); if (source.asWorld().getFluidState(bp.up()).isIn(affectedFluid)) { source.addParticle(UParticles.RAIN_DROPS, pos, Vec3d.ZERO); } diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/IceSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/IceSpell.java index 0d8357f6..428d183e 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/IceSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/IceSpell.java @@ -10,7 +10,6 @@ import com.minelittlepony.unicopia.ability.magic.spell.trait.Trait; import com.minelittlepony.unicopia.block.state.StateMaps; import com.minelittlepony.unicopia.block.state.StatePredicate; import com.minelittlepony.unicopia.particle.ParticleUtils; -import com.minelittlepony.unicopia.util.MagicalDamageSource; import com.minelittlepony.unicopia.util.PosHelper; import com.minelittlepony.unicopia.util.VecHelper; import com.minelittlepony.unicopia.util.shape.Shape; @@ -19,6 +18,7 @@ import com.minelittlepony.unicopia.util.shape.Sphere; import net.minecraft.block.*; import net.minecraft.entity.Entity; import net.minecraft.entity.TntEntity; +import net.minecraft.entity.damage.DamageTypes; import net.minecraft.entity.Entity.RemovalReason; import net.minecraft.particle.ParticleTypes; import net.minecraft.state.property.Properties; @@ -91,7 +91,7 @@ public class IceSpell extends AbstractSpell { } else if (e.isOnFire()) { e.extinguish(); } else { - e.damage(MagicalDamageSource.create("cold", source.getMaster()), 2); + e.damage(source.damageOf(DamageTypes.FREEZE, source), 2); } } diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/InfernoSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/InfernoSpell.java index eae84638..5dc50a69 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/InfernoSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/InfernoSpell.java @@ -4,13 +4,9 @@ import com.minelittlepony.unicopia.ability.magic.Caster; import com.minelittlepony.unicopia.ability.magic.spell.Situation; import com.minelittlepony.unicopia.block.state.BlockStateConverter; import com.minelittlepony.unicopia.block.state.StateMaps; -import com.minelittlepony.unicopia.util.MagicalDamageSource; import com.minelittlepony.unicopia.util.shape.Shape; import com.minelittlepony.unicopia.util.shape.Sphere; -import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.damage.DamageSource; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; @@ -41,7 +37,7 @@ public class InfernoSpell extends FireSpell { BlockStateConverter converter = w.getDimension().ultrawarm() ? StateMaps.HELLFIRE_AFFECTED.getInverse() : StateMaps.HELLFIRE_AFFECTED; for (int i = 0; i < radius; i++) { - BlockPos pos = new BlockPos(shape.computePoint(w.random).add(origin)); + BlockPos pos = BlockPos.ofFloored(shape.computePoint(w.random).add(origin)); if (source.canModifyAt(pos) && converter.convert(w, pos)) { playEffect(w, pos); @@ -53,7 +49,7 @@ public class InfernoSpell extends FireSpell { if (w.random.nextInt(12) == 0) { Vec3d vec = shape.computePoint(w.random).add(origin); - if (!applyBlocks(w, new BlockPos(vec))) { + if (!applyBlocks(w, BlockPos.ofFloored(vec))) { applyEntities(source, vec); } } @@ -61,12 +57,4 @@ public class InfernoSpell extends FireSpell { } return true; } - - @Override - protected DamageSource getDamageCause(Entity target, LivingEntity attacker) { - if (attacker != null && attacker.getUuid().equals(target.getUuid())) { - return MagicalDamageSource.create("fire.own"); - } - return MagicalDamageSource.create("fire", attacker); - } } diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/MindSwapSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/MindSwapSpell.java index d1a9b61c..829104cf 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/MindSwapSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/MindSwapSpell.java @@ -11,7 +11,6 @@ import com.minelittlepony.unicopia.entity.behaviour.Inventory; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.damage.DamageSource; import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtElement; @@ -82,14 +81,14 @@ public class MindSwapSpell extends MimicSpell { } if (counterpart.getId().isPresent() && counterpart.get(caster.asWorld()) == null) { - caster.getOriginatingCaster().asEntity().damage(DamageSource.MAGIC, Float.MAX_VALUE); + caster.getOriginatingCaster().asEntity().damage(caster.asWorld().getDamageSources().magic(), Float.MAX_VALUE); setDead(); return false; } if (!caster.asEntity().isAlive()) { counterpart.ifPresent(caster.asWorld(), e -> { - e.damage(DamageSource.MAGIC, Float.MAX_VALUE); + e.damage(e.getDamageSources().magic(), Float.MAX_VALUE); }); onDestroyed(caster); setDead(); diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/NecromancySpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/NecromancySpell.java index 710ef0d9..4e7a9882 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/NecromancySpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/NecromancySpell.java @@ -84,7 +84,7 @@ public class NecromancySpell extends AbstractAreaEffectSpell implements Projecti if (source.isClient()) { source.spawnParticles(new Sphere(true, radius * 2), rainy ? 98 : 125, pos -> { - BlockPos bpos = new BlockPos(pos); + BlockPos bpos = BlockPos.ofFloored(pos); if (!source.asWorld().isAir(bpos.down())) { source.addParticle(source.asWorld().hasRain(bpos) ? ParticleTypes.SMOKE : ParticleTypes.FLAME, pos, Vec3d.ZERO); @@ -123,7 +123,7 @@ public class NecromancySpell extends AbstractAreaEffectSpell implements Projecti for (int i = 0; i < 10; i++) { Vec3d pos = affectRegion.computePoint(source.asWorld().random).add(source.getOriginVector()); - BlockPos loc = new BlockPos(pos); + BlockPos loc = BlockPos.ofFloored(pos); if (source.asWorld().isAir(loc.up()) && !source.asWorld().isAir(loc)) { spawnPool.get().ifPresent(type -> { @@ -209,7 +209,7 @@ public class NecromancySpell extends AbstractAreaEffectSpell implements Projecti for (int i = 0; i < 10; i++) { Vec3d pos = affectRegion.computePoint(source.asWorld().random).add(source.getOriginVector()); - BlockPos loc = new BlockPos(pos); + BlockPos loc = BlockPos.ofFloored(pos); if (source.asWorld().isAir(loc.up()) && !source.asWorld().isAir(loc)) { spawnPool.get().ifPresent(type -> { diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/SiphoningSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/SiphoningSpell.java index 194b57c1..7b6552f3 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/SiphoningSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/SiphoningSpell.java @@ -13,11 +13,11 @@ import com.minelittlepony.unicopia.ability.magic.Caster; import com.minelittlepony.unicopia.ability.magic.spell.AbstractAreaEffectSpell; import com.minelittlepony.unicopia.ability.magic.spell.Situation; import com.minelittlepony.unicopia.ability.magic.spell.trait.Trait; +import com.minelittlepony.unicopia.entity.damage.UDamageTypes; import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.particle.FollowingParticleEffect; import com.minelittlepony.unicopia.particle.ParticleUtils; import com.minelittlepony.unicopia.particle.UParticles; -import com.minelittlepony.unicopia.util.MagicalDamageSource; import com.minelittlepony.unicopia.util.VecHelper; import com.minelittlepony.unicopia.util.shape.Sphere; @@ -60,7 +60,7 @@ public class SiphoningSpell extends AbstractAreaEffectSpell { int direction = isFriendlyTogether(source) ? 1 : -1; source.spawnParticles(new Sphere(true, radius, 1, 0, 1), 1, pos -> { - if (!source.asWorld().isAir(new BlockPos(pos).down())) { + if (!source.asWorld().isAir(BlockPos.ofFloored(pos).down())) { double dist = pos.distanceTo(source.getOriginVector()); Vec3d velocity = pos.subtract(source.getOriginVector()).normalize().multiply(direction * dist); @@ -87,7 +87,7 @@ public class SiphoningSpell extends AbstractAreaEffectSpell { } private void distributeHealth(Caster source) { - DamageSource damage = MagicalDamageSource.create("drain", source); + DamageSource damage = source.damageOf(UDamageTypes.LIFE_DRAINING, source); getTargets(source).forEach(e -> { float maxHealthGain = e.getMaxHealth() - e.getHealth(); @@ -127,7 +127,7 @@ public class SiphoningSpell extends AbstractAreaEffectSpell { float attackAmount = Math.max(maxHealthGain / targets.size(), 0.5F); - DamageSource damage = MagicalDamageSource.create("drain", source); + DamageSource damage = source.damageOf(UDamageTypes.LIFE_DRAINING, source); float healthGain = 0; diff --git a/src/main/java/com/minelittlepony/unicopia/block/BlockConstructionUtils.java b/src/main/java/com/minelittlepony/unicopia/block/BlockConstructionUtils.java index 7bc35bdf..51a705e7 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/BlockConstructionUtils.java +++ b/src/main/java/com/minelittlepony/unicopia/block/BlockConstructionUtils.java @@ -1,6 +1,7 @@ package com.minelittlepony.unicopia.block; import net.minecraft.block.AbstractBlock; +import net.minecraft.block.BlockSetType; import net.minecraft.block.BlockState; import net.minecraft.block.ButtonBlock; import net.minecraft.block.LeavesBlock; @@ -9,19 +10,17 @@ import net.minecraft.block.Material; import net.minecraft.block.PillarBlock; import net.minecraft.entity.EntityType; import net.minecraft.sound.BlockSoundGroup; -import net.minecraft.sound.SoundEvent; -import net.minecraft.sound.SoundEvents; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; import net.minecraft.world.BlockView; interface BlockConstructionUtils { static ButtonBlock woodenButton() { - return woodenButton(BlockSoundGroup.WOOD, SoundEvents.BLOCK_WOODEN_BUTTON_CLICK_OFF, SoundEvents.BLOCK_WOODEN_BUTTON_CLICK_ON); + return woodenButton(BlockSoundGroup.WOOD, BlockSetType.OAK); } - static ButtonBlock woodenButton(BlockSoundGroup soundGroup, SoundEvent clickOffSound, SoundEvent clickOnSound) { - return new ButtonBlock(AbstractBlock.Settings.of(Material.DECORATION).noCollision().strength(0.5f).sounds(soundGroup), 30, true, clickOffSound, clickOnSound); + static ButtonBlock woodenButton(BlockSoundGroup soundGroup, BlockSetType setType) { + return new ButtonBlock(AbstractBlock.Settings.of(Material.DECORATION).noCollision().strength(0.5f).sounds(soundGroup), setType, 30, true); } static boolean never(BlockState state, BlockView world, BlockPos pos, EntityType type) { diff --git a/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java b/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java index 770edbb2..0fbe52e9 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java +++ b/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java @@ -16,7 +16,6 @@ import net.minecraft.block.*; import net.minecraft.block.AbstractBlock.Settings; import net.minecraft.item.*; import net.minecraft.sound.BlockSoundGroup; -import net.minecraft.sound.SoundEvents; import net.minecraft.util.Identifier; import net.minecraft.util.math.Direction; import net.minecraft.util.shape.VoxelShapes; @@ -57,10 +56,10 @@ public interface UBlocks { Block PALM_STAIRS = register("palm_stairs", new StairsBlock(PALM_PLANKS.getDefaultState(), Settings.copy(PALM_PLANKS)), ItemGroups.BUILDING_BLOCKS); Block PALM_SLAB = register("palm_slab", new SlabBlock(Settings.of(Material.WOOD, PALM_PLANKS.getDefaultMapColor()).strength(2, 3).sounds(BlockSoundGroup.WOOD)), ItemGroups.BUILDING_BLOCKS); Block PALM_FENCE = register("palm_fence", new FenceBlock(Settings.of(Material.WOOD, PALM_PLANKS.getDefaultMapColor()).strength(2, 3).sounds(BlockSoundGroup.WOOD)), ItemGroups.BUILDING_BLOCKS); - Block PALM_FENCE_GATE = register("palm_fence_gate", new FenceGateBlock(Settings.of(Material.WOOD, PALM_PLANKS.getDefaultMapColor()).strength(2, 3).sounds(BlockSoundGroup.WOOD), SoundEvents.BLOCK_FENCE_GATE_CLOSE, SoundEvents.BLOCK_FENCE_GATE_OPEN), ItemGroups.BUILDING_BLOCKS); + Block PALM_FENCE_GATE = register("palm_fence_gate", new FenceGateBlock(Settings.of(Material.WOOD, PALM_PLANKS.getDefaultMapColor()).strength(2, 3).sounds(BlockSoundGroup.WOOD), WoodType.OAK), ItemGroups.BUILDING_BLOCKS); // Block PALM_DOOR = register("palm_door", new DoorBlock(Settings.of(Material.WOOD, PALM_PLANKS.getDefaultMapColor()).strength(3.0f).sounds(BlockSoundGroup.WOOD).nonOpaque(), SoundEvents.BLOCK_WOODEN_DOOR_CLOSE, SoundEvents.BLOCK_WOODEN_DOOR_OPEN), ItemGroups.BUILDING_BLOCKS); // Block PALM_TRAPDOOR = register("palm_trapdoor", new TrapdoorBlock(Settings.of(Material.WOOD, PALM_PLANKS.getDefaultMapColor()).strength(3.0f).sounds(BlockSoundGroup.WOOD).nonOpaque().allowsSpawning(UBlocks::never), SoundEvents.BLOCK_WOODEN_TRAPDOOR_CLOSE, SoundEvents.BLOCK_WOODEN_TRAPDOOR_OPEN), ItemGroups.BUILDING_BLOCKS); - Block PALM_PRESSURE_PLATE = register("palm_pressure_plate", new PressurePlateBlock(PressurePlateBlock.ActivationRule.EVERYTHING, Settings.of(Material.WOOD, PALM_PLANKS.getDefaultMapColor()).noCollision().strength(0.5f).sounds(BlockSoundGroup.WOOD), SoundEvents.BLOCK_WOODEN_PRESSURE_PLATE_CLICK_OFF, SoundEvents.BLOCK_WOODEN_PRESSURE_PLATE_CLICK_ON), ItemGroups.BUILDING_BLOCKS); + Block PALM_PRESSURE_PLATE = register("palm_pressure_plate", new PressurePlateBlock(PressurePlateBlock.ActivationRule.EVERYTHING, Settings.of(Material.WOOD, PALM_PLANKS.getDefaultMapColor()).noCollision().strength(0.5f).sounds(BlockSoundGroup.WOOD), BlockSetType.OAK), ItemGroups.BUILDING_BLOCKS); Block PALM_BUTTON = register("palm_button", BlockConstructionUtils.woodenButton(), ItemGroups.BUILDING_BLOCKS); // Block PALM_SIGN = register("palm_sign", new SignBlock(Settings.of(Material.WOOD).noCollision().strength(1.0f).sounds(BlockSoundGroup.WOOD), PALM_SIGN_TYPE), ItemGroups.BUILDING_BLOCKS); // diff --git a/src/main/java/com/minelittlepony/unicopia/block/WeatherVaneBlock.java b/src/main/java/com/minelittlepony/unicopia/block/WeatherVaneBlock.java index 00e85be6..c726a764 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/WeatherVaneBlock.java +++ b/src/main/java/com/minelittlepony/unicopia/block/WeatherVaneBlock.java @@ -8,7 +8,7 @@ import com.minelittlepony.unicopia.server.world.WeatherConditions; import net.minecraft.block.*; import net.minecraft.block.entity.*; import net.minecraft.nbt.NbtCompound; -import net.minecraft.network.Packet; +import net.minecraft.network.packet.Packet; import net.minecraft.network.listener.ClientPlayPacketListener; import net.minecraft.network.packet.s2c.play.BlockEntityUpdateS2CPacket; import net.minecraft.server.world.ServerWorld; diff --git a/src/main/java/com/minelittlepony/unicopia/block/ZapBlock.java b/src/main/java/com/minelittlepony/unicopia/block/ZapBlock.java index 2744c7c4..5c372280 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/ZapBlock.java +++ b/src/main/java/com/minelittlepony/unicopia/block/ZapBlock.java @@ -7,7 +7,6 @@ import com.minelittlepony.unicopia.particle.UParticles; import net.minecraft.block.*; import net.minecraft.entity.EntityType; import net.minecraft.entity.LightningEntity; -import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemPlacementContext; import net.minecraft.server.world.ServerWorld; @@ -74,7 +73,7 @@ public class ZapBlock extends Block { } else { float damage = 3 / dist; if (damage > 1) { - other.damage(DamageSource.LIGHTNING_BOLT, damage); + other.damage(world.getDamageSources().lightningBolt(), damage); } } }); diff --git a/src/main/java/com/minelittlepony/unicopia/client/DiscoveryToast.java b/src/main/java/com/minelittlepony/unicopia/client/DiscoveryToast.java index 60224fec..99c6e7e4 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/DiscoveryToast.java +++ b/src/main/java/com/minelittlepony/unicopia/client/DiscoveryToast.java @@ -39,7 +39,7 @@ public class DiscoveryToast implements Toast { RenderSystem.setShader(GameRenderer::getPositionTexProgram); RenderSystem.setShaderTexture(0, TEXTURE); RenderSystem.setShaderColor(1.0F, 1, 1, 1); - manager.drawTexture(matrices, 0, 0, 0, 32, getWidth(), getHeight()); + ToastManager.drawTexture(matrices, 0, 0, 0, 32, getWidth(), getHeight()); manager.getClient().textRenderer.draw(matrices, TITLE, 30, 7, -11534256); manager.getClient().textRenderer.draw(matrices, DESCRIPTION, 30, 18, -16777216); @@ -49,7 +49,7 @@ public class DiscoveryToast implements Toast { matrixStack.push(); matrixStack.scale(0.6F, 0.6F, 1); RenderSystem.applyModelViewMatrix(); - manager.getClient().getItemRenderer().renderInGui(UItems.SPELLBOOK.getDefaultStack(), 3, 3); + manager.getClient().getItemRenderer().renderInGui(matrixStack, UItems.SPELLBOOK.getDefaultStack(), 3, 3); matrixStack.pop(); RenderSystem.applyModelViewMatrix(); diff --git a/src/main/java/com/minelittlepony/unicopia/client/KeyBindingsHandler.java b/src/main/java/com/minelittlepony/unicopia/client/KeyBindingsHandler.java index b89dbff8..0bf6bd79 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/KeyBindingsHandler.java +++ b/src/main/java/com/minelittlepony/unicopia/client/KeyBindingsHandler.java @@ -64,9 +64,9 @@ public class KeyBindingsHandler { } Pony iplayer = Pony.of(client.player); AbilityDispatcher abilities = iplayer.getAbilities(); - long maxPage = abilities.getMaxPage(); + int maxPage = abilities.getMaxPage(); - long page = MathHelper.clamp(Unicopia.getConfig().hudPage.get(), 0, maxPage); + int page = MathHelper.clamp(Unicopia.getConfig().hudPage.get(), 0, maxPage); if (page > 0 && pageDown.getState() == PressedState.PRESSED) { changePage(client, maxPage, -1); diff --git a/src/main/java/com/minelittlepony/unicopia/client/URenderers.java b/src/main/java/com/minelittlepony/unicopia/client/URenderers.java index dcb7fb88..ae5c192c 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/URenderers.java +++ b/src/main/java/com/minelittlepony/unicopia/client/URenderers.java @@ -34,9 +34,10 @@ import net.minecraft.client.item.ModelPredicateProviderRegistry; import net.minecraft.client.particle.Particle; import net.minecraft.client.particle.SpriteProvider; import net.minecraft.client.render.*; +import net.minecraft.client.render.block.entity.BlockEntityRendererFactories; import net.minecraft.client.render.entity.FlyingItemEntityRenderer; import net.minecraft.client.render.item.ItemRenderer; -import net.minecraft.client.render.model.json.ModelTransformation; +import net.minecraft.client.render.model.json.ModelTransformationMode; import net.minecraft.client.world.ClientWorld; import net.minecraft.fluid.Fluids; import net.minecraft.item.*; @@ -77,7 +78,7 @@ public interface URenderers { EntityRendererRegistry.register(UEntities.SPELLBOOK, SpellbookEntityRenderer::new); EntityRendererRegistry.register(UEntities.AIR_BALLOON, AirBalloonEntityRenderer::new); - BlockEntityRendererRegistry.register(UBlockEntities.WEATHER_VANE, WeatherVaneBlockEntityRenderer::new); + BlockEntityRendererFactories.register(UBlockEntities.WEATHER_VANE, WeatherVaneBlockEntityRenderer::new); ColorProviderRegistry.ITEM.register((stack, i) -> i > 0 ? -1 : ((DyeableItem)stack.getItem()).getColor(stack), UItems.FRIENDSHIP_BRACELET); BuiltinItemRendererRegistry.INSTANCE.register(UItems.FILLED_JAR, (stack, mode, matrices, vertexConsumers, light, overlay) -> { @@ -89,23 +90,24 @@ public interface URenderers { // Reset stuff done in the beforelands matrices.pop(); - if (mode == ModelTransformation.Mode.GUI) { + if (mode == ModelTransformationMode.GUI) { DiffuseLighting.disableGuiDepthLighting(); } VertexConsumerProvider.Immediate immediate = MinecraftClient.getInstance().getBufferBuilders().getEntityVertexConsumers(); + ClientWorld world = MinecraftClient.getInstance().world; if (item.hasAppearance(stack)) { matrices.push(); matrices.scale(0.5F, 0.5F, 0.5F); matrices.translate(0.0125, 0.1, 0); - renderer.renderItem(item.getAppearanceStack(stack), mode, light, overlay, matrices, immediate, 0); + renderer.renderItem(item.getAppearanceStack(stack), mode, light, overlay, matrices, immediate, world, 0); matrices.pop(); } - renderer.renderItem(item.createAppearanceStack(stack, UItems.EMPTY_JAR), mode, light, OverlayTexture.DEFAULT_UV, matrices, immediate, 0); + renderer.renderItem(item.createAppearanceStack(stack, UItems.EMPTY_JAR), mode, light, OverlayTexture.DEFAULT_UV, matrices, immediate, world, 0); immediate.draw(); - if (mode == ModelTransformation.Mode.GUI) { + if (mode == ModelTransformationMode.GUI) { DiffuseLighting.enableGuiDepthLighting(); } matrices.push(); diff --git a/src/main/java/com/minelittlepony/unicopia/client/gui/DismissSpellScreen.java b/src/main/java/com/minelittlepony/unicopia/client/gui/DismissSpellScreen.java index ec62bee2..a5cfb6e3 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/gui/DismissSpellScreen.java +++ b/src/main/java/com/minelittlepony/unicopia/client/gui/DismissSpellScreen.java @@ -213,13 +213,22 @@ public class DismissSpellScreen extends GameGui { } @Override - public void appendNarrations(NarrationMessageBuilder var1) { + public void appendNarrations(NarrationMessageBuilder builder) { } @Override public SelectionType getType() { return SelectionType.HOVERED; } + + @Override + public void setFocused(boolean focused) { + } + + @Override + public boolean isFocused() { + return false; + } } static void playClickEffect() { diff --git a/src/main/java/com/minelittlepony/unicopia/client/gui/DrawableUtil.java b/src/main/java/com/minelittlepony/unicopia/client/gui/DrawableUtil.java index 7c4b1b3d..19afcc3b 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/gui/DrawableUtil.java +++ b/src/main/java/com/minelittlepony/unicopia/client/gui/DrawableUtil.java @@ -41,7 +41,7 @@ public interface DrawableUtil { } RenderSystem.applyModelViewMatrix(); - MinecraftClient.getInstance().getItemRenderer().renderGuiItemIcon(stack, 0, 0); + MinecraftClient.getInstance().getItemRenderer().renderGuiItemIcon(modelStack, stack, 0, 0); modelStack.pop(); RenderSystem.applyModelViewMatrix(); @@ -54,7 +54,6 @@ public interface DrawableUtil { static void drawLine(MatrixStack matrices, int x1, int y1, int x2, int y2, int color) { RenderSystem.enableBlend(); - RenderSystem.disableTexture(); RenderSystem.defaultBlendFunc(); RenderSystem.setShader(GameRenderer::getPositionColorProgram); @@ -66,14 +65,12 @@ public interface DrawableUtil { float k = (color & 255) / 255F; BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer(); RenderSystem.enableBlend(); - RenderSystem.disableTexture(); RenderSystem.defaultBlendFunc(); RenderSystem.setShader(GameRenderer::getPositionColorProgram); bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION_COLOR); bufferBuilder.vertex(matrix, x1, y1, 0).color(r, g, b, k).next(); bufferBuilder.vertex(matrix, x2, y2, 0).color(r, g, b, k).next(); BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); - RenderSystem.enableTexture(); RenderSystem.disableBlend(); } @@ -101,7 +98,6 @@ public interface DrawableUtil { RenderSystem.setShaderColor(1, 1, 1, 1); RenderSystem.setShader(GameRenderer::getPositionColorProgram); RenderSystem.enableBlend(); - RenderSystem.disableTexture(); RenderSystem.defaultBlendFunc(); Matrix4f model = matrices.peek().getPositionMatrix(); @@ -121,7 +117,6 @@ public interface DrawableUtil { } BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); - RenderSystem.enableTexture(); } /** @@ -161,7 +156,6 @@ public interface DrawableUtil { RenderSystem.setShaderColor(1, 1, 1, 1); RenderSystem.setShader(GameRenderer::getPositionColorProgram); RenderSystem.enableBlend(); - RenderSystem.disableTexture(); RenderSystem.defaultBlendFunc(); Matrix4f model = matrices.peek().getPositionMatrix(); @@ -187,7 +181,6 @@ public interface DrawableUtil { } BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); - RenderSystem.enableTexture(); } private static void cylendricalVertex(BufferBuilder bufferBuilder, Matrix4f model, double radius, double angle, float r, float g, float b, float k) { diff --git a/src/main/java/com/minelittlepony/unicopia/client/gui/GradientUtil.java b/src/main/java/com/minelittlepony/unicopia/client/gui/GradientUtil.java index 2dae20d8..9ee147d2 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/gui/GradientUtil.java +++ b/src/main/java/com/minelittlepony/unicopia/client/gui/GradientUtil.java @@ -11,7 +11,6 @@ import net.minecraft.util.math.MathHelper; public interface GradientUtil { static void fillVerticalGradient(MatrixStack matrices, int startX, int startY, int stopY, int endX, int endY, int colorStart, int colorStop, int colorEnd, int z) { - RenderSystem.disableTexture(); RenderSystem.enableBlend(); RenderSystem.defaultBlendFunc(); RenderSystem.setShader(GameRenderer::getPositionColorProgram); @@ -20,7 +19,6 @@ public interface GradientUtil { fillVerticalGradient(matrices.peek().getPositionMatrix(), bufferBuilder, startX, startY, stopY, endX, endY, z, colorStart, colorStop, colorEnd); tessellator.draw(); RenderSystem.disableBlend(); - RenderSystem.enableTexture(); } private static void fillVerticalGradient(Matrix4f matrix, BufferBuilder builder, int startX, int startY, int stopY, int endX, int endY, int z, int colorStart, int colorStop, int colorEnd) { @@ -50,7 +48,6 @@ public interface GradientUtil { } static void fillRadialGradient(MatrixStack matrices, int startX, int startY, int endX, int endY, int colorStart, int colorEnd, int z, float radius) { - RenderSystem.disableTexture(); RenderSystem.enableBlend(); RenderSystem.defaultBlendFunc(); RenderSystem.setShader(GameRenderer::getPositionColorProgram); @@ -59,7 +56,6 @@ public interface GradientUtil { tessellator.draw(); } RenderSystem.disableBlend(); - RenderSystem.enableTexture(); } private static boolean fillRadials(Matrix4f matrix, BufferBuilder builder, int startX, int startY, int endX, int endY, int z, int colorStart, int colorEnd, float radius) { diff --git a/src/main/java/com/minelittlepony/unicopia/client/gui/ItemTraitsTooltipRenderer.java b/src/main/java/com/minelittlepony/unicopia/client/gui/ItemTraitsTooltipRenderer.java index 0a765c07..637f4247 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/gui/ItemTraitsTooltipRenderer.java +++ b/src/main/java/com/minelittlepony/unicopia/client/gui/ItemTraitsTooltipRenderer.java @@ -10,6 +10,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.font.TextRenderer.TextLayerType; import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.gui.tooltip.TooltipComponent; import net.minecraft.client.render.Tessellator; @@ -53,7 +54,7 @@ public class ItemTraitsTooltipRenderer implements Text, OrderedText, TooltipComp } @Override - public void drawItems(TextRenderer textRenderer, int x, int y, MatrixStack matrices, ItemRenderer itemRenderer, int z) { + public void drawItems(TextRenderer textRenderer, int x, int y, MatrixStack matrices, ItemRenderer itemRenderer) { int columns = getColumns(); int i = 0; @@ -115,14 +116,13 @@ public class ItemTraitsTooltipRenderer implements Text, OrderedText, TooltipComp public static void renderTraitIcon(Trait trait, float value, MatrixStack matrices, float xx, float yy, boolean reveal) { TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; - ItemRenderer itemRenderer = MinecraftClient.getInstance().getItemRenderer(); int size = 12; RenderSystem.setShaderTexture(0, reveal ? trait.getSprite() : UNKNOWN); matrices.push(); - matrices.translate(xx, yy, itemRenderer.zOffset + 300.0F); + matrices.translate(xx, yy, 300F); DrawableHelper.drawTexture(matrices, 2, 1, 0, 0, 0, size, size, size, size); @@ -132,7 +132,7 @@ public class ItemTraitsTooltipRenderer implements Text, OrderedText, TooltipComp String count = value > 99 ? "99+" : Math.round(value) == value ? (int)value + "" : ((Math.round(value * 10) / 10F) + ""); VertexConsumerProvider.Immediate immediate = VertexConsumerProvider.immediate(Tessellator.getInstance().getBuffer()); - textRenderer.draw(count, 0, 0, 16777215, true, matrices.peek().getPositionMatrix(), immediate, false, 0, 15728880); + textRenderer.draw(count, 0, 0, 16777215, true, matrices.peek().getPositionMatrix(), immediate, TextLayerType.SEE_THROUGH, 0, 15728880); immediate.draw(); matrices.pop(); } diff --git a/src/main/java/com/minelittlepony/unicopia/client/gui/TribeButton.java b/src/main/java/com/minelittlepony/unicopia/client/gui/TribeButton.java index 1f1416f6..220366ed 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/gui/TribeButton.java +++ b/src/main/java/com/minelittlepony/unicopia/client/gui/TribeButton.java @@ -47,7 +47,7 @@ public class TribeButton extends Button { if (hovered && screenWidth > 0) { Identifier id = Race.REGISTRY.getId(race); - drawCenteredText(matrices, getFont(), Text.translatable("gui.unicopia.tribe_selection.describe." + id.getNamespace() + "." + id.getPath()), screenWidth / 2, getY() + height, 0xFFFFFFFF); + drawCenteredTextWithShadow(matrices, getFont(), Text.translatable("gui.unicopia.tribe_selection.describe." + id.getNamespace() + "." + id.getPath()), screenWidth / 2, getY() + height, 0xFFFFFFFF); } } diff --git a/src/main/java/com/minelittlepony/unicopia/client/gui/UHud.java b/src/main/java/com/minelittlepony/unicopia/client/gui/UHud.java index f57dd946..d2d9848d 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/gui/UHud.java +++ b/src/main/java/com/minelittlepony/unicopia/client/gui/UHud.java @@ -181,7 +181,7 @@ public class UHud extends DrawableHelper { view.push(); view.translate(x, y, 0); view.multiply(RotationAxis.POSITIVE_X.rotationDegrees(xDirection * 45)); - InventoryScreen.drawEntity(0, 0, scale, 0, -20, client.player); + InventoryScreen.drawEntity(view, 0, 0, scale, 0, -20, client.player); view.pop(); RenderSystem.applyModelViewMatrix(); }); @@ -235,7 +235,7 @@ public class UHud extends DrawableHelper { color |= alpha; - drawCenteredText(matrices, client.textRenderer, message, 25, -15, color); + drawCenteredTextWithShadow(matrices, client.textRenderer, message, 25, -15, color); } } @@ -261,13 +261,13 @@ public class UHud extends DrawableHelper { GradientUtil.fillRadialGradient(matrices, 0, 0, scaledWidth, scaledHeight, color | (alpha1 << 24), color | (alpha2 << 24), - getZOffset(), 1); + 0, 1); } else { GradientUtil.fillVerticalGradient(matrices, 0, 0, scaledHeight / 2, scaledWidth, scaledHeight, color | (alpha1 << 24), color | (alpha2 << 24), color | (alpha1 << 24), - getZOffset()); + 0); } } @@ -334,7 +334,7 @@ public class UHud extends DrawableHelper { GradientUtil.fillRadialGradient(matrices, 0, 0, scaledWidth, scaledHeight, color | (int)alpha1 << 24, color | (int)alpha2 << 24, - getZOffset(), Math.min(1, radius)); + 0, Math.min(1, radius)); } public void setMessage(Text message) { diff --git a/src/main/java/com/minelittlepony/unicopia/client/gui/spellbook/EquippedSpellSlot.java b/src/main/java/com/minelittlepony/unicopia/client/gui/spellbook/EquippedSpellSlot.java index a0a228f7..7dd29a45 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/gui/spellbook/EquippedSpellSlot.java +++ b/src/main/java/com/minelittlepony/unicopia/client/gui/spellbook/EquippedSpellSlot.java @@ -52,15 +52,15 @@ public class EquippedSpellSlot extends Button { } else { RenderSystem.disableBlend(); RenderSystem.setShaderColor(1, 1, 1, 1); - drawItem((int)pos.x, (int)pos.y); + drawItem(matrices, (int)pos.x, (int)pos.y); } if (isHovered()) { HandledScreen.drawSlotHighlight(matrices, getX(), getY(), 0); } } - protected void drawItem(int x, int y) { - itemRenderer.renderInGui(spell.getDefaultStack(), x, y); + protected void drawItem(MatrixStack matrices, int x, int y) { + itemRenderer.renderInGui(matrices, spell.getDefaultStack(), x, y); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/client/gui/spellbook/IngredientTree.java b/src/main/java/com/minelittlepony/unicopia/client/gui/spellbook/IngredientTree.java index 132dea4e..1e68e6e6 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/gui/spellbook/IngredientTree.java +++ b/src/main/java/com/minelittlepony/unicopia/client/gui/spellbook/IngredientTree.java @@ -20,7 +20,7 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.item.TooltipContext; import net.minecraft.client.render.*; import net.minecraft.client.render.item.ItemRenderer; -import net.minecraft.client.render.model.json.ModelTransformation; +import net.minecraft.client.render.model.json.ModelTransformationMode; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemStack; import net.minecraft.screen.PlayerScreenHandler; @@ -243,11 +243,11 @@ class IngredientTree implements SpellbookRecipe.CraftingTreeBuilder { Vector4f pos = new Vector4f(x, y, 0, 1); pos.mul(matrices.peek().getPositionMatrix()); - drawItem((int)pos.x, (int)pos.y); + drawItem(matrices, (int)pos.x, (int)pos.y); } - protected void drawItem(int x, int y) { - itemRenderer.renderInGui(stack, x, y); + protected void drawItem(MatrixStack matrices, int x, int y) { + itemRenderer.renderInGui(matrices, stack, x, y); } @Override @@ -276,7 +276,7 @@ class IngredientTree implements SpellbookRecipe.CraftingTreeBuilder { } @Override - protected void drawItem(int x, int y) { + protected void drawItem(MatrixStack matrices, int x, int y) { var model = itemRenderer.getModel(stack, null, null, 0); MinecraftClient.getInstance().getTextureManager().getTexture(PlayerScreenHandler.BLOCK_ATLAS_TEXTURE).setFilter(false, false); @@ -286,7 +286,7 @@ class IngredientTree implements SpellbookRecipe.CraftingTreeBuilder { RenderSystem.setShaderColor(1, 1, 1, 0.2F); MatrixStack matrixStack = RenderSystem.getModelViewStack(); matrixStack.push(); - matrixStack.translate(x, y, 100 + itemRenderer.zOffset); + matrixStack.translate(x, y, 100); matrixStack.translate(8, 8, 0); matrixStack.scale(1, -1, 1); matrixStack.scale(8, 8, 8); @@ -298,7 +298,7 @@ class IngredientTree implements SpellbookRecipe.CraftingTreeBuilder { } RenderSystem.disableDepthTest(); try { - itemRenderer.renderItem(stack, ModelTransformation.Mode.GUI, false, new MatrixStack(), layer -> PassThroughVertexConsumer.of(immediate.getBuffer(layer), FIXTURE), 0, OverlayTexture.DEFAULT_UV, model); + itemRenderer.renderItem(stack, ModelTransformationMode.GUI, false, matrices, layer -> PassThroughVertexConsumer.of(immediate.getBuffer(layer), FIXTURE), 0, OverlayTexture.DEFAULT_UV, model); immediate.draw(); } catch (Exception e) { // Sodium diff --git a/src/main/java/com/minelittlepony/unicopia/client/gui/spellbook/SpellbookCraftingPageContent.java b/src/main/java/com/minelittlepony/unicopia/client/gui/spellbook/SpellbookCraftingPageContent.java index da5c2991..d9f2c594 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/gui/spellbook/SpellbookCraftingPageContent.java +++ b/src/main/java/com/minelittlepony/unicopia/client/gui/spellbook/SpellbookCraftingPageContent.java @@ -25,7 +25,7 @@ public class SpellbookCraftingPageContent extends ScrollContainer implements Spe public SpellbookCraftingPageContent(SpellbookScreen screen) { this.screen = screen; backgroundColor = 0xFFf9efd3; - scrollbar.layoutToEnd = true; + verticalScrollbar.layoutToEnd = true; } @Override @@ -72,7 +72,7 @@ public class SpellbookCraftingPageContent extends ScrollContainer implements Spe int top = 0; for (SpellbookRecipe recipe : this.client.world.getRecipeManager().listAllOfType(URecipes.SPELLBOOK)) { if (client.player.getRecipeBook().contains(recipe)) { - IngredientTree tree = new IngredientTree(0, top, width - scrollbar.getBounds().width + 2); + IngredientTree tree = new IngredientTree(0, top, width - verticalScrollbar.getBounds().width + 2); recipe.buildCraftingTree(tree); top += tree.build(this); } diff --git a/src/main/java/com/minelittlepony/unicopia/client/gui/spellbook/SpellbookScreen.java b/src/main/java/com/minelittlepony/unicopia/client/gui/spellbook/SpellbookScreen.java index cafee812..f45173eb 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/gui/spellbook/SpellbookScreen.java +++ b/src/main/java/com/minelittlepony/unicopia/client/gui/spellbook/SpellbookScreen.java @@ -24,7 +24,6 @@ import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.client.gui.screen.recipebook.RecipeBookProvider; import net.minecraft.client.gui.screen.recipebook.RecipeBookWidget; import net.minecraft.client.render.GameRenderer; -import net.minecraft.client.texture.NativeImage; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.screen.slot.Slot; @@ -32,6 +31,7 @@ import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.sound.SoundEvents; import net.minecraft.text.Text; import net.minecraft.util.Identifier; +import net.minecraft.util.math.ColorHelper; public class SpellbookScreen extends HandledScreen implements RecipeBookProvider { public static final Identifier TEXTURE = Unicopia.id("textures/gui/container/book.png"); @@ -143,7 +143,7 @@ public class SpellbookScreen extends HandledScreen imple @Override protected void drawBackground(MatrixStack matrices, float delta, int mouseX, int mouseY) { - renderBackground(matrices, 0); + renderBackground(matrices); RenderSystem.setShaderColor(1, 1, 1, 1); RenderSystem.setShaderTexture(0, TEXTURE); @@ -164,7 +164,7 @@ public class SpellbookScreen extends HandledScreen imple if (color == 0xFFFFFF || color == 0) { v += 48; } else { - RenderSystem.setShaderColor(NativeImage.getRed(color) / 255F, NativeImage.getGreen(color) / 255F, NativeImage.getBlue(color) / 255F, 1); + RenderSystem.setShaderColor(ColorHelper.Abgr.getRed(color) / 255F, ColorHelper.Abgr.getGreen(color) / 255F, ColorHelper.Abgr.getBlue(color) / 255F, 1); } boolean isRight = tab.chapter().side() == TabSide.RIGHT; diff --git a/src/main/java/com/minelittlepony/unicopia/client/gui/spellbook/SpellbookTraitDexPageContent.java b/src/main/java/com/minelittlepony/unicopia/client/gui/spellbook/SpellbookTraitDexPageContent.java index 5f759bb9..7125b993 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/gui/spellbook/SpellbookTraitDexPageContent.java +++ b/src/main/java/com/minelittlepony/unicopia/client/gui/spellbook/SpellbookTraitDexPageContent.java @@ -61,8 +61,8 @@ public class SpellbookTraitDexPageContent extends DrawableHelper implements Spel rightPage.init(screen, page + 1); screen.addPageButtons(187, 30, 350, incr -> { state.swap(incr, (int)Math.ceil(traits.length / 2F)); - leftPage.scrollbar.scrollBy(leftPage.scrollbar.getVerticalScrollAmount()); - rightPage.scrollbar.scrollBy(rightPage.scrollbar.getVerticalScrollAmount()); + leftPage.verticalScrollbar.scrollBy(leftPage.verticalScrollbar.getScrubber().getPosition()); + rightPage.verticalScrollbar.scrollBy(rightPage.verticalScrollbar.getScrubber().getPosition()); }); } @@ -74,8 +74,8 @@ public class SpellbookTraitDexPageContent extends DrawableHelper implements Spel page /= 2; state = screen.getState().getState(SpellbookChapterList.TRAIT_DEX_ID); state.setOffset(page); - leftPage.scrollbar.scrollBy(leftPage.scrollbar.getVerticalScrollAmount()); - rightPage.scrollbar.scrollBy(rightPage.scrollbar.getVerticalScrollAmount()); + leftPage.verticalScrollbar.scrollBy(leftPage.verticalScrollbar.getScrubber().getPosition()); + rightPage.verticalScrollbar.scrollBy(rightPage.verticalScrollbar.getScrubber().getPosition()); GameGui.playSound(SoundEvents.ITEM_BOOK_PAGE_TURN); screen.clearAndInit(); @@ -88,7 +88,7 @@ public class SpellbookTraitDexPageContent extends DrawableHelper implements Spel private final class DexPage extends ScrollContainer { public DexPage() { - scrollbar.layoutToEnd = true; + verticalScrollbar.layoutToEnd = true; backgroundColor = 0xFFf9efd3; getContentPadding().setVertical(10); } diff --git a/src/main/java/com/minelittlepony/unicopia/client/particle/GroundPoundParticle.java b/src/main/java/com/minelittlepony/unicopia/client/particle/GroundPoundParticle.java index 0e9c2e10..5287b7f0 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/particle/GroundPoundParticle.java +++ b/src/main/java/com/minelittlepony/unicopia/client/particle/GroundPoundParticle.java @@ -46,7 +46,7 @@ public class GroundPoundParticle extends Particle { Vec3d vel = new Vec3d(0, (0.5 + (Math.sin(age) * 2.5)) * 5, 0); new Sphere(true, age, 1, 0, 1).translate(getPos()).randomPoints(random).forEach(point -> { - BlockPos pos = new BlockPos(point).down(); + BlockPos pos = BlockPos.ofFloored(point).down(); BlockState state = world.getBlockState(pos); if (state.isAir()) { diff --git a/src/main/java/com/minelittlepony/unicopia/client/render/FloatingArtefactEntityRenderer.java b/src/main/java/com/minelittlepony/unicopia/client/render/FloatingArtefactEntityRenderer.java index ca0144e8..839abd30 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/render/FloatingArtefactEntityRenderer.java +++ b/src/main/java/com/minelittlepony/unicopia/client/render/FloatingArtefactEntityRenderer.java @@ -9,7 +9,7 @@ import net.minecraft.client.render.entity.EntityRenderer; import net.minecraft.client.render.entity.EntityRendererFactory; import net.minecraft.client.render.item.ItemRenderer; import net.minecraft.client.render.model.BakedModel; -import net.minecraft.client.render.model.json.ModelTransformation; +import net.minecraft.client.render.model.json.ModelTransformationMode; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemStack; import net.minecraft.screen.PlayerScreenHandler; @@ -38,7 +38,7 @@ public class FloatingArtefactEntityRenderer extends EntityRenderer Comparison.compareNbt()); }); + DynamicRegistryManager registries = DynamicRegistryManager.of(Registries.REGISTRIES); registry.getRecipeManager().listAllOfType(RecipeType.CRAFTING).stream() .filter(recipe -> recipe instanceof SpellShapedCraftingRecipe) .map(SpellShapedCraftingRecipe.class::cast).forEach(recipe -> { - ItemStack output = recipe.getOutput(); + ItemStack output = recipe.getOutput(registries); if (output.getItem() instanceof MultiItem multiItem && output.getItem() instanceof EnchantableItem enchantable) { multiItem.getDefaultStacks().forEach(outputVariation -> { var spellEffect = enchantable.getSpellEffect(outputVariation); diff --git a/src/main/java/com/minelittlepony/unicopia/container/SpellbookScreenHandler.java b/src/main/java/com/minelittlepony/unicopia/container/SpellbookScreenHandler.java index 2a61fa0c..5c8d81f4 100644 --- a/src/main/java/com/minelittlepony/unicopia/container/SpellbookScreenHandler.java +++ b/src/main/java/com/minelittlepony/unicopia/container/SpellbookScreenHandler.java @@ -165,7 +165,7 @@ public class SpellbookScreenHandler extends ScreenHandler { .stream().sorted(Comparator.comparing(SpellbookRecipe::getPriority)) .findFirst() .filter(recipe -> result.shouldCraftRecipe(world, (ServerPlayerEntity)this.inventory.player, recipe)) - .map(recipe -> recipe.craft(input)) + .map(recipe -> recipe.craft(input, world.getRegistryManager())) .orElseGet(this::getFallbackStack) : ItemStack.EMPTY; outputSlot.setStack(resultStack); @@ -298,10 +298,10 @@ public class SpellbookScreenHandler extends ScreenHandler { } @Override - public void close(PlayerEntity playerEntity) { - super.close(playerEntity); + public void onClosed(PlayerEntity player) { + super.onClosed(player); context.run((world, pos) -> { - dropInventory(playerEntity, input); + dropInventory(player, input); }); } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/AirBalloonEntity.java b/src/main/java/com/minelittlepony/unicopia/entity/AirBalloonEntity.java index 7671f7ae..a5057afb 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/AirBalloonEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/AirBalloonEntity.java @@ -170,8 +170,8 @@ public class AirBalloonEntity extends FlyingEntity implements EntityCollisions.C e.distanceTraveled = 0; e.horizontalSpeed = 0; if (e instanceof LivingEntity l) { - l.limbAngle = 0; - l.limbDistance = 0; + l.limbAnimator.setSpeed(0); + l.limbAnimator.updateLimbs(0, 1); } } } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/ButterflyEntity.java b/src/main/java/com/minelittlepony/unicopia/entity/ButterflyEntity.java index 1155446c..fbb6dfba 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/ButterflyEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/ButterflyEntity.java @@ -166,7 +166,7 @@ public class ButterflyEntity extends AmbientEntity { breedingCooldown--; } - BlockPos below = new BlockPos(getPos().add(0, -0.5, 0)); + BlockPos below = BlockPos.ofFloored(getPos().add(0, -0.5, 0)); visited.entrySet().removeIf(e -> e.getValue() < age - 500); diff --git a/src/main/java/com/minelittlepony/unicopia/entity/CastSpellEntity.java b/src/main/java/com/minelittlepony/unicopia/entity/CastSpellEntity.java index 9c80e18c..a9364259 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/CastSpellEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/CastSpellEntity.java @@ -18,7 +18,7 @@ import net.minecraft.entity.data.DataTracker; import net.minecraft.entity.data.TrackedData; import net.minecraft.entity.data.TrackedDataHandlerRegistry; import net.minecraft.nbt.NbtCompound; -import net.minecraft.network.Packet; +import net.minecraft.network.packet.Packet; import net.minecraft.network.listener.ClientPlayPacketListener; import net.minecraft.text.Text; import net.minecraft.world.World; diff --git a/src/main/java/com/minelittlepony/unicopia/entity/Creature.java b/src/main/java/com/minelittlepony/unicopia/entity/Creature.java index c72d7f66..f0533b18 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/Creature.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/Creature.java @@ -24,7 +24,6 @@ import net.minecraft.entity.SpawnGroup; import net.minecraft.entity.ai.goal.*; import net.minecraft.entity.attribute.DefaultAttributeContainer; import net.minecraft.entity.attribute.EntityAttributes; -import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.data.DataTracker; import net.minecraft.entity.data.TrackedData; import net.minecraft.entity.data.TrackedDataHandlerRegistry; @@ -256,7 +255,7 @@ public class Creature extends Living implements WeaklyOwned.Mutabl @Override public boolean subtractEnergyCost(double amount) { - getMaster().damage(DamageSource.MAGIC, (int)amount/2); + getMaster().damage(asEntity().getDamageSources().magic(), (int)amount/2); return getMaster().getHealth() > 0; } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/EntityPhysics.java b/src/main/java/com/minelittlepony/unicopia/entity/EntityPhysics.java index ffcb2076..4bc6b8f7 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/EntityPhysics.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/EntityPhysics.java @@ -8,7 +8,6 @@ import net.minecraft.block.BlockState; import net.minecraft.block.FenceGateBlock; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.data.TrackedData; import net.minecraft.entity.mob.MobEntity; import net.minecraft.nbt.NbtCompound; @@ -44,7 +43,7 @@ public class EntityPhysics implements Physics, Copyable entity.world.getHeight() + 64) { - entity.damage(DamageSource.OUT_OF_WORLD, 4.0F); + entity.damage(entity.getDamageSources().outOfWorld(), 4.0F); } entity.setOnGround(entity.verticalCollision && entity.getVelocity().getY() > 0); diff --git a/src/main/java/com/minelittlepony/unicopia/entity/FairyEntity.java b/src/main/java/com/minelittlepony/unicopia/entity/FairyEntity.java index ce9e790b..a695e430 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/FairyEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/FairyEntity.java @@ -175,7 +175,7 @@ public class FairyEntity extends PathAwareEntity implements DynamicLightSource, move(MovementType.SELF, getVelocity()); setVelocity(getVelocity().multiply(f)); } - updateLimbs(this, false); + updateLimbs(false); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/entity/FloatingArtefactEntity.java b/src/main/java/com/minelittlepony/unicopia/entity/FloatingArtefactEntity.java index a3f785c0..6fdf43b6 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/FloatingArtefactEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/FloatingArtefactEntity.java @@ -1,6 +1,7 @@ package com.minelittlepony.unicopia.entity; import com.minelittlepony.unicopia.USounds; +import com.minelittlepony.unicopia.entity.damage.UDamageSources; import com.minelittlepony.unicopia.item.UItems; import com.minelittlepony.unicopia.network.Channel; import com.minelittlepony.unicopia.network.MsgSpawnProjectile; @@ -13,14 +14,14 @@ import net.minecraft.entity.data.TrackedData; import net.minecraft.entity.data.TrackedDataHandlerRegistry; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; -import net.minecraft.network.Packet; +import net.minecraft.network.packet.Packet; import net.minecraft.network.listener.ClientPlayPacketListener; import net.minecraft.util.ActionResult; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; -public class FloatingArtefactEntity extends Entity { +public class FloatingArtefactEntity extends Entity implements UDamageSources { private static final TrackedData ITEM = DataTracker.registerData(FloatingArtefactEntity.class, TrackedDataHandlerRegistry.ITEM_STACK); private static final TrackedData STATE = DataTracker.registerData(FloatingArtefactEntity.class, TrackedDataHandlerRegistry.BYTE); @@ -190,6 +191,11 @@ public class FloatingArtefactEntity extends Entity { return Channel.SERVER_SPAWN_PROJECTILE.toPacket(new MsgSpawnProjectile(this)); } + @Override + public World asWorld() { + return world; + } + public enum State { INITIALISING, RUNNING, diff --git a/src/main/java/com/minelittlepony/unicopia/entity/Living.java b/src/main/java/com/minelittlepony/unicopia/entity/Living.java index 5d4cf6a8..8650adb4 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/Living.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/Living.java @@ -8,6 +8,7 @@ import org.jetbrains.annotations.Nullable; import com.google.common.base.Preconditions; import com.minelittlepony.unicopia.USounds; +import com.minelittlepony.unicopia.UTags; import com.minelittlepony.unicopia.Unicopia; import com.minelittlepony.unicopia.ability.Abilities; import com.minelittlepony.unicopia.ability.magic.Caster; @@ -40,6 +41,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; import net.minecraft.network.packet.s2c.play.EntityPassengersSetS2CPacket; import net.minecraft.particle.ParticleTypes; +import net.minecraft.registry.tag.DamageTypeTags; import net.minecraft.server.world.ServerWorld; import net.minecraft.sound.SoundEvents; import net.minecraft.util.Hand; @@ -225,13 +227,13 @@ public abstract class Living implements Equine, Caste Vec3d targetPos = entity.getRotationVector().multiply(2).add(entity.getEyePos()); - if (entity.getWorld().isAir(new BlockPos(targetPos))) { + if (entity.getWorld().isAir(BlockPos.ofFloored(targetPos))) { DragonBreathStore store = DragonBreathStore.get(entity.world); String name = entity.getDisplayName().getString(); store.popEntries(name).forEach(stack -> { Vec3d randomPos = targetPos.add(VecHelper.supply(() -> entity.getRandom().nextTriangular(0.1, 0.5))); - if (!entity.getWorld().isAir(new BlockPos(randomPos))) { + if (!entity.getWorld().isAir(BlockPos.ofFloored(randomPos))) { store.put(name, stack.payload()); } @@ -272,7 +274,7 @@ public abstract class Living implements Equine, Caste public Optional onDamage(DamageSource source, float amount) { - if (source == DamageSource.LIGHTNING_BOLT && (invinsibilityTicks > 0 || tryCaptureLightning())) { + if (source.isIn(DamageTypeTags.IS_LIGHTNING) && (invinsibilityTicks > 0 || tryCaptureLightning())) { return Optional.of(false); } @@ -282,7 +284,7 @@ public abstract class Living implements Equine, Caste this.attacker = attacker; } - if (magical.breaksSunglasses()) { + if (magical.isIn(UTags.BREAKS_SUNGLASSES)) { ItemStack glasses = GlassesItem.getForEntity(entity); if (glasses.getItem() == UItems.SUNGLASSES) { ItemStack broken = UItems.BROKEN_SUNGLASSES.getDefaultStack(); diff --git a/src/main/java/com/minelittlepony/unicopia/entity/SpellbookEntity.java b/src/main/java/com/minelittlepony/unicopia/entity/SpellbookEntity.java index 147bc82b..dbe0b289 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/SpellbookEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/SpellbookEntity.java @@ -58,7 +58,7 @@ public class SpellbookEntity extends MobEntity { if (player instanceof ServerPlayerEntity recipient && player.currentScreenHandler instanceof SpellbookScreenHandler book && getUuid().equals(book.entityId)) { - Channel.SERVER_SPELLBOOK_UPDATE.sendToPlayer(new MsgSpellbookStateChanged<>(player.currentScreenHandler.syncId, state), recipient); + Channel.SERVER_SPELLBOOK_UPDATE.sendToPlayer(new MsgSpellbookStateChanged(book.syncId, state), recipient); } }); }); diff --git a/src/main/java/com/minelittlepony/unicopia/entity/UEntities.java b/src/main/java/com/minelittlepony/unicopia/entity/UEntities.java index db0697f1..0e142aa8 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/UEntities.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/UEntities.java @@ -19,7 +19,6 @@ import net.minecraft.entity.decoration.painting.PaintingVariant; import net.minecraft.entity.mob.FlyingEntity; import net.minecraft.registry.*; import net.minecraft.registry.tag.BiomeTags; -import net.minecraft.world.biome.Biome; public interface UEntities { EntityType BUTTERFLY = register("butterfly", FabricEntityTypeBuilder.create(SpawnGroup.AMBIENT, ButterflyEntity::new) @@ -65,7 +64,7 @@ public interface UEntities { if (!Unicopia.getConfig().disableButterflySpawning.get()) { final Predicate butterflySpawnable = BiomeSelectors.foundInOverworld() - .and(ctx -> ctx.getBiome().getPrecipitation() == Biome.Precipitation.RAIN); + .and(ctx -> ctx.getBiome().hasPrecipitation() && ctx.getBiome().getTemperature() > 0.15F); BiomeModifications.addSpawn(butterflySpawnable.and( BiomeSelectors.tag(BiomeTags.IS_RIVER) diff --git a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/EntityBehaviour.java b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/EntityBehaviour.java index ca1ef0b9..21fbbdcf 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/EntityBehaviour.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/EntityBehaviour.java @@ -11,6 +11,7 @@ import com.minelittlepony.unicopia.entity.duck.LivingEntityDuck; import com.minelittlepony.unicopia.entity.Living; import com.minelittlepony.unicopia.entity.duck.EntityDuck; import com.minelittlepony.unicopia.entity.player.Pony; +import com.minelittlepony.unicopia.util.LimbAnimationUtil; import com.minelittlepony.unicopia.util.RegistryUtils; import net.minecraft.entity.Entity; @@ -131,7 +132,7 @@ public class EntityBehaviour { double y = positionOffset.y + Math.floor(from.getY()); double z = positionOffset.z + Math.floor(from.getZ()) + 0.5; - BlockPos pos = new BlockPos(x, y, z); + BlockPos pos = BlockPos.ofFloored(x, y, z); if (!from.world.isAir(pos) && !from.world.isWater(pos)) { y++; @@ -182,9 +183,7 @@ public class EntityBehaviour { l.bodyYaw = from.bodyYaw; l.prevBodyYaw = from.prevBodyYaw; - l.limbDistance = from.limbDistance; - l.limbAngle = from.limbAngle; - l.lastLimbDistance = from.lastLimbDistance; + LimbAnimationUtil.copy(from.limbAnimator, l.limbAnimator); l.handSwingProgress = from.handSwingProgress; l.lastHandSwingProgress = from.lastHandSwingProgress; diff --git a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/WaterCreatureBehaviour.java b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/WaterCreatureBehaviour.java index 3ea4aced..23299006 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/WaterCreatureBehaviour.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/WaterCreatureBehaviour.java @@ -2,7 +2,6 @@ package com.minelittlepony.unicopia.entity.behaviour; import com.minelittlepony.unicopia.entity.Living; -import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.mob.WaterCreatureEntity; public class WaterCreatureBehaviour extends EntityBehaviour { @@ -13,7 +12,7 @@ public class WaterCreatureBehaviour extends EntityBehaviour source.asEntity().setAir(source.asEntity().getAir() - 1); if (source.asEntity().getAir() == -20) { source.asEntity().setAir(0); - source.asEntity().damage(DamageSource.DRYOUT, 2); + source.asEntity().damage(source.asEntity().getDamageSources().dryOut(), 2); } } else { source.asEntity().setAir(300); diff --git a/src/main/java/com/minelittlepony/unicopia/entity/damage/UDamageSources.java b/src/main/java/com/minelittlepony/unicopia/entity/damage/UDamageSources.java new file mode 100644 index 00000000..743dedbc --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/entity/damage/UDamageSources.java @@ -0,0 +1,38 @@ +package com.minelittlepony.unicopia.entity.damage; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import com.minelittlepony.unicopia.WorldConvertable; +import com.minelittlepony.unicopia.ability.magic.Caster; +import com.minelittlepony.unicopia.util.MagicalDamageSource; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.damage.DamageType; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.world.World; + +public interface UDamageSources extends WorldConvertable { + + static UDamageSources of(World world) { + return () -> world; + } + + private static RegistryEntry entryOf(WorldConvertable world, RegistryKey type) { + return world.asWorld().getRegistryManager().get(RegistryKeys.DAMAGE_TYPE).entryOf(type); + } + + default MagicalDamageSource damageOf(RegistryKey type) { + return new MagicalDamageSource(entryOf(this, type), null); + } + + default MagicalDamageSource damageOf(RegistryKey type, @Nullable LivingEntity source) { + return new MagicalDamageSource(entryOf(this, type), source, null); + } + + default MagicalDamageSource damageOf(RegistryKey type, @NotNull Caster caster) { + return new MagicalDamageSource(entryOf(this, type), caster.asEntity(), caster.getMaster(), caster); + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/entity/damage/UDamageTypes.java b/src/main/java/com/minelittlepony/unicopia/entity/damage/UDamageTypes.java new file mode 100644 index 00000000..cd102c01 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/entity/damage/UDamageTypes.java @@ -0,0 +1,34 @@ +package com.minelittlepony.unicopia.entity.damage; + +import com.minelittlepony.unicopia.Unicopia; + +import net.minecraft.entity.damage.DamageType; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryKeys; + +public interface UDamageTypes { + RegistryKey EXHAUSTION = register("magical_exhaustion"); + RegistryKey ALICORN_AMULET = register("alicorn_amulet"); + RegistryKey FOOD_POISONING = register("food_poisoning"); + RegistryKey TRIBE_SWAP = register("tribe_swap"); + RegistryKey ZAP_APPLE = register("zap"); + RegistryKey KICK = register("kick"); + RegistryKey SMASH = register("smash"); + RegistryKey BAT_SCREECH = register("bat_screech"); + RegistryKey LOVE_DRAINING = register("love_draining"); + RegistryKey LIFE_DRAINING = register("life_draining"); + RegistryKey RAINBOOM = register("rainboom"); + RegistryKey STEAMROLLER = register("steamroller"); + RegistryKey GAVITY_WELL_RECOIL = register("gravity_well_recoil"); + RegistryKey SUN = register("sun"); + RegistryKey SUNLIGHT = register("sunlight"); + RegistryKey PETRIFIED = register("petrified"); + + private static RegistryKey register(String name) { + return RegistryKey.of(RegistryKeys.DAMAGE_TYPE, Unicopia.id(name)); + } + + static void bootstrap() { + + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/entity/effect/CorruptInfluenceStatusEffect.java b/src/main/java/com/minelittlepony/unicopia/entity/effect/CorruptInfluenceStatusEffect.java index 0842ddda..908f2303 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/effect/CorruptInfluenceStatusEffect.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/effect/CorruptInfluenceStatusEffect.java @@ -4,7 +4,8 @@ import org.jetbrains.annotations.Nullable; import com.minelittlepony.unicopia.Owned; import com.minelittlepony.unicopia.entity.Equine; -import com.minelittlepony.unicopia.util.MagicalDamageSource; +import com.minelittlepony.unicopia.entity.Living; +import com.minelittlepony.unicopia.entity.damage.UDamageTypes; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; @@ -69,7 +70,7 @@ public class CorruptInfluenceStatusEffect extends StatusEffect { mob.world.syncWorldEvent((PlayerEntity)null, WorldEvents.ZOMBIE_INFECTS_VILLAGER, mob.getBlockPos(), 0); } } else if (entity.age % 2000 == 0) { - entity.damage(MagicalDamageSource.ALICORN_AMULET, 2); + entity.damage(Living.living(entity).damageOf(UDamageTypes.ALICORN_AMULET), 2); } } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/effect/FoodPoisoningStatusEffect.java b/src/main/java/com/minelittlepony/unicopia/entity/effect/FoodPoisoningStatusEffect.java index b95f7530..c0b6a276 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/effect/FoodPoisoningStatusEffect.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/effect/FoodPoisoningStatusEffect.java @@ -2,7 +2,8 @@ package com.minelittlepony.unicopia.entity.effect; import org.jetbrains.annotations.Nullable; -import com.minelittlepony.unicopia.util.MagicalDamageSource; +import com.minelittlepony.unicopia.entity.Living; +import com.minelittlepony.unicopia.entity.damage.UDamageTypes; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; @@ -34,7 +35,7 @@ public class FoodPoisoningStatusEffect extends StatusEffect { } if (entity.getHealth() > amplifier) { - entity.damage(MagicalDamageSource.FOOD_POISONING, amplifier); + entity.damage(Living.living(entity).damageOf(UDamageTypes.FOOD_POISONING), amplifier); } } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/effect/RaceChangeStatusEffect.java b/src/main/java/com/minelittlepony/unicopia/entity/effect/RaceChangeStatusEffect.java index 5118f561..002c68a9 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/effect/RaceChangeStatusEffect.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/effect/RaceChangeStatusEffect.java @@ -5,10 +5,11 @@ import org.jetbrains.annotations.Nullable; import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.ability.magic.Caster; import com.minelittlepony.unicopia.entity.Equine; +import com.minelittlepony.unicopia.entity.Living; +import com.minelittlepony.unicopia.entity.damage.UDamageTypes; import com.minelittlepony.unicopia.entity.player.MagicReserves; import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.item.UItems; -import com.minelittlepony.unicopia.util.MagicalDamageSource; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; @@ -120,7 +121,7 @@ public class RaceChangeStatusEffect extends StatusEffect { magic.getExertion().set(0); if (!pony.asEntity().isCreative()) { - entity.damage(MagicalDamageSource.TRIBE_SWAP, Float.MAX_VALUE); + entity.damage(Living.living(entity).damageOf(UDamageTypes.TRIBE_SWAP), Float.MAX_VALUE); } } else { eq.setSpecies(race); diff --git a/src/main/java/com/minelittlepony/unicopia/entity/effect/SunBlindnessStatusEffect.java b/src/main/java/com/minelittlepony/unicopia/entity/effect/SunBlindnessStatusEffect.java index 84a5f9c3..7db09496 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/effect/SunBlindnessStatusEffect.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/effect/SunBlindnessStatusEffect.java @@ -4,9 +4,10 @@ import org.jetbrains.annotations.Nullable; import com.minelittlepony.unicopia.EquinePredicates; import com.minelittlepony.unicopia.UTags; +import com.minelittlepony.unicopia.entity.Living; +import com.minelittlepony.unicopia.entity.damage.UDamageTypes; import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.trinkets.TrinketsDelegate; -import com.minelittlepony.unicopia.util.MagicalDamageSource; import net.minecraft.entity.Entity; import net.minecraft.entity.EquipmentSlot; @@ -38,7 +39,7 @@ public class SunBlindnessStatusEffect extends StatusEffect { if (!hasSunExposure(entity)) { entity.setStatusEffect(new StatusEffectInstance(this, (int)(state.getDuration() * 0.8F), Math.max(1, amplifier - 1), true, false), entity); } else { - entity.damage(amplifier == 2 ? MagicalDamageSource.SUN : MagicalDamageSource.SUNLIGHT, amplifier / 5F); + entity.damage(Living.living(entity).damageOf(amplifier == 2 ? UDamageTypes.SUN : UDamageTypes.SUNLIGHT), amplifier / 5F); } } } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/ManaConsumptionUtil.java b/src/main/java/com/minelittlepony/unicopia/entity/player/ManaConsumptionUtil.java index ea95f0b8..fb8991e6 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/ManaConsumptionUtil.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/ManaConsumptionUtil.java @@ -1,6 +1,7 @@ package com.minelittlepony.unicopia.entity.player; -import com.minelittlepony.unicopia.util.MagicalDamageSource; +import com.minelittlepony.unicopia.entity.damage.UDamageSources; +import com.minelittlepony.unicopia.entity.damage.UDamageTypes; import net.minecraft.entity.player.HungerManager; import net.minecraft.entity.player.PlayerEntity; @@ -62,7 +63,7 @@ public interface ManaConsumptionUtil { foodSubtract = addExhaustion(hunger, foodSubtract); foodSubtract -= (consumedHearts / HEARTS_PER_FOOD); if (consumedHearts > 0) { - entity.damage(MagicalDamageSource.EXHAUSTION, consumedHearts); + entity.damage(UDamageSources.of(entity.getWorld()).damageOf(UDamageTypes.EXHAUSTION), consumedHearts); } } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java index 41bbb585..7963f14b 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java @@ -7,6 +7,7 @@ import com.minelittlepony.unicopia.advancement.UCriteria; import com.minelittlepony.unicopia.client.minelittlepony.MineLPDelegate; import com.minelittlepony.unicopia.client.render.PlayerPoser.Animation; import com.minelittlepony.unicopia.entity.*; +import com.minelittlepony.unicopia.entity.damage.UDamageTypes; import com.minelittlepony.unicopia.entity.duck.LivingEntityDuck; import com.minelittlepony.unicopia.entity.player.MagicReserves.Bar; import com.minelittlepony.unicopia.input.Heuristic; @@ -28,8 +29,8 @@ import net.minecraft.entity.EntityPose; import net.minecraft.entity.EntityType; import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.LightningEntity; -import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.damage.DamageSource; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; import net.minecraft.particle.ParticleTypes; @@ -326,8 +327,9 @@ public class PlayerPhysics extends EntityPhysics implements Tickab } } - entity.limbAngle = 20 + (float)Math.cos(entity.age / 7F) - 0.5F; - entity.limbDistance = thrustScale; + // TODO: Probably wrong. Need to redo this + entity.limbAnimator.setSpeed(20 + (float)Math.cos(entity.age / 7F) - 0.5F); + entity.limbAnimator.updateLimbs(thrustScale, 1); } } @@ -480,7 +482,7 @@ public class PlayerPhysics extends EntityPhysics implements Tickab return; } - BlockPos pos = new BlockPos(entity.getCameraPosVec(1).add(entity.getRotationVec(1).normalize().multiply(2))); + BlockPos pos = BlockPos.ofFloored(entity.getCameraPosVec(1).add(entity.getRotationVec(1).normalize().multiply(2))); BlockState state = entity.world.getBlockState(pos); @@ -502,7 +504,7 @@ public class PlayerPhysics extends EntityPhysics implements Tickab } else { entity.playSound(distance > 4 ? SoundEvents.ENTITY_PLAYER_BIG_FALL : SoundEvents.ENTITY_PLAYER_SMALL_FALL, 1, 1); } - entity.damage(DamageSource.FLY_INTO_WALL, distance); + entity.damage(entity.getDamageSources().flyIntoWall(), distance); } } @@ -650,14 +652,15 @@ public class PlayerPhysics extends EntityPhysics implements Tickab if (damage > 0) { pony.subtractEnergyCost(damage / 5F); - entity.damage(DamageSource.FLY_INTO_WALL, Math.min(damage, entity.getHealth() - 1)); + entity.damage(entity.getDamageSources().flyIntoWall(), Math.min(damage, entity.getHealth() - 1)); if (!isEarthPonySmash) { UCriteria.BREAK_WINDOW.trigger(entity); } } if (isEarthPonySmash) { - pony.findAllEntitiesInRange(speed + 4, EntityPredicates.EXCEPT_CREATIVE_OR_SPECTATOR).forEach(e -> e.damage(MagicalDamageSource.STEAMROLLER, 50)); + DamageSource damageSource = pony.damageOf(UDamageTypes.STEAMROLLER); + pony.findAllEntitiesInRange(speed + 4, EntityPredicates.EXCEPT_CREATIVE_OR_SPECTATOR).forEach(e -> e.damage(damageSource, 50)); } pony.updateVelocity(); diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java b/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java index b311959f..ff70e8e0 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java @@ -37,7 +37,7 @@ import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.*; import net.minecraft.entity.attribute.DefaultAttributeContainer; import net.minecraft.entity.damage.DamageSource; -import net.minecraft.entity.damage.EntityDamageSource; +import net.minecraft.entity.damage.DamageTypes; import net.minecraft.entity.data.DataTracker; import net.minecraft.entity.data.TrackedData; import net.minecraft.entity.data.TrackedDataHandlerRegistry; @@ -47,6 +47,7 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; +import net.minecraft.registry.tag.DamageTypeTags; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.world.ServerWorld; import net.minecraft.sound.SoundEvents; @@ -517,12 +518,15 @@ public class Pony extends Living implements Copyable, Update public Optional modifyDamage(DamageSource cause, float amount) { - if (!cause.isUnblockable() && !cause.isMagic() && !cause.isFire() && !cause.isOutOfWorld() - && !(cause instanceof EntityDamageSource && ((EntityDamageSource)cause).isThorns()) - && cause != DamageSource.FREEZE) { + if (!cause.isIn(DamageTypeTags.BYPASSES_SHIELD) + && !cause.isOf(DamageTypes.MAGIC) + && !cause.isIn(DamageTypeTags.IS_FIRE) + && !cause.isIn(DamageTypeTags.BYPASSES_INVULNERABILITY) + && !cause.isOf(DamageTypes.THORNS) + && !cause.isOf(DamageTypes.FREEZE)) { if (getSpecies().canUseEarth() && entity.isSneaking()) { - amount /= (cause.isProjectile() ? 3 : 2) * (entity.getHealth() < 5 ? 3 : 1); + amount /= (cause.isOf(DamageTypes.MOB_PROJECTILE) ? 3 : 2) * (entity.getHealth() < 5 ? 3 : 1); return Optional.of(amount); } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/dummy/DummyClientPlayerEntity.java b/src/main/java/com/minelittlepony/unicopia/entity/player/dummy/DummyClientPlayerEntity.java index af047905..c5da9103 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/dummy/DummyClientPlayerEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/dummy/DummyClientPlayerEntity.java @@ -12,6 +12,7 @@ import net.minecraft.client.network.AbstractClientPlayerEntity; import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.client.network.PlayerListEntry; import net.minecraft.client.world.ClientWorld; +import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.world.GameMode; @@ -53,7 +54,7 @@ public class DummyClientPlayerEntity extends AbstractClientPlayerEntity implemen } @Override - protected void playEquipSound(ItemStack stack) { + public void onEquipStack(EquipmentSlot slot, ItemStack oldStack, ItemStack newStack) { /*noop*/ } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/dummy/DummyPlayerEntity.java b/src/main/java/com/minelittlepony/unicopia/entity/player/dummy/DummyPlayerEntity.java index 0ccd8c13..798dc6e1 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/dummy/DummyPlayerEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/dummy/DummyPlayerEntity.java @@ -7,6 +7,7 @@ import com.minelittlepony.unicopia.Owned; import com.mojang.authlib.GameProfile; import net.minecraft.block.BlockState; +import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; @@ -21,7 +22,7 @@ public class DummyPlayerEntity extends PlayerEntity implements Owned ItemTracker.HOURS) { entity.addStatusEffect(new StatusEffectInstance(StatusEffects.WEAKNESS, 200, 3)); @@ -256,7 +257,7 @@ public class AlicornAmuletItem extends AmuletItem implements ItemTracker.Trackab if (attachedTicks % 100 == 0) { player.getHungerManager().addExhaustion(90F); float healthDrop = MathHelper.clamp(player.getMaxHealth() - player.getHealth(), 2, 5); - player.damage(MagicalDamageSource.ALICORN_AMULET, healthDrop); + player.damage(pony.damageOf(UDamageTypes.ALICORN_AMULET), healthDrop); } return; diff --git a/src/main/java/com/minelittlepony/unicopia/item/AmuletItem.java b/src/main/java/com/minelittlepony/unicopia/item/AmuletItem.java index 110f60b1..d02d0041 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/AmuletItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/AmuletItem.java @@ -67,7 +67,7 @@ public class AmuletItem extends WearableItem implements ChargeableItem { } @Override - public EquipmentSlot getPreferredSlot(ItemStack stack) { + public EquipmentSlot getSlotType(ItemStack stack) { return EquipmentSlot.CHEST; } diff --git a/src/main/java/com/minelittlepony/unicopia/item/BellItem.java b/src/main/java/com/minelittlepony/unicopia/item/BellItem.java index 809462e1..ed16331d 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/BellItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/BellItem.java @@ -6,11 +6,11 @@ import org.jetbrains.annotations.Nullable; import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.entity.Creature; import com.minelittlepony.unicopia.entity.Living; +import com.minelittlepony.unicopia.entity.damage.UDamageTypes; import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.particle.FollowingParticleEffect; import com.minelittlepony.unicopia.particle.MagicParticleEffect; import com.minelittlepony.unicopia.particle.UParticles; -import com.minelittlepony.unicopia.util.MagicalDamageSource; import com.minelittlepony.unicopia.util.VecHelper; import com.minelittlepony.unicopia.util.shape.Sphere; @@ -143,7 +143,7 @@ public class BellItem extends Item implements ChargeableItem { } } else { float damageAmount = Math.min(Math.max(1, living.asEntity().getMaxHealth() / 25F), living.asEntity().getHealth() - 1); - living.asEntity().damage(MagicalDamageSource.EXHAUSTION, damageAmount); + living.asEntity().damage(user.damageOf(UDamageTypes.EXHAUSTION, user), damageAmount); living.asEntity().setAttacker(user.asEntity()); if (living.asEntity() instanceof MobEntity mob) { mob.setTarget(null); diff --git a/src/main/java/com/minelittlepony/unicopia/item/CrystalHeartItem.java b/src/main/java/com/minelittlepony/unicopia/item/CrystalHeartItem.java index 7139b7bb..b3ed6200 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/CrystalHeartItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/CrystalHeartItem.java @@ -8,10 +8,10 @@ import com.google.common.base.Suppliers; import com.minelittlepony.unicopia.*; import com.minelittlepony.unicopia.entity.*; import com.minelittlepony.unicopia.entity.FloatingArtefactEntity.State; +import com.minelittlepony.unicopia.entity.damage.UDamageTypes; import com.minelittlepony.unicopia.particle.FollowingParticleEffect; import com.minelittlepony.unicopia.particle.ParticleUtils; import com.minelittlepony.unicopia.particle.UParticles; -import com.minelittlepony.unicopia.util.MagicalDamageSource; import com.minelittlepony.unicopia.util.VecHelper; import net.minecraft.block.BlockState; @@ -156,7 +156,7 @@ public class CrystalHeartItem extends Item implements FloatingArtefactEntity.Art } inputs.forEach(input -> { - input.damage(MagicalDamageSource.create("feed"), takes); + input.damage(entity.damageOf(UDamageTypes.LIFE_DRAINING), takes); ParticleUtils.spawnParticles(new FollowingParticleEffect(UParticles.HEALTH_DRAIN, entity, 0.2F), input, 1); }); outputs.forEach(output -> { diff --git a/src/main/java/com/minelittlepony/unicopia/item/EnchantedStaffItem.java b/src/main/java/com/minelittlepony/unicopia/item/EnchantedStaffItem.java index 591c7533..b1029969 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/EnchantedStaffItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/EnchantedStaffItem.java @@ -21,7 +21,6 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.particle.ParticleTypes; @@ -178,7 +177,7 @@ public class EnchantedStaffItem extends StaffItem implements EnchantableItem, Ch if (i > 200) { living.clearActiveItem(); - living.damage(DamageSource.MAGIC, 1); + living.damage(entity.getDamageSources().magic(), 1); if (EnchantableItem.isEnchanted(stack) && hasCharge(stack)) { Caster.of(entity).ifPresent(c -> getSpellEffect(stack).create().apply(c)); ChargeableItem.consumeEnergy(stack, 1); diff --git a/src/main/java/com/minelittlepony/unicopia/item/FilledJarItem.java b/src/main/java/com/minelittlepony/unicopia/item/FilledJarItem.java index bfa2f658..b2aeef6d 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/FilledJarItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/FilledJarItem.java @@ -15,7 +15,6 @@ import net.minecraft.entity.FlyingItemEntity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.attribute.EntityAttributeInstance; import net.minecraft.entity.attribute.EntityAttributes; -import net.minecraft.entity.damage.DamageSource; import net.minecraft.item.ItemStack; import net.minecraft.particle.ParticleTypes; import net.minecraft.server.world.ServerWorld; @@ -87,7 +86,7 @@ public class FilledJarItem extends JarItem implements ChameleonItem { damage += instance.getValue(); - if (entity.damage(DamageSource.thrownProjectile(projectile, projectile.getOwner()), damage)) { + if (entity.damage(entity.getDamageSources().thrown(projectile, projectile.getOwner()), damage)) { int knockback = EnchantmentHelper.getLevel(Enchantments.KNOCKBACK, stack); diff --git a/src/main/java/com/minelittlepony/unicopia/item/FriendshipBraceletItem.java b/src/main/java/com/minelittlepony/unicopia/item/FriendshipBraceletItem.java index a40d3e85..53655425 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/FriendshipBraceletItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/FriendshipBraceletItem.java @@ -76,8 +76,8 @@ public class FriendshipBraceletItem extends WearableItem implements DyeableItem, } @Override - public EquipmentSlot getPreferredSlot(ItemStack stack) { - return isSigned(stack) ? EquipmentSlot.CHEST : super.getPreferredSlot(stack); + public EquipmentSlot getSlotType(ItemStack stack) { + return isSigned(stack) ? EquipmentSlot.CHEST : super.getSlotType(); } private boolean checkSignature(ItemStack stack, PlayerEntity player) { diff --git a/src/main/java/com/minelittlepony/unicopia/item/GlassesItem.java b/src/main/java/com/minelittlepony/unicopia/item/GlassesItem.java index 2a7eefb9..c30302ed 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/GlassesItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/GlassesItem.java @@ -20,7 +20,7 @@ public class GlassesItem extends WearableItem { } @Override - public EquipmentSlot getPreferredSlot(ItemStack stack) { + public EquipmentSlot getSlotType(ItemStack stack) { return EquipmentSlot.HEAD; } diff --git a/src/main/java/com/minelittlepony/unicopia/item/GlowingRecipe.java b/src/main/java/com/minelittlepony/unicopia/item/GlowingRecipe.java index 8faae8c9..5ff0cde5 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/GlowingRecipe.java +++ b/src/main/java/com/minelittlepony/unicopia/item/GlowingRecipe.java @@ -5,6 +5,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.recipe.RecipeSerializer; import net.minecraft.recipe.book.CraftingRecipeCategory; +import net.minecraft.registry.DynamicRegistryManager; import net.minecraft.util.Identifier; import net.minecraft.util.Pair; @@ -15,7 +16,7 @@ public class GlowingRecipe extends ItemCombinationRecipe { } @Override - public final ItemStack craft(CraftingInventory inventory) { + public final ItemStack craft(CraftingInventory inventory, DynamicRegistryManager registries) { Pair pair = runMatch(inventory); ItemStack result = pair.getLeft().copy(); diff --git a/src/main/java/com/minelittlepony/unicopia/item/JarInsertRecipe.java b/src/main/java/com/minelittlepony/unicopia/item/JarInsertRecipe.java index 5a791ea5..0bce42f5 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/JarInsertRecipe.java +++ b/src/main/java/com/minelittlepony/unicopia/item/JarInsertRecipe.java @@ -4,6 +4,7 @@ import net.minecraft.inventory.CraftingInventory; import net.minecraft.item.ItemStack; import net.minecraft.recipe.RecipeSerializer; import net.minecraft.recipe.book.CraftingRecipeCategory; +import net.minecraft.registry.DynamicRegistryManager; import net.minecraft.util.Identifier; import net.minecraft.util.Pair; @@ -14,7 +15,7 @@ public class JarInsertRecipe extends ItemCombinationRecipe { } @Override - public final ItemStack craft(CraftingInventory inventory) { + public final ItemStack craft(CraftingInventory inventory, DynamicRegistryManager registries) { Pair pair = runMatch(inventory); return UItems.FILLED_JAR.setAppearance(UItems.FILLED_JAR.getDefaultStack(), pair.getRight()); diff --git a/src/main/java/com/minelittlepony/unicopia/item/WearableItem.java b/src/main/java/com/minelittlepony/unicopia/item/WearableItem.java index 739cf80b..113f0ffb 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/WearableItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/WearableItem.java @@ -9,9 +9,9 @@ import net.minecraft.block.dispenser.ItemDispenserBehavior; import net.minecraft.entity.*; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ArmorMaterials; +import net.minecraft.item.Equipment; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.item.Wearable; import net.minecraft.predicate.entity.EntityPredicates; import net.minecraft.sound.SoundEvent; import net.minecraft.util.Hand; @@ -19,7 +19,7 @@ import net.minecraft.util.TypedActionResult; import net.minecraft.util.math.*; import net.minecraft.world.World; -public abstract class WearableItem extends Item implements Wearable { +public abstract class WearableItem extends Item implements Equipment { public WearableItem(FabricItemSettings settings) { super(configureEquipmentSlotSupplier(settings)); @@ -31,7 +31,7 @@ public abstract class WearableItem extends Item implements Wearable { if (TrinketsDelegate.hasTrinkets()) { return settings; } - return settings.equipmentSlot(s -> ((WearableItem)s.getItem()).getPreferredSlot(s)); + return settings.equipmentSlot(s -> ((WearableItem)s.getItem()).getSlotType(s)); } @Override @@ -49,10 +49,15 @@ public abstract class WearableItem extends Item implements Wearable { return ArmorMaterials.LEATHER.getEquipSound(); } - public EquipmentSlot getPreferredSlot(ItemStack stack) { + @Override + public final EquipmentSlot getSlotType() { return EquipmentSlot.OFFHAND; } + public EquipmentSlot getSlotType(ItemStack stack) { + return getSlotType(); + } + public static boolean dispenseArmor(BlockPointer pointer, ItemStack armor) { return pointer.getWorld().getEntitiesByClass( LivingEntity.class, diff --git a/src/main/java/com/minelittlepony/unicopia/item/ZapAppleItem.java b/src/main/java/com/minelittlepony/unicopia/item/ZapAppleItem.java index e087e58a..883d6ad2 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/ZapAppleItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/ZapAppleItem.java @@ -5,12 +5,13 @@ import java.util.List; import com.minelittlepony.unicopia.UTags; import com.minelittlepony.unicopia.Unicopia; import com.minelittlepony.unicopia.advancement.UCriteria; +import com.minelittlepony.unicopia.entity.Living; +import com.minelittlepony.unicopia.entity.damage.UDamageTypes; import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.item.group.MultiItem; import com.minelittlepony.unicopia.item.toxin.*; import com.minelittlepony.unicopia.particle.ParticleUtils; import com.minelittlepony.unicopia.particle.UParticles; -import com.minelittlepony.unicopia.util.MagicalDamageSource; import com.minelittlepony.unicopia.util.TraceHelper; import com.minelittlepony.unicopia.util.RegistryUtils; @@ -52,7 +53,7 @@ public class ZapAppleItem extends Item implements ChameleonItem, ToxicHolder, Mu public ItemStack finishUsing(ItemStack stack, World w, LivingEntity player) { stack = super.finishUsing(stack, w, player); - player.damage(MagicalDamageSource.ZAP_APPLE, 120); + player.damage(Living.living(player).damageOf(UDamageTypes.ZAP_APPLE), 120); if (w instanceof ServerWorld) { LightningEntity lightning = EntityType.LIGHTNING_BOLT.create(w); @@ -61,7 +62,7 @@ public class ZapAppleItem extends Item implements ChameleonItem, ToxicHolder, Mu player.onStruckByLightning((ServerWorld)w, lightning); if (player instanceof PlayerEntity) { - UCriteria.EAT_TRICK_APPLE.trigger((PlayerEntity)player); + UCriteria.EAT_TRICK_APPLE.trigger(player); } } diff --git a/src/main/java/com/minelittlepony/unicopia/item/group/ItemGroupRegistry.java b/src/main/java/com/minelittlepony/unicopia/item/group/ItemGroupRegistry.java index 48fe243f..0dcadd0d 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/group/ItemGroupRegistry.java +++ b/src/main/java/com/minelittlepony/unicopia/item/group/ItemGroupRegistry.java @@ -29,9 +29,9 @@ public interface ItemGroupRegistry { } static ItemGroup createDynamic(String name, Supplier icon, Supplier> items) { - return FabricItemGroup.builder(Unicopia.id(name)).entries((features, list, k) -> { + return FabricItemGroup.builder(Unicopia.id(name)).entries((context, entries) -> { items.get().forEach(item -> { - list.addAll(ItemGroupRegistry.getVariations(item)); + entries.addAll(ItemGroupRegistry.getVariations(item)); }); }).icon(icon).build(); } diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinDamageSource.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinDamageSource.java index 36de69d2..204fd764 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinDamageSource.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/MixinDamageSource.java @@ -21,26 +21,22 @@ abstract class MixinDamageSource { private void onGetDeathMessage(LivingEntity entity, CallbackInfoReturnable info) { final DamageSource self = (DamageSource)(Object)this; - if (self.isFromFalling()) { - info.setReturnValue(new DamageSource(self.name + ".pegasus").getDeathMessage(entity)); - } else { - Living.getOrEmpty(entity).map(Living::getAttacker).ifPresent(attacker -> { - Entity prime = entity.getPrimeAdversary(); - if (prime != null && !attacker.isOwnedBy(prime)) { - info.setReturnValue(Text.translatable("death.attack.generic.and_also", info.getReturnValue(), attacker.asEntity().getDisplayName())); - return; - } + Living.getOrEmpty(entity).map(Living::getAttacker).ifPresent(attacker -> { + Entity prime = entity.getPrimeAdversary(); + if (prime != null && !attacker.isOwnedBy(prime)) { + info.setReturnValue(Text.translatable("death.attack.generic.and_also", info.getReturnValue(), attacker.asEntity().getDisplayName())); + return; + } - info.setReturnValue(Text.translatable("death.attack." + self.getName() + ".player", entity.getDisplayName(), attacker.asEntity().getDisplayName())); - }); + info.setReturnValue(Text.translatable("death.attack." + self.getName() + ".player", entity.getDisplayName(), attacker.asEntity().getDisplayName())); + }); - Pony.of(entity).filter(e -> e.getSpecies().canFly()).ifPresent(pony -> { - if (pony.getPhysics().isFlying()) { - info.setReturnValue(Text.translatable("death.attack.generic.whilst_flying", info.getReturnValue())); - } - }); - } + Pony.of(entity).filter(e -> e.getSpecies().canFly()).ifPresent(pony -> { + if (pony.getPhysics().isFlying()) { + info.setReturnValue(Text.translatable("death.attack.generic.whilst_flying", info.getReturnValue())); + } + }); } } diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinServerWorld.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinServerWorld.java index 3811ba34..019d5cbd 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinServerWorld.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/MixinServerWorld.java @@ -27,7 +27,7 @@ abstract class MixinServerWorld extends World implements StructureWorldAccess, N private NocturnalSleepManager nocturnalSleepManager; - MixinServerWorld() { super(null, null, null, null, false, false, 0, 0); } + MixinServerWorld() { super(null, null, null, null, null, false, false, 0, 0); } @Inject(method = "onBlockChanged", at = @At("HEAD")) private void onOnBlockChanged(BlockPos pos, BlockState oldState, BlockState newState, CallbackInfo info) { diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinArmorFeatureRenderer.java b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinArmorFeatureRenderer.java index de04cf6e..be01f778 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinArmorFeatureRenderer.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinArmorFeatureRenderer.java @@ -12,6 +12,7 @@ import net.minecraft.client.render.entity.feature.ArmorFeatureRenderer; import net.minecraft.client.render.entity.feature.FeatureRenderer; import net.minecraft.client.render.entity.feature.FeatureRendererContext; import net.minecraft.client.render.entity.model.BipedEntityModel; +import net.minecraft.client.render.model.BakedModelManager; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.LivingEntity; @@ -32,7 +33,7 @@ abstract class MixinArmorFeatureRenderer< } @Inject(method = "", at = @At("RETURN")) - private void onInit(FeatureRendererContext context, A inner, A outer, CallbackInfo info) { + private void onInit(FeatureRendererContext context, A inner, A outer, BakedModelManager bakery, CallbackInfo info) { accessories = new AccessoryFeatureRenderer<>(context); } diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinTranslationStorage.java b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinTranslationStorage.java index 238b7149..0d7d86a7 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinTranslationStorage.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinTranslationStorage.java @@ -15,9 +15,9 @@ abstract class MixinTranslationStorage { private @Final Map translations; @Inject(method = "get", at = @At("HEAD"), cancellable = true) - public void onGet(String key, CallbackInfoReturnable info) { + public void onGet(String key, String fallback, CallbackInfoReturnable info) { if (key != null && key.contains(".pegasus") && !translations.containsKey(key)) { - info.setReturnValue(translations.getOrDefault(key.replace(".pegasus", ""), key)); + info.setReturnValue(translations.getOrDefault(key.replace(".pegasus", ""), fallback)); } } diff --git a/src/main/java/com/minelittlepony/unicopia/projectile/MagicProjectileEntity.java b/src/main/java/com/minelittlepony/unicopia/projectile/MagicProjectileEntity.java index 2b6d370a..cd831019 100644 --- a/src/main/java/com/minelittlepony/unicopia/projectile/MagicProjectileEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/projectile/MagicProjectileEntity.java @@ -27,7 +27,6 @@ import com.minelittlepony.unicopia.network.datasync.EffectSync; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.data.DataTracker; import net.minecraft.entity.data.TrackedData; import net.minecraft.entity.data.TrackedDataHandlerRegistry; @@ -37,7 +36,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.nbt.NbtCompound; -import net.minecraft.network.Packet; +import net.minecraft.network.packet.Packet; import net.minecraft.network.listener.ClientPlayPacketListener; import net.minecraft.particle.ItemStackParticleEffect; import net.minecraft.particle.ParticleEffect; @@ -290,7 +289,7 @@ public class MagicProjectileEntity extends ThrownItemEntity implements Caster 0) { - entity.damage(DamageSource.thrownProjectile(this, getOwner()), getThrowDamage()); + entity.damage(getDamageSources().thrown(this, getOwner()), getThrowDamage()); } forEachDelegates(effect -> effect.onImpact(this, hit), ProjectileDelegate.EntityHitListener.PREDICATE); diff --git a/src/main/java/com/minelittlepony/unicopia/server/world/FernFoliagePlacer.java b/src/main/java/com/minelittlepony/unicopia/server/world/FernFoliagePlacer.java index 15d76b37..71f49293 100644 --- a/src/main/java/com/minelittlepony/unicopia/server/world/FernFoliagePlacer.java +++ b/src/main/java/com/minelittlepony/unicopia/server/world/FernFoliagePlacer.java @@ -1,7 +1,5 @@ package com.minelittlepony.unicopia.server.world; -import java.util.function.BiConsumer; - import com.minelittlepony.unicopia.Unicopia; import com.minelittlepony.unicopia.block.UBlocks; import com.mojang.serialization.Codec; @@ -32,7 +30,7 @@ public class FernFoliagePlacer extends FoliagePlacer { } @Override - protected void generate(TestableWorld world, BiConsumer placer, Random random, + protected void generate(TestableWorld world, BlockPlacer placer, Random random, TreeFeatureConfig config, int trunkHeight, TreeNode node, int foliageHeight, int radius, int offset) { BlockPos center = node.getCenter(); @@ -70,16 +68,16 @@ public class FernFoliagePlacer extends FoliagePlacer { if (outset == 1) { BlockState fruitState = UBlocks.BANANAS.getDefaultState(); if (random.nextInt(5) == 0) { - placer.accept(pos.set(center, outset, fanY - 1, 0), fruitState); + placer.placeBlock(pos.set(center, outset, fanY - 1, 0), fruitState); } if (random.nextInt(5) == 0) { - placer.accept(pos.set(center, -outset, fanY - 1, 0), fruitState); + placer.placeBlock(pos.set(center, -outset, fanY - 1, 0), fruitState); } if (random.nextInt(5) == 0) { - placer.accept(pos.set(center, 0, fanY - 1, outset), fruitState); + placer.placeBlock(pos.set(center, 0, fanY - 1, outset), fruitState); } if (random.nextInt(5) == 0) { - placer.accept(pos.set(center, 0, fanY - 1, -outset), fruitState); + placer.placeBlock(pos.set(center, 0, fanY - 1, -outset), fruitState); } } } diff --git a/src/main/java/com/minelittlepony/unicopia/server/world/Tree.java b/src/main/java/com/minelittlepony/unicopia/server/world/Tree.java index 7f4f385b..885effb5 100644 --- a/src/main/java/com/minelittlepony/unicopia/server/world/Tree.java +++ b/src/main/java/com/minelittlepony/unicopia/server/world/Tree.java @@ -46,7 +46,7 @@ public record Tree ( var reg = registries.asDynamicRegistryManager().createRegistryLookup().getOrThrow(RegistryKeys.CONFIGURED_FEATURE); REGISTRY.stream().filter(tree -> tree.placedFeatureId().isPresent()).forEach(tree -> { var placedFeature = new PlacedFeature(reg.getOrThrow(tree.configuredFeatureId()), - VegetationPlacedFeatures.modifiersWithWouldSurvive(tree.placement().orElseThrow(), tree.sapling().orElse(Blocks.OAK_SAPLING)) + VegetationPlacedFeatures.treeModifiersWithWouldSurvive(tree.placement().orElseThrow(), tree.sapling().orElse(Blocks.OAK_SAPLING)) ); Registry.register(registry, tree.id, placedFeature); diff --git a/src/main/java/com/minelittlepony/unicopia/trinkets/TrinketsDelegateImpl.java b/src/main/java/com/minelittlepony/unicopia/trinkets/TrinketsDelegateImpl.java index fa28f896..4e552210 100644 --- a/src/main/java/com/minelittlepony/unicopia/trinkets/TrinketsDelegateImpl.java +++ b/src/main/java/com/minelittlepony/unicopia/trinkets/TrinketsDelegateImpl.java @@ -14,6 +14,7 @@ import dev.emi.trinkets.api.event.TrinketDropCallback; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Equipment; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; @@ -40,7 +41,7 @@ public class TrinketsDelegateImpl implements TrinketsDelegate { return getInventory(entity, slot).map(inventory -> { for (int position = 0; position < inventory.size(); position++) { if (inventory.getStack(position).isEmpty() && TrinketSlot.canInsert(stack, new SlotReference(inventory, position), entity)) { - SoundEvent soundEvent = stack.getEquipSound(); + SoundEvent soundEvent = stack.getItem() instanceof Equipment q ? q.getEquipSound() : null; inventory.setStack(position, stack.split(1)); if (soundEvent != null) { entity.emitGameEvent(GameEvent.EQUIP); @@ -56,7 +57,7 @@ public class TrinketsDelegateImpl implements TrinketsDelegate { @Override public void setEquippedStack(LivingEntity entity, Identifier slot, ItemStack stack) { getInventory(entity, slot).ifPresent(inventory -> { - SoundEvent soundEvent = stack.getEquipSound(); + SoundEvent soundEvent = stack.getItem() instanceof Equipment q ? q.getEquipSound() : null; inventory.clear(); inventory.setStack(0, stack); if (soundEvent != null) { @@ -138,7 +139,7 @@ public class TrinketsDelegateImpl implements TrinketsDelegate { Trinket trinket = TrinketsApi.getTrinket(stack.getItem()); - SoundEvent soundEvent = stack.getEquipSound(); + SoundEvent soundEvent = stack.getItem() instanceof Equipment q ? q.getEquipSound() : null; inv.setStack(i, stack.split(trinket instanceof UnicopiaTrinket ut ? ut.getMaxCount(stack, ref) : stack.getMaxCount())); if (!stack.isEmpty() && soundEvent != null) { user.emitGameEvent(GameEvent.EQUIP); diff --git a/src/main/java/com/minelittlepony/unicopia/trinkets/UnicopiaTrinket.java b/src/main/java/com/minelittlepony/unicopia/trinkets/UnicopiaTrinket.java index 28b5967d..6dc96b19 100644 --- a/src/main/java/com/minelittlepony/unicopia/trinkets/UnicopiaTrinket.java +++ b/src/main/java/com/minelittlepony/unicopia/trinkets/UnicopiaTrinket.java @@ -11,10 +11,10 @@ import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.attribute.EntityAttribute; import net.minecraft.entity.attribute.EntityAttributeModifier; +import net.minecraft.item.Equipment; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.predicate.entity.EntityPredicates; -import net.minecraft.sound.SoundEvent; public class UnicopiaTrinket implements Trinket { @@ -30,9 +30,8 @@ public class UnicopiaTrinket implements Trinket { return; } - SoundEvent soundEvent = stack.getEquipSound(); - if (soundEvent != null) { - entity.playSound(soundEvent, 1, 1); + if (stack.getItem() instanceof Equipment q) { + entity.playSound( q.getEquipSound(), 1, 1); } } @@ -65,7 +64,7 @@ public class UnicopiaTrinket implements Trinket { public Multimap getModifiers(ItemStack stack, SlotReference slot, LivingEntity entity, UUID uuid) { Multimap modifiers = Trinket.super.getModifiers(stack, slot, entity, uuid); if (item instanceof WearableItem wearable) { - item.getAttributeModifiers(wearable.getPreferredSlot(stack)); + item.getAttributeModifiers(wearable.getSlotType(stack)); } return modifiers; } diff --git a/src/main/java/com/minelittlepony/unicopia/util/LimbAnimationUtil.java b/src/main/java/com/minelittlepony/unicopia/util/LimbAnimationUtil.java new file mode 100644 index 00000000..1299a0fc --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/util/LimbAnimationUtil.java @@ -0,0 +1,23 @@ +package com.minelittlepony.unicopia.util; + +import net.minecraft.entity.LimbAnimator; + +public interface LimbAnimationUtil { + + static void resetToZero(LimbAnimator animator) { + animator.setSpeed(0); + animator.updateLimbs(-animator.getPos(), 1); + animator.setSpeed(0); + } + + static void copy(LimbAnimator from, LimbAnimator to) { + float prevSpeed = from.getSpeed(0); + float speed = from.getSpeed(); + float pos = from.getPos(); + + resetToZero(to); + to.setSpeed(prevSpeed); + to.updateLimbs(pos, 1); + to.setSpeed(speed); + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/util/MagicalDamageSource.java b/src/main/java/com/minelittlepony/unicopia/util/MagicalDamageSource.java index 7834af8f..7f3a7d64 100644 --- a/src/main/java/com/minelittlepony/unicopia/util/MagicalDamageSource.java +++ b/src/main/java/com/minelittlepony/unicopia/util/MagicalDamageSource.java @@ -10,62 +10,34 @@ import com.minelittlepony.unicopia.entity.player.Pony; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.damage.DamageSource; -import net.minecraft.entity.damage.EntityDamageSource; +import net.minecraft.entity.damage.DamageType; import net.minecraft.item.ItemStack; +import net.minecraft.registry.entry.RegistryEntry; import net.minecraft.text.Text; +import net.minecraft.util.math.Vec3d; -public class MagicalDamageSource extends EntityDamageSource { - public static final DamageSource EXHAUSTION = new MagicalDamageSource("magical_exhaustion", null, true, true); - public static final DamageSource ALICORN_AMULET = new MagicalDamageSource("alicorn_amulet", null, true, true); - public static final DamageSource FOOD_POISONING = new DamageSource("food_poisoning"); - public static final DamageSource TRIBE_SWAP = new DamageSource("tribe_swap").setOutOfWorld().setUnblockable(); - public static final DamageSource ZAP_APPLE = create("zap"); - public static final DamageSource KICK = create("kick"); - public static final DamageSource STEAMROLLER = create("steamroller"); - public static final DamageSource SUN = new DamageSource("sun").setBypassesArmor().setFire(); - public static final DamageSource SUNLIGHT = new DamageSource("sunlight").setBypassesArmor().setFire(); - public static final DamageSource PETRIFIED = new DamageSource("petrified").setBypassesArmor().setFire(); - - public static MagicalDamageSource create(String type) { - return new MagicalDamageSource(type, null, null, false, false); - } - - public static MagicalDamageSource create(String type, @Nullable LivingEntity source) { - return new MagicalDamageSource(type, source, null, false, false); - } - - public static MagicalDamageSource create(String type, Caster caster) { - return new MagicalDamageSource(type, caster.getMaster(), caster, false, false); - } - +public class MagicalDamageSource extends DamageSource { @Nullable - private Caster spell; + private final Caster spell; - private boolean breakSunglasses; - - protected MagicalDamageSource(String type, @Nullable Caster spell, boolean direct, boolean unblockable) { - this(type, null, spell, direct, unblockable); + public MagicalDamageSource(RegistryEntry type, @Nullable Entity source, @Nullable Entity attacker, @Nullable Caster caster) { + super(type, source, attacker); + spell = caster; } - protected MagicalDamageSource(String type, @Nullable Entity source, @Nullable Caster spell, boolean direct, boolean unblockable) { - super(type, source); - this.spell = spell; - setUsesMagic(); - if (direct) { - setBypassesArmor(); - } - if (unblockable) { - setUnblockable(); - } + public MagicalDamageSource(RegistryEntry type, Vec3d position, @Nullable Caster caster) { + super(type, position); + spell = caster; } - public MagicalDamageSource setBreakSunglasses() { - breakSunglasses = true; - return this; + public MagicalDamageSource(RegistryEntry type, @Nullable Entity attacker, @Nullable Caster caster) { + super(type, attacker); + spell = caster; } - public boolean breaksSunglasses() { - return breakSunglasses; + public MagicalDamageSource(RegistryEntry type, @Nullable Caster caster) { + super(type); + spell = caster; } @Nullable @@ -76,13 +48,13 @@ public class MagicalDamageSource extends EntityDamageSource { @Override public Text getDeathMessage(LivingEntity target) { - String basic = "death.attack." + name; + String basic = "death.attack." + getName(); List params = new ArrayList<>(); params.add(target.getDisplayName()); @Nullable - Entity attacker = source != null ? source : target.getPrimeAdversary(); + Entity attacker = getSource() != null ? getSource() : target.getPrimeAdversary(); ItemStack item = attacker instanceof LivingEntity ? ((LivingEntity)attacker).getMainHandStack() : ItemStack.EMPTY; if (attacker == target) { diff --git a/src/main/java/com/minelittlepony/unicopia/util/shape/Shape.java b/src/main/java/com/minelittlepony/unicopia/util/shape/Shape.java index 8ac9f38e..b870c0c4 100644 --- a/src/main/java/com/minelittlepony/unicopia/util/shape/Shape.java +++ b/src/main/java/com/minelittlepony/unicopia/util/shape/Shape.java @@ -37,8 +37,8 @@ public interface Shape extends PointGenerator { */ default Stream getBlockPositions() { return BlockPos.stream( - new BlockPos(getLowerBound()), - new BlockPos(getUpperBound()) + BlockPos.ofFloored(getLowerBound()), + BlockPos.ofFloored(getUpperBound()) ).filter(pos -> isPointInside(Vec3d.ofCenter(pos))); } diff --git a/src/main/resources/assets/unicopia/lang/en_us.json b/src/main/resources/assets/unicopia/lang/en_us.json index 67cec935..428e34eb 100644 --- a/src/main/resources/assets/unicopia/lang/en_us.json +++ b/src/main/resources/assets/unicopia/lang/en_us.json @@ -649,18 +649,19 @@ "death.attack.alicorn_amulet": "%1$s was driven insane", "death.attack.alicorn_amulet.player": "%1$s went insane whilst fighting %2$s", "death.attack.darkness": "%1$s went missing", - "death.attack.feed": "%1$s was drained of all life", - "death.attack.feed.player": "%1$s died to feed %2$s", - "death.attack.drain": "%1$s was drained of all life", - "death.attack.drain.self": "%1$s was killed by their own spell", - "death.attack.drain.player": "%1$s was killed by a spell cast by %2$s", - "death.attack.eeee": "%1$s was frightened to death", - "death.attack.eeee.player": "%2$s scared %1$s", - "death.attack.eeee.item": "%1$s was frightened to death by %2$s using %3$s", - "death.attack.eeee.self": "%1$s scared themselves to death", - "death.attack.cold": "%1$s froze to death", - "death.attack.cold.self": "%1$s froze to death", - "death.attack.cold.player": "%1$s was frozen to death by %2$s", + "death.attack.love_draining": "%1$s was drained of all life", + "death.attack.love_draining.player": "%1$s died to feed %2$s", + "death.attack.life_draining": "%1$s was drained of all life", + "death.attack.life_draining.self": "%1$s was killed by their own spell", + "death.attack.life_draining.player": "%1$s was killed by a spell cast by %2$s", + "death.attack.bat_screech": "%1$s was frightened to death", + "death.attack.bat_screech.player": "%2$s scared %1$s", + "death.attack.bat_screech.item": "%1$s was frightened to death by %2$s using %3$s", + "death.attack.bat_screech.self": "%1$s scared themselves to death", + "death.attack.gravity_well_recoil": "%1$s turned into spaghetti", + "death.attack.gravity_well_recoil.player": "%1$s turned into spaghetti by a spell cast by %2$s", + "death.attack.gravity_well_recoil.item": "%1$s turned into spaghetti by a spell cast by %2$s using %3$s", + "death.attack.gravity_well_recoil.self": "%1$s cast a spell that turned them into spaghetti", "death.attack.smash": "%1$s was crushed under hoof", "death.attack.smash.player": "%1$s was crushed by %2$s", "death.attack.zap": "%1$s bit into a Zap Apple", diff --git a/src/main/resources/data/minecraft/tags/damage_types/avoids_guardian_thorns.json b/src/main/resources/data/minecraft/tags/damage_types/avoids_guardian_thorns.json new file mode 100644 index 00000000..ee97d4f7 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/damage_types/avoids_guardian_thorns.json @@ -0,0 +1,15 @@ +{ + "replace": false, + "values": [ + "unicopia:exhaustion", + "unicopia:alicorn_amulet", + "unicopia:zap", + "unicopia:kick", + "unicopia:smash", + "unicopia:bat_screech", + "unicopia:love_draining", + "unicopia:life_draining", + "unicopia:rainboom", + "unicopia:steamroller" + ] +} diff --git a/src/main/resources/data/minecraft/tags/damage_types/bypasses_armor.json b/src/main/resources/data/minecraft/tags/damage_types/bypasses_armor.json new file mode 100644 index 00000000..7420a702 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/damage_types/bypasses_armor.json @@ -0,0 +1,18 @@ +{ + "replace": false, + "values": [ + "unicopia:exhaustion", + "unicopia:alicorn_amulet", + "unicopia:zap", + "unicopia:kick", + "unicopia:smash", + "unicopia:bat_screech", + "unicopia:love_draining", + "unicopia:life_draining", + "unicopia:steamroller", + "unicopia:rainboom", + "unicopia:sun", + "unicopia:sunlight", + "unicopia:petrified" + ] +} diff --git a/src/main/resources/data/minecraft/tags/damage_types/bypasses_invulnerability.json b/src/main/resources/data/minecraft/tags/damage_types/bypasses_invulnerability.json new file mode 100644 index 00000000..c1aca849 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/damage_types/bypasses_invulnerability.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "unicopia:tribe_swap" + ] +} diff --git a/src/main/resources/data/minecraft/tags/damage_types/bypasses_shield.json b/src/main/resources/data/minecraft/tags/damage_types/bypasses_shield.json new file mode 100644 index 00000000..20774745 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/damage_types/bypasses_shield.json @@ -0,0 +1,12 @@ +{ + "replace": false, + "values": [ + "unicopia:exhaustion", + "unicopia:bat_screech", + "unicopia:alicorn_amulet", + "unicopia:love_draining", + "unicopia:life_draining", + "unicopia:rainboom", + "unicopia:tribe_swap" + ] +} diff --git a/src/main/resources/data/minecraft/tags/damage_types/is_fire.json b/src/main/resources/data/minecraft/tags/damage_types/is_fire.json new file mode 100644 index 00000000..a829ffba --- /dev/null +++ b/src/main/resources/data/minecraft/tags/damage_types/is_fire.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "unicopia:sun", + "unicopia:sunlight", + "unicopia:petrified" + ] +} diff --git a/src/main/resources/data/minecraft/tags/damage_types/is_lightning.json b/src/main/resources/data/minecraft/tags/damage_types/is_lightning.json new file mode 100644 index 00000000..ccf5e5e7 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/damage_types/is_lightning.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "unicopia:zap" + ] +} diff --git a/src/main/resources/data/minecraft/tags/damage_types/witch_resistant_to.json b/src/main/resources/data/minecraft/tags/damage_types/witch_resistant_to.json new file mode 100644 index 00000000..33b7c52e --- /dev/null +++ b/src/main/resources/data/minecraft/tags/damage_types/witch_resistant_to.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "unicopia:exhaustion", + "unicopia:alicorn_amulet", + "unicopia:zap", + "unicopia:love_draining", + "unicopia:life_draining", + "unicopia:kick", + "unicopia:smash", + "unicopia:steamroller" + ] +} diff --git a/src/main/resources/data/unicopia/tags/damage_types/breaks_sunglasses.json b/src/main/resources/data/unicopia/tags/damage_types/breaks_sunglasses.json new file mode 100644 index 00000000..3c832cc1 --- /dev/null +++ b/src/main/resources/data/unicopia/tags/damage_types/breaks_sunglasses.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "unicopia:bat_screech", + "unicopia:rainboom" + ] +}