1.19.2 - No eggs appearing in chests
nicpasqua opened this issue ยท 6 comments
I have changed the config file as necessary and still have not found any. I decided to test turning all of the spawn rates up to 100% and still have not come across a single one after checking 10 different structures.
Can confirm that no eggs spawn on server when loot table is set to true for Minecraft 1.19.2.
Log:
[Server thread/ERROR] [net.minecraft.network.protocol.PacketUtils/]: Failed to handle packet net.minecraft.network.protocol.game.ServerboundUseItemOnPacket@3a30ff15, suppressing error
java.lang.NullPointerException: Cannot invoke "net.minecraft.resources.ResourceLocation.toString()" because the return value of "com.github.kay9.dragonmounts.dragon.breed.DragonBreed.id()" is null
at com.github.kay9.dragonmounts.dragon.DMLEggBlock$Item.create(DMLEggBlock.java:186) ~[dragonmounts-1.19.2-1.1.4a.jar%23112!/:1.19.2-1.1.4a]
at com.github.kay9.dragonmounts.data.loot.DragonEggLootMod.doApply(DragonEggLootMod.java:33) ~[dragonmounts-1.19.2-1.1.4a.jar%23112!/:1.19.2-1.1.4a]
at net.minecraftforge.common.loot.LootModifier.apply(LootModifier.java:58) ~[forge-1.19.2-43.1.1-universal.jar%23135!/:?]
at net.minecraftforge.common.ForgeHooks.modifyLoot(ForgeHooks.java:1234) ~[forge-1.19.2-43.1.1-universal.jar%23135!/:?]
at net.minecraft.world.level.storage.loot.LootTable.m_230922_(LootTable.java:90) ~[server-1.19.2-20220805.130853-srg.jar%23130!/:?]
at net.minecraft.world.level.storage.loot.LootTable.m_79123_(LootTable.java:110) ~[server-1.19.2-20220805.130853-srg.jar%23130!/:?]
at net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity.m_59640_(RandomizableContainerBlockEntity.java:82) ~[server-1.19.2-20220805.130853-srg.jar%23130!/:?]
at net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity.m_7208_(RandomizableContainerBlockEntity.java:160) ~[server-1.19.2-20220805.130853-srg.jar%23130!/:?]
at net.minecraft.server.level.ServerPlayer.m_5893_(ServerPlayer.java:966) ~[server-1.19.2-20220805.130853-srg.jar%23130!/:?]
at net.minecraft.world.level.block.ChestBlock.m_6227_(ChestBlock.java:236) ~[server-1.19.2-20220805.130853-srg.jar%23130!/:?]
at net.minecraft.world.level.block.state.BlockBehaviour$BlockStateBase.m_60664_(BlockBehaviour.java:714) ~[server-1.19.2-20220805.130853-srg.jar%23130!/:?]
at net.minecraft.server.level.ServerPlayerGameMode.m_7179_(ServerPlayerGameMode.java:340) ~[server-1.19.2-20220805.130853-srg.jar%23130!/:?]
at net.minecraft.server.network.ServerGamePacketListenerImpl.m_6371_(ServerGamePacketListenerImpl.java:1060) ~[server-1.19.2-20220805.130853-srg.jar%23130!/:?]
at net.minecraft.network.protocol.game.ServerboundUseItemOnPacket.m_5797_(ServerboundUseItemOnPacket.java:34) ~[server-1.19.2-20220805.130853-srg.jar%23130!/:?]
at net.minecraft.network.protocol.game.ServerboundUseItemOnPacket.m_5797_(ServerboundUseItemOnPacket.java:8) ~[server-1.19.2-20220805.130853-srg.jar%23130!/:?]
at net.minecraft.network.protocol.PacketUtils.m_131356_(PacketUtils.java:22) ~[server-1.19.2-20220805.130853-srg.jar%23130!/:?]
at net.minecraft.server.TickTask.run(TickTask.java:18) ~[server-1.19.2-20220805.130853-srg.jar%23130!/:?]
at net.minecraft.util.thread.BlockableEventLoop.m_6367_(BlockableEventLoop.java:157) ~[server-1.19.2-20220805.130853-srg.jar%23130!/:?]
at net.minecraft.util.thread.ReentrantBlockableEventLoop.m_6367_(ReentrantBlockableEventLoop.java:23) ~[server-1.19.2-20220805.130853-srg.jar%23130!/:?]
at net.minecraft.server.MinecraftServer.m_6367_(MinecraftServer.java:763) ~[server-1.19.2-20220805.130853-srg.jar%23130!/:?]
at net.minecraft.server.MinecraftServer.m_6367_(MinecraftServer.java:157) ~[server-1.19.2-20220805.130853-srg.jar%23130!/:?]
at net.minecraft.util.thread.BlockableEventLoop.m_7245_(BlockableEventLoop.java:131) ~[server-1.19.2-20220805.130853-srg.jar%23130!/:?]
at net.minecraft.server.MinecraftServer.m_129961_(MinecraftServer.java:746) ~[server-1.19.2-20220805.130853-srg.jar%23130!/:?]
at net.minecraft.server.MinecraftServer.m_7245_(MinecraftServer.java:740) ~[server-1.19.2-20220805.130853-srg.jar%23130!/:?]
at net.minecraft.util.thread.BlockableEventLoop.m_18701_(BlockableEventLoop.java:140) ~[server-1.19.2-20220805.130853-srg.jar%23130!/:?]
at net.minecraft.server.MinecraftServer.m_130012_(MinecraftServer.java:726) ~[server-1.19.2-20220805.130853-srg.jar%23130!/:?]
at net.minecraft.server.MinecraftServer.m_130011_(MinecraftServer.java:658) ~[server-1.19.2-20220805.130853-srg.jar%23130!/:?]
at net.minecraft.server.MinecraftServer.m_206580_(MinecraftServer.java:244) ~[server-1.19.2-20220805.130853-srg.jar%23130!/:?]
at java.lang.Thread.run(Thread.java:833) [?:?]
`
Steps to Reproduce:
Locate dungeon chest and open
Description of issue:
Upon open dungeon chest, server does not crash but gives above error and no loot is generated. Other attempts to locate dragon eggs has produced result this same error.
Can confirm this also. No other mods in place.
Modded toml file to allow eggs in loot chests. Checked loads. No eggs
I encountered this problem too. It seems BreedRegistry
has not yet completed the dragon_breeds
resources load when DragonEggLootMod
is instantiated and hence the breed
field of all DragonEggLootMod
instances refers FIRE_BUILTIN
. Possibly, the FIRE_BUILTIN
instance is later replaced by the data from the dragon_breeds
resources and so DragonBreed#id()
returns null
.
I applied following patch to the 119
branch and it works now.
diff --git a/src/main/java/com/github/kay9/dragonmounts/data/loot/DragonEggLootMod.java b/src/main/java/com/github/kay9/dragonmounts/data/loot/DragonEggLootMod.java
index 08cff35..4d69bb2 100644
--- a/src/main/java/com/github/kay9/dragonmounts/data/loot/DragonEggLootMod.java
+++ b/src/main/java/com/github/kay9/dragonmounts/data/loot/DragonEggLootMod.java
@@ -17,20 +17,27 @@ import org.jetbrains.annotations.NotNull;
public class DragonEggLootMod extends LootModifier
{
public static final Codec<DragonEggLootMod> CODEC = RecordCodecBuilder.create(i -> codecStart(i)
- .and(BreedRegistry.CODEC.fieldOf("breed").forGetter(m -> m.breed))
+ .and(Codec.STRING.fieldOf("breed").forGetter(DragonEggLootMod::getBreed))
.apply(i, DragonEggLootMod::new));
- private final DragonBreed breed;
+ private final String breed;
- public DragonEggLootMod(LootItemCondition[] conditions, DragonBreed breed)
+ public DragonEggLootMod(LootItemCondition[] conditions, String breed)
{
super(conditions);
this.breed = breed;
}
+ public String getBreed() {
+ return breed;
+ }
+
protected @NotNull ObjectArrayList<ItemStack> doApply(ObjectArrayList<ItemStack> generatedLoot, LootContext context)
{
- if (DMLConfig.useLootTables()) generatedLoot.add(DMLEggBlock.Item.create(breed, breed.hatchTime()));
+ if (DMLConfig.useLootTables()) {
+ DragonBreed breed = BreedRegistry.get(this.breed);
+ generatedLoot.add(DMLEggBlock.Item.create(breed, breed.hatchTime()));
+ }
return generatedLoot;
}
diff --git a/src/main/java/com/github/kay9/dragonmounts/data/providers/LootModifierProvider.java b/src/main/java/com/github/kay9/dragonmounts/data/providers/LootModifierProvider.java
index b6aed39..30948d0 100644
--- a/src/main/java/com/github/kay9/dragonmounts/data/providers/LootModifierProvider.java
+++ b/src/main/java/com/github/kay9/dragonmounts/data/providers/LootModifierProvider.java
@@ -44,6 +44,6 @@ class LootModifierProvider extends GlobalLootModifierProvider
LootItemRandomChanceCondition.randomChance(chance).build()
};
- super.add(path, new DragonEggLootMod(conditions, breed));
+ super.add(path, new DragonEggLootMod(conditions, breed.id().toString()));
}
}
I encountered this problem too. It seems
BreedRegistry
has not yet completed thedragon_breeds
resources load whenDragonEggLootMod
is instantiated and hence thebreed
field of allDragonEggLootMod
instances refersFIRE_BUILTIN
. Possibly, theFIRE_BUILTIN
instance is later replaced by the data from thedragon_breeds
resources and soDragonBreed#id()
returnsnull
.I applied following patch to the
119
branch and it works now.diff --git a/src/main/java/com/github/kay9/dragonmounts/data/loot/DragonEggLootMod.java b/src/main/java/com/github/kay9/dragonmounts/data/loot/DragonEggLootMod.java index 08cff35..4d69bb2 100644 --- a/src/main/java/com/github/kay9/dragonmounts/data/loot/DragonEggLootMod.java +++ b/src/main/java/com/github/kay9/dragonmounts/data/loot/DragonEggLootMod.java @@ -17,20 +17,27 @@ import org.jetbrains.annotations.NotNull; public class DragonEggLootMod extends LootModifier { public static final Codec<DragonEggLootMod> CODEC = RecordCodecBuilder.create(i -> codecStart(i) - .and(BreedRegistry.CODEC.fieldOf("breed").forGetter(m -> m.breed)) + .and(Codec.STRING.fieldOf("breed").forGetter(DragonEggLootMod::getBreed)) .apply(i, DragonEggLootMod::new)); - private final DragonBreed breed; + private final String breed; - public DragonEggLootMod(LootItemCondition[] conditions, DragonBreed breed) + public DragonEggLootMod(LootItemCondition[] conditions, String breed) { super(conditions); this.breed = breed; } + public String getBreed() { + return breed; + } + protected @NotNull ObjectArrayList<ItemStack> doApply(ObjectArrayList<ItemStack> generatedLoot, LootContext context) { - if (DMLConfig.useLootTables()) generatedLoot.add(DMLEggBlock.Item.create(breed, breed.hatchTime())); + if (DMLConfig.useLootTables()) { + DragonBreed breed = BreedRegistry.get(this.breed); + generatedLoot.add(DMLEggBlock.Item.create(breed, breed.hatchTime())); + } return generatedLoot; } diff --git a/src/main/java/com/github/kay9/dragonmounts/data/providers/LootModifierProvider.java b/src/main/java/com/github/kay9/dragonmounts/data/providers/LootModifierProvider.java index b6aed39..30948d0 100644 --- a/src/main/java/com/github/kay9/dragonmounts/data/providers/LootModifierProvider.java +++ b/src/main/java/com/github/kay9/dragonmounts/data/providers/LootModifierProvider.java @@ -44,6 +44,6 @@ class LootModifierProvider extends GlobalLootModifierProvider LootItemRandomChanceCondition.randomChance(chance).build() }; - super.add(path, new DragonEggLootMod(conditions, breed)); + super.add(path, new DragonEggLootMod(conditions, breed.id().toString())); } }
I encountered this problem too. It seems
BreedRegistry
has not yet completed thedragon_breeds
resources load whenDragonEggLootMod
is instantiated and hence thebreed
field of allDragonEggLootMod
instances refersFIRE_BUILTIN
. Possibly, theFIRE_BUILTIN
instance is later replaced by the data from thedragon_breeds
resources and soDragonBreed#id()
returnsnull
.I applied following patch to the
119
branch and it works now.diff --git a/src/main/java/com/github/kay9/dragonmounts/data/loot/DragonEggLootMod.java b/src/main/java/com/github/kay9/dragonmounts/data/loot/DragonEggLootMod.java index 08cff35..4d69bb2 100644 --- a/src/main/java/com/github/kay9/dragonmounts/data/loot/DragonEggLootMod.java +++ b/src/main/java/com/github/kay9/dragonmounts/data/loot/DragonEggLootMod.java @@ -17,20 +17,27 @@ import org.jetbrains.annotations.NotNull; public class DragonEggLootMod extends LootModifier { public static final Codec<DragonEggLootMod> CODEC = RecordCodecBuilder.create(i -> codecStart(i) - .and(BreedRegistry.CODEC.fieldOf("breed").forGetter(m -> m.breed)) + .and(Codec.STRING.fieldOf("breed").forGetter(DragonEggLootMod::getBreed)) .apply(i, DragonEggLootMod::new)); - private final DragonBreed breed; + private final String breed; - public DragonEggLootMod(LootItemCondition[] conditions, DragonBreed breed) + public DragonEggLootMod(LootItemCondition[] conditions, String breed) { super(conditions); this.breed = breed; } + public String getBreed() { + return breed; + } + protected @NotNull ObjectArrayList<ItemStack> doApply(ObjectArrayList<ItemStack> generatedLoot, LootContext context) { - if (DMLConfig.useLootTables()) generatedLoot.add(DMLEggBlock.Item.create(breed, breed.hatchTime())); + if (DMLConfig.useLootTables()) { + DragonBreed breed = BreedRegistry.get(this.breed); + generatedLoot.add(DMLEggBlock.Item.create(breed, breed.hatchTime())); + } return generatedLoot; } diff --git a/src/main/java/com/github/kay9/dragonmounts/data/providers/LootModifierProvider.java b/src/main/java/com/github/kay9/dragonmounts/data/providers/LootModifierProvider.java index b6aed39..30948d0 100644 --- a/src/main/java/com/github/kay9/dragonmounts/data/providers/LootModifierProvider.java +++ b/src/main/java/com/github/kay9/dragonmounts/data/providers/LootModifierProvider.java @@ -44,6 +44,6 @@ class LootModifierProvider extends GlobalLootModifierProvider LootItemRandomChanceCondition.randomChance(chance).build() }; - super.add(path, new DragonEggLootMod(conditions, breed)); + super.add(path, new DragonEggLootMod(conditions, breed.id().toString())); } }
is there anyway i could get the fixed version of this?
Duplicate of #99