diff --git a/src/main/java/io/github/reoseah/magisterium/Magisterium.java b/src/main/java/io/github/reoseah/magisterium/Magisterium.java index 6981350..5d19cf0 100644 --- a/src/main/java/io/github/reoseah/magisterium/Magisterium.java +++ b/src/main/java/io/github/reoseah/magisterium/Magisterium.java @@ -2,6 +2,8 @@ import com.google.common.collect.ImmutableSet; import io.github.reoseah.magisterium.block.*; +import io.github.reoseah.magisterium.block.entity.ArcaneResonatorBlockEntity; +import io.github.reoseah.magisterium.block.entity.IllusoryWallBlockEntity; import io.github.reoseah.magisterium.block.entity.MagicBarrierBlockEntity; import io.github.reoseah.magisterium.data.BookLoader; import io.github.reoseah.magisterium.data.SpellEffectLoader; @@ -64,11 +66,14 @@ public void onInitialize() { Registry.register(Registries.BLOCK, "magisterium:illusory_wall", IllusoryWallBlock.INSTANCE); Registry.register(Registries.BLOCK, "magisterium:arcane_lift", ArcaneLiftBlock.INSTANCE); Registry.register(Registries.BLOCK, "magisterium:magic_barrier", MagicBarrierBlock.INSTANCE); + Registry.register(Registries.BLOCK, "magisterium:arcane_resonator", ArcaneResonatorBlock.INSTANCE); Registry.register(Registries.BLOCK_ENTITY_TYPE, "magisterium:illusory_wall", IllusoryWallBlockEntity.TYPE); Registry.register(Registries.BLOCK_ENTITY_TYPE, "magisterium:magic_barrier", MagicBarrierBlockEntity.TYPE); + Registry.register(Registries.BLOCK_ENTITY_TYPE, "magisterium:arcane_resonator", ArcaneResonatorBlockEntity.TYPE); Registry.register(Registries.ITEM, "magisterium:arcane_table", ArcaneTableBlock.ITEM); + Registry.register(Registries.ITEM, "magisterium:arcane_resonator", ArcaneResonatorBlock.ITEM); Registry.register(Registries.ITEM, "magisterium:spell_book", SpellBookItem.SPELL_BOOK); Registry.register(Registries.ITEM, "magisterium:elements_of_pyromancy", SpellBookItem.ELEMENTS_OF_PYROMANCY); Registry.register(Registries.ITEM, "magisterium:lesser_arcanum", SpellBookItem.LESSER_ARCANUM); @@ -98,6 +103,7 @@ public void onInitialize() { .displayName(Text.translatable("itemGroup.magisterium")) // .entries((displayContext, entries) -> { entries.add(ArcaneTableBlock.INSTANCE); + entries.add(ArcaneResonatorBlock.INSTANCE); entries.add(SpellBookItem.SPELL_BOOK); var filledBook = new ItemStack(SpellBookItem.SPELL_BOOK); diff --git a/src/main/java/io/github/reoseah/magisterium/MagisteriumClient.java b/src/main/java/io/github/reoseah/magisterium/MagisteriumClient.java index c01cc22..8b3964d 100644 --- a/src/main/java/io/github/reoseah/magisterium/MagisteriumClient.java +++ b/src/main/java/io/github/reoseah/magisterium/MagisteriumClient.java @@ -1,6 +1,12 @@ package io.github.reoseah.magisterium; -import io.github.reoseah.magisterium.block.*; +import io.github.reoseah.magisterium.block.ArcaneTableBlock; +import io.github.reoseah.magisterium.block.GlyphBlock; +import io.github.reoseah.magisterium.block.MagicBarrierBlock; +import io.github.reoseah.magisterium.block.entity.ArcaneResonatorBlockEntity; +import io.github.reoseah.magisterium.block.entity.IllusoryWallBlockEntity; +import io.github.reoseah.magisterium.client.render.ArcaneResonatorRenderer; +import io.github.reoseah.magisterium.client.render.IllusoryWallBlockEntityRenderer; import io.github.reoseah.magisterium.data.BookLoader; import io.github.reoseah.magisterium.data.SpellPage; import io.github.reoseah.magisterium.network.SpellParticlePayload; @@ -15,6 +21,7 @@ import io.github.reoseah.magisterium.screen.SpellBookScreenHandler; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; +import net.fabricmc.fabric.api.client.model.loading.v1.ModelLoadingPlugin; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.fabricmc.fabric.api.client.particle.v1.ParticleFactoryRegistry; @@ -36,6 +43,12 @@ public void onInitializeClient() { HandledScreens.register(ArcaneTableScreenHandler.TYPE, ArcaneTableScreen::new); BlockEntityRendererFactories.register(IllusoryWallBlockEntity.TYPE, IllusoryWallBlockEntityRenderer::new); + BlockEntityRendererFactories.register(ArcaneResonatorBlockEntity.TYPE, ArcaneResonatorRenderer::new); + + ModelLoadingPlugin.register(pluginContext -> { + pluginContext.addModels(Identifier.of("magisterium:block/arcane_resonator_crystal")); + pluginContext.addModels(Identifier.of("magisterium:block/arcane_resonator_crystal_on")); + }); ParticleFactoryRegistry.getInstance().register(MagisteriumParticles.ENERGY, EnergyParticle.Factory::new); ParticleFactoryRegistry.getInstance().register(MagisteriumParticles.GLYPH_A, GlyphParticle.Factory::new); diff --git a/src/main/java/io/github/reoseah/magisterium/block/ArcaneResonatorBlock.java b/src/main/java/io/github/reoseah/magisterium/block/ArcaneResonatorBlock.java new file mode 100644 index 0000000..3724459 --- /dev/null +++ b/src/main/java/io/github/reoseah/magisterium/block/ArcaneResonatorBlock.java @@ -0,0 +1,122 @@ +package io.github.reoseah.magisterium.block; + +import com.mojang.serialization.MapCodec; +import io.github.reoseah.magisterium.block.entity.ArcaneResonatorBlockEntity; +import net.minecraft.block.*; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.entity.ai.pathing.NavigationType; +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; +import net.minecraft.particle.DustParticleEffect; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.state.StateManager; +import net.minecraft.state.property.BooleanProperty; +import net.minecraft.state.property.Properties; +import net.minecraft.util.Identifier; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.util.math.random.Random; +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.world.BlockView; +import net.minecraft.world.World; +import net.minecraft.world.WorldView; +import org.jetbrains.annotations.Nullable; + +public class ArcaneResonatorBlock extends BlockWithEntity { + public static final VoxelShape SHAPE = Block.createCuboidShape(0, 0, 0, 16, 2, 16); + public static final BooleanProperty POWERED = Properties.POWERED; + public static final MapCodec CODEC = createCodec(ArcaneResonatorBlock::new); + + public static final Block INSTANCE = new ArcaneResonatorBlock(Settings.create() // + .breakInstantly() // + .nonOpaque() // + .luminance(state -> state.get(POWERED) ? 13 : 0) // + .strength(0) // + .registryKey(RegistryKey.of(RegistryKeys.BLOCK, Identifier.of("magisterium", "arcane_resonator")))); + public static final Item ITEM = new BlockItem(INSTANCE, new Item.Settings() // + .registryKey(RegistryKey.of(RegistryKeys.ITEM, Identifier.of("magisterium", "arcane_resonator"))) // + .useBlockPrefixedTranslationKey()); + + public ArcaneResonatorBlock(Settings settings) { + super(settings); + this.setDefaultState(this.stateManager.getDefaultState().with(POWERED, false)); + } + + @Override + protected MapCodec getCodec() { + return CODEC; + } + + @Override + protected void appendProperties(StateManager.Builder builder) { + builder.add(POWERED); + } + + @Override + protected boolean canPlaceAt(BlockState state, WorldView world, BlockPos pos) { + BlockPos blockPos = pos.down(); + return this.canPlaceAbove(world, blockPos, world.getBlockState(blockPos)); + } + + protected boolean canPlaceAbove(WorldView world, BlockPos pos, BlockState state) { + return state.isSideSolid(world, pos, Direction.UP, SideShapeType.RIGID); + } + + @Override + protected VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { + return SHAPE; + } + + @Override + protected boolean emitsRedstonePower(BlockState state) { + return true; + } + + @Override + protected BlockRenderType getRenderType(BlockState state) { + return BlockRenderType.MODEL; + } + + @Override + public void randomDisplayTick(BlockState state, World world, BlockPos pos, Random random) { + if (state.get(POWERED)) { + double x = pos.getX() + 0.5 + (random.nextDouble() - 0.5); + double y = pos.getY() + 0.4 + (random.nextDouble() - 0.5); + double z = pos.getZ() + 0.5 + (random.nextDouble() - 0.5); + + world.addParticle(DustParticleEffect.DEFAULT, x, y, z, 0, 0, 0); + } + } + + @Override + public @Nullable BlockEntity createBlockEntity(BlockPos pos, BlockState state) { + return new ArcaneResonatorBlockEntity(pos, state); + } + + private static void updateNeighbors(World world, BlockPos pos, BlockState state) { + var block = state.getBlock(); + world.updateNeighborsAlways(pos, block); + world.updateNeighborsAlways(pos.down(), block); + } + + @Override + protected int getWeakRedstonePower(BlockState state, BlockView world, BlockPos pos, Direction direction) { + return state.get(POWERED) ? 15 : 0; + } + + @Override + public int getStrongRedstonePower(BlockState state, BlockView world, BlockPos pos, Direction direction) { + return direction == Direction.UP ? state.getWeakRedstonePower(world, pos, direction) : 0; + } + + @Override + protected boolean canPathfindThrough(BlockState state, NavigationType type) { + return false; + } + + @Override + protected boolean hasSidedTransparency(BlockState state) { + return true; + } +} diff --git a/src/main/java/io/github/reoseah/magisterium/block/IllusoryWallBlock.java b/src/main/java/io/github/reoseah/magisterium/block/IllusoryWallBlock.java index 89753de..ab7a5c2 100644 --- a/src/main/java/io/github/reoseah/magisterium/block/IllusoryWallBlock.java +++ b/src/main/java/io/github/reoseah/magisterium/block/IllusoryWallBlock.java @@ -1,6 +1,7 @@ package io.github.reoseah.magisterium.block; import com.mojang.serialization.MapCodec; +import io.github.reoseah.magisterium.block.entity.IllusoryWallBlockEntity; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.BlockWithEntity; diff --git a/src/main/java/io/github/reoseah/magisterium/block/entity/ArcaneResonatorBlockEntity.java b/src/main/java/io/github/reoseah/magisterium/block/entity/ArcaneResonatorBlockEntity.java new file mode 100644 index 0000000..4d85622 --- /dev/null +++ b/src/main/java/io/github/reoseah/magisterium/block/entity/ArcaneResonatorBlockEntity.java @@ -0,0 +1,16 @@ +package io.github.reoseah.magisterium.block.entity; + +import io.github.reoseah.magisterium.block.ArcaneResonatorBlock; +import net.fabricmc.fabric.api.object.builder.v1.block.entity.FabricBlockEntityTypeBuilder; +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.util.math.BlockPos; + +public class ArcaneResonatorBlockEntity extends BlockEntity { + public static final BlockEntityType TYPE = FabricBlockEntityTypeBuilder.create(ArcaneResonatorBlockEntity::new, ArcaneResonatorBlock.INSTANCE).build(); + + public ArcaneResonatorBlockEntity(BlockPos pos, BlockState state) { + super(TYPE, pos, state); + } +} diff --git a/src/main/java/io/github/reoseah/magisterium/block/IllusoryWallBlockEntity.java b/src/main/java/io/github/reoseah/magisterium/block/entity/IllusoryWallBlockEntity.java similarity index 95% rename from src/main/java/io/github/reoseah/magisterium/block/IllusoryWallBlockEntity.java rename to src/main/java/io/github/reoseah/magisterium/block/entity/IllusoryWallBlockEntity.java index 7a3cb82..cfea78c 100644 --- a/src/main/java/io/github/reoseah/magisterium/block/IllusoryWallBlockEntity.java +++ b/src/main/java/io/github/reoseah/magisterium/block/entity/IllusoryWallBlockEntity.java @@ -1,5 +1,6 @@ -package io.github.reoseah.magisterium.block; +package io.github.reoseah.magisterium.block.entity; +import io.github.reoseah.magisterium.block.IllusoryWallBlock; import net.fabricmc.fabric.api.object.builder.v1.block.entity.FabricBlockEntityTypeBuilder; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; diff --git a/src/main/java/io/github/reoseah/magisterium/client/render/ArcaneResonatorRenderer.java b/src/main/java/io/github/reoseah/magisterium/client/render/ArcaneResonatorRenderer.java new file mode 100644 index 0000000..6748347 --- /dev/null +++ b/src/main/java/io/github/reoseah/magisterium/client/render/ArcaneResonatorRenderer.java @@ -0,0 +1,41 @@ +package io.github.reoseah.magisterium.client.render; + +import io.github.reoseah.magisterium.block.ArcaneResonatorBlock; +import io.github.reoseah.magisterium.block.entity.ArcaneResonatorBlockEntity; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.render.OverlayTexture; +import net.minecraft.client.render.RenderLayers; +import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.block.BlockRenderManager; +import net.minecraft.client.render.block.entity.BlockEntityRenderer; +import net.minecraft.client.render.block.entity.BlockEntityRendererFactory; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.util.Identifier; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RotationAxis; +import net.minecraft.util.math.random.Random; + +public class ArcaneResonatorRenderer implements BlockEntityRenderer { + public static final Identifier CRYSTAL = Identifier.of("magisterium:block/arcane_resonator_crystal"); + public static final Identifier CRYSTAL_ON = Identifier.of("magisterium:block/arcane_resonator_crystal_on"); + + private final BlockRenderManager renderManager; + + public ArcaneResonatorRenderer(BlockEntityRendererFactory.Context ctx) { + this.renderManager = ctx.getRenderManager(); + } + + @Override + public void render(ArcaneResonatorBlockEntity entity, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) { + boolean powered = entity.getCachedState().get(ArcaneResonatorBlock.POWERED); + var model = MinecraftClient.getInstance().getBakedModelManager().getModel(powered ? CRYSTAL_ON : CRYSTAL); + var world = entity.getWorld(); + var pos = entity.getPos(); + matrices.push(); + matrices.translate(.5F, MathHelper.sin((world.getTime() + tickDelta) / 20) * .1F, .5F); + matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(world.getTime() + tickDelta)); + matrices.translate(-.5F, 0, -.5F); + this.renderManager.getModelRenderer().render(world, model, entity.getCachedState(), pos, matrices, vertexConsumers.getBuffer(RenderLayers.getMovingBlockLayer(entity.getCachedState())), false, Random.create(), 1, OverlayTexture.DEFAULT_UV); + matrices.pop(); + } +} diff --git a/src/main/java/io/github/reoseah/magisterium/block/IllusoryWallBlockEntityRenderer.java b/src/main/java/io/github/reoseah/magisterium/client/render/IllusoryWallBlockEntityRenderer.java similarity index 69% rename from src/main/java/io/github/reoseah/magisterium/block/IllusoryWallBlockEntityRenderer.java rename to src/main/java/io/github/reoseah/magisterium/client/render/IllusoryWallBlockEntityRenderer.java index 9db0c6b..5250256 100644 --- a/src/main/java/io/github/reoseah/magisterium/block/IllusoryWallBlockEntityRenderer.java +++ b/src/main/java/io/github/reoseah/magisterium/client/render/IllusoryWallBlockEntityRenderer.java @@ -1,5 +1,6 @@ -package io.github.reoseah.magisterium.block; +package io.github.reoseah.magisterium.client.render; +import io.github.reoseah.magisterium.block.entity.IllusoryWallBlockEntity; import net.minecraft.block.BlockRenderType; import net.minecraft.client.render.OverlayTexture; import net.minecraft.client.render.RenderLayers; @@ -11,10 +12,10 @@ import net.minecraft.util.math.random.Random; public class IllusoryWallBlockEntityRenderer implements BlockEntityRenderer { - private final BlockRenderManager blockRenderManager; + private final BlockRenderManager renderManager; public IllusoryWallBlockEntityRenderer(BlockEntityRendererFactory.Context ctx) { - this.blockRenderManager = ctx.getRenderManager(); + this.renderManager = ctx.getRenderManager(); } @Override @@ -23,7 +24,7 @@ public void render(IllusoryWallBlockEntity entity, float tickDelta, MatrixStack if (state.getRenderType() == BlockRenderType.MODEL) { var world = entity.getWorld(); var pos = entity.getPos(); - this.blockRenderManager.getModelRenderer().render(world, this.blockRenderManager.getModel(state), state, pos, matrices, vertexConsumers.getBuffer(RenderLayers.getMovingBlockLayer(state)), false, Random.create(), 1, OverlayTexture.DEFAULT_UV); + this.renderManager.getModelRenderer().render(world, this.renderManager.getModel(state), state, pos, matrices, vertexConsumers.getBuffer(RenderLayers.getMovingBlockLayer(state)), false, Random.create(), 1, OverlayTexture.DEFAULT_UV); } } } diff --git a/src/main/java/io/github/reoseah/magisterium/data/effect/IllusoryWallEffect.java b/src/main/java/io/github/reoseah/magisterium/data/effect/IllusoryWallEffect.java index 8cd5606..0687203 100644 --- a/src/main/java/io/github/reoseah/magisterium/data/effect/IllusoryWallEffect.java +++ b/src/main/java/io/github/reoseah/magisterium/data/effect/IllusoryWallEffect.java @@ -3,7 +3,7 @@ import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import io.github.reoseah.magisterium.block.IllusoryWallBlock; -import io.github.reoseah.magisterium.block.IllusoryWallBlockEntity; +import io.github.reoseah.magisterium.block.entity.IllusoryWallBlockEntity; import io.github.reoseah.magisterium.screen.SpellBookScreenHandler; import net.minecraft.block.BlockRenderType; import net.minecraft.block.Blocks; diff --git a/src/main/resources/assets/magisterium/blockstates/arcane_resonator.json b/src/main/resources/assets/magisterium/blockstates/arcane_resonator.json new file mode 100644 index 0000000..46bdfad --- /dev/null +++ b/src/main/resources/assets/magisterium/blockstates/arcane_resonator.json @@ -0,0 +1,10 @@ +{ + "variants": { + "powered=false": { + "model": "magisterium:block/arcane_resonator" + }, + "powered=true": { + "model": "magisterium:block/arcane_resonator_on" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/magisterium/blockstates/arcane_resonator_crystal.json b/src/main/resources/assets/magisterium/blockstates/arcane_resonator_crystal.json new file mode 100644 index 0000000..9e1a832 --- /dev/null +++ b/src/main/resources/assets/magisterium/blockstates/arcane_resonator_crystal.json @@ -0,0 +1,10 @@ +{ + "variants": { + "powered=false": { + "model": "magisterium:block/arcane_resonator_crystal" + }, + "powered=true": { + "model": "magisterium:block/arcane_resonator_crystal_on" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/magisterium/lang/en_us.json b/src/main/resources/assets/magisterium/lang/en_us.json index 2d45550..31cf398 100644 --- a/src/main/resources/assets/magisterium/lang/en_us.json +++ b/src/main/resources/assets/magisterium/lang/en_us.json @@ -4,6 +4,7 @@ "block.magisterium.glyph": "Arcane Glyph", "block.magisterium.illusory_wall": "Illusory Wall", "block.magisterium.arcane_lift": "Arcane Lift", + "block.magisterium.arcane_resonator": "Arcane Resonator", "item.magisterium.spell_book": "Spell Tome", "item.magisterium.spell_book.empty": "Empty", "item.magisterium.spell_book.pages": "%s Entries", @@ -38,8 +39,8 @@ "magisterium.page.magisterium.awaken_the_flame.heading": "awaken the flame", "magisterium.page.magisterium.awaken_the_flame.description": "Ignite nearby candles, torches and other kinds of fire bearers and receptacles.", "magisterium.page.magisterium.awaken_the_flame.spell": "Ignis dormiens, nunc surge!\n\nLumen tibi impero, flammae revelete!", - "magisterium.page.magisterium.quench_the_flame": "Quench the Flame", - "magisterium.page.magisterium.quench_the_flame.heading": "quench the flame", + "magisterium.page.magisterium.quench_the_flame": "Soothe the Flame", + "magisterium.page.magisterium.quench_the_flame.heading": "sooth the flame", "magisterium.page.magisterium.quench_the_flame.description": "Extinguish nearby candles, torches and other kinds of fire bearers and receptacles.", "magisterium.page.magisterium.quench_the_flame.spell": "Ignis vivens, nunc quiesce!\n\nLumen tibi negatur, flammae extinguete!", "magisterium.page.magisterium.glyphic_ignition": "Glyphic Ignition", diff --git a/src/main/resources/assets/magisterium/models/block/arcane_resonator.json b/src/main/resources/assets/magisterium/models/block/arcane_resonator.json new file mode 100644 index 0000000..e4e3e9c --- /dev/null +++ b/src/main/resources/assets/magisterium/models/block/arcane_resonator.json @@ -0,0 +1,22 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "magisterium:block/arcane_resonator", + "slab": "block/smooth_stone", + "top": "magisterium:block/arcane_resonator" + }, + "elements": [ + { + "from": [ 0, 0, 0 ], + "to": [ 16, 2, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } + } + } + ] +} diff --git a/src/main/resources/assets/magisterium/models/block/arcane_resonator_crystal.json b/src/main/resources/assets/magisterium/models/block/arcane_resonator_crystal.json new file mode 100644 index 0000000..12e28c5 --- /dev/null +++ b/src/main/resources/assets/magisterium/models/block/arcane_resonator_crystal.json @@ -0,0 +1,23 @@ +{ + "credit": "Made with Blockbench", + "ambientocclusion": false, + "texture_size": [32, 32], + "textures": { + "0": "magisterium:block/arcane_resonator_crystal", + "particle": "magisterium:block/arcane_resonator_crystal" + }, + "elements": [ + { + "from": [4, 5, 4], + "to": [12, 13, 12], + "faces": { + "north": {"uv": [4, 4, 8, 8], "texture": "#0"}, + "east": {"uv": [8, 4, 12, 8], "texture": "#0"}, + "south": {"uv": [12, 4, 16, 8], "texture": "#0"}, + "west": {"uv": [0, 4, 4, 8], "texture": "#0"}, + "up": {"uv": [4, 0, 8, 4], "texture": "#0"}, + "down": {"uv": [8, 0, 12, 4], "texture": "#0"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/magisterium/models/block/arcane_resonator_crystal_on.json b/src/main/resources/assets/magisterium/models/block/arcane_resonator_crystal_on.json new file mode 100644 index 0000000..d4f9d89 --- /dev/null +++ b/src/main/resources/assets/magisterium/models/block/arcane_resonator_crystal_on.json @@ -0,0 +1,23 @@ +{ + "credit": "Made with Blockbench", + "ambientocclusion": false, + "texture_size": [32, 32], + "textures": { + "0": "magisterium:block/arcane_resonator_crystal", + "particle": "magisterium:block/arcane_resonator_crystal" + }, + "elements": [ + { + "from": [4, 5, 4], + "to": [12, 13, 12], + "faces": { + "north": {"uv": [4, 12, 8, 16], "texture": "#0"}, + "east": {"uv": [8, 12, 12, 16], "texture": "#0"}, + "south": {"uv": [12, 12, 16, 16], "texture": "#0"}, + "west": {"uv": [0, 12, 4, 16], "texture": "#0"}, + "up": {"uv": [4, 8, 8, 12], "texture": "#0"}, + "down": {"uv": [8, 8, 12, 12], "texture": "#0"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/magisterium/models/block/arcane_resonator_on.json b/src/main/resources/assets/magisterium/models/block/arcane_resonator_on.json new file mode 100644 index 0000000..a972df0 --- /dev/null +++ b/src/main/resources/assets/magisterium/models/block/arcane_resonator_on.json @@ -0,0 +1,22 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "magisterium:block/arcane_resonator_on", + "slab": "block/smooth_stone", + "top": "magisterium:block/arcane_resonator_on" + }, + "elements": [ + { + "from": [ 0, 0, 0 ], + "to": [ 16, 2, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#slab", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, + "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "north" }, + "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "south" }, + "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "west" }, + "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#slab", "cullface": "east" } + } + } + ] +} diff --git a/src/main/resources/assets/magisterium/models/item/arcane_resonator.json b/src/main/resources/assets/magisterium/models/item/arcane_resonator.json new file mode 100644 index 0000000..82211ef --- /dev/null +++ b/src/main/resources/assets/magisterium/models/item/arcane_resonator.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "magisterium:item/arcane_resonator" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/magisterium/textures/block/arcane_resonator.png b/src/main/resources/assets/magisterium/textures/block/arcane_resonator.png new file mode 100644 index 0000000..e54387a Binary files /dev/null and b/src/main/resources/assets/magisterium/textures/block/arcane_resonator.png differ diff --git a/src/main/resources/assets/magisterium/textures/block/arcane_resonator_crystal.png b/src/main/resources/assets/magisterium/textures/block/arcane_resonator_crystal.png new file mode 100644 index 0000000..c742c14 Binary files /dev/null and b/src/main/resources/assets/magisterium/textures/block/arcane_resonator_crystal.png differ diff --git a/src/main/resources/assets/magisterium/textures/block/arcane_resonator_on.png b/src/main/resources/assets/magisterium/textures/block/arcane_resonator_on.png new file mode 100644 index 0000000..a844d92 Binary files /dev/null and b/src/main/resources/assets/magisterium/textures/block/arcane_resonator_on.png differ diff --git a/src/main/resources/assets/magisterium/textures/item/arcane_resonator.png b/src/main/resources/assets/magisterium/textures/item/arcane_resonator.png new file mode 100644 index 0000000..fbe71d6 Binary files /dev/null and b/src/main/resources/assets/magisterium/textures/item/arcane_resonator.png differ diff --git a/src/main/resources/assets/magisterium/textures/item/blaze_rune.png b/src/main/resources/assets/magisterium/textures/item/blaze_rune.png index d6e21b5..2a4ab0a 100644 Binary files a/src/main/resources/assets/magisterium/textures/item/blaze_rune.png and b/src/main/resources/assets/magisterium/textures/item/blaze_rune.png differ diff --git a/src/main/resources/assets/magisterium/textures/item/placeholder/fire.png b/src/main/resources/assets/magisterium/textures/item/placeholder/fire.png new file mode 100644 index 0000000..f7c00c3 Binary files /dev/null and b/src/main/resources/assets/magisterium/textures/item/placeholder/fire.png differ diff --git a/src/main/resources/assets/magisterium/textures/item/placeholder/wind.png b/src/main/resources/assets/magisterium/textures/item/placeholder/wind.png new file mode 100644 index 0000000..6d3d153 Binary files /dev/null and b/src/main/resources/assets/magisterium/textures/item/placeholder/wind.png differ diff --git a/src/main/resources/assets/magisterium/textures/item/wind_rune.png b/src/main/resources/assets/magisterium/textures/item/wind_rune.png index 073ec50..a49fced 100644 Binary files a/src/main/resources/assets/magisterium/textures/item/wind_rune.png and b/src/main/resources/assets/magisterium/textures/item/wind_rune.png differ diff --git a/src/main/resources/data/magisterium/loot_table/blocks/arcane_resonator.json b/src/main/resources/data/magisterium/loot_table/blocks/arcane_resonator.json new file mode 100644 index 0000000..88f35c0 --- /dev/null +++ b/src/main/resources/data/magisterium/loot_table/blocks/arcane_resonator.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "magisterium:arcane_resonator" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "magisterium:blocks/arcane_resonator" +} \ No newline at end of file diff --git a/src/main/resources/data/magisterium/magisterium/pages/cold_snap.json b/src/main/resources/data/magisterium/magisterium/pages/cold_snap.json index 35830a4..3641d77 100644 --- a/src/main/resources/data/magisterium/magisterium/pages/cold_snap.json +++ b/src/main/resources/data/magisterium/magisterium/pages/cold_snap.json @@ -44,19 +44,19 @@ "x": 33, "y": 0, "ingredient": "#magisterium:cold_snap_ingredients", - "background": "magisterium:item/placeholder/question_mark" + "background": "magisterium:item/placeholder/wind" }, { "x": 51, "y": 0, "ingredient": "#magisterium:cold_snap_ingredients", - "background": "magisterium:item/placeholder/question_mark" + "background": "magisterium:item/placeholder/wind" }, { "x": 42, "y": 18, "ingredient": "#magisterium:cold_snap_ingredients", - "background": "magisterium:item/placeholder/question_mark" + "background": "magisterium:item/placeholder/wind" } ] }, diff --git a/src/main/resources/data/magisterium/magisterium/pages/conflagrate.json b/src/main/resources/data/magisterium/magisterium/pages/conflagrate.json index 92a68a2..0f2fc9d 100644 --- a/src/main/resources/data/magisterium/magisterium/pages/conflagrate.json +++ b/src/main/resources/data/magisterium/magisterium/pages/conflagrate.json @@ -44,19 +44,20 @@ "x": 42, "y": 0, "ingredient": "#magisterium:conflagrate_ingredients", - "background": "magisterium:item/placeholder/question_mark" + "background": "magisterium:item/placeholder/fire" }, { "x": 33, "y": 18, "ingredient": "#magisterium:conflagrate_ingredients", - "background": "magisterium:item/placeholder/question_mark" + "background": "magisterium:item/placeholder/fire" + }, { "x": 51, "y": 18, "ingredient": "#magisterium:conflagrate_ingredients", - "background": "magisterium:item/placeholder/question_mark" + "background": "magisterium:item/placeholder/fire" } ] }, diff --git a/unused_assets/Sprite-0001.png b/unused_assets/Sprite-0001.png new file mode 100644 index 0000000..0d7b40b Binary files /dev/null and b/unused_assets/Sprite-0001.png differ diff --git a/unused_assets/jukebox_top.png b/unused_assets/jukebox_top.png new file mode 100644 index 0000000..7a42cec Binary files /dev/null and b/unused_assets/jukebox_top.png differ