Update upstream
This commit is contained in:
parent
bce71db23d
commit
fb0fe00038
@ -44,9 +44,10 @@ import net.minecraft.world.InteractionResult;
|
|||||||
import net.minecraft.world.effect.MobEffects;
|
import net.minecraft.world.effect.MobEffects;
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
import net.minecraft.world.entity.ExperienceOrb;
|
import net.minecraft.world.entity.ExperienceOrb;
|
||||||
|
import net.minecraft.world.entity.LivingEntity;
|
||||||
import net.minecraft.world.entity.Mob;
|
import net.minecraft.world.entity.Mob;
|
||||||
import net.minecraft.world.entity.MoverType;
|
import net.minecraft.world.entity.MoverType;
|
||||||
import net.minecraft.world.entity.animal.AbstractFish;
|
import net.minecraft.world.entity.animal.Bucketable;
|
||||||
import net.minecraft.world.entity.item.ItemEntity;
|
import net.minecraft.world.entity.item.ItemEntity;
|
||||||
import net.minecraft.world.entity.player.ChatVisiblity;
|
import net.minecraft.world.entity.player.ChatVisiblity;
|
||||||
import net.minecraft.world.entity.projectile.AbstractArrow;
|
import net.minecraft.world.entity.projectile.AbstractArrow;
|
||||||
@ -1174,8 +1175,8 @@ public abstract class ServerPlayNetHandlerMixin implements ServerPlayNetHandlerB
|
|||||||
cserver.getPluginManager().callEvent(event);
|
cserver.getPluginManager().callEvent(event);
|
||||||
|
|
||||||
// Fish bucket - SPIGOT-4048
|
// Fish bucket - SPIGOT-4048
|
||||||
if ((entity instanceof AbstractFish && origItem != null && origItem.asItem() == Items.WATER_BUCKET) && (event.isCancelled() || player.getInventory().getSelected() == null || player.getInventory().getSelected().getItem() != origItem)) {
|
if ((entity instanceof Bucketable && entity instanceof LivingEntity && origItem != null && origItem.asItem() == Items.WATER_BUCKET) && (event.isCancelled() || player.getInventory().getSelected() == null || player.getInventory().getSelected().getItem() != origItem)) {
|
||||||
send(new ClientboundAddMobPacket((AbstractFish) entity));
|
send(new ClientboundAddMobPacket((LivingEntity) entity));
|
||||||
player.containerMenu.sendAllDataToRemote();
|
player.containerMenu.sendAllDataToRemote();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -278,6 +278,16 @@ public abstract class MobMixin extends LivingEntityMixin implements MobEntityBri
|
|||||||
this.forceDrops = true;
|
this.forceDrops = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Inject(method = "restoreLeashFromSave", at = @At(value = "INVOKE", shift = At.Shift.AFTER, target = "Lnet/minecraft/world/entity/Mob;spawnAtLocation(Lnet/minecraft/world/level/ItemLike;)Lnet/minecraft/world/entity/item/ItemEntity;"))
|
||||||
|
private void arclight$leashRestorePost(CallbackInfo ci) {
|
||||||
|
this.forceDrops = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject(method = "restoreLeashFromSave", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Mob;spawnAtLocation(Lnet/minecraft/world/level/ItemLike;)Lnet/minecraft/world/entity/item/ItemEntity;"))
|
||||||
|
private void arclight$leashRestorePre(CallbackInfo ci) {
|
||||||
|
this.forceDrops = true;
|
||||||
|
}
|
||||||
|
|
||||||
@Inject(method = "startRiding", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Mob;dropLeash(ZZ)V"))
|
@Inject(method = "startRiding", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Mob;dropLeash(ZZ)V"))
|
||||||
private void arclight$unleashRide(Entity entityIn, boolean force, CallbackInfoReturnable<Boolean> cir) {
|
private void arclight$unleashRide(Entity entityIn, boolean force, CallbackInfoReturnable<Boolean> cir) {
|
||||||
Bukkit.getPluginManager().callEvent(new EntityUnleashEvent(this.getBukkitEntity(), EntityUnleashEvent.UnleashReason.UNKNOWN));
|
Bukkit.getPluginManager().callEvent(new EntityUnleashEvent(this.getBukkitEntity(), EntityUnleashEvent.UnleashReason.UNKNOWN));
|
||||||
|
|||||||
@ -30,12 +30,21 @@ public abstract class VillagerMixin extends AbstractVillagerMixin {
|
|||||||
bridge$pushEffectCause(EntityPotionEffectEvent.Cause.VILLAGER_TRADE);
|
bridge$pushEffectCause(EntityPotionEffectEvent.Cause.VILLAGER_TRADE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Redirect(method = "updateSpecialPrices", at = @At(value = "INVOKE", ordinal = 0, target = "Lnet/minecraft/world/item/trading/MerchantOffer;addToSpecialPriceDiff(I)V"))
|
@Redirect(method = "restock", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/trading/MerchantOffer;resetUses()V"))
|
||||||
private void arclight$replenish(MerchantOffer merchantOffer, int add) {
|
private void arclight$restock(MerchantOffer instance) {
|
||||||
VillagerReplenishTradeEvent event = new VillagerReplenishTradeEvent((Villager) this.getBukkitEntity(), ((MerchantOfferBridge) merchantOffer).bridge$asBukkit(), add);
|
VillagerReplenishTradeEvent event = new VillagerReplenishTradeEvent((Villager) this.getBukkitEntity(), ((MerchantOfferBridge) instance).bridge$asBukkit());
|
||||||
Bukkit.getPluginManager().callEvent(event);
|
Bukkit.getPluginManager().callEvent(event);
|
||||||
if (!event.isCancelled()) {
|
if (!event.isCancelled()) {
|
||||||
merchantOffer.addToSpecialPriceDiff(event.getBonus());
|
instance.resetUses();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Redirect(method = "updateSpecialPrices", at = @At(value = "INVOKE", ordinal = 0, target = "Lnet/minecraft/world/item/trading/MerchantOffer;addToSpecialPriceDiff(I)V"))
|
||||||
|
private void arclight$replenish(MerchantOffer merchantOffer, int add) {
|
||||||
|
VillagerReplenishTradeEvent event = new VillagerReplenishTradeEvent((Villager) this.getBukkitEntity(), ((MerchantOfferBridge) merchantOffer).bridge$asBukkit());
|
||||||
|
Bukkit.getPluginManager().callEvent(event);
|
||||||
|
if (!event.isCancelled()) {
|
||||||
|
merchantOffer.resetUses();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,64 @@
|
|||||||
|
package io.izzel.arclight.common.mixin.core.world.level.gameevent.vibrations;
|
||||||
|
|
||||||
|
import io.izzel.arclight.common.bridge.core.entity.EntityBridge;
|
||||||
|
import net.minecraft.core.BlockPos;
|
||||||
|
import net.minecraft.core.Registry;
|
||||||
|
import net.minecraft.world.entity.Entity;
|
||||||
|
import net.minecraft.world.level.Level;
|
||||||
|
import net.minecraft.world.level.gameevent.GameEvent;
|
||||||
|
import net.minecraft.world.level.gameevent.PositionSource;
|
||||||
|
import net.minecraft.world.level.gameevent.vibrations.VibrationListener;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.craftbukkit.v.block.CraftBlock;
|
||||||
|
import org.bukkit.craftbukkit.v.util.CraftNamespacedKey;
|
||||||
|
import org.bukkit.event.block.BlockReceiveGameEvent;
|
||||||
|
import org.spongepowered.asm.mixin.Final;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.Overwrite;
|
||||||
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
@Mixin(VibrationListener.class)
|
||||||
|
public abstract class VibrationListenerMixin {
|
||||||
|
|
||||||
|
// @formatter:off
|
||||||
|
@Shadow protected abstract boolean isValidVibration(GameEvent p_157917_, @org.jetbrains.annotations.Nullable Entity p_157918_);
|
||||||
|
@Shadow @Final protected PositionSource listenerSource;
|
||||||
|
@Shadow @Final protected VibrationListener.VibrationListenerConfig config;
|
||||||
|
@Shadow protected abstract boolean isOccluded(Level p_157911_, BlockPos p_157912_, BlockPos p_157913_);
|
||||||
|
@Shadow protected abstract void sendSignal(Level p_157906_, GameEvent p_157907_, BlockPos p_157908_, BlockPos p_157909_);
|
||||||
|
// @formatter:on
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author IzzelAliz
|
||||||
|
* @reason
|
||||||
|
*/
|
||||||
|
@Overwrite
|
||||||
|
public boolean handleGameEvent(Level level, GameEvent gameEvent, @Nullable Entity entity, BlockPos pos) {
|
||||||
|
if (!this.isValidVibration(gameEvent, entity)) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
Optional<BlockPos> optional = this.listenerSource.getPosition(level);
|
||||||
|
if (!optional.isPresent()) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
BlockPos blockpos = optional.get();
|
||||||
|
var cancelled = !this.config.shouldListen(level, (VibrationListener) (Object) this, pos, gameEvent, entity);
|
||||||
|
BlockReceiveGameEvent event = new BlockReceiveGameEvent(org.bukkit.GameEvent.getByKey(CraftNamespacedKey.fromMinecraft(Registry.GAME_EVENT.getKey(gameEvent))),
|
||||||
|
CraftBlock.at(level, blockpos), (entity == null) ? null : ((EntityBridge) entity).bridge$getBukkitEntity());
|
||||||
|
event.setCancelled(cancelled);
|
||||||
|
Bukkit.getPluginManager().callEvent(event);
|
||||||
|
if (cancelled) {
|
||||||
|
return false;
|
||||||
|
} else if (this.isOccluded(level, pos, blockpos)) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
this.sendSignal(level, gameEvent, pos, blockpos);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -429,6 +429,7 @@
|
|||||||
"world.level.chunk.storage.ChunkSerializerMixin",
|
"world.level.chunk.storage.ChunkSerializerMixin",
|
||||||
"world.level.chunk.storage.RegionFileCacheMixin",
|
"world.level.chunk.storage.RegionFileCacheMixin",
|
||||||
"world.level.entity.PersistentEntitySectionManagerMixin",
|
"world.level.entity.PersistentEntitySectionManagerMixin",
|
||||||
|
"world.level.gameevent.vibrations.VibrationListenerMixin",
|
||||||
"world.level.levelgen.ChunkGeneratorMixin",
|
"world.level.levelgen.ChunkGeneratorMixin",
|
||||||
"world.level.portal.PortalForcerMixin",
|
"world.level.portal.PortalForcerMixin",
|
||||||
"world.level.saveddata.maps.MapDataMixin",
|
"world.level.saveddata.maps.MapDataMixin",
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user