diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/bridge/bukkit/JavaPluginLoaderBridge.java b/arclight-common/src/main/java/io/izzel/arclight/common/bridge/bukkit/JavaPluginLoaderBridge.java index b4de094b..971d2815 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/bridge/bukkit/JavaPluginLoaderBridge.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/bridge/bukkit/JavaPluginLoaderBridge.java @@ -8,7 +8,5 @@ public interface JavaPluginLoaderBridge { List bridge$getLoaders(); - Class bridge$getClassByName(final String name); - void bridge$setClass(final String name, final Class clazz); } diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/bukkit/JavaPluginLoaderMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/bukkit/JavaPluginLoaderMixin.java index bbfbd5d1..cd152aed 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/bukkit/JavaPluginLoaderMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/bukkit/JavaPluginLoaderMixin.java @@ -48,7 +48,6 @@ public abstract class JavaPluginLoaderMixin implements JavaPluginLoaderBridge { // @formatter:off @Shadow @Final Server server; - @Invoker("getClassByName") public abstract Class bridge$getClassByName(final String name); @Invoker("setClass") public abstract void bridge$setClass(final String name, final Class clazz); @Accessor("loaders") public abstract List bridge$getLoaders(); // @formatter:on diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/bukkit/LibraryLoaderMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/bukkit/LibraryLoaderMixin.java new file mode 100644 index 00000000..452dd534 --- /dev/null +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/bukkit/LibraryLoaderMixin.java @@ -0,0 +1,18 @@ +package io.izzel.arclight.common.mixin.bukkit; + +import io.izzel.arclight.common.mod.util.remapper.generated.RemappingURLClassLoader; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import java.net.URL; +import java.net.URLClassLoader; + +@Mixin(targets = "org.bukkit.plugin.java.LibraryLoader", remap = false) +public class LibraryLoaderMixin { + + @Redirect(method = "createLoader", at = @At(value = "NEW", target = "java/net/URLClassLoader")) + private URLClassLoader arclight$useRemapped(URL[] urls) { + return new RemappingURLClassLoader(urls); + } +} diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/bukkit/PluginClassLoaderMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/bukkit/PluginClassLoaderMixin.java index 57fafc9d..696ea7b3 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/bukkit/PluginClassLoaderMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/bukkit/PluginClassLoaderMixin.java @@ -55,72 +55,63 @@ public class PluginClassLoaderMixin extends URLClassLoader implements RemappingC * @reason */ @Overwrite - Class findClass(String name, boolean checkGlobal) throws ClassNotFoundException { + protected Class findClass(String name) throws ClassNotFoundException { if (name.startsWith("org.bukkit.") || name.startsWith("net.minecraft.")) { throw new ClassNotFoundException(name); } Class result = classes.get(name); if (result == null) { - if (checkGlobal) { - result = ((JavaPluginLoaderBridge) (Object) loader).bridge$getClassByName(name); - } + String path = name.replace('.', '/').concat(".class"); + URL url = this.findResource(path); - if (result == null) { - String path = name.replace('.', '/').concat(".class"); - URL url = this.findResource(path); + if (url != null) { - if (url != null) { + URLConnection connection; + Callable byteSource; + try { + connection = url.openConnection(); + connection.connect(); + byteSource = () -> { + try (InputStream is = connection.getInputStream()) { + byte[] classBytes = ByteStreams.toByteArray(is); + classBytes = SwitchTableFixer.INSTANCE.processClass(classBytes); + classBytes = Bukkit.getUnsafe().processClass(description, path, classBytes); + return classBytes; + } + }; + } catch (IOException e) { + throw new ClassNotFoundException(name, e); + } - URLConnection connection; - Callable byteSource; - try { - connection = url.openConnection(); - connection.connect(); - byteSource = () -> { - try (InputStream is = connection.getInputStream()) { - byte[] classBytes = ByteStreams.toByteArray(is); - classBytes = SwitchTableFixer.INSTANCE.processClass(classBytes); - classBytes = Bukkit.getUnsafe().processClass(description, path, classBytes); - return classBytes; + Product2 classBytes = this.getRemapper().remapClass(name, byteSource, connection); + + int dot = name.lastIndexOf('.'); + if (dot != -1) { + String pkgName = name.substring(0, dot); + if (getPackage(pkgName) == null) { + try { + if (manifest != null) { + definePackage(pkgName, manifest, this.url); + } else { + definePackage(pkgName, null, null, null, null, null, null, null); } - }; - } catch (IOException e) { - throw new ClassNotFoundException(name, e); - } - - Product2 classBytes = this.getRemapper().remapClass(name, byteSource, connection); - - int dot = name.lastIndexOf('.'); - if (dot != -1) { - String pkgName = name.substring(0, dot); - if (getPackage(pkgName) == null) { - try { - if (manifest != null) { - definePackage(pkgName, manifest, this.url); - } else { - definePackage(pkgName, null, null, null, null, null, null, null); - } - } catch (IllegalArgumentException ex) { - if (getPackage(pkgName) == null) { - throw new IllegalStateException("Cannot find package " + pkgName); - } + } catch (IllegalArgumentException ex) { + if (getPackage(pkgName) == null) { + throw new IllegalStateException("Cannot find package " + pkgName); } } } - - result = defineClass(name, classBytes._1, 0, classBytes._1.length, classBytes._2); } - if (result == null) { - result = super.findClass(name); - } - - if (result != null) { - ((JavaPluginLoaderBridge) (Object) loader).bridge$setClass(name, result); - } + result = defineClass(name, classBytes._1, 0, classBytes._1.length, classBytes._2); } + if (result == null) { + result = super.findClass(name); + } + + ((JavaPluginLoaderBridge) (Object) loader).bridge$setClass(name, result); classes.put(name, result); } diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/command/impl/SummonCommandMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/command/impl/SummonCommandMixin.java new file mode 100644 index 00000000..a741be52 --- /dev/null +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/command/impl/SummonCommandMixin.java @@ -0,0 +1,22 @@ +package io.izzel.arclight.common.mixin.core.command.impl; + +import io.izzel.arclight.common.bridge.world.server.ServerWorldBridge; +import net.minecraft.command.CommandSource; +import net.minecraft.command.impl.SummonCommand; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.vector.Vector3d; +import org.bukkit.event.entity.CreatureSpawnEvent; +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; + +@Mixin(SummonCommand.class) +public class SummonCommandMixin { + + @Inject(method = "summonEntity", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/server/ServerWorld;addEntityAndUniquePassengers(Lnet/minecraft/entity/Entity;)Z")) + private static void arclight$summonReason(CommandSource source, ResourceLocation type, Vector3d pos, CompoundNBT nbt, boolean randomizeProperties, CallbackInfoReturnable cir) { + ((ServerWorldBridge) source.getWorld()).bridge$pushAddEntityReason(CreatureSpawnEvent.SpawnReason.COMMAND); + } +} diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/monster/ZombieVillagerEntityMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/monster/ZombieVillagerEntityMixin.java index cb70998b..916ecc1a 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/monster/ZombieVillagerEntityMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/monster/ZombieVillagerEntityMixin.java @@ -5,6 +5,7 @@ import io.izzel.arclight.mixin.Eject; import net.minecraft.entity.EntityType; import net.minecraft.entity.MobEntity; import net.minecraft.entity.monster.ZombieVillagerEntity; +import net.minecraft.world.server.ServerWorld; import org.bukkit.entity.ZombieVillager; import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.event.entity.EntityPotionEffectEvent; @@ -41,4 +42,14 @@ public abstract class ZombieVillagerEntityMixin extends ZombieEntityMixin { } return t; } + + @Inject(method = "cureZombie", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/monster/ZombieVillagerEntity;entityDropItem(Lnet/minecraft/item/ItemStack;)Lnet/minecraft/entity/item/ItemEntity;")) + private void arclight$dropPre(ServerWorld world, CallbackInfo ci) { + this.forceDrops = true; + } + + @Inject(method = "cureZombie", at = @At(value = "INVOKE", shift = At.Shift.AFTER, target = "Lnet/minecraft/entity/monster/ZombieVillagerEntity;entityDropItem(Lnet/minecraft/item/ItemStack;)Lnet/minecraft/entity/item/ItemEntity;")) + private void arclight$dropPost(ServerWorld world, CallbackInfo ci) { + this.forceDrops = false; + } } diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/passive/fish/AbstractFishEntityMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/passive/fish/AbstractFishEntityMixin.java index 8697b040..4ecde461 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/passive/fish/AbstractFishEntityMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/passive/fish/AbstractFishEntityMixin.java @@ -2,11 +2,24 @@ package io.izzel.arclight.common.mixin.core.entity.passive.fish; import io.izzel.arclight.common.mixin.core.entity.CreatureEntityMixin; import net.minecraft.entity.passive.fish.AbstractFishEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.network.play.server.SEntityMetadataPacket; +import net.minecraft.network.play.server.SSpawnMobPacket; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Hand; +import org.bukkit.craftbukkit.v.event.CraftEventFactory; +import org.bukkit.craftbukkit.v.inventory.CraftItemStack; +import org.bukkit.event.player.PlayerBucketFishEvent; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; @Mixin(AbstractFishEntity.class) public abstract class AbstractFishEntityMixin extends CreatureEntityMixin { @@ -24,4 +37,25 @@ public abstract class AbstractFishEntityMixin extends CreatureEntityMixin { private void arclight$updatePersist(boolean p_203706_1_, CallbackInfo ci) { this.persistenceRequired = this.isNoDespawnRequired(); } + + @Inject(method = "getEntityInteractionResult", cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD, at = @At(value = "FIELD", ordinal = 0, target = "Lnet/minecraft/world/World;isRemote:Z")) + private void arclight$fireFishEvent(PlayerEntity playerIn, Hand hand, CallbackInfoReturnable cir, ItemStack itemStack, ItemStack itemStack1) { + PlayerBucketFishEvent event = CraftEventFactory.callPlayerFishBucketEvent((AbstractFishEntity) (Object) this, playerIn, itemStack, itemStack1); + if (event.isCancelled()) { + ((ServerPlayerEntity) playerIn).sendContainerToPlayer(playerIn.openContainer); + ((ServerPlayerEntity) playerIn).connection.sendPacket(new SSpawnMobPacket((AbstractFishEntity) (Object) this)); + ((ServerPlayerEntity) playerIn).connection.sendPacket(new SEntityMetadataPacket(this.getEntityId(), this.dataManager, true)); + itemStack.grow(1); + cir.setReturnValue(ActionResultType.FAIL); + } else { + arclight$bucketItem = CraftItemStack.asNMSCopy(event.getFishBucket()); + } + } + + private transient ItemStack arclight$bucketItem; + + @ModifyVariable(method = "getEntityInteractionResult", index = 4, at = @At(value = "FIELD", ordinal = 0, target = "Lnet/minecraft/world/World;isRemote:Z")) + private ItemStack arclight$updateBucketItem(ItemStack itemStack) { + return arclight$bucketItem; + } } diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/projectile/DamagingProjectileEntityMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/projectile/DamagingProjectileEntityMixin.java index c7fabc5e..c02a2583 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/projectile/DamagingProjectileEntityMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/projectile/DamagingProjectileEntityMixin.java @@ -52,7 +52,7 @@ public abstract class DamagingProjectileEntityMixin extends ProjectileEntityMixi @Inject(method = "attackEntityFrom", cancellable = true, at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getLookVec()Lnet/minecraft/util/math/vector/Vector3d;")) private void arclight$nonLivingAttack(DamageSource source, float amount, CallbackInfoReturnable cir) { - if (CraftEventFactory.handleNonLivingEntityDamageEvent((DamagingProjectileEntity) (Object) this, source, amount)) { + if (CraftEventFactory.handleNonLivingEntityDamageEvent((DamagingProjectileEntity) (Object) this, source, amount, false)) { cir.setReturnValue(false); } } diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/projectile/ProjectileEntityMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/projectile/ProjectileEntityMixin.java index 20ef58ec..e956e920 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/projectile/ProjectileEntityMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/projectile/ProjectileEntityMixin.java @@ -4,9 +4,11 @@ import io.izzel.arclight.common.bridge.entity.EntityBridge; import io.izzel.arclight.common.mixin.core.entity.EntityMixin; import net.minecraft.entity.Entity; import net.minecraft.entity.projectile.ProjectileEntity; +import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.RayTraceResult; import org.bukkit.craftbukkit.v.entity.CraftEntity; import org.bukkit.craftbukkit.v.event.CraftEventFactory; +import org.bukkit.event.entity.ProjectileHitEvent; import org.bukkit.projectiles.ProjectileSource; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -34,8 +36,21 @@ public abstract class ProjectileEntityMixin extends EntityMixin { } } - @Inject(method = "onImpact", at = @At("HEAD")) + private boolean hitCancelled = false; + + @Inject(method = "onImpact", cancellable = true, at = @At("HEAD")) private void arclight$onHit(RayTraceResult result, CallbackInfo ci) { - CraftEventFactory.callProjectileHitEvent((ProjectileEntity) (Object) this, result); + ProjectileHitEvent event = CraftEventFactory.callProjectileHitEvent((ProjectileEntity) (Object) this, result); + hitCancelled = event != null && event.isCancelled(); + if (!(result.getType() == RayTraceResult.Type.BLOCK || !hitCancelled)) { + ci.cancel(); + } + } + + @Inject(method = "func_230299_a_", cancellable = true, at = @At("HEAD")) + private void arclight$cancelBlockHit(BlockRayTraceResult result, CallbackInfo ci) { + if (hitCancelled) { + ci.cancel(); + } } } diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/inventory/container/AbstractRepairContainerMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/inventory/container/AbstractRepairContainerMixin.java index 7ae7fa52..22c1d1ba 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/inventory/container/AbstractRepairContainerMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/inventory/container/AbstractRepairContainerMixin.java @@ -7,6 +7,7 @@ import net.minecraft.inventory.container.AbstractRepairContainer; import net.minecraft.util.IWorldPosCallable; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Mutable; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -17,7 +18,7 @@ public abstract class AbstractRepairContainerMixin extends ContainerMixin { // @formatter:off @Shadow @Final protected IWorldPosCallable field_234644_e_; - @Shadow @Final protected IInventory field_234643_d_; + @Shadow @Final @Mutable protected IInventory field_234643_d_; @Shadow @Final protected CraftResultInventory field_234642_c_; @Shadow @Final protected PlayerEntity field_234645_f_; // @formatter:on diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/network/play/ServerPlayNetHandlerMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/network/play/ServerPlayNetHandlerMixin.java index 0458323f..b96a9253 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/network/play/ServerPlayNetHandlerMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/network/play/ServerPlayNetHandlerMixin.java @@ -108,6 +108,7 @@ import org.bukkit.event.inventory.InventoryAction; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCreativeEvent; import org.bukkit.event.inventory.InventoryType; +import org.bukkit.event.inventory.SmithItemEvent; import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.PlayerAnimationEvent; import org.bukkit.event.player.PlayerChatEvent; @@ -128,6 +129,7 @@ import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.InventoryView; import org.bukkit.inventory.Recipe; +import org.bukkit.inventory.SmithingInventory; import org.bukkit.util.Vector; import org.spigotmc.SpigotConfig; import org.spongepowered.asm.mixin.Final; @@ -1459,6 +1461,16 @@ public abstract class ServerPlayNetHandlerMixin implements ServerPlayNetHandlerB } } } + if (packet.getSlotId() == 2 && top instanceof SmithingInventory) { + org.bukkit.inventory.ItemStack result = ((SmithingInventory) top).getResult(); + if (result != null) { + if (click == ClickType.NUMBER_KEY) { + event = new SmithItemEvent(inventory, type, packet.getSlotId(), click, action, packet.getUsedButton()); + } else { + event = new SmithItemEvent(inventory, type, packet.getSlotId(), click, action); + } + } + } event.setCancelled(cancelled); Container oldContainer = this.player.openContainer; this.server.getPluginManager().callEvent(event); @@ -1508,7 +1520,7 @@ public abstract class ServerPlayNetHandlerMixin implements ServerPlayNetHandlerB return; } } - if (event instanceof CraftItemEvent) { + if (event instanceof CraftItemEvent || event instanceof SmithItemEvent) { this.player.sendContainerToPlayer(this.player.openContainer); } } diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/server/management/PlayerInteractionManagerMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/server/management/PlayerInteractionManagerMixin.java index 94561029..ddf98fba 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/server/management/PlayerInteractionManagerMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/server/management/PlayerInteractionManagerMixin.java @@ -14,6 +14,7 @@ import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.inventory.container.INamedContainerProvider; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemUseContext; +import net.minecraft.item.TallBlockItem; import net.minecraft.network.play.client.CPlayerDiggingPacket; import net.minecraft.network.play.server.SChangeBlockPacket; import net.minecraft.network.play.server.SPlayerDiggingPacket; @@ -253,6 +254,11 @@ public abstract class PlayerInteractionManagerMixin implements PlayerInteraction playerIn.connection.sendPacket(new SChangeBlockPacket(this.world, bottom ? blockpos.up() : blockpos.down())); } else if (blockstate.getBlock() instanceof CakeBlock) { ((ServerPlayerEntityBridge) playerIn).bridge$getBukkitEntity().sendHealthUpdate(); + } else if (stackIn.getItem() instanceof TallBlockItem) { + // send a correcting update to the client, as it already placed the upper half of the bisected item + playerIn.connection.sendPacket(new SChangeBlockPacket(world, blockpos.offset(blockRaytraceResultIn.getFace()).up())); + // send a correcting update to the client for the block above as well, this because of replaceable blocks (such as grass, sea grass etc) + playerIn.connection.sendPacket(new SChangeBlockPacket(world, blockpos.up())); } ((ServerPlayerEntityBridge) playerIn).bridge$getBukkitEntity().updateInventory(); resultType = ((bukkitEvent.useItemInHand() != Event.Result.ALLOW) ? ActionResultType.SUCCESS : ActionResultType.PASS); diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/server/ServerWorldMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/server/ServerWorldMixin.java index 8913e460..9ca431ad 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/server/ServerWorldMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/server/ServerWorldMixin.java @@ -213,8 +213,7 @@ public abstract class ServerWorldMixin extends WorldMixin implements ServerWorld cause = arclight$cause; arclight$cause = null; } - LightningStrikeEvent lightning = new LightningStrikeEvent(this.bridge$getWorld(), (LightningStrike) ((EntityBridge) entity).bridge$getBukkitEntity(), cause); - Bukkit.getPluginManager().callEvent(lightning); + LightningStrikeEvent lightning = CraftEventFactory.callLightningStrikeEvent((LightningStrike) ((EntityBridge) entity).bridge$getBukkitEntity(), cause); if (lightning.isCancelled()) { return false; } @@ -425,7 +424,7 @@ public abstract class ServerWorldMixin extends WorldMixin implements ServerWorld if (type.hasTileEntity(state)) { TileEntity replacement = type.createTileEntity(state, (IBlockReader) this); if (replacement == null) return found; - replacement.world = ((World) (Object) this); + replacement.setWorldAndPos(((World) (Object) this), pos); this.setTileEntity(pos, replacement); return replacement; } else { diff --git a/arclight-common/src/main/resources/mixins.arclight.bukkit.json b/arclight-common/src/main/resources/mixins.arclight.bukkit.json index c4e161fc..e3e822c4 100644 --- a/arclight-common/src/main/resources/mixins.arclight.bukkit.json +++ b/arclight-common/src/main/resources/mixins.arclight.bukkit.json @@ -34,6 +34,7 @@ "EntityTypeMixin", "JavaPluginLoaderMixin", "JavaPluginMixin", + "LibraryLoaderMixin", "MaterialMixin", "PluginClassLoaderMixin", "PotionEffectTypeMixin", diff --git a/arclight-common/src/main/resources/mixins.arclight.core.json b/arclight-common/src/main/resources/mixins.arclight.core.json index c8e092a5..167614f9 100644 --- a/arclight-common/src/main/resources/mixins.arclight.core.json +++ b/arclight-common/src/main/resources/mixins.arclight.core.json @@ -116,6 +116,7 @@ "command.impl.EffectCommandMixin", "command.impl.GameRuleCommandMixin", "command.impl.ReloadCommandMixin", + "command.impl.SummonCommandMixin", "command.impl.TeleportCommandMixin", "command.impl.TimeCommandMixin", "enchantment.DamageEnchantmentMixin", diff --git a/arclight-forge-1.16/build.gradle b/arclight-forge-1.16/build.gradle index ed952ab2..e55e2858 100644 --- a/arclight-forge-1.16/build.gradle +++ b/arclight-forge-1.16/build.gradle @@ -68,7 +68,16 @@ def embedLibs = [/*'org.spongepowered:mixin:0.8.1',*/ 'org.ow2.asm:asm-util:9.0' 'org.apache.logging.log4j:log4j-jul:2.11.2', 'net.md-5:SpecialSource:1.9.0', 'org.jline:jline-terminal-jansi:3.12.1', 'org.fusesource.jansi:jansi:1.18', 'org.jline:jline-terminal:3.12.1', 'org.jline:jline-reader:3.12.1', - 'jline:jline:2.12.1'] + 'jline:jline:2.12.1', 'org.apache.maven:maven-resolver-provider:3.8.1', + 'org.apache.maven.resolver:maven-resolver-connector-basic:1.6.2', 'org.apache.maven.resolver:maven-resolver-transport-http:1.6.2', + 'org.apache.maven:maven-model:3.8.1', 'org.codehaus.plexus:plexus-utils:3.2.1', + 'org.apache.maven:maven-model-builder:3.8.1', 'org.codehaus.plexus:plexus-interpolation:1.25', + 'org.eclipse.sisu:org.eclipse.sisu.inject:0.3.4', 'org.apache.maven:maven-builder-support:3.8.1', + 'org.apache.maven:maven-repository-metadata:3.8.1', 'org.apache.maven.resolver:maven-resolver-api:1.6.2', + 'org.apache.maven.resolver:maven-resolver-spi:1.6.2', 'org.apache.maven.resolver:maven-resolver-util:1.6.2', + 'org.apache.maven.resolver:maven-resolver-impl:1.6.2', 'org.apache.httpcomponents:httpclient:4.5.12', + 'org.apache.httpcomponents:httpcore:4.4.13', 'commons-codec:commons-codec:1.11', + 'org.slf4j:jcl-over-slf4j:1.7.30'] dependencies { minecraft "net.minecraftforge:forge:$minecraftVersion-$forgeVersion" @@ -81,6 +90,9 @@ dependencies { for (def lib : embedLibs) { arclight lib } + embed('org.apache.logging.log4j:log4j-slf4j-impl:2.8.1') { + exclude module: 'log4j-api' + } embed 'net.md-5:bungeecord-chat:1.16-R0.4@jar' embed "org.spigotmc:spigot-api:$minecraftVersion-R0.1-SNAPSHOT@jar" embed 'com.github.ArclightTeam:mixin-tools:1.0.0@jar' diff --git a/build.gradle b/build.gradle index 134af1a2..8f32001e 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ allprojects { version '1.0.19-SNAPSHOT' ext { - agpVersion = '1.15' + agpVersion = '1.16' minecraftVersion = '1.16.5' forgeVersion = '36.1.4' }