Skip to content

Commit

Permalink
Merge branch 'feature' into 1.18-forge
Browse files Browse the repository at this point in the history
  • Loading branch information
WakelessSloth56 committed Feb 12, 2022
2 parents 19964b4 + 9fa24e8 commit 7d759ae
Show file tree
Hide file tree
Showing 6 changed files with 160 additions and 3 deletions.
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);

}
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_));
}

}
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) {}

}

Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,25 @@

import static org.auioc.mods.arnicalib.ArnicaLib.LOGGER;
import java.util.List;
import java.util.Random;
import java.util.UUID;
import java.util.function.Function;
import org.apache.logging.log4j.Marker;
import org.auioc.mods.arnicalib.server.event.impl.LivingEatAddEffectEvent;
import org.auioc.mods.arnicalib.server.event.impl.ServerLoginEvent;
import org.auioc.mods.arnicalib.server.event.impl.ServerPlayerEntitySendMessageEvent;
import org.auioc.mods.arnicalib.server.event.impl.SetEyeOfEnderSurvivableEvent;
import org.auioc.mods.arnicalib.utils.LogUtil;
import net.minecraft.network.Connection;
import net.minecraft.network.chat.ChatType;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.TextComponent;
import net.minecraft.network.protocol.handshake.ClientIntentionPacket;
import net.minecraft.network.protocol.login.ClientboundLoginDisconnectPacket;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.effect.MobEffectInstance;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.projectile.EyeOfEnder;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.IEventBus;
Expand All @@ -29,7 +34,7 @@ public final class ServerEventFactory {

public static boolean fireServerLoginEvent(final ClientIntentionPacket packet, final Connection manager) {
ServerLoginEvent event = new ServerLoginEvent(packet, manager);
boolean cancelled = MinecraftForge.EVENT_BUS.post(event);
boolean cancelled = forgeEventBus.post(event);
if (cancelled) {
TextComponent message = new TextComponent(event.getMessage());
manager.send(new ClientboundLoginDisconnectPacket(message));
Expand All @@ -44,7 +49,7 @@ public static boolean fireServerLoginEvent(final ClientIntentionPacket packet, f
}

public static boolean fireServerPlayerEntitySendMessageEvent(Component message, ChatType type, UUID uuid) {
return MinecraftForge.EVENT_BUS.post(new ServerPlayerEntitySendMessageEvent(message, type, uuid));
return forgeEventBus.post(new ServerPlayerEntitySendMessageEvent(message, type, uuid));
}

public static List<MobEffectInstance> fireLivingEatAddEffectEvent(LivingEntity entity, ItemStack food, List<MobEffectInstance> effects) {
Expand All @@ -55,4 +60,10 @@ public static List<MobEffectInstance> fireLivingEatAddEffectEvent(LivingEntity e
return event.getEffects();
}

public static Function<Random, Boolean> fireSetEyeOfEnderSurvivableEvent(EyeOfEnder eye, ServerPlayer player) {
SetEyeOfEnderSurvivableEvent event = new SetEyeOfEnderSurvivableEvent(eye, player);
forgeEventBus.post(event);
return event.getSurvivable();
}

}
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;
}

}
4 changes: 3 additions & 1 deletion src/main/resources/arnicalib.mixin.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@
"server.MixinLootContext",
"server.MixinServerPlayerEntity",
"server.MixinLivingEntity",
"server.MixinCommandSourceStack"
"server.MixinCommandSourceStack",
"server.MixinEyeOfEnder",
"server.MixinEnderEyeItem"
],
"client": [],
"server": [],
Expand Down

0 comments on commit 7d759ae

Please # to comment.