Fabric Shield Lib

Fabric Shield Lib

3M Downloads

Shield enchant target is broken outside dev environment / Reflection Enchantment Broken

StellarWind22 opened this issue · 12 comments

commented

Shield enchantments cause crashes outside the development environment in 1.5.3-1.18. in 1.18.2

[12:24:41] [Server thread/ERROR] (Minecraft) Encountered an unexpected exception
java.lang.AbstractMethodError: Receiver class net.minecraft.enchantment.EnchantmentTarget$15 does not define or inherit an implementation of the resolved method 'abstract boolean isAcceptableItem(net.minecraft.item.Item)' of abstract class net.minecraft.enchantment.EnchantmentTarget.
	at net.minecraft.enchantment.Enchantment.isAcceptableItem(Enchantment.java:121) ~[[email protected]:?]
	at net.minecraft.server.command.EnchantCommand.execute(EnchantCommand.java:48) ~[[email protected]:?]
	at net.minecraft.server.command.EnchantCommand.method_13240(EnchantCommand.java:35) ~[[email protected]:?]
	at com.mojang.brigadier.CommandDispatcher.execute(CommandDispatcher.java:263) ~[brigadier-1.0.18.jar:?]
	at com.mojang.brigadier.CommandDispatcher.execute(CommandDispatcher.java:177) ~[brigadier-1.0.18.jar:?]
	at net.minecraft.server.command.CommandManager.execute(CommandManager.java:222) ~[[email protected]:?]
	at net.minecraft.server.network.ServerPlayNetworkHandler.executeCommand(ServerPlayNetworkHandler.java:1134) ~[[email protected]:?]
	at net.minecraft.server.network.ServerPlayNetworkHandler.handleMessage(ServerPlayNetworkHandler.java:1120) ~[[email protected]:?]
	at net.minecraft.server.network.ServerPlayNetworkHandler.onChatMessage(ServerPlayNetworkHandler.java:1106) ~[[email protected]:?]
	at net.minecraft.network.packet.c2s.play.ChatMessageC2SPacket.apply(ChatMessageC2SPacket.java:48) ~[[email protected]:?]
	at net.minecraft.network.packet.c2s.play.ChatMessageC2SPacket.apply(ChatMessageC2SPacket.java:31) ~[[email protected]:?]
	at net.minecraft.network.NetworkThreadUtils.method_11072(NetworkThreadUtils.java:26) ~[[email protected]:?]
	at net.minecraft.server.ServerTask.run(ServerTask.java:22) ~[[email protected]:?]
	at net.minecraft.util.thread.ThreadExecutor.executeTask(ThreadExecutor.java:150) ~[[email protected]:?]
	at net.minecraft.util.thread.ReentrantThreadExecutor.executeTask(ReentrantThreadExecutor.java:29) ~[[email protected]:?]
	at net.minecraft.server.MinecraftServer.executeTask(MinecraftServer.java:787) ~[[email protected]:?]
	at net.minecraft.server.MinecraftServer.executeTask(MinecraftServer.java:1751) ~[[email protected]:?]
	at net.minecraft.util.thread.ThreadExecutor.runTask(ThreadExecutor.java:126) ~[[email protected]:?]
	at net.minecraft.server.MinecraftServer.runOneTask(MinecraftServer.java:772) ~[[email protected]:?]
	at net.minecraft.server.MinecraftServer.runTask(MinecraftServer.java:768) ~[[email protected]:?]
	at net.minecraft.util.thread.ThreadExecutor.runTasks(ThreadExecutor.java:134) ~[[email protected]:?]
	at net.minecraft.server.MinecraftServer.runTasksTillTickEnd(MinecraftServer.java:751) ~[[email protected]:?]
	at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:687) ~[[email protected]:?]
	at net.minecraft.server.MinecraftServer.method_29739(MinecraftServer.java:293) ~[[email protected]:?]
	at java.lang.Thread.run(Thread.java:833) [?:?]
commented

I'm not sure how to fix this this error only occurs in the development environment. Outside the development environment the enchantments work just fine.

commented

It seems to be something with isAcceptableItem, I got a pretty similar crash report from opening a chest that had a loot table contained. I'm not sure if this helps but I hope it does. (Note: I'm also in a dev environment)

Description: Exception in server tick loop

java.lang.AbstractMethodError: Missing implementation of resolved method 'abstract boolean isAcceptableItem(net.minecraft.item.Item)' of abstract class net.minecraft.enchantment.EnchantmentTarget.
	at net.minecraft.enchantment.EnchantmentHelper.getPossibleEntries(EnchantmentHelper.java:411)
	at net.minecraft.enchantment.EnchantmentHelper.generateEnchantments(EnchantmentHelper.java:360)
	at net.minecraft.enchantment.EnchantmentHelper.enchant(EnchantmentHelper.java:318)
	at net.minecraft.loot.function.EnchantWithLevelsLootFunction.process(EnchantWithLevelsLootFunction.java:40)
	at net.minecraft.loot.function.ConditionalLootFunction.apply(ConditionalLootFunction.java:31)
	at net.minecraft.loot.function.ConditionalLootFunction.apply(ConditionalLootFunction.java:20)
	at net.minecraft.loot.function.LootFunction.method_514(LootFunction.java:14)
	at net.minecraft.loot.entry.ItemEntry.generateLoot(ItemEntry.java:33)
	at net.minecraft.loot.entry.LeafEntry$1.generateLoot(LeafEntry.java:59)
	at net.minecraft.loot.LootPool.supplyOnce(LootPool.java:81)
	at net.minecraft.loot.LootPool.addGeneratedLoot(LootPool.java:96)
	at net.minecraft.loot.LootTable.generateUnprocessedLoot(LootTable.java:73)
	at net.minecraft.loot.LootTable.generateLoot(LootTable.java:82)
	at net.minecraft.loot.LootTable.generateLoot(LootTable.java:87)
	at net.minecraft.loot.LootTable.supplyInventory(LootTable.java:106)
	at net.minecraft.block.entity.LootableContainerBlockEntity.checkLootInteraction(LootableContainerBlockEntity.java:82)
	at net.minecraft.block.entity.LootableContainerBlockEntity.createMenu(LootableContainerBlockEntity.java:160)
	at net.minecraft.server.network.ServerPlayerEntity.openHandledScreen(ServerPlayerEntity.java:1031)
	at net.minecraft.block.ChestBlock.onUse(ChestBlock.java:208)
	at net.minecraft.block.AbstractBlock$AbstractBlockState.onUse(AbstractBlock.java:939)
	at net.minecraft.server.network.ServerPlayerInteractionManager.interactBlock(ServerPlayerInteractionManager.java:336)
	at net.minecraft.server.network.ServerPlayNetworkHandler.onPlayerInteractBlock(ServerPlayNetworkHandler.java:1081)
	at net.minecraft.network.packet.c2s.play.PlayerInteractBlockC2SPacket.apply(PlayerInteractBlockC2SPacket.java:30)
	at net.minecraft.network.packet.c2s.play.PlayerInteractBlockC2SPacket.apply(PlayerInteractBlockC2SPacket.java:8)
	at net.minecraft.network.NetworkThreadUtils.method_11072(NetworkThreadUtils.java:22)
	at net.minecraft.server.ServerTask.run(ServerTask.java:18)
	at net.minecraft.util.thread.ThreadExecutor.executeTask(ThreadExecutor.java:157)
	at net.minecraft.util.thread.ReentrantThreadExecutor.executeTask(ReentrantThreadExecutor.java:23)
	at net.minecraft.server.MinecraftServer.executeTask(MinecraftServer.java:808)
	at net.minecraft.server.MinecraftServer.executeTask(MinecraftServer.java:165)
	at net.minecraft.util.thread.ThreadExecutor.runTask(ThreadExecutor.java:131)
	at net.minecraft.server.MinecraftServer.runOneTask(MinecraftServer.java:790)
	at net.minecraft.server.MinecraftServer.runTask(MinecraftServer.java:784)
	at net.minecraft.util.thread.ThreadExecutor.runTasks(ThreadExecutor.java:140)
	at net.minecraft.server.MinecraftServer.runTasksTillTickEnd(MinecraftServer.java:769)
	at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:701)
	at net.minecraft.server.MinecraftServer.method_29739(MinecraftServer.java:273)
	at java.base/java.lang.Thread.run(Thread.java:833)
	```
commented

After further investigation, it just crashes if the game loads anything that is having an enchantment applied onto it. I believe it might have to do with the new enchantment target being added.

commented

having a similar issue
I was convinced it was something to do with my custom bows, but I believe it could be this.
I've stripped my mod apart trying to root out this issue.

java.lang.AbstractMethodError: Missing implementation of resolved method 'abstract boolean isAcceptableItem(net.minecraft.item.Item)' of abstract class net.minecraft.enchantment.EnchantmentTarget.
	at net.minecraft.enchantment.EnchantmentHelper.getPossibleEntries(EnchantmentHelper.java:416)
	at net.minecraft.enchantment.EnchantmentHelper.generateEnchantments(EnchantmentHelper.java:365)
	at net.minecraft.enchantment.EnchantmentHelper.enchant(EnchantmentHelper.java:323)
	at net.minecraft.entity.mob.MobEntity.enchantMainHandItem(MobEntity.java:1061)
	at net.minecraft.entity.mob.MobEntity.updateEnchantments(MobEntity.java:1049)
	at net.minecraft.entity.mob.AbstractSkeletonEntity.initialize(AbstractSkeletonEntity.java:154)
	at net.minecraft.world.SpawnHelper.spawnEntitiesInChunk(SpawnHelper.java:295)
	at net.minecraft.world.SpawnHelper.spawnEntitiesInChunk(SpawnHelper.java:212)
	at net.minecraft.world.SpawnHelper.spawn(SpawnHelper.java:200)
	at net.minecraft.server.world.ServerChunkManager.tickChunks(ServerChunkManager.java:376)
	at net.minecraft.server.world.ServerChunkManager.tick(ServerChunkManager.java:323)
	at net.minecraft.server.world.ServerWorld.tick(ServerWorld.java:319)
	at net.minecraft.server.MinecraftServer.tickWorlds(MinecraftServer.java:875)
	at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:819)
	at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:98)
	at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:665)
	at net.minecraft.server.MinecraftServer.method_29739(MinecraftServer.java:257)
	at java.base/java.lang.Thread.run(Thread.java:833)


A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- Head --
Thread: Render thread
Stacktrace:
	at net.minecraft.enchantment.EnchantmentHelper.getPossibleEntries(EnchantmentHelper.java:416)
	at net.minecraft.enchantment.EnchantmentHelper.generateEnchantments(EnchantmentHelper.java:365)
	at net.minecraft.enchantment.EnchantmentHelper.enchant(EnchantmentHelper.java:323)
	at net.minecraft.entity.mob.MobEntity.enchantMainHandItem(MobEntity.java:1061)
	at net.minecraft.entity.mob.MobEntity.updateEnchantments(MobEntity.java:1049)
	at net.minecraft.entity.mob.AbstractSkeletonEntity.initialize(AbstractSkeletonEntity.java:154)
	at net.minecraft.world.SpawnHelper.spawnEntitiesInChunk(SpawnHelper.java:295)
	at net.minecraft.world.SpawnHelper.spawnEntitiesInChunk(SpawnHelper.java:212)
	at net.minecraft.world.SpawnHelper.spawn(SpawnHelper.java:200)
	at net.minecraft.server.world.ServerChunkManager.tickChunks(ServerChunkManager.java:376)
	at net.minecraft.server.world.ServerChunkManager.tick(ServerChunkManager.java:323)
	at net.minecraft.server.world.ServerWorld.tick(ServerWorld.java:319)

commented

I'm not entirely sure what this means we will have to do but I found a reference to AbstractMethodError in FabricASM https://github.com/Chocohead/Fabric-ASM

This is taken from that github repo's readme

"Landing Amphibiously There are times when a jetty alone is insufficient for the extension task at hand, resulting in big problems for any added values. In such situations a full amphibious landing to the cove's shore can be performed instead.

Any situation where a method in the enum needs to be subclasses, such as an abstract enum, adding values directly will result in AbstractMethodErrors when the methods are called for the added values. The constructor alone is unable to provide a solution to this; hence MM allows subclassing enums for added entries. These subclasses are defined via an additional structure class (to the constructor's parameters) which defines the overrides a subclass would like to make to the enum. Like normal addition there are two options depending how the normal constructor parameters are passed:"

Just Copying some notes from the duplicate issue over here

commented

idk I'm not entirely sure how to fix this Issue I'll have to do a lot more research as my knowledge of FabricASM was just enough for me to initially get the enchantment target working.

commented

I think I may have found the solution

commented

This is still occurring even with the latest patch
`dependencies {

// Fabric Shield Lib

modImplementation 'com.github.CrimsonDawn45:Fabric-Shield-Lib:v1.6.1-pre1-1.19'

`Time: 2022-09-30 20:07:23
Description: Exception ticking world

java.lang.AbstractMethodError: Missing implementation of resolved method 'abstract boolean isAcceptableItem(net.minecraft.item.Item)' of abstract class net.minecraft.enchantment.EnchantmentTarget.
at net.minecraft.enchantment.EnchantmentHelper.getPossibleEntries(EnchantmentHelper.java:416)
at net.minecraft.enchantment.EnchantmentHelper.generateEnchantments(EnchantmentHelper.java:365)
at net.minecraft.enchantment.EnchantmentHelper.enchant(EnchantmentHelper.java:323)
at net.minecraft.entity.mob.MobEntity.enchantMainHandItem(MobEntity.java:1061)
at net.minecraft.entity.mob.MobEntity.updateEnchantments(MobEntity.java:1049)
at net.minecraft.entity.mob.AbstractSkeletonEntity.initialize(AbstractSkeletonEntity.java:154)
at net.minecraft.world.SpawnHelper.spawnEntitiesInChunk(SpawnHelper.java:295)
at net.minecraft.world.SpawnHelper.spawnEntitiesInChunk(SpawnHelper.java:212)
at net.minecraft.world.SpawnHelper.spawn(SpawnHelper.java:200)
at net.minecraft.server.world.ServerChunkManager.tickChunks(ServerChunkManager.java:376)
at net.minecraft.server.world.ServerChunkManager.tick(ServerChunkManager.java:323)
at net.minecraft.server.world.ServerWorld.tick(ServerWorld.java:319)
at net.minecraft.server.MinecraftServer.tickWorlds(MinecraftServer.java:875)
at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:819)
at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:98)
at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:665)
at net.minecraft.server.MinecraftServer.method_29739(MinecraftServer.java:257)
at java.base/java.lang.Thread.run(Thread.java:833)

A detailed walkthrough of the error, its code path and all known details is as follows:

-- Head --
Thread: Render thread
Stacktrace:
at net.minecraft.enchantment.EnchantmentHelper.getPossibleEntries(EnchantmentHelper.java:416)
at net.minecraft.enchantment.EnchantmentHelper.generateEnchantments(EnchantmentHelper.java:365)
at net.minecraft.enchantment.EnchantmentHelper.enchant(EnchantmentHelper.java:323)
at net.minecraft.entity.mob.MobEntity.enchantMainHandItem(MobEntity.java:1061)
at net.minecraft.entity.mob.MobEntity.updateEnchantments(MobEntity.java:1049)
at net.minecraft.entity.mob.AbstractSkeletonEntity.initialize(AbstractSkeletonEntity.java:154)
at net.minecraft.world.SpawnHelper.spawnEntitiesInChunk(SpawnHelper.java:295)
at net.minecraft.world.SpawnHelper.spawnEntitiesInChunk(SpawnHelper.java:212)
at net.minecraft.world.SpawnHelper.spawn(SpawnHelper.java:200)
at net.minecraft.server.world.ServerChunkManager.tickChunks(ServerChunkManager.java:376)
at net.minecraft.server.world.ServerChunkManager.tick(ServerChunkManager.java:323)
at net.minecraft.server.world.ServerWorld.tick(ServerWorld.java:319)`

commented

I will probably have to do something similar to veinminer & see if I can do this without FabricASM

commented

any eta on a fix for this? literally cannot test anything in dev because of crashes.
or even a work around I can implement.
please. 🥺

commented

I don't think I will have a fix anytime soon things in my life have gotten much MUCH more complicated lately. I don't have the time nor energy to maintain this project anymore.

commented

The only way I've seen to fix this is to remove custom shield enchantment support temporarily