Skip to content

Commit d5ea43a

Browse files
committed
start making feature
1 parent faf0fdd commit d5ea43a

5 files changed

Lines changed: 82 additions & 15 deletions

File tree

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

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package fn10.musicexpansion;
22

3+
import fn10.musicexpansion.reg.*;
34
import net.fabricmc.api.ModInitializer;
45
import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback;
56
import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup;
@@ -20,12 +21,6 @@
2021

2122
import fn10.musicexpansion.music.network.CDTrackPlayPayloadS2C;
2223
import fn10.musicexpansion.music.network.payload.CDTrackStopPayloadS2C;
23-
import fn10.musicexpansion.reg.MusicExpandedAudio;
24-
import fn10.musicexpansion.reg.MusicExpandedBlockEntitys;
25-
import fn10.musicexpansion.reg.MusicExpandedBlocks;
26-
import fn10.musicexpansion.reg.MusicExpandedItemComponents;
27-
import fn10.musicexpansion.reg.MusicExpandedItems;
28-
import fn10.musicexpansion.reg.MusicExpandedMenus;
2924

3025
public class MusicExpanded implements ModInitializer {
3126
public static final String MOD_ID = "compactdiscs";

src/main/java/fn10/musicexpansion/MusicExpandedCommands.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package fn10.musicexpansion;
22

3+
import java.util.ArrayList;
34
import java.util.List;
45

56
import com.mojang.brigadier.context.CommandContext;
@@ -12,6 +13,8 @@
1213
import net.minecraft.world.entity.player.Inventory;
1314
import net.minecraft.world.item.ItemStack;
1415

16+
import static fn10.musicexpansion.items.CompactDiscItem.makeDiscStackWithTracks;
17+
1518
public class MusicExpandedCommands {
1619

1720
public static int giveExampleDiscs(CommandContext<CommandSourceStack> context) {
@@ -23,9 +26,9 @@ public static int giveExampleDiscs(CommandContext<CommandSourceStack> context) {
2326
CDTrack song3 = CDTracks.C418_CAT;
2427
//CDTrack song4 = new CDSong("dog");
2528

26-
ItemStack exampleDisc1 = makeExampleDisc(CDTracks.getIdFromTrack(song1));
27-
ItemStack exampleDisc2 = makeExampleDisc(CDTracks.getIdFromTrack(song2));
28-
ItemStack exampleDisc3 = makeExampleDisc(CDTracks.getIdFromTrack(song3));
29+
ItemStack exampleDisc1 = makeDiscStackWithTracks(song1);
30+
ItemStack exampleDisc2 = makeDiscStackWithTracks(song2);
31+
ItemStack exampleDisc3 = makeDiscStackWithTracks(song3);
2932
exampleDisc3.set(MusicExpandedItemComponents.CD_WRITEABLE, true);
3033

3134
inventory.add(exampleDisc1);
@@ -38,10 +41,4 @@ public static int giveExampleDiscs(CommandContext<CommandSourceStack> context) {
3841
}
3942
}
4043

41-
protected static ItemStack makeExampleDisc(String... songs) {
42-
ItemStack stack = new ItemStack(MusicExpandedItems.CD);
43-
stack.set(MusicExpandedItemComponents.CD_SONGS, List.of(songs));
44-
return stack;
45-
}
46-
4744
}

src/main/java/fn10/musicexpansion/blocks/DiscMonolithBlock.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import net.minecraft.world.level.Level;
1616
import net.minecraft.world.level.block.BaseEntityBlock;
1717
import net.minecraft.world.level.block.Block;
18+
import net.minecraft.world.level.block.Blocks;
1819
import net.minecraft.world.level.block.entity.BlockEntity;
1920
import net.minecraft.world.level.block.entity.BlockEntityTicker;
2021
import net.minecraft.world.level.block.entity.BlockEntityType;
@@ -34,6 +35,9 @@ public class DiscMonolithBlock extends RotatedBaseEntityBlock {
3435

3536
public static final BooleanProperty LOADED = BooleanProperty.create("loaded");
3637

38+
public DiscMonolithBlock() {
39+
this(Properties.ofFullCopy(Blocks.COBBLESTONE));
40+
}
3741
public DiscMonolithBlock(Properties properties) {
3842
super(properties.noOcclusion());
3943
registerDefaultState(
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package fn10.musicexpansion.generation.features;
2+
3+
import com.mojang.serialization.Codec;
4+
import fn10.musicexpansion.blocks.DiscMonolithBlock;
5+
import fn10.musicexpansion.items.CompactDiscItem;
6+
import fn10.musicexpansion.music.CDTracks;
7+
import net.minecraft.core.BlockPos;
8+
import net.minecraft.util.RandomSource;
9+
import net.minecraft.world.item.ItemStack;
10+
import net.minecraft.world.level.WorldGenLevel;
11+
import net.minecraft.world.level.block.state.BlockState;
12+
import net.minecraft.world.level.levelgen.feature.Feature;
13+
import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext;
14+
import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration;
15+
16+
import java.util.ArrayList;
17+
import java.util.List;
18+
19+
public class MonolithFeature extends Feature<NoneFeatureConfiguration> {
20+
21+
public static final ArrayList<ItemStack> randomDiscs = new ArrayList<>(List.of(
22+
CompactDiscItem.makeDiscStackWithTracks(CDTracks.C418_13),
23+
CompactDiscItem.makeDiscStackWithTracks(CDTracks.C418_11),
24+
CompactDiscItem.makeDiscStackWithTracks(CDTracks.C418_CAT)
25+
));
26+
27+
public MonolithFeature(Codec<NoneFeatureConfiguration> codec) {
28+
super(codec);
29+
}
30+
31+
@Override
32+
public boolean place(FeaturePlaceContext<NoneFeatureConfiguration> featurePlaceContext) {
33+
try {
34+
BlockPos origin = featurePlaceContext.origin();
35+
WorldGenLevel level = featurePlaceContext.level();
36+
RandomSource random = featurePlaceContext.random();
37+
38+
int y = origin.getY();
39+
//y must be between -10 and 40
40+
if (!(y < 40 && y > -10)) return false;
41+
42+
//must be at least 3 air above
43+
for (int i = 0; i < 3; i++) {
44+
BlockPos pos = origin.atY(y + i);
45+
BlockState block = level.getBlockState(pos);
46+
if (block.isAir()) return false;
47+
}
48+
49+
DiscMonolithBlock monlith = new DiscMonolithBlock();
50+
ItemStack disc = randomDiscs.get(random.nextInt(randomDiscs.size()));
51+
BlockState state = monlith.defaultBlockState();
52+
53+
level.setBlock(origin, state, 0);
54+
monlith.useItemOn(disc, state, level.getLevel(), origin, null, null, null);
55+
56+
return true;
57+
} catch (Exception e) {
58+
return false;
59+
}
60+
}
61+
}

src/main/java/fn10/musicexpansion/items/CompactDiscItem.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,4 +65,14 @@ public static List<Component> getTooltip(TooltipContext context, ItemStack stack
6565
}
6666
return list;
6767
}
68+
69+
public static ItemStack makeDiscStackWithTracks(CDTrack... songs) {
70+
ArrayList<String> ids = new ArrayList<>();
71+
for (CDTrack song : songs) {
72+
ids.add(CDTracks.getIdFromTrack(song));
73+
}
74+
ItemStack stack = new ItemStack(MusicExpandedItems.CD);
75+
stack.set(MusicExpandedItemComponents.CD_SONGS, ids);
76+
return stack;
77+
}
6878
}

0 commit comments

Comments
 (0)