Skip to content

Commit

Permalink
Use WrapOperation instead of Redirect; Fixes #274 and Closes #275
Browse files Browse the repository at this point in the history
  • Loading branch information
bageldotjpg committed Jan 31, 2025
1 parent d502d00 commit fe43e59
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 17 deletions.
5 changes: 5 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,11 @@ dependencies {
runtimeOnly fg.deobf("mezz.jei:jei-${project.minecraft}-forge:${project.jei}")

annotationProcessor 'org.spongepowered:mixin:0.8.5:processor'

compileOnly(annotationProcessor("io.github.llamalad7:mixinextras-common:0.4.1"))
implementation(jarJar("io.github.llamalad7:mixinextras-forge:0.4.1")) {
jarJar.ranged(it, "[0.4.1,)")
}
}

repositories {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.teamabnormals.endergetic.core.mixin;

import com.google.common.collect.Lists;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import com.teamabnormals.endergetic.common.entity.bolloom.BolloomBalloon;
import com.teamabnormals.endergetic.common.network.entity.S2CUpdateBalloonsMessage;
import com.teamabnormals.endergetic.core.EndergeticExpansion;
Expand All @@ -13,7 +15,6 @@
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import java.util.List;
Expand All @@ -35,8 +36,8 @@ private void updateBalloons(CallbackInfo info) {
}
}

@Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;isPassenger()Z"), method = "sendChanges")
private boolean redirectPositionUpdate(Entity trackedEntity) {
return trackedEntity.isPassenger() || trackedEntity instanceof BolloomBalloon && ((BolloomBalloon) trackedEntity).isAttachedToEntity();
@WrapOperation(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;isPassenger()Z"), method = "sendChanges")
private boolean wrapPositionUpdate(Entity trackedEntity, Operation<Boolean> original) {
return original.call(trackedEntity) || trackedEntity instanceof BolloomBalloon balloon && balloon.isAttachedToEntity();
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.teamabnormals.endergetic.core.mixin.chorus;

import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import com.teamabnormals.endergetic.core.other.tags.EEBlockTags;
import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerLevel;
Expand All @@ -9,22 +11,20 @@
import net.minecraft.world.level.block.state.BlockState;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;

/**
* @author SmellyModder (Luke Tonon)
*/
@Mixin(ChorusFlowerBlock.class)
public final class ChorusFlowerBlockMixin {

@Redirect(at = @At(value = "INVOKE", ordinal = 3), method = "canSurvive")
private boolean canSurvive(BlockState state, Block block) {
return state.is(EEBlockTags.CHORUS_PLANTABLE);
@WrapOperation(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/block/state/BlockState;is(Lnet/minecraft/world/level/block/Block;)Z"), method = "canSurvive")
private boolean canSurvive(BlockState state, Block block, Operation<Boolean> original) {
return original.call(state, block) || block == Blocks.END_STONE && state.is(EEBlockTags.CHORUS_PLANTABLE);
}

@Redirect(at = @At(value = "INVOKE", ordinal = 8), method = "randomTick")
private BlockState isEndstone(ServerLevel level, BlockPos pos) {
BlockState blockState = level.getBlockState(pos);
return blockState.is(EEBlockTags.CHORUS_PLANTABLE) ? Blocks.END_STONE.defaultBlockState() : blockState;
@WrapOperation(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/block/state/BlockState;is(Lnet/minecraft/world/level/block/Block;)Z"), method = "randomTick")
private boolean randomTick(BlockState state, Block block, Operation<Boolean> original) {
return original.call(state, block) || block == Blocks.END_STONE && state.is(EEBlockTags.CHORUS_PLANTABLE);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.teamabnormals.endergetic.core.mixin.client;

import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import com.teamabnormals.endergetic.common.entity.bolloom.BolloomBalloon;
import com.teamabnormals.endergetic.core.interfaces.BalloonHolder;
import net.minecraft.client.multiplayer.ClientLevel;
Expand All @@ -10,7 +12,6 @@
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(ClientLevel.class)
Expand All @@ -19,9 +20,9 @@ public abstract class ClientLevelMixin {
@Final
EntityTickList tickingEntities;

@Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;isPassenger()Z"), method = "*(Lnet/minecraft/world/entity/Entity;)V")
private boolean shouldNotTick(Entity entity) {
return entity.isPassenger() || entity instanceof BolloomBalloon balloon && balloon.isAttachedToEntity();
@WrapOperation(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;isPassenger()Z"), method = "*(Lnet/minecraft/world/entity/Entity;)V")
private boolean shouldNotTick(Entity entity, Operation<Boolean> original) {
return original.call(entity) || entity instanceof BolloomBalloon balloon && balloon.isAttachedToEntity();
}

@Inject(at = @At(value = "RETURN"), method = "tickNonPassenger")
Expand Down

0 comments on commit fe43e59

Please sign in to comment.