Skip to content

Commit d2753c0

Browse files
authored
Merge pull request #20 from pirate0815/aspect-generation
Changes to Alchemy
2 parents 5a76483 + d1eb1e3 commit d2753c0

File tree

57 files changed

+1631
-1873
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+1631
-1873
lines changed
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
// 1.20.1 2025-11-09T12:29:29.004747917 Thaumaturge/Block Loot Tables
1+
// 1.20.1 2025-11-16T17:31:45.338747651 Thaumaturge/Block Loot Tables
22
452284199e53138a27116cd17a1df6a202f0acea data/thaumaturge/loot_tables/blocks/vessel.json
33
6b4dcb17726730183d7a6f935f5f8b01f37d2ac1 data/thaumaturge/loot_tables/blocks/jar.json
4+
a74c123ceb69dd6f053345f89af5cbac4bca5752 data/thaumaturge/loot_tables/blocks/alchemical_furnace.json
45
99b5b8ebf671c199b1c642dd8400008f2091f979 data/thaumaturge/loot_tables/blocks/faucet.json
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
// 1.20.1 2025-11-09T12:29:29.004280137 Thaumaturge/Tags for minecraft:block
2-
a3ec7d4a033ba3994a79a9f2f4c4656ef29bb914 data/minecraft/tags/blocks/mineable/pickaxe.json
1+
// 1.20.1 2025-11-16T17:31:45.338218812 Thaumaturge/Tags for minecraft:block
2+
e95a2aa55168b7a36c5e312ed432b6c015899c9f data/minecraft/tags/blocks/mineable/pickaxe.json
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
// 1.20.1 2025-11-16T17:31:45.338964095 Thaumaturge/Tags for minecraft:item
2+
58fb688503f20fb08f1da2fe0f53dd6718a9b873 data/thaumaturge/tags/items/vessel_no_sludge.json

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"values": [
44
"thaumaturge:faucet",
55
"thaumaturge:jar",
6-
"thaumaturge:vessel"
6+
"thaumaturge:vessel",
7+
"thaumaturge:alchemical_furnace"
78
]
89
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"type": "minecraft:block",
3+
"pools": [
4+
{
5+
"bonus_rolls": 0.0,
6+
"conditions": [
7+
{
8+
"condition": "minecraft:survives_explosion"
9+
}
10+
],
11+
"entries": [
12+
{
13+
"type": "minecraft:item",
14+
"name": "thaumaturge:alchemical_furnace"
15+
}
16+
],
17+
"rolls": 1.0
18+
}
19+
]
20+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
{
2+
"replace": false,
3+
"values": [
4+
"aspectslib:aer_aspect_shard",
5+
"aspectslib:aqua_aspect_shard",
6+
"aspectslib:ignis_aspect_shard",
7+
"aspectslib:ordo_aspect_shard",
8+
"aspectslib:perditio_aspect_shard",
9+
"aspectslib:terra_aspect_shard",
10+
"aspectslib:gelum_aspect_shard",
11+
"aspectslib:lux_aspect_shard",
12+
"aspectslib:metallum_aspect_shard",
13+
"aspectslib:mortuus_aspect_shard",
14+
"aspectslib:motus_aspect_shard",
15+
"aspectslib:permutatio_aspect_shard",
16+
"aspectslib:potentia_aspect_shard",
17+
"aspectslib:vacuos_aspect_shard",
18+
"aspectslib:victus_aspect_shard",
19+
"aspectslib:vitreus_aspect_shard",
20+
"aspectslib:bestia_aspect_shard",
21+
"aspectslib:exanimis_aspect_shard",
22+
"aspectslib:herba_aspect_shard",
23+
"aspectslib:instrumentum_aspect_shard",
24+
"aspectslib:praecantatio_aspect_shard",
25+
"aspectslib:spiritus_aspect_shard",
26+
"aspectslib:tenebrae_aspect_shard",
27+
"aspectslib:vinculum_aspect_shard",
28+
"aspectslib:volatus_aspect_shard",
29+
"aspectslib:alienis_aspect_shard",
30+
"aspectslib:alkimia_aspect_shard",
31+
"aspectslib:auram_aspect_shard",
32+
"aspectslib:aversio_aspect_shard",
33+
"aspectslib:cognitio_aspect_shard",
34+
"aspectslib:desiderium_aspect_shard",
35+
"aspectslib:fabrico_aspect_shard",
36+
"aspectslib:humanus_aspect_shard",
37+
"aspectslib:machina_aspect_shard",
38+
"aspectslib:praemunio_aspect_shard",
39+
"aspectslib:sensus_aspect_shard",
40+
"aspectslib:vitium_aspect_shard",
41+
"aspectslib:fames_aspect_shard"
42+
]
43+
}

src/main/java/dev/overgrown/thaumaturge/Thaumaturge.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import net.fabricmc.api.ModInitializer;
2323
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
2424
import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents;
25+
import net.minecraft.item.ItemStack;
26+
import net.minecraft.item.Items;
2527
import net.minecraft.registry.Registries;
2628
import net.minecraft.registry.Registry;
2729
import net.minecraft.util.Identifier;
@@ -47,6 +49,9 @@ public void onInitialize() {
4749
// Sounds
4850
ModSounds.initialize();
4951

52+
// Screens
53+
ModScreens.initialise();
54+
5055
// Spell components
5156
registerAspectEffects();
5257
registerModifierEffects();

src/main/java/dev/overgrown/thaumaturge/ThaumaturgeClient.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import dev.overgrown.aspectslib.client.AspectsTooltipConfig;
44
import dev.overgrown.thaumaturge.client.render.JarBlockEntityRenderer;
5+
import dev.overgrown.thaumaturge.client.render.VesselBlockEntityRenderer;
6+
import dev.overgrown.thaumaturge.client.screen.AlchemicalFurnaceScreen;
57
import dev.overgrown.thaumaturge.client.visualisation.FaucetTransferVisualisationHandler;
68
import dev.overgrown.thaumaturge.networking.FaucetTransferVisualisation;
79
import dev.overgrown.thaumaturge.client.keybind.KeybindManager;
@@ -11,16 +13,17 @@
1113
import dev.overgrown.thaumaturge.registry.ModBlocks;
1214
import dev.overgrown.thaumaturge.registry.ModEntities;
1315
import dev.overgrown.thaumaturge.item.aspect_lens.AspectLensItem;
16+
import dev.overgrown.thaumaturge.registry.ModScreens;
17+
import dev.overgrown.thaumaturge.screen.AlchemicalFurnaceScreenHandler;
1418
import dev.overgrown.thaumaturge.spell.impl.potentia.render.SpellBoltRenderer;
1519
import dev.overgrown.thaumaturge.spell.networking.SpellCastPacket;
1620
import net.fabricmc.api.ClientModInitializer;
1721
import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap;
1822
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
1923
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
20-
import net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry;
2124
import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry;
2225
import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback;
23-
import net.minecraft.client.color.world.BiomeColors;
26+
import net.minecraft.client.gui.screen.ingame.HandledScreens;
2427
import net.minecraft.client.render.RenderLayer;
2528
import net.minecraft.client.render.block.entity.BlockEntityRendererFactories;
2629
import net.minecraft.client.render.entity.EmptyEntityRenderer;
@@ -66,11 +69,13 @@ public void onInitializeClient() {
6669

6770
ClientPlayNetworking.registerGlobalReceiver(FaucetTransferVisualisation.ASPECT_TRANSFER_PAKET, FaucetTransferVisualisationHandler::receive);
6871

69-
// Color the water in the vessel block
70-
ColorProviderRegistry.BLOCK.register((state, world, pos, tintIndex) -> (world != null && pos != null) ? BiomeColors.getWaterColor(world, pos) : -1, ModBlocks.VESSEL);
72+
BlockEntityRendererFactories.register(ModBlocks.VESSEL_BLOCK_ENTITY, VesselBlockEntityRenderer::new);
7173

7274
// Jar Rendering
7375
BlockRenderLayerMap.INSTANCE.putBlock(ModBlocks.JAR, RenderLayer.getCutout());
7476
BlockEntityRendererFactories.register(ModBlocks.JAR_BLOCK_ENTITY, JarBlockEntityRenderer::new);
77+
78+
// Alchemical Furnace Screen
79+
HandledScreens.register(ModScreens.ALCHEMICAL_FURNACE_SCREEN_HANDLER, AlchemicalFurnaceScreen::new);
7580
}
7681
}
Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
package dev.overgrown.thaumaturge;
22

3-
import dev.overgrown.thaumaturge.data_generator.BlockLootTableProvider;
4-
import dev.overgrown.thaumaturge.data_generator.BlockTagProvider;
3+
import com.klikli_dev.modonomicon.datagen.ItemTagsProvider;
4+
import dev.overgrown.thaumaturge.data_generator.ModBlockLootTables;
5+
import dev.overgrown.thaumaturge.data_generator.ModBlockTags;
6+
import dev.overgrown.thaumaturge.data_generator.ModItemTags;
57
import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint;
68
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
79

810
public class ThaumaturgeDataGenerator implements DataGeneratorEntrypoint {
911
@Override
1012
public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) {
1113
FabricDataGenerator.Pack pack = fabricDataGenerator.createPack();
12-
pack.addProvider(BlockLootTableProvider::new);
13-
pack.addProvider(BlockTagProvider::new);
14+
pack.addProvider(ModBlockLootTables::new);
15+
pack.addProvider(ModBlockTags::new);
16+
pack.addProvider(ModItemTags::new);
1417
}
1518
}
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
package dev.overgrown.thaumaturge.block.alchemical_furnace;
2+
3+
import dev.overgrown.thaumaturge.Thaumaturge;
4+
import dev.overgrown.thaumaturge.registry.ModBlocks;
5+
import dev.overgrown.thaumaturge.util.CorruptionHelper;
6+
import net.minecraft.block.Block;
7+
import net.minecraft.block.BlockRenderType;
8+
import net.minecraft.block.BlockState;
9+
import net.minecraft.block.BlockWithEntity;
10+
import net.minecraft.block.entity.BlockEntity;
11+
import net.minecraft.block.entity.BlockEntityTicker;
12+
import net.minecraft.block.entity.BlockEntityType;
13+
import net.minecraft.entity.player.PlayerEntity;
14+
import net.minecraft.item.ItemPlacementContext;
15+
import net.minecraft.particle.ParticleTypes;
16+
import net.minecraft.screen.NamedScreenHandlerFactory;
17+
import net.minecraft.server.world.ServerWorld;
18+
import net.minecraft.sound.SoundCategory;
19+
import net.minecraft.sound.SoundEvents;
20+
import net.minecraft.state.StateManager;
21+
import net.minecraft.state.property.BooleanProperty;
22+
import net.minecraft.state.property.DirectionProperty;
23+
import net.minecraft.state.property.Properties;
24+
import net.minecraft.util.ActionResult;
25+
import net.minecraft.util.Hand;
26+
import net.minecraft.util.ItemScatterer;
27+
import net.minecraft.util.hit.BlockHitResult;
28+
import net.minecraft.util.math.BlockPos;
29+
import net.minecraft.util.math.Direction;
30+
import net.minecraft.util.math.random.Random;
31+
import net.minecraft.world.World;
32+
import org.jetbrains.annotations.Nullable;
33+
34+
public class AlchemicalFurnaceBlock extends BlockWithEntity {
35+
36+
public static final BooleanProperty LIT = Properties.LIT;
37+
public static final DirectionProperty FACING = Properties.HORIZONTAL_FACING;
38+
39+
public AlchemicalFurnaceBlock(Settings settings) {
40+
super(settings);
41+
setDefaultState(getDefaultState().with(LIT, false).with(FACING, Direction.NORTH));
42+
}
43+
44+
@Override
45+
public @Nullable BlockEntity createBlockEntity(BlockPos pos, BlockState state) {
46+
return new AlchemicalFurnaceBlockEntity(pos, state);
47+
}
48+
49+
@Override
50+
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(World world, BlockState state, BlockEntityType<T> type) {
51+
return world.isClient ? null : checkType(type, ModBlocks.ALCHEMICAL_FURNACE_BLOCK_ENTITY, AlchemicalFurnaceBlockEntity::serverTick);
52+
}
53+
54+
@Override
55+
protected void appendProperties(StateManager.Builder<Block, BlockState> builder) {
56+
super.appendProperties(builder);
57+
builder.add(LIT).add(FACING);
58+
}
59+
60+
@Override
61+
public BlockRenderType getRenderType(BlockState state) {
62+
return BlockRenderType.MODEL;
63+
}
64+
65+
@Override
66+
public void onStateReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean moved) {
67+
if (!state.isOf(newState.getBlock())) {
68+
if (world instanceof ServerWorld serverWorld) {
69+
BlockEntity entity = world.getBlockEntity(pos);
70+
if (entity instanceof AlchemicalFurnaceBlockEntity alchemicalFurnaceBlockEntity) {
71+
CorruptionHelper.addCorruption(serverWorld, pos, alchemicalFurnaceBlockEntity.getTotalAspectAmount());
72+
ItemScatterer.spawn(world, pos, alchemicalFurnaceBlockEntity);
73+
}
74+
}
75+
super.onStateReplaced(state,world,pos,newState,moved);
76+
}
77+
}
78+
79+
@Override
80+
public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) {
81+
if (!world.isClient) {
82+
NamedScreenHandlerFactory factory = state.createScreenHandlerFactory(world, pos);
83+
if (factory != null) {
84+
player.openHandledScreen(factory);
85+
} else {
86+
Thaumaturge.LOGGER.info("screen factory is null");
87+
}
88+
}
89+
return ActionResult.SUCCESS;
90+
}
91+
92+
@Override
93+
public BlockState getPlacementState(ItemPlacementContext ctx) {
94+
return this.getDefaultState().with(FACING, ctx.getHorizontalPlayerFacing().getOpposite());
95+
}
96+
97+
@Override
98+
public void randomDisplayTick(BlockState state, World world, BlockPos pos, Random random) {
99+
if (state.get(LIT)) {
100+
if (world.getRandom().nextDouble() < 0.1) {
101+
world.playSound(pos.getX() + 0.5, pos.getY() + 0.25, pos.getZ() + 0.5, SoundEvents.BLOCK_FURNACE_FIRE_CRACKLE, SoundCategory.BLOCKS, 1f, 1f, false);
102+
}
103+
Direction direction = state.get(FACING);
104+
double y = (4.5d / 16d) + pos.getY();
105+
double x;
106+
double z;
107+
108+
if(direction.getAxis().equals(Direction.Axis.Z)) {
109+
x = ((double)pos.getX()) + 0.25 + world.getRandom().nextFloat() * 0.5;
110+
z = direction.equals(Direction.NORTH) ? pos.getZ() - 0.05 : pos.getZ() + 1.05;
111+
} else {
112+
z = ((double)pos.getZ()) + 0.25 + world.getRandom().nextFloat() * 0.5;
113+
x = direction.equals(Direction.EAST) ? pos.getX() + 1.05 : pos.getX() - 0.05;
114+
}
115+
world.addParticle(ParticleTypes.SMOKE, x, y, z, 0.0, 0.0, 0.0);
116+
world.addParticle(ParticleTypes.FLAME, x, y, z, 0.0, 0.0, 0.0);
117+
}
118+
}
119+
}

0 commit comments

Comments
 (0)