diff --git a/build.gradle b/build.gradle index 4989cd2cd1..18cbc1ca79 100644 --- a/build.gradle +++ b/build.gradle @@ -101,6 +101,7 @@ dependencies { // modCompileOnly("maven.modrinth:enchantment-descriptions:${project.enchantment_descriptions_version}") modCompileOnly("maven.modrinth:travelersbackpack:${project.travelers_backpack_version}") modCompileOnly("maven.modrinth:botania:${project.botania_version}") + modCompileOnly("maven.modrinth:lootr:${project.lootr_version}") modImplementation("maven.modrinth:idwtialsimmoedm:${project.idwtialsimmoedm_version}") //Porting Lib diff --git a/gradle.properties b/gradle.properties index 60b9c424ba..566b979e7b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -65,6 +65,8 @@ port_lib_version = 2.3.5+1.20.1 port_lib_modules = lazy_registration # https://modrinth.com/mod/exclusions-lib exclusionslib_version=0.6 +# https://modrinth.com/mod/lootr/versions +lootr_version=0.7.35.85 # What recipe viewer to use ('emi', 'rei', or 'disabled') recipe_viewer=emi diff --git a/src/main/java/de/dafuqs/spectrum/blocks/amphora/AmphoraBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/amphora/AmphoraBlockEntity.java index 020b9a81b9..aa3c0417c2 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/amphora/AmphoraBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/amphora/AmphoraBlockEntity.java @@ -43,16 +43,21 @@ protected void onViewerCountUpdate(World world, BlockPos pos, BlockState state, @Override protected boolean isPlayerViewing(PlayerEntity player) { - if (player.currentScreenHandler instanceof GenericContainerScreenHandler) { - Inventory inventory = ((GenericContainerScreenHandler)player.currentScreenHandler).getInventory(); - return inventory == AmphoraBlockEntity.this; - } else { - return false; - } + return AmphoraBlockEntity.this.isPlayerViewing(player); } }; } + // This is a separate method to make Lootr integration easier + protected boolean isPlayerViewing(PlayerEntity player) { + if (player.currentScreenHandler instanceof GenericContainerScreenHandler) { + Inventory inventory = ((GenericContainerScreenHandler)player.currentScreenHandler).getInventory(); + return inventory == this; + } else { + return false; + } + } + @Override protected void writeNbt(NbtCompound nbt) { super.writeNbt(nbt); diff --git a/src/main/java/de/dafuqs/spectrum/compat/SpectrumIntegrationPacks.java b/src/main/java/de/dafuqs/spectrum/compat/SpectrumIntegrationPacks.java index 5ae0a14b18..8c6c104dbd 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/SpectrumIntegrationPacks.java +++ b/src/main/java/de/dafuqs/spectrum/compat/SpectrumIntegrationPacks.java @@ -8,6 +8,7 @@ import de.dafuqs.spectrum.compat.exclusions_lib.*; import de.dafuqs.spectrum.compat.farmersdelight.*; import de.dafuqs.spectrum.compat.gobber.*; +import de.dafuqs.spectrum.compat.lootr.*; import de.dafuqs.spectrum.compat.malum.*; import de.dafuqs.spectrum.compat.modonomicon.*; import de.dafuqs.spectrum.compat.neepmeat.*; @@ -47,6 +48,7 @@ protected static void registerIntegrationPack(String modId, Supplier new MalumCompat()); registerIntegrationPack(TRAVELERS_BACKPACK_ID, () -> new TravelersBackpackCompat()); registerIntegrationPack(CREATE_ID, () -> new CreateCompat()); + registerIntegrationPack(LOOTR_ID, () -> new LootrCompat()); } for (ModIntegrationPack container : INTEGRATION_PACKS.values()) { diff --git a/src/main/java/de/dafuqs/spectrum/compat/lootr/LootAmphoraBlock.java b/src/main/java/de/dafuqs/spectrum/compat/lootr/LootAmphoraBlock.java new file mode 100644 index 0000000000..54cbf7fb64 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/compat/lootr/LootAmphoraBlock.java @@ -0,0 +1,49 @@ +package de.dafuqs.spectrum.compat.lootr; + +import de.dafuqs.spectrum.blocks.amphora.*; +import net.minecraft.block.*; +import net.minecraft.block.entity.*; +import net.minecraft.entity.player.*; +import net.minecraft.util.*; +import net.minecraft.util.hit.*; +import net.minecraft.util.math.*; +import net.minecraft.world.*; +import net.zestyblaze.lootr.api.*; +import net.zestyblaze.lootr.util.*; +import org.jetbrains.annotations.*; + +public class LootAmphoraBlock extends AmphoraBlock { + public LootAmphoraBlock(Settings settings) { + super(settings); + } + + @Override + public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { + if (player.isSneaking()) { + ChestUtil.handleLootSneak(this, world, pos, player); + } else { + ChestUtil.handleLootChest(this, world, pos, player); + } + return ActionResult.SUCCESS; + } + + @Override + public @Nullable BlockEntity createBlockEntity(BlockPos pos, BlockState state) { + return new LootAmphoraBlockEntity(pos, state); + } + + @Override + public float calcBlockBreakingDelta(BlockState state, PlayerEntity player, BlockView world, BlockPos pos) { + return LootrAPI.getDestroyProgress(state, player, world, pos, super.calcBlockBreakingDelta(state, player, world, pos)); + } + + @Override + public float getBlastResistance() { + return LootrAPI.getExplosionResistance(this, super.getBlastResistance()); + } + + @Override + public int getComparatorOutput(BlockState state, World world, BlockPos pos) { + return LootrAPI.getAnalogOutputSignal(state, world, pos, super.getComparatorOutput(state, world, pos)); + } +} diff --git a/src/main/java/de/dafuqs/spectrum/compat/lootr/LootAmphoraBlockEntity.java b/src/main/java/de/dafuqs/spectrum/compat/lootr/LootAmphoraBlockEntity.java new file mode 100644 index 0000000000..75b9930891 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/compat/lootr/LootAmphoraBlockEntity.java @@ -0,0 +1,239 @@ +package de.dafuqs.spectrum.compat.lootr; + +import com.google.common.collect.*; +import de.dafuqs.spectrum.blocks.amphora.*; +import net.minecraft.advancement.criterion.*; +import net.minecraft.block.*; +import net.minecraft.block.entity.*; +import net.minecraft.entity.player.*; +import net.minecraft.inventory.*; +import net.minecraft.item.*; +import net.minecraft.loot.*; +import net.minecraft.loot.context.*; +import net.minecraft.nbt.*; +import net.minecraft.screen.*; +import net.minecraft.server.network.*; +import net.minecraft.server.world.*; +import net.minecraft.text.*; +import net.minecraft.util.*; +import net.minecraft.util.collection.*; +import net.minecraft.util.math.*; +import net.zestyblaze.lootr.api.*; +import net.zestyblaze.lootr.api.blockentity.*; +import net.zestyblaze.lootr.client.*; +import net.zestyblaze.lootr.config.*; +import net.zestyblaze.lootr.data.*; +import org.jetbrains.annotations.*; + +import java.util.*; + +public class LootAmphoraBlockEntity extends AmphoraBlockEntity implements ILootBlockEntity { + public Set openers = new HashSet<>(); + protected Identifier savedLootTable = null; + protected long seed = -1L; + protected UUID tileId = null; + protected boolean opened = false; + private boolean savingToItem = false; + + public LootAmphoraBlockEntity(BlockPos pos, BlockState state) { + super(pos, state); + } + + // We cannot set the BlockEntityType in the constructor, so hopefully doing it here is enough + // (the field in BlockEntity is private anyway) + @Override + public BlockEntityType getType() { + return LootrCompat.LOOT_AMPHORA; + } + + @Override + protected boolean isPlayerViewing(PlayerEntity player) { + if (player.currentScreenHandler instanceof GenericContainerScreenHandler) { + Inventory inventory = ((GenericContainerScreenHandler) player.currentScreenHandler).getInventory(); + if (inventory instanceof SpecialChestInventory data) { + if (data.getTileId() == null) { + return data.getBlockEntity(this.world) == this; + } + + return data.getTileId().equals(this.getTileId()); + } + } + + return false; + } + + @Override + protected void writeNbt(NbtCompound nbt) { + super.writeNbt(nbt); + + if (this.savedLootTable != null) { + nbt.putString("LootTable", this.savedLootTable.toString()); + } + + if (this.seed != -1L) { + nbt.putLong("LootTableSeed", this.seed); + } + + if (!LootrAPI.shouldDiscard() && !this.savingToItem) { + nbt.putUuid("tileId", this.getTileId()); + NbtList list = new NbtList(); + + for (UUID opener : this.openers) { + list.add(NbtHelper.fromUuid(opener)); + } + + nbt.put("LootrOpeners", list); + } + } + + @Override + public void readNbt(NbtCompound nbt) { + if (nbt.contains("specialLootChest_table", NbtElement.STRING_TYPE)) { + this.savedLootTable = new Identifier(nbt.getString("specialLootChest_table")); + } + + if (nbt.contains("specialLootChest_seed", NbtElement.LONG_TYPE)) { + this.seed = nbt.getLong("specialLootChest_seed"); + } + + if (this.savedLootTable == null && nbt.contains("LootTable", NbtElement.STRING_TYPE)) { + this.savedLootTable = new Identifier(nbt.getString("LootTable")); + if (nbt.contains("LootTableSeed", NbtElement.LONG_TYPE)) { + this.seed = nbt.getLong("LootTableSeed"); + } + + this.setLootTable(this.savedLootTable, this.seed); + } + + if (nbt.containsUuid("tileId")) { + this.tileId = nbt.getUuid("tileId"); + } + + if (this.tileId == null) { + this.getTileId(); + } + + if (nbt.contains("LootrOpeners")) { + Set newOpeners = new HashSet<>(); + + for (NbtElement item : nbt.getList("LootrOpeners", NbtElement.INT_ARRAY_TYPE)) { + newOpeners.add(NbtHelper.toUuid(item)); + } + + if (!Sets.symmetricDifference(this.openers, newOpeners).isEmpty()) { + this.openers = newOpeners; + if (this.getWorld() != null && this.getWorld().isClient()) { + ClientHooks.clearCache(this.getPos()); + } + } + } + + super.readNbt(nbt); + } + + @Override + protected void setInvStackList(DefaultedList list) { + } + + @Override + protected ScreenHandler createScreenHandler(int syncId, PlayerInventory playerInventory) { + return null; + } + + @Override + public void setStackNbt(ItemStack stack) { + this.savingToItem = true; + super.setStackNbt(stack); + this.savingToItem = false; + } + + @Override + public void checkLootInteraction(@Nullable PlayerEntity player) { + } + + @Override + public void setLootTable(Identifier id, long seed) { + this.savedLootTable = id; + this.seed = seed; + super.setLootTable(id, seed); + } + + @Override + public NbtCompound toInitialChunkDataNbt() { + NbtCompound nbt = super.toInitialChunkDataNbt(); + this.writeNbt(nbt); + return nbt; + } + + @Override + public Set getOpeners() { + return this.openers; + } + + @Override + public BlockPos getPosition() { + return this.getPos(); + } + + @Override + public long getSeed() { + return this.seed; + } + + @Override + public Identifier getTable() { + return this.savedLootTable; + } + + @Override + public UUID getTileId() { + if (this.tileId == null) { + this.tileId = UUID.randomUUID(); + } + + return this.tileId; + } + + @Override + public void setOpened(boolean opened) { + this.opened = opened; + } + + @Override + public void unpackLootTable(PlayerEntity playerEntity, Inventory inventory, Identifier identifier, long seed) { + if (this.world != null && this.savedLootTable != null && this.world.getServer() != null) { + LootTable loottable = this.world.getServer().getLootManager().getLootTable(identifier != null ? identifier : this.savedLootTable); + if (loottable == LootTable.EMPTY) { + LootrAPI.LOG.error("Unable to fill loot amphora in " + this.world.getRegistryKey() + " at " + this.pos + " as the loot table '" + (identifier != null ? identifier : this.savedLootTable) + "' couldn't be resolved! Please search the loot table in `latest.log` to see if there are errors in loading."); + if (ConfigManager.get().debug.report_invalid_tables) { + playerEntity.sendMessage(Text.translatable("lootr.message.invalid_table", (identifier != null ? identifier : this.savedLootTable).toString()).setStyle(ConfigManager.get().notifications.disable_message_styles ? Style.EMPTY : Style.EMPTY.withColor(TextColor.fromFormatting(Formatting.DARK_RED)).withBold(true)), false); + } + } + + if (playerEntity instanceof ServerPlayerEntity serverPlayerEntity) { + Criteria.PLAYER_GENERATES_CONTAINER_LOOT.trigger(serverPlayerEntity, identifier != null ? identifier : this.lootTableId); + } + + LootContextParameterSet.Builder builder = (new LootContextParameterSet.Builder((ServerWorld) this.world)).add(LootContextParameters.ORIGIN, Vec3d.ofCenter(this.pos)); + if (playerEntity != null) { + builder.luck(playerEntity.getLuck()).add(LootContextParameters.THIS_ENTITY, playerEntity); + } + + loottable.supplyInventory(inventory, builder.build(LootContextTypes.CHEST), LootrAPI.getLootSeed(seed == Long.MIN_VALUE ? this.seed : seed)); + } + } + + @Override + public void updatePacketViaState() { + if (this.world != null && !this.world.isClient) { + BlockState state = this.world.getBlockState(this.getPos()); + this.world.updateListeners(this.getPos(), state, state, Block.REDRAW_ON_MAIN_THREAD); + } + } + +// @Override +// public @Nullable Object getRenderAttachmentData() { +// PlayerEntity player = ClientHooks.getPlayer(); +// return player == null ? null : this.getOpeners().contains(player.getUuid()); +// } +} diff --git a/src/main/java/de/dafuqs/spectrum/compat/lootr/LootrCompat.java b/src/main/java/de/dafuqs/spectrum/compat/lootr/LootrCompat.java new file mode 100644 index 0000000000..ac874cb4d9 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/compat/lootr/LootrCompat.java @@ -0,0 +1,33 @@ +package de.dafuqs.spectrum.compat.lootr; + +import de.dafuqs.spectrum.compat.*; +import de.dafuqs.spectrum.registries.*; +import net.minecraft.block.*; +import net.minecraft.block.entity.*; +import net.minecraft.util.*; + +public class LootrCompat extends SpectrumIntegrationPacks.ModIntegrationPack { + public static final Block SLATE_NOXWOOD_LOOT_AMPHORA = new LootAmphoraBlock(AbstractBlock.Settings.copy(SpectrumBlocks.SLATE_NOXWOOD_AMPHORA)); + public static final Block EBONY_NOXWOOD_LOOT_AMPHORA = new LootAmphoraBlock(AbstractBlock.Settings.copy(SpectrumBlocks.EBONY_NOXWOOD_AMPHORA)); + public static final Block IVORY_NOXWOOD_LOOT_AMPHORA = new LootAmphoraBlock(AbstractBlock.Settings.copy(SpectrumBlocks.IVORY_NOXWOOD_AMPHORA)); + public static final Block CHESTNUT_NOXWOOD_LOOT_AMPHORA = new LootAmphoraBlock(AbstractBlock.Settings.copy(SpectrumBlocks.CHESTNUT_NOXWOOD_AMPHORA)); + public static final Block WEEPING_GALA_LOOT_AMPHORA = new LootAmphoraBlock(AbstractBlock.Settings.copy(SpectrumBlocks.WEEPING_GALA_AMPHORA)); + + public static BlockEntityType LOOT_AMPHORA; + + @Override + public void register() { + SpectrumBlocks.registerBlockWithItem("slate_noxwood_loot_amphora", SLATE_NOXWOOD_LOOT_AMPHORA, SpectrumItems.IS.of(), DyeColor.LIME); + SpectrumBlocks.registerBlockWithItem("ebony_noxwood_loot_amphora", EBONY_NOXWOOD_LOOT_AMPHORA, SpectrumItems.IS.of(), DyeColor.LIME); + SpectrumBlocks.registerBlockWithItem("ivory_noxwood_loot_amphora", IVORY_NOXWOOD_LOOT_AMPHORA, SpectrumItems.IS.of(), DyeColor.LIME); + SpectrumBlocks.registerBlockWithItem("chestnut_noxwood_loot_amphora", CHESTNUT_NOXWOOD_LOOT_AMPHORA, SpectrumItems.IS.of(), DyeColor.LIME); + SpectrumBlocks.registerBlockWithItem("weeping_gala_loot_amphora", WEEPING_GALA_LOOT_AMPHORA, SpectrumItems.IS.of(), DyeColor.LIME); + + LOOT_AMPHORA = SpectrumBlockEntities.register("loot_amphora", LootAmphoraBlockEntity::new, SLATE_NOXWOOD_LOOT_AMPHORA, EBONY_NOXWOOD_LOOT_AMPHORA, IVORY_NOXWOOD_LOOT_AMPHORA, CHESTNUT_NOXWOOD_LOOT_AMPHORA, WEEPING_GALA_LOOT_AMPHORA); + } + + @Override + public void registerClient() { + + } +} diff --git a/src/main/java/de/dafuqs/spectrum/mixin/compat/lootr/present/ConfigManagerMixin.java b/src/main/java/de/dafuqs/spectrum/mixin/compat/lootr/present/ConfigManagerMixin.java new file mode 100644 index 0000000000..99bff9c0be --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/mixin/compat/lootr/present/ConfigManagerMixin.java @@ -0,0 +1,34 @@ +package de.dafuqs.spectrum.mixin.compat.lootr.present; + +import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.compat.*; +import de.dafuqs.spectrum.compat.lootr.*; +import de.dafuqs.spectrum.registries.*; +import net.minecraft.block.*; +import net.zestyblaze.lootr.config.*; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.*; + +import java.util.*; + +@Mixin(value = ConfigManager.class, remap = false) +public class ConfigManagerMixin { + @Shadow + private static Map replacements; + + @Inject(method = "", at = @At("TAIL")) + private static void addReplacements(CallbackInfo ci) { + if (SpectrumCommon.CONFIG.IntegrationPacksToSkipLoading.contains(SpectrumIntegrationPacks.LOOTR_ID)) return; + + if (replacements == null) { + replacements = new HashMap<>(); + } + + replacements.put(SpectrumBlocks.SLATE_NOXWOOD_AMPHORA, LootrCompat.SLATE_NOXWOOD_LOOT_AMPHORA); + replacements.put(SpectrumBlocks.EBONY_NOXWOOD_AMPHORA, LootrCompat.EBONY_NOXWOOD_LOOT_AMPHORA); + replacements.put(SpectrumBlocks.IVORY_NOXWOOD_AMPHORA, LootrCompat.IVORY_NOXWOOD_LOOT_AMPHORA); + replacements.put(SpectrumBlocks.CHESTNUT_NOXWOOD_AMPHORA, LootrCompat.CHESTNUT_NOXWOOD_LOOT_AMPHORA); + replacements.put(SpectrumBlocks.WEEPING_GALA_AMPHORA, LootrCompat.WEEPING_GALA_LOOT_AMPHORA); + } +} diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java index e64e3d3033..ae3726b39a 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumBlockEntities.java @@ -91,7 +91,7 @@ public class SpectrumBlockEntities { public static BlockEntityType DEEP_LIGHT; public static BlockEntityType PLAYER_TRACKING; - private static BlockEntityType register(String id, FabricBlockEntityTypeBuilder.Factory factory, Block... blocks) { + public static BlockEntityType register(String id, FabricBlockEntityTypeBuilder.Factory factory, Block... blocks) { return Registry.register(Registries.BLOCK_ENTITY_TYPE, SpectrumCommon.locate(id), FabricBlockEntityTypeBuilder.create(factory, blocks).build()); } diff --git a/src/main/resources/assets/spectrum/blockstates/chestnut_noxwood_loot_amphora.json b/src/main/resources/assets/spectrum/blockstates/chestnut_noxwood_loot_amphora.json new file mode 100644 index 0000000000..353111a4cf --- /dev/null +++ b/src/main/resources/assets/spectrum/blockstates/chestnut_noxwood_loot_amphora.json @@ -0,0 +1,56 @@ +{ + "variants": { + "facing=down,open=false": { + "model": "spectrum:block/chestnut_noxwood_loot_amphora", + "x": 180 + }, + "facing=down,open=true": { + "model": "spectrum:block/chestnut_noxwood_loot_amphora_open", + "x": 180 + }, + "facing=east,open=false": { + "model": "spectrum:block/chestnut_noxwood_loot_amphora", + "x": 90, + "y": 90 + }, + "facing=east,open=true": { + "model": "spectrum:block/chestnut_noxwood_loot_amphora_open", + "x": 90, + "y": 90 + }, + "facing=north,open=false": { + "model": "spectrum:block/chestnut_noxwood_loot_amphora", + "x": 90 + }, + "facing=north,open=true": { + "model": "spectrum:block/chestnut_noxwood_loot_amphora_open", + "x": 90 + }, + "facing=south,open=false": { + "model": "spectrum:block/chestnut_noxwood_loot_amphora", + "x": 90, + "y": 180 + }, + "facing=south,open=true": { + "model": "spectrum:block/chestnut_noxwood_loot_amphora_open", + "x": 90, + "y": 180 + }, + "facing=up,open=false": { + "model": "spectrum:block/chestnut_noxwood_loot_amphora" + }, + "facing=up,open=true": { + "model": "spectrum:block/chestnut_noxwood_loot_amphora_open" + }, + "facing=west,open=false": { + "model": "spectrum:block/chestnut_noxwood_loot_amphora", + "x": 90, + "y": 270 + }, + "facing=west,open=true": { + "model": "spectrum:block/chestnut_noxwood_loot_amphora_open", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/blockstates/ebony_noxwood_loot_amphora.json b/src/main/resources/assets/spectrum/blockstates/ebony_noxwood_loot_amphora.json new file mode 100644 index 0000000000..acbf094027 --- /dev/null +++ b/src/main/resources/assets/spectrum/blockstates/ebony_noxwood_loot_amphora.json @@ -0,0 +1,56 @@ +{ + "variants": { + "facing=down,open=false": { + "model": "spectrum:block/ebony_noxwood_loot_amphora", + "x": 180 + }, + "facing=down,open=true": { + "model": "spectrum:block/ebony_noxwood_loot_amphora_open", + "x": 180 + }, + "facing=east,open=false": { + "model": "spectrum:block/ebony_noxwood_loot_amphora", + "x": 90, + "y": 90 + }, + "facing=east,open=true": { + "model": "spectrum:block/ebony_noxwood_loot_amphora_open", + "x": 90, + "y": 90 + }, + "facing=north,open=false": { + "model": "spectrum:block/ebony_noxwood_loot_amphora", + "x": 90 + }, + "facing=north,open=true": { + "model": "spectrum:block/ebony_noxwood_loot_amphora_open", + "x": 90 + }, + "facing=south,open=false": { + "model": "spectrum:block/ebony_noxwood_loot_amphora", + "x": 90, + "y": 180 + }, + "facing=south,open=true": { + "model": "spectrum:block/ebony_noxwood_loot_amphora_open", + "x": 90, + "y": 180 + }, + "facing=up,open=false": { + "model": "spectrum:block/ebony_noxwood_loot_amphora" + }, + "facing=up,open=true": { + "model": "spectrum:block/ebony_noxwood_loot_amphora_open" + }, + "facing=west,open=false": { + "model": "spectrum:block/ebony_noxwood_loot_amphora", + "x": 90, + "y": 270 + }, + "facing=west,open=true": { + "model": "spectrum:block/ebony_noxwood_loot_amphora_open", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/blockstates/ivory_noxwood_loot_amphora.json b/src/main/resources/assets/spectrum/blockstates/ivory_noxwood_loot_amphora.json new file mode 100644 index 0000000000..ebbc776de4 --- /dev/null +++ b/src/main/resources/assets/spectrum/blockstates/ivory_noxwood_loot_amphora.json @@ -0,0 +1,56 @@ +{ + "variants": { + "facing=down,open=false": { + "model": "spectrum:block/ivory_noxwood_loot_amphora", + "x": 180 + }, + "facing=down,open=true": { + "model": "spectrum:block/ivory_noxwood_loot_amphora_open", + "x": 180 + }, + "facing=east,open=false": { + "model": "spectrum:block/ivory_noxwood_loot_amphora", + "x": 90, + "y": 90 + }, + "facing=east,open=true": { + "model": "spectrum:block/ivory_noxwood_loot_amphora_open", + "x": 90, + "y": 90 + }, + "facing=north,open=false": { + "model": "spectrum:block/ivory_noxwood_loot_amphora", + "x": 90 + }, + "facing=north,open=true": { + "model": "spectrum:block/ivory_noxwood_loot_amphora_open", + "x": 90 + }, + "facing=south,open=false": { + "model": "spectrum:block/ivory_noxwood_loot_amphora", + "x": 90, + "y": 180 + }, + "facing=south,open=true": { + "model": "spectrum:block/ivory_noxwood_loot_amphora_open", + "x": 90, + "y": 180 + }, + "facing=up,open=false": { + "model": "spectrum:block/ivory_noxwood_loot_amphora" + }, + "facing=up,open=true": { + "model": "spectrum:block/ivory_noxwood_loot_amphora_open" + }, + "facing=west,open=false": { + "model": "spectrum:block/ivory_noxwood_loot_amphora", + "x": 90, + "y": 270 + }, + "facing=west,open=true": { + "model": "spectrum:block/ivory_noxwood_loot_amphora_open", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/blockstates/slate_noxwood_loot_amphora.json b/src/main/resources/assets/spectrum/blockstates/slate_noxwood_loot_amphora.json new file mode 100644 index 0000000000..4788bf37b2 --- /dev/null +++ b/src/main/resources/assets/spectrum/blockstates/slate_noxwood_loot_amphora.json @@ -0,0 +1,56 @@ +{ + "variants": { + "facing=down,open=false": { + "model": "spectrum:block/slate_noxwood_loot_amphora", + "x": 180 + }, + "facing=down,open=true": { + "model": "spectrum:block/slate_noxwood_loot_amphora_open", + "x": 180 + }, + "facing=east,open=false": { + "model": "spectrum:block/slate_noxwood_loot_amphora", + "x": 90, + "y": 90 + }, + "facing=east,open=true": { + "model": "spectrum:block/slate_noxwood_loot_amphora_open", + "x": 90, + "y": 90 + }, + "facing=north,open=false": { + "model": "spectrum:block/slate_noxwood_loot_amphora", + "x": 90 + }, + "facing=north,open=true": { + "model": "spectrum:block/slate_noxwood_loot_amphora_open", + "x": 90 + }, + "facing=south,open=false": { + "model": "spectrum:block/slate_noxwood_loot_amphora", + "x": 90, + "y": 180 + }, + "facing=south,open=true": { + "model": "spectrum:block/slate_noxwood_loot_amphora_open", + "x": 90, + "y": 180 + }, + "facing=up,open=false": { + "model": "spectrum:block/slate_noxwood_loot_amphora" + }, + "facing=up,open=true": { + "model": "spectrum:block/slate_noxwood_loot_amphora_open" + }, + "facing=west,open=false": { + "model": "spectrum:block/slate_noxwood_loot_amphora", + "x": 90, + "y": 270 + }, + "facing=west,open=true": { + "model": "spectrum:block/slate_noxwood_loot_amphora_open", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/blockstates/weeping_gala_loot_amphora.json b/src/main/resources/assets/spectrum/blockstates/weeping_gala_loot_amphora.json new file mode 100644 index 0000000000..4dc467a526 --- /dev/null +++ b/src/main/resources/assets/spectrum/blockstates/weeping_gala_loot_amphora.json @@ -0,0 +1,56 @@ +{ + "variants": { + "facing=down,open=false": { + "model": "spectrum:block/weeping_gala_loot_amphora", + "x": 180 + }, + "facing=down,open=true": { + "model": "spectrum:block/weeping_gala_loot_amphora_open", + "x": 180 + }, + "facing=east,open=false": { + "model": "spectrum:block/weeping_gala_loot_amphora", + "x": 90, + "y": 90 + }, + "facing=east,open=true": { + "model": "spectrum:block/weeping_gala_loot_amphora_open", + "x": 90, + "y": 90 + }, + "facing=north,open=false": { + "model": "spectrum:block/weeping_gala_loot_amphora", + "x": 90 + }, + "facing=north,open=true": { + "model": "spectrum:block/weeping_gala_loot_amphora_open", + "x": 90 + }, + "facing=south,open=false": { + "model": "spectrum:block/weeping_gala_loot_amphora", + "x": 90, + "y": 180 + }, + "facing=south,open=true": { + "model": "spectrum:block/weeping_gala_loot_amphora_open", + "x": 90, + "y": 180 + }, + "facing=up,open=false": { + "model": "spectrum:block/weeping_gala_loot_amphora" + }, + "facing=up,open=true": { + "model": "spectrum:block/weeping_gala_loot_amphora_open" + }, + "facing=west,open=false": { + "model": "spectrum:block/weeping_gala_loot_amphora", + "x": 90, + "y": 270 + }, + "facing=west,open=true": { + "model": "spectrum:block/weeping_gala_loot_amphora_open", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index e9a4c8ccb6..44b1129bc0 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -1041,6 +1041,7 @@ "block.spectrum.chestnut_noxcap_stem": "Chestnut Noxcap Stem", "block.spectrum.chestnut_noxshroom": "Chestnut Noxshroom", "block.spectrum.chestnut_noxwood_amphora": "Chestnut Noxwood Amphora", + "block.spectrum.chestnut_noxwood_loot_amphora": "Chestnut Noxwood Loot Amphora", "block.spectrum.chestnut_noxwood_beam": "Chestnut Noxwood Pillar", "block.spectrum.chestnut_noxwood_button": "Chestnut Noxwood Button", "block.spectrum.chestnut_noxwood_door": "Chestnut Noxwood Door", @@ -1167,6 +1168,7 @@ "block.spectrum.ebony_noxcap_stem": "Ebony Noxcap Stem", "block.spectrum.ebony_noxshroom": "Ebony Noxshroom", "block.spectrum.ebony_noxwood_amphora": "Ebony Noxwood Amphora", + "block.spectrum.ebony_noxwood_loot_amphora": "Ebony Noxwood Loot Amphora", "block.spectrum.ebony_noxwood_beam": "Ebony Noxwood Pillar", "block.spectrum.ebony_noxwood_button": "Ebony Noxwood Button", "block.spectrum.ebony_noxwood_door": "Ebony Noxwood Door", @@ -1329,6 +1331,7 @@ "block.spectrum.ivory_noxcap_stem": "Ivory Noxcap Stem", "block.spectrum.ivory_noxshroom": "Ivory Noxshroom", "block.spectrum.ivory_noxwood_amphora": "Ivory Noxwood Amphora", + "block.spectrum.ivory_noxwood_loot_amphora": "Ivory Noxwood Loot Amphora", "block.spectrum.ivory_noxwood_beam": "Ivory Noxwood Pillar", "block.spectrum.ivory_noxwood_button": "Ivory Noxwood Button", "block.spectrum.ivory_noxwood_door": "Ivory Noxwood Door", @@ -1860,6 +1863,7 @@ "block.spectrum.slate_noxcap_stem": "Slate Noxcap Stem", "block.spectrum.slate_noxshroom": "Slate Noxshroom", "block.spectrum.slate_noxwood_amphora": "Slate Noxwood Amphora", + "block.spectrum.slate_noxwood_loot_amphora": "Slate Noxwood Loot Amphora", "block.spectrum.slate_noxwood_beam": "Slate Noxwood Pillar", "block.spectrum.slate_noxwood_button": "Slate Noxwood Button", "block.spectrum.slate_noxwood_door": "Slate Noxwood Door", @@ -2062,6 +2066,7 @@ "block.spectrum.weathered_shale_clay_tile_stairs": "Weathered Shale Clay Tile Stairs", "block.spectrum.weathered_shale_clay_tiles": "Weathered Shale Clay Tiles", "block.spectrum.weeping_gala_amphora": "Weeping Gala Amphora", + "block.spectrum.weeping_gala_loot_amphora": "Weeping Gala Loot Amphora", "block.spectrum.weeping_gala_barrel": "Weeping Gala Barrel", "block.spectrum.weeping_gala_button": "Weeping Gala Button", "block.spectrum.weeping_gala_door": "Weeping Gala Door", diff --git a/src/main/resources/assets/spectrum/models/block/chestnut_noxwood_loot_amphora.json b/src/main/resources/assets/spectrum/models/block/chestnut_noxwood_loot_amphora.json new file mode 100644 index 0000000000..a80ddfbe33 --- /dev/null +++ b/src/main/resources/assets/spectrum/models/block/chestnut_noxwood_loot_amphora.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:block/chestnut_noxwood_amphora" +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/block/chestnut_noxwood_loot_amphora_open.json b/src/main/resources/assets/spectrum/models/block/chestnut_noxwood_loot_amphora_open.json new file mode 100644 index 0000000000..4f6a0eef42 --- /dev/null +++ b/src/main/resources/assets/spectrum/models/block/chestnut_noxwood_loot_amphora_open.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:block/chestnut_noxwood_amphora_open" +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/block/ebony_noxwood_loot_amphora.json b/src/main/resources/assets/spectrum/models/block/ebony_noxwood_loot_amphora.json new file mode 100644 index 0000000000..4db9e7390d --- /dev/null +++ b/src/main/resources/assets/spectrum/models/block/ebony_noxwood_loot_amphora.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:block/ebony_noxwood_amphora" +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/block/ebony_noxwood_loot_amphora_open.json b/src/main/resources/assets/spectrum/models/block/ebony_noxwood_loot_amphora_open.json new file mode 100644 index 0000000000..8392ec264f --- /dev/null +++ b/src/main/resources/assets/spectrum/models/block/ebony_noxwood_loot_amphora_open.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:block/ebony_noxwood_amphora_open" +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/block/ivory_noxwood_loot_amphora.json b/src/main/resources/assets/spectrum/models/block/ivory_noxwood_loot_amphora.json new file mode 100644 index 0000000000..f8e2daefae --- /dev/null +++ b/src/main/resources/assets/spectrum/models/block/ivory_noxwood_loot_amphora.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:block/ivory_noxwood_amphora" +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/block/ivory_noxwood_loot_amphora_open.json b/src/main/resources/assets/spectrum/models/block/ivory_noxwood_loot_amphora_open.json new file mode 100644 index 0000000000..c71d0ca350 --- /dev/null +++ b/src/main/resources/assets/spectrum/models/block/ivory_noxwood_loot_amphora_open.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:block/ivory_noxwood_amphora_open" +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/block/slate_noxwood_loot_amphora.json b/src/main/resources/assets/spectrum/models/block/slate_noxwood_loot_amphora.json new file mode 100644 index 0000000000..4063a2b855 --- /dev/null +++ b/src/main/resources/assets/spectrum/models/block/slate_noxwood_loot_amphora.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:block/slate_noxwood_amphora" +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/block/slate_noxwood_loot_amphora_open.json b/src/main/resources/assets/spectrum/models/block/slate_noxwood_loot_amphora_open.json new file mode 100644 index 0000000000..52e070b30f --- /dev/null +++ b/src/main/resources/assets/spectrum/models/block/slate_noxwood_loot_amphora_open.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:block/slate_noxwood_amphora_open" +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/block/weeping_gala_loot_amphora.json b/src/main/resources/assets/spectrum/models/block/weeping_gala_loot_amphora.json new file mode 100644 index 0000000000..792877aa57 --- /dev/null +++ b/src/main/resources/assets/spectrum/models/block/weeping_gala_loot_amphora.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:block/weeping_gala_amphora" +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/block/weeping_gala_loot_amphora_open.json b/src/main/resources/assets/spectrum/models/block/weeping_gala_loot_amphora_open.json new file mode 100644 index 0000000000..e5d5bb89b1 --- /dev/null +++ b/src/main/resources/assets/spectrum/models/block/weeping_gala_loot_amphora_open.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:block/weeping_gala_amphora_open" +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/item/chestnut_noxwood_loot_amphora.json b/src/main/resources/assets/spectrum/models/item/chestnut_noxwood_loot_amphora.json new file mode 100644 index 0000000000..22e54bdb00 --- /dev/null +++ b/src/main/resources/assets/spectrum/models/item/chestnut_noxwood_loot_amphora.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:block/chestnut_noxwood_loot_amphora" +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/item/ebony_noxwood_loot_amphora.json b/src/main/resources/assets/spectrum/models/item/ebony_noxwood_loot_amphora.json new file mode 100644 index 0000000000..53fe121010 --- /dev/null +++ b/src/main/resources/assets/spectrum/models/item/ebony_noxwood_loot_amphora.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:block/ebony_noxwood_loot_amphora" +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/item/ivory_noxwood_loot_amphora.json b/src/main/resources/assets/spectrum/models/item/ivory_noxwood_loot_amphora.json new file mode 100644 index 0000000000..3183f84435 --- /dev/null +++ b/src/main/resources/assets/spectrum/models/item/ivory_noxwood_loot_amphora.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:block/ivory_noxwood_loot_amphora" +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/item/slate_noxwood_loot_amphora.json b/src/main/resources/assets/spectrum/models/item/slate_noxwood_loot_amphora.json new file mode 100644 index 0000000000..3366480dbd --- /dev/null +++ b/src/main/resources/assets/spectrum/models/item/slate_noxwood_loot_amphora.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:block/slate_noxwood_loot_amphora" +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/models/item/weeping_gala_loot_amphora.json b/src/main/resources/assets/spectrum/models/item/weeping_gala_loot_amphora.json new file mode 100644 index 0000000000..08791e341f --- /dev/null +++ b/src/main/resources/assets/spectrum/models/item/weeping_gala_loot_amphora.json @@ -0,0 +1,3 @@ +{ + "parent": "spectrum:block/weeping_gala_loot_amphora" +} \ No newline at end of file diff --git a/src/main/resources/data/lootr/tags/blocks/amphoras.json b/src/main/resources/data/lootr/tags/blocks/amphoras.json new file mode 100644 index 0000000000..dd2955db39 --- /dev/null +++ b/src/main/resources/data/lootr/tags/blocks/amphoras.json @@ -0,0 +1,24 @@ +{ + "values": [ + { + "id": "spectrum:slate_noxwood_loot_amphora", + "required": false + }, + { + "id": "spectrum:ebony_noxwood_loot_amphora", + "required": false + }, + { + "id": "spectrum:ivory_noxwood_loot_amphora", + "required": false + }, + { + "id": "spectrum:chestnut_noxwood_loot_amphora", + "required": false + }, + { + "id": "spectrum:weeping_gala_loot_amphora", + "required": false + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/lootr/tags/blocks/containers.json b/src/main/resources/data/lootr/tags/blocks/containers.json new file mode 100644 index 0000000000..604fd22693 --- /dev/null +++ b/src/main/resources/data/lootr/tags/blocks/containers.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + { + "id": "#lootr:amphoras", + "required": false + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/mineable/axe.json b/src/main/resources/data/minecraft/tags/blocks/mineable/axe.json index 95bfe6ba17..8b01b40e47 100644 --- a/src/main/resources/data/minecraft/tags/blocks/mineable/axe.json +++ b/src/main/resources/data/minecraft/tags/blocks/mineable/axe.json @@ -29,6 +29,11 @@ "spectrum:weeping_gala_amphora", "spectrum:weeping_gala_barrel", "spectrum:weeping_gala_pillar", - "spectrum:weeping_gala_light" + "spectrum:weeping_gala_light", + + { + "id": "spectrum:weeping_gala_loot_amphora", + "required": false + } ] } diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/chestnut_noxwood_loot_amphora.json b/src/main/resources/data/spectrum/loot_tables/blocks/chestnut_noxwood_loot_amphora.json new file mode 100644 index 0000000000..1ce7396d71 --- /dev/null +++ b/src/main/resources/data/spectrum/loot_tables/blocks/chestnut_noxwood_loot_amphora.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:block", + "pools": [{ + "rolls": 1, + "entries": [{ + "type": "minecraft:loot_table", + "name": "spectrum:blocks/chestnut_noxwood_amphora" + }] + }] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/ebony_noxwood_loot_amphora.json b/src/main/resources/data/spectrum/loot_tables/blocks/ebony_noxwood_loot_amphora.json new file mode 100644 index 0000000000..84250d8a71 --- /dev/null +++ b/src/main/resources/data/spectrum/loot_tables/blocks/ebony_noxwood_loot_amphora.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:block", + "pools": [{ + "rolls": 1, + "entries": [{ + "type": "minecraft:loot_table", + "name": "spectrum:blocks/ebony_noxwood_amphora" + }] + }] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/ivory_noxwood_loot_amphora.json b/src/main/resources/data/spectrum/loot_tables/blocks/ivory_noxwood_loot_amphora.json new file mode 100644 index 0000000000..1d3bc09956 --- /dev/null +++ b/src/main/resources/data/spectrum/loot_tables/blocks/ivory_noxwood_loot_amphora.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:block", + "pools": [{ + "rolls": 1, + "entries": [{ + "type": "minecraft:loot_table", + "name": "spectrum:blocks/ivory_noxwood_amphora" + }] + }] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/slate_noxwood_loot_amphora.json b/src/main/resources/data/spectrum/loot_tables/blocks/slate_noxwood_loot_amphora.json new file mode 100644 index 0000000000..9cdedc71ab --- /dev/null +++ b/src/main/resources/data/spectrum/loot_tables/blocks/slate_noxwood_loot_amphora.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:block", + "pools": [{ + "rolls": 1, + "entries": [{ + "type": "minecraft:loot_table", + "name": "spectrum:blocks/slate_noxwood_amphora" + }] + }] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/loot_tables/blocks/weeping_gala_loot_amphora.json b/src/main/resources/data/spectrum/loot_tables/blocks/weeping_gala_loot_amphora.json new file mode 100644 index 0000000000..adf1aa3d1f --- /dev/null +++ b/src/main/resources/data/spectrum/loot_tables/blocks/weeping_gala_loot_amphora.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:block", + "pools": [{ + "rolls": 1, + "entries": [{ + "type": "minecraft:loot_table", + "name": "spectrum:blocks/weeping_gala_amphora" + }] + }] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/tags/blocks/noxwood_amphoras.json b/src/main/resources/data/spectrum/tags/blocks/noxwood_amphoras.json index cf3ef106c9..f553cd5013 100644 --- a/src/main/resources/data/spectrum/tags/blocks/noxwood_amphoras.json +++ b/src/main/resources/data/spectrum/tags/blocks/noxwood_amphoras.json @@ -3,6 +3,23 @@ "spectrum:ivory_noxwood_amphora", "spectrum:slate_noxwood_amphora", "spectrum:ebony_noxwood_amphora", - "spectrum:chestnut_noxwood_amphora" + "spectrum:chestnut_noxwood_amphora", + + { + "id": "spectrum:ivory_noxwood_loot_amphora", + "required": false + }, + { + "id": "spectrum:slate_noxwood_loot_amphora", + "required": false + }, + { + "id": "spectrum:ebony_noxwood_loot_amphora", + "required": false + }, + { + "id": "spectrum:chestnut_noxwood_loot_amphora", + "required": false + } ] } \ No newline at end of file diff --git a/src/main/resources/data/spectrum/tags/items/noxwood_amphoras.json b/src/main/resources/data/spectrum/tags/items/noxwood_amphoras.json index cf3ef106c9..f553cd5013 100644 --- a/src/main/resources/data/spectrum/tags/items/noxwood_amphoras.json +++ b/src/main/resources/data/spectrum/tags/items/noxwood_amphoras.json @@ -3,6 +3,23 @@ "spectrum:ivory_noxwood_amphora", "spectrum:slate_noxwood_amphora", "spectrum:ebony_noxwood_amphora", - "spectrum:chestnut_noxwood_amphora" + "spectrum:chestnut_noxwood_amphora", + + { + "id": "spectrum:ivory_noxwood_loot_amphora", + "required": false + }, + { + "id": "spectrum:slate_noxwood_loot_amphora", + "required": false + }, + { + "id": "spectrum:ebony_noxwood_loot_amphora", + "required": false + }, + { + "id": "spectrum:chestnut_noxwood_loot_amphora", + "required": false + } ] } \ No newline at end of file diff --git a/src/main/resources/spectrum.mixins.json b/src/main/resources/spectrum.mixins.json index 738c2585e8..38e1c33bd4 100644 --- a/src/main/resources/spectrum.mixins.json +++ b/src/main/resources/spectrum.mixins.json @@ -107,6 +107,7 @@ "compat.connectormod.absent.PlayerEntityMixin", "compat.connectormod.present.ExplosionMixin", "compat.connectormod.present.PlayerEntityMixin", + "compat.lootr.present.ConfigManagerMixin", "compat.quilt_status_effect.absent.LivingEntityPreventStatusClearMixin", "compat.quilt_status_effect.present.SpectrumEventListenersMixin" ],