Skip to content

Commit

Permalink
Fix mixin conflict with Rapscallions and Rockhoppers (#1283)
Browse files Browse the repository at this point in the history
  • Loading branch information
IzzelAliz committed Mar 24, 2024
1 parent df8ea44 commit e47fe80
Showing 1 changed file with 23 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
Expand Down Expand Up @@ -122,6 +123,8 @@ public abstract class FishingHookMixin extends ProjectileMixin implements Fishin
this.bridge$pushEntityRemoveCause(EntityRemoveEvent.Cause.DESPAWN);
}

@Unique private transient Integer arclight$rodDamage;

/**
* @author IzzelAliz
* @reason
Expand All @@ -131,7 +134,7 @@ public int retrieve(ItemStack stack) {
Player playerentity = this.getPlayerOwner();
if (!this.level().isClientSide && playerentity != null) {
int i = 0;
Integer rodDamage = null;
arclight$rodDamage = null;
if (this.hookedIn != null) {
PlayerFishEvent fishEvent = new PlayerFishEvent(((ServerPlayerEntityBridge) playerentity).bridge$getBukkitEntity(), this.hookedIn.bridge$getBukkitEntity(), (FishHook) this.getBukkitEntity(), PlayerFishEvent.State.CAUGHT_ENTITY);
Bukkit.getPluginManager().callEvent(fishEvent);
Expand All @@ -146,32 +149,36 @@ public int retrieve(ItemStack stack) {
LootParams params = (new LootParams.Builder((ServerLevel) this.level())).withParameter(LootContextParams.ORIGIN, this.position()).withParameter(LootContextParams.TOOL, stack).withParameter(LootContextParams.THIS_ENTITY, (FishingHook) (Object) this).withLuck((float) this.luck + playerentity.getLuck()).create(LootContextParamSets.FISHING);
LootTable loottable = this.level().getServer().getLootData().getLootTable(BuiltInLootTables.FISHING);
List<ItemStack> list = loottable.getRandomItems(params);
var event = this.bridge$forge$onItemFished(list, this.onGround ? 2 : 1, (FishingHook) (Object) this);
if (event._1) {
this.discard();
return event._2;
{
var event = this.bridge$forge$onItemFished(list, this.onGround ? 2 : 1, (FishingHook) (Object) this);
if (event._1) {
this.discard();
return event._2;
}
arclight$rodDamage = event._2;
}
rodDamage = event._2;
CriteriaTriggers.FISHING_ROD_HOOKED.trigger((ServerPlayer) playerentity, stack, (FishingHook) (Object) this, list);

for (ItemStack itemstack : list) {
ItemEntity itementity = new ItemEntity(this.level(), this.getX(), this.getY(), this.getZ(), itemstack);
PlayerFishEvent playerFishEvent = new PlayerFishEvent(((ServerPlayerEntityBridge) playerentity).bridge$getBukkitEntity(), itementity.bridge$getBukkitEntity(), (FishHook) this.getBukkitEntity(), PlayerFishEvent.State.CAUGHT_FISH);
playerFishEvent.setExpToDrop(this.random.nextInt(6) + 1);
Bukkit.getPluginManager().callEvent(playerFishEvent);

if (playerFishEvent.isCancelled()) {
return 0;
{ // mixin conflict with Rapscallions and Rockhoppers https://github.com/GreenhouseTeam/rapscallions-and-rockhoppers/blob/0a5f77c60d454363b34ad7ac3ee84e8f97ae3ea1/common/src/main/java/dev/greenhouseteam/rapscallionsandrockhoppers/mixin/FishingHookMixin.java
PlayerFishEvent playerFishEvent = new PlayerFishEvent(((ServerPlayerEntityBridge) playerentity).bridge$getBukkitEntity(), itementity.bridge$getBukkitEntity(), (FishHook) this.getBukkitEntity(), PlayerFishEvent.State.CAUGHT_FISH);
playerFishEvent.setExpToDrop(this.random.nextInt(6) + 1);
Bukkit.getPluginManager().callEvent(playerFishEvent);

if (playerFishEvent.isCancelled()) {
return 0;
}
if (playerFishEvent.getExpToDrop() > 0) {
playerentity.level().addFreshEntity(new ExperienceOrb(playerentity.level(), playerentity.getX(), playerentity.getY() + 0.5D, playerentity.getZ() + 0.5D, playerFishEvent.getExpToDrop()));
}
}
double d0 = playerentity.getX() - this.getX();
double d1 = playerentity.getY() - this.getY();
double d2 = playerentity.getZ() - this.getZ();
double d3 = 0.1D;
itementity.setDeltaMovement(d0 * 0.1D, d1 * 0.1D + Math.sqrt(Math.sqrt(d0 * d0 + d1 * d1 + d2 * d2)) * 0.08D, d2 * 0.1D);
this.level().addFreshEntity(itementity);
if (playerFishEvent.getExpToDrop() > 0) {
playerentity.level().addFreshEntity(new ExperienceOrb(playerentity.level(), playerentity.getX(), playerentity.getY() + 0.5D, playerentity.getZ() + 0.5D, playerFishEvent.getExpToDrop()));
}
if (itemstack.is(ItemTags.FISHES)) {
playerentity.awardStat(Stats.FISH_CAUGHT, 1);
}
Expand Down Expand Up @@ -200,7 +207,7 @@ public int retrieve(ItemStack stack) {

this.bridge$pushEntityRemoveCause(EntityRemoveEvent.Cause.DESPAWN);
this.discard();
return rodDamage == null ? i : rodDamage;
return arclight$rodDamage == null ? i : arclight$rodDamage;
} else {
return 0;
}
Expand Down

0 comments on commit e47fe80

Please sign in to comment.