Skip to content

Commit edae490

Browse files
committed
vigil candle support for amendments & effect removal functionality
1 parent b64d606 commit edae490

20 files changed

+231
-33
lines changed

build.gradle

+3-1
Original file line numberDiff line numberDiff line change
@@ -108,11 +108,13 @@ dependencies {
108108
implementation(fg.deobf("maven.modrinth:shield-expansion:${shieldexpansion_version}"))
109109
implementation(fg.deobf("maven.modrinth:create:${create_version}"))
110110
implementation(fg.deobf("maven.modrinth:supplementaries:${supplementaries_version}"))
111+
implementation(fg.deobf("maven.modrinth:amendments:${amendments_version}"))
112+
implementation(fg.deobf("maven.modrinth:amendments:${amendments_version}"))
113+
implementation(fg.deobf("maven.modrinth:moonlight:${moonlight_lib_version}"))
111114

112115
// For dev testing
113116
runtimeOnly(fg.deobf("maven.modrinth:scannable:${scannable_version}"))
114117
runtimeOnly(fg.deobf("maven.modrinth:architectury-api:${architectury_version}"))
115-
runtimeOnly(fg.deobf("maven.modrinth:moonlight:${moonlight_lib_version}"))
116118

117119
/// Utilities for the development environment
118120
//runtimeOnly fg.deobf("curse.maven:jade-324717:${jade_version}")

gradle.properties

+1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ nethersdelight_version=MTDQhZd2
3030
shieldexpansion_version=8mpKmudC
3131
create_version=ZZW2y7nG
3232
supplementaries_version=eMF95dNK
33+
amendments_version=qE7sokDv
3334
scannable_version=2FlwUOgm
3435
architectury_version=tBWqtdBO
3536
moonlight_lib_version=sfzdPwZX

src/generated/resources/.cache/5bb646c3cee204f41a1b59a2c0d9083b5f7155b0

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// 1.20.1 2024-10-14T21:56:57.8734426 Oreganized Block Tags
1+
// 1.20.1 2024-10-17T22:46:04.3663948 Oreganized Block Tags
22
7a2d68d81bc5ee59f9a2f4ba68ddb39bfd9c875d data/forge/tags/blocks/glass.json
33
d96b4f83e03abe39a1b97d92b7818c8f6b2e5c68 data/forge/tags/blocks/glass_panes.json
44
d062c23ad5308b7de0b2e86f6531ea724530f898 data/forge/tags/blocks/melts_lead.json
@@ -15,12 +15,13 @@ bb0420ecbadc747d984fcef0fe7fc67586bc3231 data/forge/tags/blocks/storage_blocks/l
1515
05f4708355ed88fe57116020dd93ac53f3098dba data/forge/tags/blocks/storage_blocks/raw_silver.json
1616
bff6697a058fddfe9e14615bc043fcb2071fd6fc data/forge/tags/blocks/storage_blocks/silver.json
1717
7a1e2c391ad442cdc57f69ce1737207bc52bfb84 data/minecraft/tags/blocks/beacon_base_blocks.json
18+
b85964d677734db0ac4bbc66f550f073ed0cb5e1 data/minecraft/tags/blocks/candles.json
1819
82c03c405a971b2a7fc3fd43a9fb6c221f463ce0 data/minecraft/tags/blocks/cauldrons.json
1920
503ad75af537d0ffef02ada9fb9afb5f5cd8e83b data/minecraft/tags/blocks/doors.json
2021
0f64e9b9dc279dd460f6408313b130a37a0c9d86 data/minecraft/tags/blocks/ice.json
2122
7a2d68d81bc5ee59f9a2f4ba68ddb39bfd9c875d data/minecraft/tags/blocks/impermeable.json
2223
f7079c32fc948b65cb486bea80e2dc93d13ce577 data/minecraft/tags/blocks/mineable/axe.json
23-
bb012b5952f56da417a3022bb00d105f9a28dc10 data/minecraft/tags/blocks/mineable/pickaxe.json
24+
abb8283f25d49e1094364bfc91028dd0f3af9ad6 data/minecraft/tags/blocks/mineable/pickaxe.json
2425
84a13f81c79f0c05f8f7a8cbf1d3c25129a97179 data/minecraft/tags/blocks/mineable/shovel.json
2526
bb86ac7ab19373da790ec5711f473614e4b62d79 data/minecraft/tags/blocks/needs_iron_tool.json
2627
dc9cc2dca9fa3a28a0458ec282e3e0fe81999ee1 data/minecraft/tags/blocks/needs_stone_tool.json
@@ -38,3 +39,4 @@ eaca08d04b1742f418e6bc0964dd32cf16035d88 data/oreganized/tags/blocks/mineable/sc
3839
cf3608bd187922aeb48c566c19e8482b0dca34c7 data/oreganized/tags/blocks/prevents_lead_cloud.json
3940
06c2e2e512966767a31df77e646e41c4c39e3dd3 data/oreganized/tags/blocks/silktouch_using_scribe.json
4041
3112fb4a1df2953e2c3572fa47f886bf8e5bd679 data/oreganized/tags/blocks/stone_types/glance.json
42+
cead6b906640efcd90a6dbb5f5e17623f3631b53 data/oreganized/tags/blocks/vigil_candles.json
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"values": [
3+
"#oreganized:vigil_candles"
4+
]
5+
}

src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json

+1-17
Original file line numberDiff line numberDiff line change
@@ -35,22 +35,6 @@
3535
"oreganized:grooved_ice",
3636
"oreganized:grooved_packed_ice",
3737
"oreganized:grooved_blue_ice",
38-
"oreganized:vigil_candle",
39-
"oreganized:purple_vigil_candle",
40-
"oreganized:gray_vigil_candle",
41-
"oreganized:blue_vigil_candle",
42-
"oreganized:magenta_vigil_candle",
43-
"oreganized:yellow_vigil_candle",
44-
"oreganized:lime_vigil_candle",
45-
"oreganized:orange_vigil_candle",
46-
"oreganized:green_vigil_candle",
47-
"oreganized:light_gray_vigil_candle",
48-
"oreganized:red_vigil_candle",
49-
"oreganized:cyan_vigil_candle",
50-
"oreganized:black_vigil_candle",
51-
"oreganized:white_vigil_candle",
52-
"oreganized:pink_vigil_candle",
53-
"oreganized:light_blue_vigil_candle",
54-
"oreganized:brown_vigil_candle"
38+
"#oreganized:vigil_candles"
5539
]
5640
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"values": [
3+
"oreganized:vigil_candle",
4+
"oreganized:light_blue_vigil_candle",
5+
"oreganized:blue_vigil_candle",
6+
"oreganized:orange_vigil_candle",
7+
"oreganized:red_vigil_candle",
8+
"oreganized:purple_vigil_candle",
9+
"oreganized:light_gray_vigil_candle",
10+
"oreganized:green_vigil_candle",
11+
"oreganized:gray_vigil_candle",
12+
"oreganized:magenta_vigil_candle",
13+
"oreganized:white_vigil_candle",
14+
"oreganized:yellow_vigil_candle",
15+
"oreganized:black_vigil_candle",
16+
"oreganized:brown_vigil_candle",
17+
"oreganized:lime_vigil_candle",
18+
"oreganized:cyan_vigil_candle",
19+
"oreganized:pink_vigil_candle"
20+
]
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"values": [
3+
"minecraft:darkness"
4+
]
5+
}

src/main/java/galena/oreganized/Oreganized.java

+7
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.teamabnormals.blueprint.core.util.DataUtil;
77
import com.teamabnormals.blueprint.core.util.registry.RegistryHelper;
88
import galena.oreganized.compat.create.CreateCompat;
9+
import galena.oreganized.compat.supplementaries.AmendmentsCompat;
910
import galena.oreganized.content.block.LeadOreBlock;
1011
import galena.oreganized.content.block.MoltenLeadCauldronBlock;
1112
import galena.oreganized.content.entity.LeadBoltEntity;
@@ -20,6 +21,7 @@
2021
import galena.oreganized.data.OItemTags;
2122
import galena.oreganized.data.OLang;
2223
import galena.oreganized.data.OLootTables;
24+
import galena.oreganized.data.OMobEffectTags;
2325
import galena.oreganized.data.ORecipes;
2426
import galena.oreganized.data.ORegistries;
2527
import galena.oreganized.data.OSoundDefinitions;
@@ -159,6 +161,10 @@ public Oreganized() {
159161
CreateCompat.register();
160162
}
161163

164+
if (ModList.get().isLoaded("amendments")) {
165+
AmendmentsCompat.register();
166+
}
167+
162168
//CompatHandler.register();
163169

164170
//context.registerConfig(ModConfig.Type.COMMON, OreganizedConfig.COMMON_SPEC);
@@ -286,6 +292,7 @@ public void gatherData(GatherDataEvent event) {
286292
generator.addProvider(server, datapackProvider);
287293
generator.addProvider(server, new OBiomeTags(output, lookupProvider, helper));
288294
generator.addProvider(server, new ODamageTags(output, lookupProvider, helper));
295+
generator.addProvider(server, new OMobEffectTags(output, lookupProvider, helper));
289296
//generator.addProvider(server, new OPaintingVariantTags(output, lookupProvider, helper));
290297
//generator.addProvider(server, new OBiomeModifier.register(event));
291298

src/main/java/galena/oreganized/client/OreganizedClient.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,7 @@ private static void registerBlockRenderers() {
8080
render(OBlocks.LEAD_BARS, cutout);
8181
render(OBlocks.GARGOYLE, cutout);
8282

83-
render(OBlocks.VIGIL_CANDLE, cutout);
84-
OBlocks.COLORED_VIGIL_CANDLES.forEach((color, block) -> render(block, cutout));
83+
OBlocks.vigilCandles().forEach(block -> render(block, cutout));
8584

8685
for (int i = 0; OBlocks.CRYSTAL_GLASS.size() > i; i++) {
8786
render(OBlocks.CRYSTAL_GLASS.get(i), translucent);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package galena.oreganized.compat.supplementaries;
2+
3+
import net.mehvahdjukaar.amendments.common.tile.WallLanternBlockTile;
4+
import net.minecraft.sounds.SoundEvents;
5+
import net.minecraft.sounds.SoundSource;
6+
import net.minecraft.world.InteractionResult;
7+
import net.minecraft.world.item.Items;
8+
import net.minecraft.world.level.block.CandleBlock;
9+
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
10+
import net.minecraftforge.common.MinecraftForge;
11+
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
12+
13+
public class AmendmentsCompat {
14+
15+
public static void register() {
16+
MinecraftForge.EVENT_BUS.addListener(AmendmentsCompat::onBlockInteract);
17+
}
18+
19+
private static void onBlockInteract(PlayerInteractEvent.RightClickBlock event) {
20+
var pos = event.getPos();
21+
var level = event.getLevel();
22+
var be = level.getBlockEntity(pos);
23+
var held = event.getItemStack();
24+
var player = event.getEntity();
25+
26+
if(!(be instanceof WallLanternBlockTile lantern)) return;
27+
28+
var state = lantern.getHeldBlock();
29+
var lit = state.getValue(CandleBlock.LIT);
30+
31+
InteractionResult result = InteractionResult.PASS;
32+
33+
if(held.is(Items.FLINT_AND_STEEL) && !lit) {
34+
level.playSound(player, pos, SoundEvents.FLINTANDSTEEL_USE, SoundSource.BLOCKS, 1.0F, level.getRandom().nextFloat() * 0.4F + 0.8F);
35+
lantern.setHeldBlock(state.setValue(BlockStateProperties.LIT, true));
36+
if (player != null) {
37+
held.hurtAndBreak(1, player, (p_41303_) -> {
38+
p_41303_.broadcastBreakEvent(event.getHand());
39+
});
40+
}
41+
42+
result = InteractionResult.sidedSuccess(level.isClientSide());
43+
} else if(held.isEmpty() && lit) {
44+
level.playSound(player, pos, SoundEvents.CANDLE_EXTINGUISH, SoundSource.BLOCKS, 1.0F, 1.0F);
45+
lantern.setHeldBlock(state.setValue(BlockStateProperties.LIT, false));
46+
47+
result = InteractionResult.sidedSuccess(level.isClientSide());
48+
}
49+
50+
if(result != InteractionResult.PASS) {
51+
event.setCancellationResult(result);
52+
event.setCanceled(true);
53+
}
54+
}
55+
56+
}

src/main/java/galena/oreganized/content/block/VigilCandleBlock.java

+19-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package galena.oreganized.content.block;
22

3+
import galena.oreganized.content.entity.VigilCandleBlockEntity;
4+
import galena.oreganized.index.OBlockEntities;
35
import net.minecraft.core.BlockPos;
46
import net.minecraft.core.Direction;
57
import net.minecraft.world.InteractionHand;
@@ -12,7 +14,11 @@
1214
import net.minecraft.world.level.LevelReader;
1315
import net.minecraft.world.level.block.AbstractCandleBlock;
1416
import net.minecraft.world.level.block.Block;
17+
import net.minecraft.world.level.block.EntityBlock;
1518
import net.minecraft.world.level.block.LanternBlock;
19+
import net.minecraft.world.level.block.entity.BlockEntity;
20+
import net.minecraft.world.level.block.entity.BlockEntityTicker;
21+
import net.minecraft.world.level.block.entity.BlockEntityType;
1622
import net.minecraft.world.level.block.state.BlockState;
1723
import net.minecraft.world.level.block.state.StateDefinition;
1824
import net.minecraft.world.level.material.FluidState;
@@ -30,7 +36,7 @@
3036
import static net.minecraft.world.level.block.CandleBlock.MIN_CANDLES;
3137
import static net.minecraft.world.level.block.state.properties.BlockStateProperties.CANDLES;
3238

33-
public class VigilCandleBlock extends LanternBlock {
39+
public class VigilCandleBlock extends LanternBlock implements EntityBlock {
3440

3541
private static VoxelShape shape(double x, double y, double z) {
3642
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,
135141
}
136142
}
137143

144+
@Override
145+
public @Nullable BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
146+
return new VigilCandleBlockEntity(pos, state);
147+
}
148+
149+
@SuppressWarnings("unchecked")
150+
@Override
151+
public @Nullable <T extends BlockEntity> BlockEntityTicker<T> getTicker(Level level, BlockState state, BlockEntityType<T> type) {
152+
if(type != OBlockEntities.VIGIL_CANDLE.get()) return null;
153+
BlockEntityTicker<VigilCandleBlockEntity> ticker = (l, p, s, be) -> be.tick(l, p, s);
154+
return (BlockEntityTicker<T>) ticker;
155+
}
138156
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package galena.oreganized.content.entity;
2+
3+
import galena.oreganized.index.OBlockEntities;
4+
import galena.oreganized.index.OTags;
5+
import net.minecraft.core.BlockPos;
6+
import net.minecraft.core.registries.Registries;
7+
import net.minecraft.world.entity.LivingEntity;
8+
import net.minecraft.world.level.Level;
9+
import net.minecraft.world.level.block.CandleBlock;
10+
import net.minecraft.world.level.block.entity.BlockEntity;
11+
import net.minecraft.world.level.block.state.BlockState;
12+
import net.minecraft.world.phys.AABB;
13+
14+
public class VigilCandleBlockEntity extends BlockEntity {
15+
16+
public VigilCandleBlockEntity(BlockPos pos, BlockState state) {
17+
super(OBlockEntities.VIGIL_CANDLE.get(), pos, state);
18+
}
19+
20+
public void tick(Level level, BlockPos pos, BlockState state) {
21+
if (level.getGameTime() % 20L != 0) return;
22+
if (!state.getValue(CandleBlock.LIT)) return;
23+
24+
var range = 3 + state.getValue(CandleBlock.CANDLES);
25+
var entities = level.getEntitiesOfClass(LivingEntity.class, new AABB(pos).inflate(range));
26+
27+
var effects = level.registryAccess().registryOrThrow(Registries.MOB_EFFECT);
28+
var shouldClear = effects.getTagOrEmpty(OTags.Effects.VIGIL_CANDLE_CLEARS);
29+
30+
entities.forEach(entity -> {
31+
shouldClear.forEach(effect -> {
32+
entity.removeEffect(effect.get());
33+
});
34+
});
35+
}
36+
37+
}

src/main/java/galena/oreganized/data/OBlockTags.java

+8-4
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import static galena.oreganized.index.OTags.Blocks.STORAGE_BLOCKS_RAW_LEAD;
3636
import static galena.oreganized.index.OTags.Blocks.STORAGE_BLOCKS_RAW_SILVER;
3737
import static galena.oreganized.index.OTags.Blocks.STORAGE_BLOCKS_SILVER;
38+
import static galena.oreganized.index.OTags.Blocks.VIGIL_CANDLES;
3839

3940
public class OBlockTags extends IntrinsicHolderTagsProvider<Block> {
4041

@@ -95,9 +96,8 @@ protected void addTags(HolderLookup.Provider provider) {
9596
/*tag(MINEABLE_WITH_BUSH_HAMMER).add(
9697
9798
);*/
98-
var pickaxeMinable = tag(BlockTags.MINEABLE_WITH_PICKAXE);
9999

100-
pickaxeMinable.add(
100+
tag(BlockTags.MINEABLE_WITH_PICKAXE).add(
101101
OBlocks.LEAD_ORE.get(),
102102
OBlocks.DEEPSLATE_LEAD_ORE.get(),
103103
OBlocks.RAW_LEAD_BLOCK.get(),
@@ -142,8 +142,12 @@ protected void addTags(HolderLookup.Provider provider) {
142142
OBlocks.GROOVED_BLUE_ICE.get()
143143
);
144144

145-
pickaxeMinable.add(OBlocks.VIGIL_CANDLE.get());
146-
OBlocks.COLORED_VIGIL_CANDLES.forEach((color, block) -> pickaxeMinable.add(block.get()));
145+
var vigilCandles = tag(VIGIL_CANDLES);
146+
147+
OBlocks.vigilCandles().forEach(block -> vigilCandles.add(block.get()));
148+
149+
tag(BlockTags.CANDLES).addTags(VIGIL_CANDLES);
150+
tag(BlockTags.MINEABLE_WITH_PICKAXE).addTags(VIGIL_CANDLES);
147151

148152
tag(BlockTags.MINEABLE_WITH_SHOVEL).add(
149153
OBlocks.WAXED_WHITE_CONCRETE_POWDER.get(),

src/main/java/galena/oreganized/data/OItemModels.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -130,8 +130,7 @@ protected void registerModels() {
130130
block(OBlocks.GROOVED_PACKED_ICE);
131131
block(OBlocks.GROOVED_BLUE_ICE);
132132

133-
normalItem(OBlocks.VIGIL_CANDLE);
134-
OBlocks.COLORED_VIGIL_CANDLES.forEach((color, block) -> normalItem(block));
133+
OBlocks.vigilCandles().forEach(this::normalItem);
135134

136135
for (Supplier<? extends Block> blocks : OBlocks.WAXED_CONRETE_POWDER) {
137136
withExistingParent(blockName(blocks), "minecraft:block/" + blockName(blocks).replace("waxed_", ""));

src/main/java/galena/oreganized/data/OLootTables.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,7 @@ protected void generate() {
128128
dropSelf(blocks);
129129
}
130130

131-
vigilCandle(OBlocks.VIGIL_CANDLE);
132-
OBlocks.COLORED_VIGIL_CANDLES.forEach((color, block) -> vigilCandle(block));
131+
OBlocks.vigilCandles().forEach(this::vigilCandle);
133132
}
134133

135134
private void grooved(Supplier<Block> block, Block other) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package galena.oreganized.data;
2+
3+
import galena.oreganized.Oreganized;
4+
import galena.oreganized.index.OTags;
5+
import net.minecraft.core.HolderLookup;
6+
import net.minecraft.core.registries.Registries;
7+
import net.minecraft.data.PackOutput;
8+
import net.minecraft.data.tags.TagsProvider;
9+
import net.minecraft.resources.ResourceKey;
10+
import net.minecraft.resources.ResourceLocation;
11+
import net.minecraft.world.effect.MobEffect;
12+
import net.minecraftforge.common.data.ExistingFileHelper;
13+
import org.jetbrains.annotations.NotNull;
14+
15+
import javax.annotation.Nullable;
16+
import java.util.concurrent.CompletableFuture;
17+
18+
public class OMobEffectTags extends TagsProvider<MobEffect> {
19+
20+
public OMobEffectTags(PackOutput output, CompletableFuture<HolderLookup.Provider> future, @Nullable ExistingFileHelper helper) {
21+
super(output, Registries.MOB_EFFECT, future, Oreganized.MOD_ID, helper);
22+
}
23+
24+
@Override
25+
public @NotNull String getName() {
26+
return "Oreganized MobEffect Tags";
27+
}
28+
29+
@Override
30+
protected void addTags(HolderLookup.Provider provider) {
31+
tag(OTags.Effects.VIGIL_CANDLE_CLEARS).add(ResourceKey.create(Registries.MOB_EFFECT, new ResourceLocation("darkness")));
32+
}
33+
}

0 commit comments

Comments
 (0)