-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'feature' into 1.18-forge
- Loading branch information
Showing
6 changed files
with
160 additions
and
3 deletions.
There are no files selected for viewing
12 changes: 12 additions & 0 deletions
12
src/main/java/org/auioc/mods/arnicalib/api/mixin/server/IMixinEyeOfEnder.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
package org.auioc.mods.arnicalib.api.mixin.server; | ||
|
||
import java.util.Random; | ||
import java.util.function.Function; | ||
|
||
public interface IMixinEyeOfEnder { | ||
|
||
void setSurvivable(boolean survivable); | ||
|
||
void setSurvivable(Function<Random, Boolean> survivable); | ||
|
||
} |
41 changes: 41 additions & 0 deletions
41
src/main/java/org/auioc/mods/arnicalib/mixin/server/MixinEnderEyeItem.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
package org.auioc.mods.arnicalib.mixin.server; | ||
|
||
import org.auioc.mods.arnicalib.api.mixin.server.IMixinEyeOfEnder; | ||
import org.auioc.mods.arnicalib.server.event.ServerEventFactory; | ||
import org.spongepowered.asm.mixin.Mixin; | ||
import org.spongepowered.asm.mixin.injection.At; | ||
import org.spongepowered.asm.mixin.injection.Inject; | ||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; | ||
import org.spongepowered.asm.mixin.injection.callback.LocalCapture; | ||
import net.minecraft.core.BlockPos; | ||
import net.minecraft.server.level.ServerPlayer; | ||
import net.minecraft.world.InteractionHand; | ||
import net.minecraft.world.InteractionResultHolder; | ||
import net.minecraft.world.entity.player.Player; | ||
import net.minecraft.world.entity.projectile.EyeOfEnder; | ||
import net.minecraft.world.item.EnderEyeItem; | ||
import net.minecraft.world.item.ItemStack; | ||
import net.minecraft.world.level.Level; | ||
import net.minecraft.world.phys.HitResult; | ||
|
||
@Mixin(value = EnderEyeItem.class) | ||
public abstract class MixinEnderEyeItem { | ||
|
||
@SuppressWarnings("rawtypes") | ||
// @org.spongepowered.asm.mixin.Debug(export = true, print = true) | ||
@Inject( | ||
method = "Lnet/minecraft/world/item/EnderEyeItem;use(Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/InteractionHand;)Lnet/minecraft/world/InteractionResultHolder;", | ||
at = @At( | ||
value = "INVOKE", | ||
target = "Lnet/minecraft/world/level/Level;addFreshEntity(Lnet/minecraft/world/entity/Entity;)Z", | ||
shift = At.Shift.BEFORE | ||
), | ||
locals = LocalCapture.CAPTURE_FAILHARD, | ||
require = 1, | ||
allow = 1 | ||
) | ||
private void use(Level p_41184_, Player p_41185_, InteractionHand p_41186_, CallbackInfoReturnable<InteractionResultHolder> cir, ItemStack itemstack, HitResult hitresult, BlockPos blockpos, EyeOfEnder eyeofender) { | ||
((IMixinEyeOfEnder) eyeofender).setSurvivable(ServerEventFactory.fireSetEyeOfEnderSurvivableEvent(eyeofender, (ServerPlayer) p_41185_)); | ||
} | ||
|
||
} |
50 changes: 50 additions & 0 deletions
50
src/main/java/org/auioc/mods/arnicalib/mixin/server/MixinEyeOfEnder.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
package org.auioc.mods.arnicalib.mixin.server; | ||
|
||
import java.util.Random; | ||
import java.util.function.Function; | ||
import org.auioc.mods.arnicalib.api.mixin.server.IMixinEyeOfEnder; | ||
import org.objectweb.asm.Opcodes; | ||
import org.spongepowered.asm.mixin.Mixin; | ||
import org.spongepowered.asm.mixin.Shadow; | ||
import org.spongepowered.asm.mixin.injection.At; | ||
import org.spongepowered.asm.mixin.injection.Redirect; | ||
import net.minecraft.world.entity.Entity; | ||
import net.minecraft.world.entity.EntityType; | ||
import net.minecraft.world.entity.projectile.EyeOfEnder; | ||
import net.minecraft.world.level.Level; | ||
|
||
@Mixin(value = EyeOfEnder.class) | ||
public abstract class MixinEyeOfEnder extends Entity implements IMixinEyeOfEnder { | ||
|
||
public MixinEyeOfEnder(EntityType<?> p_19870_, Level p_19871_) { | ||
super(p_19870_, p_19871_); | ||
} | ||
|
||
|
||
@Shadow | ||
private boolean surviveAfterDeath; | ||
|
||
@Override | ||
public void setSurvivable(boolean survivable) { | ||
this.surviveAfterDeath = survivable; | ||
} | ||
|
||
@Override | ||
public void setSurvivable(Function<Random, Boolean> survivable) { | ||
this.surviveAfterDeath = survivable.apply(this.random); | ||
} | ||
|
||
@Redirect( | ||
method = "Lnet/minecraft/world/entity/projectile/EyeOfEnder;signalTo(Lnet/minecraft/core/BlockPos;)V", | ||
at = @At( | ||
value = "FIELD", | ||
target = "Lnet/minecraft/world/entity/projectile/EyeOfEnder;surviveAfterDeath:Z", | ||
opcode = Opcodes.PUTFIELD | ||
), | ||
require = 1, | ||
allow = 1 | ||
) | ||
private void ignoreSetSurviveAfterDeathInSignalToMethod(EyeOfEnder e, boolean z) {} | ||
|
||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
41 changes: 41 additions & 0 deletions
41
src/main/java/org/auioc/mods/arnicalib/server/event/impl/SetEyeOfEnderSurvivableEvent.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
package org.auioc.mods.arnicalib.server.event.impl; | ||
|
||
import java.util.Random; | ||
import java.util.function.Function; | ||
import net.minecraft.server.level.ServerPlayer; | ||
import net.minecraft.world.entity.projectile.EyeOfEnder; | ||
import net.minecraftforge.eventbus.api.Event; | ||
|
||
public class SetEyeOfEnderSurvivableEvent extends Event { | ||
|
||
private final EyeOfEnder eye; | ||
private final ServerPlayer player; | ||
private Function<Random, Boolean> survivable; | ||
|
||
public SetEyeOfEnderSurvivableEvent(EyeOfEnder eye, ServerPlayer player) { | ||
this.eye = eye; | ||
this.player = player; | ||
this.survivable = (random) -> (random.nextInt(5) > 0); | ||
} | ||
|
||
public EyeOfEnder getEye() { | ||
return this.eye; | ||
} | ||
|
||
public ServerPlayer getPlayer() { | ||
return this.player; | ||
} | ||
|
||
public Function<Random, Boolean> getSurvivable() { | ||
return this.survivable; | ||
} | ||
|
||
public void setSurvivable(Function<Random, Boolean> survivable) { | ||
this.survivable = survivable; | ||
} | ||
|
||
public void setSurvivable(boolean survivable) { | ||
this.survivable = (random) -> survivable; | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters