Skip to content

Commit 511a458

Browse files
committed
add menu and screen for disc burner, with 1 slot so far for the inserted disc
1 parent 866a896 commit 511a458

File tree

17 files changed

+317
-38
lines changed

17 files changed

+317
-38
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
package fn10.musicexpansion;
22

3+
import fn10.musicexpansion.menu.MusicExpandedMenus;
34
import fn10.musicexpansion.reg.MusicExpandedBlocks;
5+
import fn10.musicexpansion.screens.DiscBurnerScreenConstructor;
46
import net.fabricmc.api.ClientModInitializer;
57
import net.fabricmc.fabric.api.client.rendering.v1.BlockRenderLayerMap;
8+
import net.minecraft.client.gui.screens.MenuScreens;
69
import net.minecraft.client.renderer.chunk.ChunkSectionLayer;
710

811
public class MusicExpandedClient implements ClientModInitializer {
912
@Override
1013
public void onInitializeClient() {
14+
MenuScreens.register(MusicExpandedMenus.DISC_BURNER_MENU, new DiscBurnerScreenConstructor());
1115
BlockRenderLayerMap.putBlock(MusicExpandedBlocks.DISC_BURNER_BLOCK, ChunkSectionLayer.TRANSLUCENT);
1216
}
1317
}

src/client/java/fn10/musicexpansion/providers/MusicExpandedModelProvider.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
package fn10.musicexpansion.providers;
22

33
import fn10.musicexpansion.MusicExpanded;
4+
import fn10.musicexpansion.blocks.DiscBurnerBlock;
45
import fn10.musicexpansion.reg.MusicExpandedBlocks;
56
import fn10.musicexpansion.reg.MusicExpandedItems;
67
import net.fabricmc.fabric.api.client.datagen.v1.provider.FabricModelProvider;
78
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
89
import net.minecraft.client.data.models.BlockModelGenerators;
910
import net.minecraft.client.data.models.ItemModelGenerators;
11+
import net.minecraft.client.data.models.MultiVariant;
12+
import net.minecraft.client.data.models.blockstates.MultiVariantGenerator;
13+
import net.minecraft.client.data.models.blockstates.PropertyDispatch;
1014
import net.minecraft.client.data.models.model.ModelTemplates;
15+
import net.minecraft.core.Direction;
1116
import net.minecraft.resources.Identifier;
1217

1318
public class MusicExpandedModelProvider extends FabricModelProvider {
@@ -18,11 +23,19 @@ public MusicExpandedModelProvider(FabricDataOutput output) {
1823

1924
@Override
2025
public void generateBlockStateModels(BlockModelGenerators blockStateModelGenerator) {
21-
blockStateModelGenerator.blockStateOutput.accept(
22-
BlockModelGenerators.createSimpleBlock(MusicExpandedBlocks.DISC_BURNER_BLOCK, BlockModelGenerators
23-
.plainVariant(Identifier.fromNamespaceAndPath(MusicExpanded.MOD_ID, "block/disc_burner"))));
26+
// Disc Burner
27+
MultiVariant basic = BlockModelGenerators
28+
.plainVariant(Identifier.fromNamespaceAndPath(MusicExpanded.MOD_ID, "block/disc_burner"));
29+
blockStateModelGenerator.blockStateOutput
30+
.accept(MultiVariantGenerator.dispatch(MusicExpandedBlocks.DISC_BURNER_BLOCK)
31+
.with(PropertyDispatch.initial(DiscBurnerBlock.FACING)
32+
.select(Direction.NORTH, basic)
33+
.select(Direction.EAST, basic.with(BlockModelGenerators.Y_ROT_90))
34+
.select(Direction.SOUTH, basic.with(BlockModelGenerators.Y_ROT_180))
35+
.select(Direction.WEST, basic.with(BlockModelGenerators.Y_ROT_270))));
2436
blockStateModelGenerator.registerSimpleItemModel(MusicExpandedBlocks.DISC_BURNER_BLOCK,
2537
Identifier.fromNamespaceAndPath(MusicExpanded.MOD_ID, "block/disc_burner"));
38+
2639
}
2740

2841
@Override
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package fn10.musicexpansion.screens;
2+
3+
import fn10.musicexpansion.MusicExpanded;
4+
import fn10.musicexpansion.menu.DiscBurnerMenu;
5+
import net.minecraft.client.gui.GuiGraphics;
6+
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
7+
import net.minecraft.client.renderer.RenderPipelines;
8+
import net.minecraft.network.chat.Component;
9+
import net.minecraft.resources.Identifier;
10+
import net.minecraft.world.entity.player.Inventory;
11+
12+
public class DiscBurnerScreen extends AbstractContainerScreen<DiscBurnerMenu> {
13+
14+
private final Identifier BG = Identifier.fromNamespaceAndPath(MusicExpanded.MOD_ID,
15+
"textures/gui/container/disc_burner.png");
16+
private final int bgWidth = 176;
17+
private final int bgHeight = 161;
18+
19+
public DiscBurnerScreen(DiscBurnerMenu abstractContainerMenu, Inventory inventory, Component component) {
20+
super(abstractContainerMenu, inventory, component);
21+
}
22+
23+
@Override
24+
protected void renderBg(GuiGraphics guiGraphics, float f, int i, int j) {
25+
int bgX = (width - bgWidth) / 2;
26+
int bgY = (height - bgHeight) / 2;
27+
28+
guiGraphics.blit(RenderPipelines.GUI_TEXTURED, BG, bgX, bgY, 0, 0, bgWidth, bgHeight, 256, 256);
29+
}
30+
31+
@Override
32+
public void render(GuiGraphics guiGraphics, int i, int j, float f) {
33+
super.render(guiGraphics, i, j, f);
34+
this.renderTooltip(guiGraphics, i, j);
35+
}
36+
37+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package fn10.musicexpansion.screens;
2+
3+
import fn10.musicexpansion.menu.DiscBurnerMenu;
4+
import net.minecraft.client.gui.screens.MenuScreens.ScreenConstructor;
5+
import net.minecraft.network.chat.Component;
6+
import net.minecraft.world.entity.player.Inventory;
7+
8+
public class DiscBurnerScreenConstructor implements ScreenConstructor<DiscBurnerMenu, DiscBurnerScreen> {
9+
10+
@Override
11+
public DiscBurnerScreen create(DiscBurnerMenu abstractContainerMenu, Inventory inventory, Component component) {
12+
return new DiscBurnerScreen(abstractContainerMenu, inventory, component);
13+
}
14+
15+
}

src/main/generated/.cache/2fbf86ff4149eee6b9e08a0f457798e7a5fdf460

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// 1.21.11 -999999999-01-01T00:00:00 Compact Discs/Model Definitions
2-
699f99c58773c26d6800b4fa48b9fa3283131bbe assets/compactdiscs/blockstates/disc_burner.json
2+
3641b499761bd54e1de7df9244201ef9f224b5de assets/compactdiscs/blockstates/disc_burner.json
33
8992f88c013726b4bf1b9ff417bf12e3b61cd436 assets/compactdiscs/items/compact_disc.json
44
d576ad8cd6569e6aac06a71159d22196e667d55f assets/compactdiscs/items/disc_burner.json
55
23ab07262c413c1fa3d89e78ba9cd3fd4125b9cd assets/compactdiscs/items/glass_dust.json
Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,19 @@
11
{
22
"variants": {
3-
"": {
3+
"facing=east": {
4+
"model": "compactdiscs:block/disc_burner",
5+
"y": 90
6+
},
7+
"facing=north": {
48
"model": "compactdiscs:block/disc_burner"
9+
},
10+
"facing=south": {
11+
"model": "compactdiscs:block/disc_burner",
12+
"y": 180
13+
},
14+
"facing=west": {
15+
"model": "compactdiscs:block/disc_burner",
16+
"y": 270
517
}
618
}
719
}

src/main/java/fn10/musicexpansion/MusicExpanded.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import org.slf4j.Logger;
1515
import org.slf4j.LoggerFactory;
1616

17+
import fn10.musicexpansion.menu.MusicExpandedMenus;
1718
import fn10.musicexpansion.reg.MusicExpandedBlockEntitys;
1819
import fn10.musicexpansion.reg.MusicExpandedBlocks;
1920
import fn10.musicexpansion.reg.MusicExpandedItems;
@@ -46,5 +47,6 @@ public void onInitialize() {
4647
MusicExpandedItems.init();
4748
MusicExpandedBlockEntitys.init();
4849
MusicExpandedBlocks.init();
50+
MusicExpandedMenus.init();
4951
}
5052
}
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
package fn10.musicexpansion.blocks;
2+
3+
import java.util.Optional;
4+
5+
import org.jspecify.annotations.Nullable;
6+
7+
import com.mojang.serialization.MapCodec;
8+
9+
import fn10.musicexpansion.MusicExpanded;
10+
import fn10.musicexpansion.blocks.entity.DiscBurnerBlockEntity;
11+
import fn10.musicexpansion.reg.MusicExpandedBlockEntitys;
12+
import fn10.musicexpansion.reg.MusicExpandedItems;
13+
import net.minecraft.core.BlockPos;
14+
import net.minecraft.core.Direction;
15+
import net.minecraft.world.InteractionHand;
16+
import net.minecraft.world.InteractionResult;
17+
import net.minecraft.world.MenuProvider;
18+
import net.minecraft.world.entity.player.Player;
19+
import net.minecraft.world.item.ItemStack;
20+
import net.minecraft.world.item.context.BlockPlaceContext;
21+
import net.minecraft.world.level.BlockGetter;
22+
import net.minecraft.world.level.Level;
23+
import net.minecraft.world.level.block.BaseEntityBlock;
24+
import net.minecraft.world.level.block.Block;
25+
import net.minecraft.world.level.block.Mirror;
26+
import net.minecraft.world.level.block.Rotation;
27+
import net.minecraft.world.level.block.entity.BlockEntity;
28+
import net.minecraft.world.level.block.state.BlockState;
29+
import net.minecraft.world.level.block.state.StateDefinition;
30+
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
31+
import net.minecraft.world.level.block.state.properties.EnumProperty;
32+
import net.minecraft.world.phys.BlockHitResult;
33+
import net.minecraft.world.phys.shapes.CollisionContext;
34+
import net.minecraft.world.phys.shapes.VoxelShape;
35+
36+
public class DiscBurnerBlock extends BaseEntityBlock {
37+
38+
public static final EnumProperty<Direction> FACING = BlockStateProperties.HORIZONTAL_FACING;
39+
40+
public DiscBurnerBlock(Properties properties) {
41+
super(properties.noOcclusion());
42+
registerDefaultState(defaultBlockState().setValue(FACING, Direction.NORTH));
43+
}
44+
45+
@Override
46+
public @Nullable BlockEntity newBlockEntity(BlockPos arg0, BlockState arg1) {
47+
return new DiscBurnerBlockEntity(arg0, arg1);
48+
}
49+
50+
@Override
51+
protected MapCodec<? extends BaseEntityBlock> codec() {
52+
return simpleCodec(DiscBurnerBlock::new);
53+
}
54+
55+
@Override
56+
protected VoxelShape getCollisionShape(BlockState blockState, BlockGetter blockGetter, BlockPos blockPos,
57+
CollisionContext collisionContext) {
58+
return Block.box(0d, 0d, 0d, 16d, 6d, 16d);
59+
}
60+
61+
@Override
62+
protected VoxelShape getShape(BlockState blockState, BlockGetter blockGetter, BlockPos blockPos,
63+
CollisionContext collisionContext) {
64+
return getCollisionShape(blockState, blockGetter, blockPos, collisionContext);
65+
}
66+
67+
protected BlockState rotate(BlockState blockState, Rotation rotation) {
68+
return (BlockState) blockState.setValue(FACING, rotation.rotate((Direction) blockState.getValue(FACING)));
69+
}
70+
71+
protected BlockState mirror(BlockState blockState, Mirror mirror) {
72+
return blockState.rotate(mirror.getRotation((Direction) blockState.getValue(FACING)));
73+
}
74+
75+
@Override
76+
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
77+
builder.add(FACING);
78+
}
79+
80+
public @Nullable BlockState getStateForPlacement(BlockPlaceContext blockPlaceContext) {
81+
return this.defaultBlockState().setValue(FACING, blockPlaceContext.getHorizontalDirection().getOpposite());
82+
}
83+
84+
@Override
85+
public InteractionResult useWithoutItem(BlockState blockState, Level level, BlockPos blockPos, Player player,
86+
BlockHitResult blockHitResult) {
87+
MenuProvider menuProvider = getMenuProvider(blockState, level, blockPos);
88+
player.openMenu(menuProvider);
89+
return InteractionResult.SUCCESS;
90+
}
91+
92+
@Override
93+
public InteractionResult useItemOn(ItemStack itemStack, BlockState blockState, Level level, BlockPos blockPos,
94+
Player player, InteractionHand interactionHand, BlockHitResult blockHitResult) {
95+
Optional<DiscBurnerBlockEntity> entity = level.getBlockEntity(blockPos,
96+
MusicExpandedBlockEntitys.DISC_BURNER_BENTITY);
97+
if (!entity.isPresent())
98+
return InteractionResult.FAIL;
99+
DiscBurnerBlockEntity realEntity = entity.get();
100+
if (itemStack.is(MusicExpandedItems.CD) && realEntity.inventory.get(0).isEmpty()) {
101+
realEntity.inventory.set(0, itemStack.consumeAndReturn(1, player));
102+
return InteractionResult.CONSUME;
103+
} else {
104+
return useWithoutItem(blockState, level, blockPos, player, blockHitResult);
105+
}
106+
}
107+
}

src/main/java/fn10/musicexpansion/blocks/entity/DiscBurnerBlock.java

Lines changed: 0 additions & 28 deletions
This file was deleted.
Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,53 @@
11
package fn10.musicexpansion.blocks.entity;
22

3+
import fn10.musicexpansion.menu.DiscBurnerMenu;
34
import fn10.musicexpansion.reg.MusicExpandedBlockEntitys;
45
import net.minecraft.core.BlockPos;
5-
import net.minecraft.world.level.block.entity.BlockEntity;
6+
import net.minecraft.core.NonNullList;
7+
import net.minecraft.network.chat.Component;
8+
import net.minecraft.world.entity.player.Inventory;
9+
import net.minecraft.world.inventory.AbstractContainerMenu;
10+
import net.minecraft.world.item.ItemStack;
11+
import net.minecraft.world.level.block.entity.BaseContainerBlockEntity;
612
import net.minecraft.world.level.block.state.BlockState;
713

8-
public class DiscBurnerBlockEntity extends BlockEntity {
14+
public class DiscBurnerBlockEntity extends BaseContainerBlockEntity {
15+
16+
public NonNullList<ItemStack> inventory;
917

1018
public DiscBurnerBlockEntity(BlockPos blockPos, BlockState blockState) {
1119
super(MusicExpandedBlockEntitys.DISC_BURNER_BENTITY, blockPos, blockState);
20+
inventory = NonNullList.withSize(3, ItemStack.EMPTY);
21+
}
22+
23+
@Override
24+
public Component getDisplayName() {
25+
return Component.literal("test");
26+
}
27+
28+
@Override
29+
public int getContainerSize() {
30+
return inventory.size();
31+
}
32+
33+
@Override
34+
protected AbstractContainerMenu createMenu(int i, Inventory inventory) {
35+
return new DiscBurnerMenu(inventory, this, i);
36+
37+
}
38+
39+
@Override
40+
protected Component getDefaultName() {
41+
return getDisplayName();
42+
}
43+
44+
@Override
45+
protected NonNullList<ItemStack> getItems() {
46+
return inventory;
47+
}
48+
49+
@Override
50+
protected void setItems(NonNullList<ItemStack> nonNullList) {
51+
inventory = nonNullList;
1252
}
1353
}

0 commit comments

Comments
 (0)