From 0226caaf65af745e2d0fcb966af86990cc71f60d Mon Sep 17 00:00:00 2001 From: Crystal Spider Date: Thu, 20 Jun 2024 16:45:18 +0200 Subject: [PATCH 1/3] Add support for Soul Fire'd and fix entities dropping raw food when oneshotted by hellfork or soulfork tridents. --- build.gradle | 14 +++++- gradle.properties | 1 + gradle/wrapper/gradle-wrapper.properties | 2 +- .../org/ladysnake/impaled/common/Impaled.java | 6 +-- .../common/entity/FireTridentEntity.java | 50 +++++++++++++++++++ .../impaled/common/entity/HellforkEntity.java | 21 ++------ .../impaled/common/entity/SoulforkEntity.java | 31 +++--------- .../impaled/common/init/ImpaledItems.java | 4 +- .../impaled/common/item/HellforkItem.java | 9 +++- .../ladysnake/impaled/compat/SoulFired.java | 12 +++++ .../mixin/impaling/PlayerEntityMixin.java | 8 +++ src/main/resources/fabric.mod.json | 3 ++ 12 files changed, 112 insertions(+), 49 deletions(-) create mode 100644 src/main/java/org/ladysnake/impaled/common/entity/FireTridentEntity.java create mode 100644 src/main/java/org/ladysnake/impaled/compat/SoulFired.java diff --git a/build.gradle b/build.gradle index d95c792..ce180d7 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version "1.4-SNAPSHOT" + id 'fabric-loom' version "1.5-SNAPSHOT" id 'io.github.ladysnake.chenille' version '0.11.3' } @@ -58,6 +58,16 @@ repositories { maven { url "https://maven.willbl.dev/releases" } // bookshelf maven { url 'https://maven.blamejared.com' } + // Soul Fire'd + maven { + name = "Crystal Nest" + url = "https://maven.crystalnest.it" + } + // FCAP for Soul Fire'd. + maven { + name = "Fuzs Mod Resources" + url = "https://raw.githubusercontent.com/Fuzss/modresources/main/maven/" + } } dependencies { @@ -82,6 +92,8 @@ dependencies { modRuntimeOnly(libs.bundles.enchancement) { exclude group: "net.fabricmc.fabric-api" } + + modImplementation "it.crystalnest:soul-fire-d-fabric:${project.minecraft_version}-${soul_fire_d_version}" } processResources { diff --git a/gradle.properties b/gradle.properties index 3b1b70b..cf52911 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,6 +18,7 @@ archives_base_name = impaled findbugs_version = 3.0.2 jb_annotations_version = 15.0 apiguardian_version = 1.0.0 +soul_fire_d_version = 4.0.0 #Publishing owners = Ladysnake diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 1af9e09..a441313 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/src/main/java/org/ladysnake/impaled/common/Impaled.java b/src/main/java/org/ladysnake/impaled/common/Impaled.java index 0b4cb81..3194d1a 100644 --- a/src/main/java/org/ladysnake/impaled/common/Impaled.java +++ b/src/main/java/org/ladysnake/impaled/common/Impaled.java @@ -27,13 +27,13 @@ public void onInitialize() { // add loot to dungeons, mineshafts, jungle temples, and stronghold libraries chests loot tables UniformLootNumberProvider lootTableRange = UniformLootNumberProvider.create(1, 1); - LootCondition chanceLootCondition = RandomChanceLootCondition.builder(60).build(); + LootCondition.Builder chanceLootCondition = RandomChanceLootCondition.builder(60); LootTableEvents.MODIFY.register((resourceManager, lootManager, id, supplier, setter) -> { if (BASTION_TREASURE_CHEST_LOOT_TABLE_ID.equals(id)) { - LootPool lootPool = LootPool.builder() + LootPool.Builder lootPool = LootPool.builder() .rolls(lootTableRange) .conditionally(chanceLootCondition) - .with(ItemEntry.builder(ImpaledItems.ANCIENT_TRIDENT).build()).build(); + .with(ItemEntry.builder(ImpaledItems.ANCIENT_TRIDENT)); supplier.pool(lootPool); } diff --git a/src/main/java/org/ladysnake/impaled/common/entity/FireTridentEntity.java b/src/main/java/org/ladysnake/impaled/common/entity/FireTridentEntity.java new file mode 100644 index 0000000..92cf3aa --- /dev/null +++ b/src/main/java/org/ladysnake/impaled/common/entity/FireTridentEntity.java @@ -0,0 +1,50 @@ +package org.ladysnake.impaled.common.entity; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.LivingEntity; +import net.minecraft.particle.ParticleTypes; +import net.minecraft.util.hit.EntityHitResult; +import net.minecraft.world.World; + +public abstract class FireTridentEntity extends ImpaledTridentEntity { + public FireTridentEntity(EntityType entityType, World world) { + super(entityType, world); + } + + @Override + protected void onEntityHit(EntityHitResult entityHitResult) { + Entity entity = entityHitResult.getEntity(); + if (entity instanceof LivingEntity livingEntity && livingEntity.getType() != EntityType.ENDERMAN) { + setTargetOnFireFor(livingEntity, 1); + super.onEntityHit(entityHitResult); + } + } + + @Override + protected void onHit(LivingEntity target) { + super.onHit(target); + setTargetOnFireFor(target, 8); + } + + @Override + public boolean isOnFire() { + return true; + } + + @Override + public boolean doesRenderOnFire() { + return false; + } + + @Override + public void tick() { + super.tick(); + + if (this.isSubmergedInWater() && this.getWorld().isClient() && this.random.nextInt(5) == 0) { + this.getWorld().addParticle(ParticleTypes.BUBBLE_COLUMN_UP, this.getX() + random.nextGaussian() / 10, this.getY() + random.nextGaussian() / 10, this.getZ() + random.nextGaussian() / 10, 0, this.random.nextFloat(), 0); + } + } + + protected abstract void setTargetOnFireFor(LivingEntity target, int seconds); +} diff --git a/src/main/java/org/ladysnake/impaled/common/entity/HellforkEntity.java b/src/main/java/org/ladysnake/impaled/common/entity/HellforkEntity.java index 6c12831..5bcf267 100644 --- a/src/main/java/org/ladysnake/impaled/common/entity/HellforkEntity.java +++ b/src/main/java/org/ladysnake/impaled/common/entity/HellforkEntity.java @@ -2,10 +2,9 @@ import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.particle.ParticleTypes; import net.minecraft.world.World; -public class HellforkEntity extends ImpaledTridentEntity { +public class HellforkEntity extends FireTridentEntity { public HellforkEntity(EntityType entityType, World world) { super(entityType, world); } @@ -17,21 +16,7 @@ protected void onHit(LivingEntity target) { } @Override - public boolean isOnFire() { - return true; - } - - @Override - public boolean doesRenderOnFire() { - return false; - } - - @Override - public void tick() { - super.tick(); - - if (this.isSubmergedInWater() && this.getWorld().isClient() && this.random.nextInt(5) == 0) { - this.getWorld().addParticle(ParticleTypes.BUBBLE_COLUMN_UP, this.getX() + random.nextGaussian() / 10, this.getY() + random.nextGaussian() / 10, this.getZ() + random.nextGaussian() / 10, 0, this.random.nextFloat(), 0); - } + protected void setTargetOnFireFor(LivingEntity target, int seconds) { + target.setOnFireFor(seconds); } } diff --git a/src/main/java/org/ladysnake/impaled/common/entity/SoulforkEntity.java b/src/main/java/org/ladysnake/impaled/common/entity/SoulforkEntity.java index 7ba8afd..1562492 100644 --- a/src/main/java/org/ladysnake/impaled/common/entity/SoulforkEntity.java +++ b/src/main/java/org/ladysnake/impaled/common/entity/SoulforkEntity.java @@ -1,37 +1,22 @@ package org.ladysnake.impaled.common.entity; +import net.fabricmc.loader.api.FabricLoader; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.particle.ParticleTypes; import net.minecraft.world.World; +import org.ladysnake.impaled.compat.SoulFired; -public class SoulforkEntity extends ImpaledTridentEntity { +public class SoulforkEntity extends FireTridentEntity { public SoulforkEntity(EntityType entityType, World world) { super(entityType, world); } @Override - protected void onHit(LivingEntity target) { - super.onHit(target); - target.setOnFireFor(8); - } - - @Override - public boolean isOnFire() { - return true; - } - - @Override - public boolean doesRenderOnFire() { - return false; - } - - @Override - public void tick() { - super.tick(); - - if (this.isSubmergedInWater() && this.getWorld().isClient() && this.random.nextInt(5) == 0) { - this.getWorld().addParticle(ParticleTypes.BUBBLE_COLUMN_UP, this.getX() + random.nextGaussian() / 10, this.getY() + random.nextGaussian() / 10, this.getZ() + random.nextGaussian() / 10, 0, this.random.nextFloat(), 0); + protected void setTargetOnFireFor(LivingEntity target, int seconds) { + if (FabricLoader.getInstance().isModLoaded("soul_fire_d")) { + SoulFired.setOnSoulFireFor(target, seconds); + } else { + target.setOnFireFor(seconds); } } } diff --git a/src/main/java/org/ladysnake/impaled/common/init/ImpaledItems.java b/src/main/java/org/ladysnake/impaled/common/init/ImpaledItems.java index b09892f..9165962 100644 --- a/src/main/java/org/ladysnake/impaled/common/init/ImpaledItems.java +++ b/src/main/java/org/ladysnake/impaled/common/init/ImpaledItems.java @@ -34,8 +34,8 @@ public class ImpaledItems { public static final Item ELDER_GUARDIAN_EYE = new Item((new Item.Settings()).rarity(Rarity.UNCOMMON)); public static final Item ANCIENT_TRIDENT = new Item((new Item.Settings()).rarity(Rarity.UNCOMMON).fireproof()); public static final PitchforkItem PITCHFORK = new PitchforkItem((new Item.Settings()).maxDamage(150), ImpaledEntityTypes.PITCHFORK); - public static final HellforkItem HELLFORK = new HellforkItem((new Item.Settings()).maxDamage(325).fireproof().fireproof(), ImpaledEntityTypes.HELLFORK); - public static final HellforkItem SOULFORK = new HellforkItem((new Item.Settings()).maxDamage(325).fireproof().fireproof(), ImpaledEntityTypes.SOULFORK); + public static final HellforkItem HELLFORK = new HellforkItem((new Item.Settings()).maxDamage(325).fireproof(), ImpaledEntityTypes.HELLFORK); + public static final HellforkItem SOULFORK = new HellforkItem((new Item.Settings()).maxDamage(325).fireproof(), ImpaledEntityTypes.SOULFORK); public static final ElderTridentItem ELDER_TRIDENT = new ElderTridentItem((new Item.Settings()).maxDamage(250), ImpaledEntityTypes.ELDER_TRIDENT); public static final AtlanItem ATLAN = new AtlanItem((new Item.Settings()).maxDamage(250), ImpaledEntityTypes.ATLAN); public static final MaelstromItem MAELSTROM = new MaelstromItem((new Item.Settings()).maxDamage(80)); diff --git a/src/main/java/org/ladysnake/impaled/common/item/HellforkItem.java b/src/main/java/org/ladysnake/impaled/common/item/HellforkItem.java index e7d990e..7b64d22 100644 --- a/src/main/java/org/ladysnake/impaled/common/item/HellforkItem.java +++ b/src/main/java/org/ladysnake/impaled/common/item/HellforkItem.java @@ -1,5 +1,6 @@ package org.ladysnake.impaled.common.item; +import net.fabricmc.loader.api.FabricLoader; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.enchantment.EnchantmentHelper; @@ -17,6 +18,7 @@ import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.world.World; +import org.ladysnake.impaled.compat.SoulFired; import org.ladysnake.impaled.common.entity.ImpaledTridentEntity; import org.ladysnake.impaled.common.init.ImpaledItems; @@ -27,7 +29,12 @@ public HellforkItem(Settings settings, EntityType=17", "fabric": ">=0.48.0" }, + "suggests": { + "soul_fire_d": "^4.0.0" + }, "custom": { "loom:injected_interfaces": { "net/minecraft/class_8109": [ From cb6fd9aec2847bd6575c88c0055d6319d68f3f2d Mon Sep 17 00:00:00 2001 From: Crystal Spider Date: Thu, 20 Jun 2024 17:04:37 +0200 Subject: [PATCH 2/3] Removed redundant code. --- .../org/ladysnake/impaled/common/entity/HellforkEntity.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/main/java/org/ladysnake/impaled/common/entity/HellforkEntity.java b/src/main/java/org/ladysnake/impaled/common/entity/HellforkEntity.java index 5bcf267..d522c41 100644 --- a/src/main/java/org/ladysnake/impaled/common/entity/HellforkEntity.java +++ b/src/main/java/org/ladysnake/impaled/common/entity/HellforkEntity.java @@ -9,12 +9,6 @@ public HellforkEntity(EntityType entityType, World wor super(entityType, world); } - @Override - protected void onHit(LivingEntity target) { - super.onHit(target); - target.setOnFireFor(8); - } - @Override protected void setTargetOnFireFor(LivingEntity target, int seconds) { target.setOnFireFor(seconds); From 02f3ce014e0c9983639e4dc0d561d9a7c6864301 Mon Sep 17 00:00:00 2001 From: Crystal Spider Date: Thu, 20 Jun 2024 17:12:33 +0200 Subject: [PATCH 3/3] Fix Soulfork and Hellfork damaging only living entities. --- .../ladysnake/impaled/common/entity/FireTridentEntity.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/ladysnake/impaled/common/entity/FireTridentEntity.java b/src/main/java/org/ladysnake/impaled/common/entity/FireTridentEntity.java index 92cf3aa..2267369 100644 --- a/src/main/java/org/ladysnake/impaled/common/entity/FireTridentEntity.java +++ b/src/main/java/org/ladysnake/impaled/common/entity/FireTridentEntity.java @@ -1,6 +1,5 @@ package org.ladysnake.impaled.common.entity; -import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; import net.minecraft.particle.ParticleTypes; @@ -14,11 +13,10 @@ public FireTridentEntity(EntityType entityType, Wor @Override protected void onEntityHit(EntityHitResult entityHitResult) { - Entity entity = entityHitResult.getEntity(); - if (entity instanceof LivingEntity livingEntity && livingEntity.getType() != EntityType.ENDERMAN) { + if (entityHitResult.getEntity() instanceof LivingEntity livingEntity && livingEntity.getType() != EntityType.ENDERMAN) { setTargetOnFireFor(livingEntity, 1); - super.onEntityHit(entityHitResult); } + super.onEntityHit(entityHitResult); } @Override