From f10b9cb0400770f59573b8689a247d40f63caf62 Mon Sep 17 00:00:00 2001 From: Shibva <38770780+Shibva@users.noreply.github.com> Date: Tue, 13 Jan 2026 03:44:40 -0500 Subject: [PATCH 1/3] Fix Rock Candy for Connector --- .../blocks/rock_candy/SugarStickBlock.java | 15 ++++++++++++--- .../spectrum/mixin/EntityApplyFluidsMixin.java | 13 +++++++------ 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/rock_candy/SugarStickBlock.java b/src/main/java/de/dafuqs/spectrum/blocks/rock_candy/SugarStickBlock.java index d7ca7a4fca..6847d9cb3f 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/rock_candy/SugarStickBlock.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/rock_candy/SugarStickBlock.java @@ -1,5 +1,6 @@ package de.dafuqs.spectrum.blocks.rock_candy; +import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.blocks.*; import de.dafuqs.spectrum.helpers.ColorHelper; import de.dafuqs.spectrum.particle.effect.*; @@ -108,9 +109,17 @@ public void randomTick(BlockState state, ServerWorld world, BlockPos pos, Random List itemEntities = world.getNonSpectatingEntities(ItemEntity.class, Box.of(Vec3d.ofCenter(pos), ITEM_SEARCH_RANGE, ITEM_SEARCH_RANGE, ITEM_SEARCH_RANGE)); Collections.shuffle(itemEntities); for (ItemEntity itemEntity : itemEntities) { - // is the item also submerged? - // lazy, but mostly accurate and performant way to check if it's the same liquid pool - if (!itemEntity.isSubmergedIn(SpectrumFluidTags.LIQUID_CRYSTAL)) { + + // This implements checking if the item is submerged at eye level. This is necessary as the mixin went haywire + // in a connector environment (TLDR: isSubmergedIn() breaks though mixin transmog with Connector, this fixes it + var currentFluidHeight = itemEntity.getBlockStateAtPos().getFluidState().getHeight(); + var eyePosY = itemEntity.getEyePos().y; + var entityPosFloorY = Math.floor(itemEntity.getEyePos().y); + var entityEyeFloorOffset = eyePosY - entityPosFloorY; + + // Checks to see if the checked item is submerged and in liquid crystal, if one of these are false (making this true), continue to next to aiterate. + // This is to replace the submerge mixin check, given connector was screwing with its check + if (!itemEntity.getBlockStateAtPos().isOf(SpectrumBlocks.LIQUID_CRYSTAL)|| entityEyeFloorOffset > currentFluidHeight) { continue; } diff --git a/src/main/java/de/dafuqs/spectrum/mixin/EntityApplyFluidsMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/EntityApplyFluidsMixin.java index d35f70e620..2d92adf311 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/EntityApplyFluidsMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/EntityApplyFluidsMixin.java @@ -29,12 +29,13 @@ public abstract class EntityApplyFluidsMixin implements TouchingWaterAware { @Override public void spectrum$setActuallyTouchingWater(boolean actuallyTouchingWater) { this.actuallyTouchingWater = actuallyTouchingWater; } - @Inject(method = "isSubmergedIn", at = @At("RETURN"), cancellable = true) - public void spectrum$isSubmergedIn(TagKey fluidTag, CallbackInfoReturnable cir) { - if (!cir.getReturnValue() && fluidTag == FluidTags.WATER) { - cir.setReturnValue(this.submergedFluidTag.contains(SpectrumFluidTags.SWIMMABLE_FLUID)); - } - } + @Deprecated //Mixin breaks in Connector Environment -Shibva + //@Inject(method = "isSubmergedIn", at = @At("RETURN"), cancellable = true) + //public void spectrum$isSubmergedIn(TagKey fluidTag, CallbackInfoReturnable cir) { + // if (!cir.getReturnValue() && fluidTag == FluidTags.WATER) { + // cir.setReturnValue(this.submergedFluidTag.contains(SpectrumFluidTags.SWIMMABLE_FLUID)); + // } + //} @Inject(method = "isSubmergedInWater", at = @At("RETURN"), cancellable = true) public void spectrum$isSubmergedInWater(CallbackInfoReturnable cir) { From b7dd264856723aec9e4e6c1f204a9e97bf84af27 Mon Sep 17 00:00:00 2001 From: Shibva <38770780+Shibva@users.noreply.github.com> Date: Thu, 15 Jan 2026 15:06:23 -0500 Subject: [PATCH 2/3] eed3ed0 can go here too copy-paste commit to 20.1 version, adding missing BC support in commit eed3ed0 --- .../data/spectrum/weapon_attributes/draconic_twinsword.json | 3 +++ .../data/spectrum/weapon_attributes/dragon_talon.json | 3 +++ .../data/spectrum/weapon_attributes/knotted_sword.json | 3 +++ .../data/spectrum/weapon_attributes/nectar_lance.json | 3 +++ 4 files changed, 12 insertions(+) create mode 100644 src/main/resources/data/spectrum/weapon_attributes/draconic_twinsword.json create mode 100644 src/main/resources/data/spectrum/weapon_attributes/dragon_talon.json create mode 100644 src/main/resources/data/spectrum/weapon_attributes/knotted_sword.json create mode 100644 src/main/resources/data/spectrum/weapon_attributes/nectar_lance.json diff --git a/src/main/resources/data/spectrum/weapon_attributes/draconic_twinsword.json b/src/main/resources/data/spectrum/weapon_attributes/draconic_twinsword.json new file mode 100644 index 0000000000..b521a4bece --- /dev/null +++ b/src/main/resources/data/spectrum/weapon_attributes/draconic_twinsword.json @@ -0,0 +1,3 @@ +{ + "parent": "bettercombat:twin_blade" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/weapon_attributes/dragon_talon.json b/src/main/resources/data/spectrum/weapon_attributes/dragon_talon.json new file mode 100644 index 0000000000..daafc473ce --- /dev/null +++ b/src/main/resources/data/spectrum/weapon_attributes/dragon_talon.json @@ -0,0 +1,3 @@ +{ + "parent": "bettercombat:dagger" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/weapon_attributes/knotted_sword.json b/src/main/resources/data/spectrum/weapon_attributes/knotted_sword.json new file mode 100644 index 0000000000..c8bb11ed16 --- /dev/null +++ b/src/main/resources/data/spectrum/weapon_attributes/knotted_sword.json @@ -0,0 +1,3 @@ +{ + "parent": "bettercombat:sword" +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/weapon_attributes/nectar_lance.json b/src/main/resources/data/spectrum/weapon_attributes/nectar_lance.json new file mode 100644 index 0000000000..c8bb11ed16 --- /dev/null +++ b/src/main/resources/data/spectrum/weapon_attributes/nectar_lance.json @@ -0,0 +1,3 @@ +{ + "parent": "bettercombat:sword" +} \ No newline at end of file From 06467404a580c7dbbdc5f8644be3ea4b5c8fc21d Mon Sep 17 00:00:00 2001 From: Shibva <38770780+Shibva@users.noreply.github.com> Date: Fri, 16 Jan 2026 05:17:45 -0500 Subject: [PATCH 3/3] Clarify note in EntityApplyFluidsMixin Updated comment to clarify isSubmergedIn being commented out it was replaced and it was only used in one file. I rather leave it up to someone else to decide whether to fully delete this or not --- .../java/de/dafuqs/spectrum/mixin/EntityApplyFluidsMixin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/dafuqs/spectrum/mixin/EntityApplyFluidsMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/EntityApplyFluidsMixin.java index 2d92adf311..d4baec64a9 100644 --- a/src/main/java/de/dafuqs/spectrum/mixin/EntityApplyFluidsMixin.java +++ b/src/main/java/de/dafuqs/spectrum/mixin/EntityApplyFluidsMixin.java @@ -29,7 +29,7 @@ public abstract class EntityApplyFluidsMixin implements TouchingWaterAware { @Override public void spectrum$setActuallyTouchingWater(boolean actuallyTouchingWater) { this.actuallyTouchingWater = actuallyTouchingWater; } - @Deprecated //Mixin breaks in Connector Environment -Shibva + //This breaks in a connector enviorment for some reason. -Shibva //@Inject(method = "isSubmergedIn", at = @At("RETURN"), cancellable = true) //public void spectrum$isSubmergedIn(TagKey fluidTag, CallbackInfoReturnable cir) { // if (!cir.getReturnValue() && fluidTag == FluidTags.WATER) {