From edae490e577ab80471af0d217362ac864aecf2ce Mon Sep 17 00:00:00 2001 From: Niklas Widmann Date: Thu, 17 Oct 2024 22:49:46 +0200 Subject: [PATCH] vigil candle support for amendments & effect removal functionality --- build.gradle | 4 +- gradle.properties | 1 + .../5bb646c3cee204f41a1b59a2c0d9083b5f7155b0 | 6 +- .../data/minecraft/tags/blocks/candles.json | 5 ++ .../tags/blocks/mineable/pickaxe.json | 18 +----- .../oreganized/tags/blocks/vigil_candles.json | 21 +++++++ .../mob_effect/cleared_by_vigil_candle.json | 5 ++ .../java/galena/oreganized/Oreganized.java | 7 +++ .../oreganized/client/OreganizedClient.java | 3 +- .../supplementaries/AmendmentsCompat.java | 56 +++++++++++++++++++ .../content/block/VigilCandleBlock.java | 20 ++++++- .../entity/VigilCandleBlockEntity.java | 37 ++++++++++++ .../galena/oreganized/data/OBlockTags.java | 12 ++-- .../galena/oreganized/data/OItemModels.java | 3 +- .../galena/oreganized/data/OLootTables.java | 3 +- .../oreganized/data/OMobEffectTags.java | 33 +++++++++++ .../data/provider/OBlockStateProvider.java | 3 +- .../oreganized/index/OBlockEntities.java | 4 ++ .../java/galena/oreganized/index/OBlocks.java | 10 +++- .../java/galena/oreganized/index/OTags.java | 13 +++++ 20 files changed, 231 insertions(+), 33 deletions(-) create mode 100644 src/generated/resources/data/minecraft/tags/blocks/candles.json create mode 100644 src/generated/resources/data/oreganized/tags/blocks/vigil_candles.json create mode 100644 src/generated/resources/data/oreganized/tags/mob_effect/cleared_by_vigil_candle.json create mode 100644 src/main/java/galena/oreganized/compat/supplementaries/AmendmentsCompat.java create mode 100644 src/main/java/galena/oreganized/content/entity/VigilCandleBlockEntity.java create mode 100644 src/main/java/galena/oreganized/data/OMobEffectTags.java diff --git a/build.gradle b/build.gradle index 322ccb27..56600c62 100644 --- a/build.gradle +++ b/build.gradle @@ -108,11 +108,13 @@ dependencies { implementation(fg.deobf("maven.modrinth:shield-expansion:${shieldexpansion_version}")) implementation(fg.deobf("maven.modrinth:create:${create_version}")) implementation(fg.deobf("maven.modrinth:supplementaries:${supplementaries_version}")) + implementation(fg.deobf("maven.modrinth:amendments:${amendments_version}")) + implementation(fg.deobf("maven.modrinth:amendments:${amendments_version}")) + implementation(fg.deobf("maven.modrinth:moonlight:${moonlight_lib_version}")) // For dev testing runtimeOnly(fg.deobf("maven.modrinth:scannable:${scannable_version}")) runtimeOnly(fg.deobf("maven.modrinth:architectury-api:${architectury_version}")) - runtimeOnly(fg.deobf("maven.modrinth:moonlight:${moonlight_lib_version}")) /// Utilities for the development environment //runtimeOnly fg.deobf("curse.maven:jade-324717:${jade_version}") diff --git a/gradle.properties b/gradle.properties index 9aaf3849..55253bf7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -30,6 +30,7 @@ nethersdelight_version=MTDQhZd2 shieldexpansion_version=8mpKmudC create_version=ZZW2y7nG supplementaries_version=eMF95dNK +amendments_version=qE7sokDv scannable_version=2FlwUOgm architectury_version=tBWqtdBO moonlight_lib_version=sfzdPwZX \ No newline at end of file diff --git a/src/generated/resources/.cache/5bb646c3cee204f41a1b59a2c0d9083b5f7155b0 b/src/generated/resources/.cache/5bb646c3cee204f41a1b59a2c0d9083b5f7155b0 index e1a99b45..28b7b70d 100644 --- a/src/generated/resources/.cache/5bb646c3cee204f41a1b59a2c0d9083b5f7155b0 +++ b/src/generated/resources/.cache/5bb646c3cee204f41a1b59a2c0d9083b5f7155b0 @@ -1,4 +1,4 @@ -// 1.20.1 2024-10-14T21:56:57.8734426 Oreganized Block Tags +// 1.20.1 2024-10-17T22:46:04.3663948 Oreganized Block Tags 7a2d68d81bc5ee59f9a2f4ba68ddb39bfd9c875d data/forge/tags/blocks/glass.json d96b4f83e03abe39a1b97d92b7818c8f6b2e5c68 data/forge/tags/blocks/glass_panes.json d062c23ad5308b7de0b2e86f6531ea724530f898 data/forge/tags/blocks/melts_lead.json @@ -15,12 +15,13 @@ bb0420ecbadc747d984fcef0fe7fc67586bc3231 data/forge/tags/blocks/storage_blocks/l 05f4708355ed88fe57116020dd93ac53f3098dba data/forge/tags/blocks/storage_blocks/raw_silver.json bff6697a058fddfe9e14615bc043fcb2071fd6fc data/forge/tags/blocks/storage_blocks/silver.json 7a1e2c391ad442cdc57f69ce1737207bc52bfb84 data/minecraft/tags/blocks/beacon_base_blocks.json +b85964d677734db0ac4bbc66f550f073ed0cb5e1 data/minecraft/tags/blocks/candles.json 82c03c405a971b2a7fc3fd43a9fb6c221f463ce0 data/minecraft/tags/blocks/cauldrons.json 503ad75af537d0ffef02ada9fb9afb5f5cd8e83b data/minecraft/tags/blocks/doors.json 0f64e9b9dc279dd460f6408313b130a37a0c9d86 data/minecraft/tags/blocks/ice.json 7a2d68d81bc5ee59f9a2f4ba68ddb39bfd9c875d data/minecraft/tags/blocks/impermeable.json f7079c32fc948b65cb486bea80e2dc93d13ce577 data/minecraft/tags/blocks/mineable/axe.json -bb012b5952f56da417a3022bb00d105f9a28dc10 data/minecraft/tags/blocks/mineable/pickaxe.json +abb8283f25d49e1094364bfc91028dd0f3af9ad6 data/minecraft/tags/blocks/mineable/pickaxe.json 84a13f81c79f0c05f8f7a8cbf1d3c25129a97179 data/minecraft/tags/blocks/mineable/shovel.json bb86ac7ab19373da790ec5711f473614e4b62d79 data/minecraft/tags/blocks/needs_iron_tool.json dc9cc2dca9fa3a28a0458ec282e3e0fe81999ee1 data/minecraft/tags/blocks/needs_stone_tool.json @@ -38,3 +39,4 @@ eaca08d04b1742f418e6bc0964dd32cf16035d88 data/oreganized/tags/blocks/mineable/sc cf3608bd187922aeb48c566c19e8482b0dca34c7 data/oreganized/tags/blocks/prevents_lead_cloud.json 06c2e2e512966767a31df77e646e41c4c39e3dd3 data/oreganized/tags/blocks/silktouch_using_scribe.json 3112fb4a1df2953e2c3572fa47f886bf8e5bd679 data/oreganized/tags/blocks/stone_types/glance.json +cead6b906640efcd90a6dbb5f5e17623f3631b53 data/oreganized/tags/blocks/vigil_candles.json diff --git a/src/generated/resources/data/minecraft/tags/blocks/candles.json b/src/generated/resources/data/minecraft/tags/blocks/candles.json new file mode 100644 index 00000000..6f26ed6e --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/blocks/candles.json @@ -0,0 +1,5 @@ +{ + "values": [ + "#oreganized:vigil_candles" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json index 328e4077..eacddb0c 100644 --- a/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -35,22 +35,6 @@ "oreganized:grooved_ice", "oreganized:grooved_packed_ice", "oreganized:grooved_blue_ice", - "oreganized:vigil_candle", - "oreganized:purple_vigil_candle", - "oreganized:gray_vigil_candle", - "oreganized:blue_vigil_candle", - "oreganized:magenta_vigil_candle", - "oreganized:yellow_vigil_candle", - "oreganized:lime_vigil_candle", - "oreganized:orange_vigil_candle", - "oreganized:green_vigil_candle", - "oreganized:light_gray_vigil_candle", - "oreganized:red_vigil_candle", - "oreganized:cyan_vigil_candle", - "oreganized:black_vigil_candle", - "oreganized:white_vigil_candle", - "oreganized:pink_vigil_candle", - "oreganized:light_blue_vigil_candle", - "oreganized:brown_vigil_candle" + "#oreganized:vigil_candles" ] } \ No newline at end of file diff --git a/src/generated/resources/data/oreganized/tags/blocks/vigil_candles.json b/src/generated/resources/data/oreganized/tags/blocks/vigil_candles.json new file mode 100644 index 00000000..de14c5b9 --- /dev/null +++ b/src/generated/resources/data/oreganized/tags/blocks/vigil_candles.json @@ -0,0 +1,21 @@ +{ + "values": [ + "oreganized:vigil_candle", + "oreganized:light_blue_vigil_candle", + "oreganized:blue_vigil_candle", + "oreganized:orange_vigil_candle", + "oreganized:red_vigil_candle", + "oreganized:purple_vigil_candle", + "oreganized:light_gray_vigil_candle", + "oreganized:green_vigil_candle", + "oreganized:gray_vigil_candle", + "oreganized:magenta_vigil_candle", + "oreganized:white_vigil_candle", + "oreganized:yellow_vigil_candle", + "oreganized:black_vigil_candle", + "oreganized:brown_vigil_candle", + "oreganized:lime_vigil_candle", + "oreganized:cyan_vigil_candle", + "oreganized:pink_vigil_candle" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/oreganized/tags/mob_effect/cleared_by_vigil_candle.json b/src/generated/resources/data/oreganized/tags/mob_effect/cleared_by_vigil_candle.json new file mode 100644 index 00000000..5d24e09d --- /dev/null +++ b/src/generated/resources/data/oreganized/tags/mob_effect/cleared_by_vigil_candle.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:darkness" + ] +} \ No newline at end of file diff --git a/src/main/java/galena/oreganized/Oreganized.java b/src/main/java/galena/oreganized/Oreganized.java index 73333f65..c2ac1417 100644 --- a/src/main/java/galena/oreganized/Oreganized.java +++ b/src/main/java/galena/oreganized/Oreganized.java @@ -6,6 +6,7 @@ import com.teamabnormals.blueprint.core.util.DataUtil; import com.teamabnormals.blueprint.core.util.registry.RegistryHelper; import galena.oreganized.compat.create.CreateCompat; +import galena.oreganized.compat.supplementaries.AmendmentsCompat; import galena.oreganized.content.block.LeadOreBlock; import galena.oreganized.content.block.MoltenLeadCauldronBlock; import galena.oreganized.content.entity.LeadBoltEntity; @@ -20,6 +21,7 @@ import galena.oreganized.data.OItemTags; import galena.oreganized.data.OLang; import galena.oreganized.data.OLootTables; +import galena.oreganized.data.OMobEffectTags; import galena.oreganized.data.ORecipes; import galena.oreganized.data.ORegistries; import galena.oreganized.data.OSoundDefinitions; @@ -159,6 +161,10 @@ public Oreganized() { CreateCompat.register(); } + if (ModList.get().isLoaded("amendments")) { + AmendmentsCompat.register(); + } + //CompatHandler.register(); //context.registerConfig(ModConfig.Type.COMMON, OreganizedConfig.COMMON_SPEC); @@ -286,6 +292,7 @@ public void gatherData(GatherDataEvent event) { generator.addProvider(server, datapackProvider); generator.addProvider(server, new OBiomeTags(output, lookupProvider, helper)); generator.addProvider(server, new ODamageTags(output, lookupProvider, helper)); + generator.addProvider(server, new OMobEffectTags(output, lookupProvider, helper)); //generator.addProvider(server, new OPaintingVariantTags(output, lookupProvider, helper)); //generator.addProvider(server, new OBiomeModifier.register(event)); diff --git a/src/main/java/galena/oreganized/client/OreganizedClient.java b/src/main/java/galena/oreganized/client/OreganizedClient.java index 3cdacf5f..f2ae3cf3 100644 --- a/src/main/java/galena/oreganized/client/OreganizedClient.java +++ b/src/main/java/galena/oreganized/client/OreganizedClient.java @@ -80,8 +80,7 @@ private static void registerBlockRenderers() { render(OBlocks.LEAD_BARS, cutout); render(OBlocks.GARGOYLE, cutout); - render(OBlocks.VIGIL_CANDLE, cutout); - OBlocks.COLORED_VIGIL_CANDLES.forEach((color, block) -> render(block, cutout)); + OBlocks.vigilCandles().forEach(block -> render(block, cutout)); for (int i = 0; OBlocks.CRYSTAL_GLASS.size() > i; i++) { render(OBlocks.CRYSTAL_GLASS.get(i), translucent); diff --git a/src/main/java/galena/oreganized/compat/supplementaries/AmendmentsCompat.java b/src/main/java/galena/oreganized/compat/supplementaries/AmendmentsCompat.java new file mode 100644 index 00000000..8d328d34 --- /dev/null +++ b/src/main/java/galena/oreganized/compat/supplementaries/AmendmentsCompat.java @@ -0,0 +1,56 @@ +package galena.oreganized.compat.supplementaries; + +import net.mehvahdjukaar.amendments.common.tile.WallLanternBlockTile; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.block.CandleBlock; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.player.PlayerInteractEvent; + +public class AmendmentsCompat { + + public static void register() { + MinecraftForge.EVENT_BUS.addListener(AmendmentsCompat::onBlockInteract); + } + + private static void onBlockInteract(PlayerInteractEvent.RightClickBlock event) { + var pos = event.getPos(); + var level = event.getLevel(); + var be = level.getBlockEntity(pos); + var held = event.getItemStack(); + var player = event.getEntity(); + + if(!(be instanceof WallLanternBlockTile lantern)) return; + + var state = lantern.getHeldBlock(); + var lit = state.getValue(CandleBlock.LIT); + + InteractionResult result = InteractionResult.PASS; + + if(held.is(Items.FLINT_AND_STEEL) && !lit) { + level.playSound(player, pos, SoundEvents.FLINTANDSTEEL_USE, SoundSource.BLOCKS, 1.0F, level.getRandom().nextFloat() * 0.4F + 0.8F); + lantern.setHeldBlock(state.setValue(BlockStateProperties.LIT, true)); + if (player != null) { + held.hurtAndBreak(1, player, (p_41303_) -> { + p_41303_.broadcastBreakEvent(event.getHand()); + }); + } + + result = InteractionResult.sidedSuccess(level.isClientSide()); + } else if(held.isEmpty() && lit) { + level.playSound(player, pos, SoundEvents.CANDLE_EXTINGUISH, SoundSource.BLOCKS, 1.0F, 1.0F); + lantern.setHeldBlock(state.setValue(BlockStateProperties.LIT, false)); + + result = InteractionResult.sidedSuccess(level.isClientSide()); + } + + if(result != InteractionResult.PASS) { + event.setCancellationResult(result); + event.setCanceled(true); + } + } + +} diff --git a/src/main/java/galena/oreganized/content/block/VigilCandleBlock.java b/src/main/java/galena/oreganized/content/block/VigilCandleBlock.java index 85d3ec25..03d54bcf 100644 --- a/src/main/java/galena/oreganized/content/block/VigilCandleBlock.java +++ b/src/main/java/galena/oreganized/content/block/VigilCandleBlock.java @@ -1,5 +1,7 @@ package galena.oreganized.content.block; +import galena.oreganized.content.entity.VigilCandleBlockEntity; +import galena.oreganized.index.OBlockEntities; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.InteractionHand; @@ -12,7 +14,11 @@ import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.AbstractCandleBlock; import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.LanternBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.material.FluidState; @@ -30,7 +36,7 @@ import static net.minecraft.world.level.block.CandleBlock.MIN_CANDLES; import static net.minecraft.world.level.block.state.properties.BlockStateProperties.CANDLES; -public class VigilCandleBlock extends LanternBlock { +public class VigilCandleBlock extends LanternBlock implements EntityBlock { private static VoxelShape shape(double x, double y, double z) { return Block.box(x, y, z, 6 + x, 10 + y, 6 + z); @@ -135,4 +141,16 @@ public boolean placeLiquid(LevelAccessor level, BlockPos pos, BlockState state, } } + @Override + public @Nullable BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new VigilCandleBlockEntity(pos, state); + } + + @SuppressWarnings("unchecked") + @Override + public @Nullable BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType type) { + if(type != OBlockEntities.VIGIL_CANDLE.get()) return null; + BlockEntityTicker ticker = (l, p, s, be) -> be.tick(l, p, s); + return (BlockEntityTicker) ticker; + } } diff --git a/src/main/java/galena/oreganized/content/entity/VigilCandleBlockEntity.java b/src/main/java/galena/oreganized/content/entity/VigilCandleBlockEntity.java new file mode 100644 index 00000000..11de43d7 --- /dev/null +++ b/src/main/java/galena/oreganized/content/entity/VigilCandleBlockEntity.java @@ -0,0 +1,37 @@ +package galena.oreganized.content.entity; + +import galena.oreganized.index.OBlockEntities; +import galena.oreganized.index.OTags; +import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.Registries; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.CandleBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.AABB; + +public class VigilCandleBlockEntity extends BlockEntity { + + public VigilCandleBlockEntity(BlockPos pos, BlockState state) { + super(OBlockEntities.VIGIL_CANDLE.get(), pos, state); + } + + public void tick(Level level, BlockPos pos, BlockState state) { + if (level.getGameTime() % 20L != 0) return; + if (!state.getValue(CandleBlock.LIT)) return; + + var range = 3 + state.getValue(CandleBlock.CANDLES); + var entities = level.getEntitiesOfClass(LivingEntity.class, new AABB(pos).inflate(range)); + + var effects = level.registryAccess().registryOrThrow(Registries.MOB_EFFECT); + var shouldClear = effects.getTagOrEmpty(OTags.Effects.VIGIL_CANDLE_CLEARS); + + entities.forEach(entity -> { + shouldClear.forEach(effect -> { + entity.removeEffect(effect.get()); + }); + }); + } + +} diff --git a/src/main/java/galena/oreganized/data/OBlockTags.java b/src/main/java/galena/oreganized/data/OBlockTags.java index ea7940f8..4bcc17a6 100644 --- a/src/main/java/galena/oreganized/data/OBlockTags.java +++ b/src/main/java/galena/oreganized/data/OBlockTags.java @@ -35,6 +35,7 @@ import static galena.oreganized.index.OTags.Blocks.STORAGE_BLOCKS_RAW_LEAD; import static galena.oreganized.index.OTags.Blocks.STORAGE_BLOCKS_RAW_SILVER; import static galena.oreganized.index.OTags.Blocks.STORAGE_BLOCKS_SILVER; +import static galena.oreganized.index.OTags.Blocks.VIGIL_CANDLES; public class OBlockTags extends IntrinsicHolderTagsProvider { @@ -95,9 +96,8 @@ protected void addTags(HolderLookup.Provider provider) { /*tag(MINEABLE_WITH_BUSH_HAMMER).add( );*/ - var pickaxeMinable = tag(BlockTags.MINEABLE_WITH_PICKAXE); - pickaxeMinable.add( + tag(BlockTags.MINEABLE_WITH_PICKAXE).add( OBlocks.LEAD_ORE.get(), OBlocks.DEEPSLATE_LEAD_ORE.get(), OBlocks.RAW_LEAD_BLOCK.get(), @@ -142,8 +142,12 @@ protected void addTags(HolderLookup.Provider provider) { OBlocks.GROOVED_BLUE_ICE.get() ); - pickaxeMinable.add(OBlocks.VIGIL_CANDLE.get()); - OBlocks.COLORED_VIGIL_CANDLES.forEach((color, block) -> pickaxeMinable.add(block.get())); + var vigilCandles = tag(VIGIL_CANDLES); + + OBlocks.vigilCandles().forEach(block -> vigilCandles.add(block.get())); + + tag(BlockTags.CANDLES).addTags(VIGIL_CANDLES); + tag(BlockTags.MINEABLE_WITH_PICKAXE).addTags(VIGIL_CANDLES); tag(BlockTags.MINEABLE_WITH_SHOVEL).add( OBlocks.WAXED_WHITE_CONCRETE_POWDER.get(), diff --git a/src/main/java/galena/oreganized/data/OItemModels.java b/src/main/java/galena/oreganized/data/OItemModels.java index 2003b7fc..2d9998a2 100644 --- a/src/main/java/galena/oreganized/data/OItemModels.java +++ b/src/main/java/galena/oreganized/data/OItemModels.java @@ -130,8 +130,7 @@ protected void registerModels() { block(OBlocks.GROOVED_PACKED_ICE); block(OBlocks.GROOVED_BLUE_ICE); - normalItem(OBlocks.VIGIL_CANDLE); - OBlocks.COLORED_VIGIL_CANDLES.forEach((color, block) -> normalItem(block)); + OBlocks.vigilCandles().forEach(this::normalItem); for (Supplier blocks : OBlocks.WAXED_CONRETE_POWDER) { withExistingParent(blockName(blocks), "minecraft:block/" + blockName(blocks).replace("waxed_", "")); diff --git a/src/main/java/galena/oreganized/data/OLootTables.java b/src/main/java/galena/oreganized/data/OLootTables.java index 4601e126..1a536f5b 100644 --- a/src/main/java/galena/oreganized/data/OLootTables.java +++ b/src/main/java/galena/oreganized/data/OLootTables.java @@ -128,8 +128,7 @@ protected void generate() { dropSelf(blocks); } - vigilCandle(OBlocks.VIGIL_CANDLE); - OBlocks.COLORED_VIGIL_CANDLES.forEach((color, block) -> vigilCandle(block)); + OBlocks.vigilCandles().forEach(this::vigilCandle); } private void grooved(Supplier block, Block other) { diff --git a/src/main/java/galena/oreganized/data/OMobEffectTags.java b/src/main/java/galena/oreganized/data/OMobEffectTags.java new file mode 100644 index 00000000..3c884511 --- /dev/null +++ b/src/main/java/galena/oreganized/data/OMobEffectTags.java @@ -0,0 +1,33 @@ +package galena.oreganized.data; + +import galena.oreganized.Oreganized; +import galena.oreganized.index.OTags; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.PackOutput; +import net.minecraft.data.tags.TagsProvider; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.effect.MobEffect; +import net.minecraftforge.common.data.ExistingFileHelper; +import org.jetbrains.annotations.NotNull; + +import javax.annotation.Nullable; +import java.util.concurrent.CompletableFuture; + +public class OMobEffectTags extends TagsProvider { + + public OMobEffectTags(PackOutput output, CompletableFuture future, @Nullable ExistingFileHelper helper) { + super(output, Registries.MOB_EFFECT, future, Oreganized.MOD_ID, helper); + } + + @Override + public @NotNull String getName() { + return "Oreganized MobEffect Tags"; + } + + @Override + protected void addTags(HolderLookup.Provider provider) { + tag(OTags.Effects.VIGIL_CANDLE_CLEARS).add(ResourceKey.create(Registries.MOB_EFFECT, new ResourceLocation("darkness"))); + } +} diff --git a/src/main/java/galena/oreganized/data/provider/OBlockStateProvider.java b/src/main/java/galena/oreganized/data/provider/OBlockStateProvider.java index 763f9374..d6c39977 100644 --- a/src/main/java/galena/oreganized/data/provider/OBlockStateProvider.java +++ b/src/main/java/galena/oreganized/data/provider/OBlockStateProvider.java @@ -11,6 +11,7 @@ import net.minecraft.core.Direction; import net.minecraft.data.PackOutput; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.AbstractCandleBlock; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.CrossCollisionBlock; import net.minecraft.world.level.block.DoorBlock; @@ -410,7 +411,7 @@ public void vigilCandle(Supplier block, @Nullable String prefix return ConfiguredModel.builder() .modelFile(model) .build(); - }, BlockStateProperties.WATERLOGGED); + }, BlockStateProperties.WATERLOGGED, AbstractCandleBlock.LIT); } public void crate(Supplier block) { diff --git a/src/main/java/galena/oreganized/index/OBlockEntities.java b/src/main/java/galena/oreganized/index/OBlockEntities.java index aca26534..8a1363be 100644 --- a/src/main/java/galena/oreganized/index/OBlockEntities.java +++ b/src/main/java/galena/oreganized/index/OBlockEntities.java @@ -4,11 +4,13 @@ import galena.oreganized.Oreganized; import galena.oreganized.content.block.HeavyDoorBlockEntity; import galena.oreganized.content.entity.GargoyleBlockEntity; +import galena.oreganized.content.entity.VigilCandleBlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.registries.RegistryObject; import java.util.Set; +import java.util.stream.Collectors; @Mod.EventBusSubscriber(modid = Oreganized.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD) public class OBlockEntities { @@ -17,4 +19,6 @@ public class OBlockEntities { public static final RegistryObject> GARGOYLE = HELPER.createBlockEntity("gargoyle", GargoyleBlockEntity::new, () -> Set.of(OBlocks.GARGOYLE.get())); public static final RegistryObject> HEAVY_DOOR = HELPER.createBlockEntity("heavy_door", HeavyDoorBlockEntity::new, () -> Set.of(OBlocks.LEAD_DOOR.get(), OBlocks.LEAD_TRAPDOOR.get())); + public static final RegistryObject> VIGIL_CANDLE = HELPER.createBlockEntity("vigil_candle", VigilCandleBlockEntity::new, () -> OBlocks.vigilCandles().map(RegistryObject::get).collect(Collectors.toSet())); + } diff --git a/src/main/java/galena/oreganized/index/OBlocks.java b/src/main/java/galena/oreganized/index/OBlocks.java index 5294fdde..438b8646 100644 --- a/src/main/java/galena/oreganized/index/OBlocks.java +++ b/src/main/java/galena/oreganized/index/OBlocks.java @@ -48,6 +48,7 @@ import java.util.function.Function; import java.util.function.Supplier; import java.util.stream.Collectors; +import java.util.stream.Stream; @Mod.EventBusSubscriber(modid = Oreganized.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD) public class OBlocks { @@ -204,9 +205,16 @@ private static BlockBehaviour.Properties leadDecoProperties() { public static final RegistryObject MOLTEN_LEAD_CAULDRON = HELPER.createBlock("molten_lead_cauldron", () -> new MoltenLeadCauldronBlock(BlockBehaviour.Properties.copy(Blocks.LAVA_CAULDRON).randomTicks())); private static final Supplier VIGIL_CANDLE_PROPERTIES = () -> BlockBehaviour.Properties.of().lightLevel(CandleBlock.LIGHT_EMISSION).sound(SoundType.METAL).pushReaction(PushReaction.DESTROY); - public static final RegistryObject VIGIL_CANDLE = register("vigil_candle", () ->new VigilCandleBlock(VIGIL_CANDLE_PROPERTIES.get())); + public static final RegistryObject VIGIL_CANDLE = register("vigil_candle", () -> new VigilCandleBlock(VIGIL_CANDLE_PROPERTIES.get())); public static final Map> COLORED_VIGIL_CANDLES = registerColored("vigil_candle", color -> new VigilCandleBlock(VIGIL_CANDLE_PROPERTIES.get().mapColor(color))); + public static Stream> vigilCandles() { + return Stream.of( + Stream.of(VIGIL_CANDLE), + COLORED_VIGIL_CANDLES.values().stream() + ).flatMap(Function.identity()); + } + public static Map> registerColored(String baseName, Function factory) { return Arrays.stream(DyeColor.values()).collect(Collectors.toMap( it -> it, diff --git a/src/main/java/galena/oreganized/index/OTags.java b/src/main/java/galena/oreganized/index/OTags.java index 54d6e040..e2963eda 100644 --- a/src/main/java/galena/oreganized/index/OTags.java +++ b/src/main/java/galena/oreganized/index/OTags.java @@ -1,8 +1,10 @@ package galena.oreganized.index; import galena.oreganized.Oreganized; +import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.*; +import net.minecraft.world.effect.MobEffect; import net.minecraft.world.entity.EntityType; import net.minecraft.world.item.Item; import net.minecraft.world.level.biome.Biome; @@ -93,6 +95,8 @@ public static class Blocks { public static final TagKey PREVENTS_LEAD_CLOUD = tag("prevents_lead_cloud"); public static final TagKey BLOWS_LEAD_CLOUD = tag("blows_lead_cloud"); + public static final TagKey VIGIL_CANDLES = tag("vigil_candles"); + private static TagKey tag(String name) { return BlockTags.create(Oreganized.modLoc(name)); } @@ -132,4 +136,13 @@ private static TagKey tag(String name) { return BiomeTags.create(Oreganized.modLoc(name).toString()); } } + + public static class Effects { + + public static final TagKey VIGIL_CANDLE_CLEARS = tag("cleared_by_vigil_candle"); + + private static TagKey tag(String name) { + return TagKey.create(Registries.MOB_EFFECT, Oreganized.modLoc(name)); + } + } }