2021-09-02 19:11:51 +02:00
|
|
|
package com.minelittlepony.unicopia.block;
|
|
|
|
|
2022-09-25 01:55:29 +02:00
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
|
|
|
|
2022-08-27 15:14:00 +02:00
|
|
|
import com.minelittlepony.unicopia.Unicopia;
|
2022-09-25 00:14:29 +02:00
|
|
|
import com.minelittlepony.unicopia.item.UItems;
|
2022-12-19 00:12:49 +01:00
|
|
|
import com.minelittlepony.unicopia.item.group.ItemGroupRegistry;
|
2023-05-23 10:48:29 +02:00
|
|
|
import com.minelittlepony.unicopia.server.world.UTreeGen;
|
2022-08-27 15:14:00 +02:00
|
|
|
|
2021-09-02 19:11:51 +02:00
|
|
|
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
|
|
|
|
import net.fabricmc.fabric.api.object.builder.v1.block.FabricMaterialBuilder;
|
2023-05-23 19:49:56 +02:00
|
|
|
import net.fabricmc.fabric.api.registry.FlammableBlockRegistry;
|
2022-09-25 00:14:29 +02:00
|
|
|
import net.fabricmc.fabric.api.registry.StrippableBlockRegistry;
|
2022-09-23 23:25:00 +02:00
|
|
|
import net.minecraft.block.*;
|
2023-05-23 19:49:56 +02:00
|
|
|
import net.minecraft.block.AbstractBlock.Settings;
|
2022-09-23 23:25:00 +02:00
|
|
|
import net.minecraft.entity.EntityType;
|
2022-09-25 00:14:29 +02:00
|
|
|
import net.minecraft.item.*;
|
2021-09-02 19:11:51 +02:00
|
|
|
import net.minecraft.sound.BlockSoundGroup;
|
2022-09-25 00:14:29 +02:00
|
|
|
import net.minecraft.util.Identifier;
|
2022-09-23 23:25:00 +02:00
|
|
|
import net.minecraft.util.math.BlockPos;
|
|
|
|
import net.minecraft.util.math.Direction;
|
2023-05-23 19:49:56 +02:00
|
|
|
import net.minecraft.util.shape.VoxelShapes;
|
2022-12-18 22:07:24 +01:00
|
|
|
import net.minecraft.registry.Registry;
|
|
|
|
import net.minecraft.registry.Registries;
|
2022-09-23 23:25:00 +02:00
|
|
|
import net.minecraft.world.BlockView;
|
2021-09-02 19:11:51 +02:00
|
|
|
|
|
|
|
public interface UBlocks {
|
2022-09-25 01:55:29 +02:00
|
|
|
List<Block> TRANSLUCENT_BLOCKS = new ArrayList<>();
|
|
|
|
|
2021-09-02 19:11:51 +02:00
|
|
|
Block ROCKS = register("rocks", new RockCropBlock(FabricBlockSettings.of(
|
|
|
|
new FabricMaterialBuilder(MapColor.STONE_GRAY).allowsMovement().lightPassesThrough().notSolid().destroyedByPiston().build()
|
|
|
|
)
|
2021-09-03 00:47:48 +02:00
|
|
|
.requiresTool()
|
2021-09-02 19:11:51 +02:00
|
|
|
.ticksRandomly()
|
|
|
|
.strength(2)
|
|
|
|
.sounds(BlockSoundGroup.STONE)));
|
|
|
|
|
2021-12-31 13:54:51 +01:00
|
|
|
Block FROSTED_OBSIDIAN = register("frosted_obsidian", new FrostedObsidianBlock(FabricBlockSettings.copy(Blocks.OBSIDIAN).ticksRandomly()));
|
|
|
|
|
2022-12-19 00:12:49 +01:00
|
|
|
Block ZAP_LOG = register("zap_log", new ZapAppleLogBlock(Blocks.OAK_LOG, MapColor.GRAY, MapColor.DEEPSLATE_GRAY), ItemGroups.BUILDING_BLOCKS);
|
|
|
|
Block ZAP_WOOD = register("zap_wood", new ZapAppleLogBlock(Blocks.OAK_WOOD, MapColor.DEEPSLATE_GRAY, MapColor.DEEPSLATE_GRAY), ItemGroups.BUILDING_BLOCKS);
|
2022-09-25 00:14:29 +02:00
|
|
|
|
2022-12-19 00:12:49 +01:00
|
|
|
Block STRIPPED_ZAP_LOG = register("stripped_zap_log", new ZapAppleLogBlock(Blocks.STRIPPED_OAK_LOG, MapColor.LIGHT_GRAY, MapColor.GRAY), ItemGroups.BUILDING_BLOCKS);
|
|
|
|
Block STRIPPED_ZAP_WOOD = register("stripped_zap_wood", new ZapAppleLogBlock(Blocks.STRIPPED_OAK_WOOD, MapColor.GRAY, MapColor.GRAY), ItemGroups.BUILDING_BLOCKS);
|
2022-09-23 23:25:00 +02:00
|
|
|
|
2022-12-19 00:12:49 +01:00
|
|
|
Block ZAP_LEAVES = register("zap_leaves", new ZapAppleLeavesBlock(), ItemGroups.NATURAL);
|
2022-09-25 15:39:07 +02:00
|
|
|
Block ZAP_BULB = register("zap_bulb", new FruitBlock(FabricBlockSettings.of(Material.GOURD, MapColor.GRAY).strength(500, 1200).sounds(BlockSoundGroup.AZALEA_LEAVES), Direction.DOWN, ZAP_LEAVES, FruitBlock.DEFAULT_SHAPE, false));
|
|
|
|
Block ZAP_APPLE = register("zap_apple", new FruitBlock(FabricBlockSettings.of(Material.GOURD, MapColor.GRAY).sounds(BlockSoundGroup.AZALEA_LEAVES), Direction.DOWN, ZAP_LEAVES, FruitBlock.DEFAULT_SHAPE, false));
|
2022-09-23 23:25:00 +02:00
|
|
|
|
2023-05-23 19:49:56 +02:00
|
|
|
Block PALM_LOG = register("palm_log", createLogBlock(MapColor.OFF_WHITE, MapColor.SPRUCE_BROWN), ItemGroups.BUILDING_BLOCKS);
|
|
|
|
Block PALM_WOOD = register("palm_wood", createWoodBlock(MapColor.OFF_WHITE), ItemGroups.BUILDING_BLOCKS);
|
|
|
|
Block PALM_PLANKS = register("palm_planks", new Block(Settings.of(Material.WOOD, MapColor.OFF_WHITE).strength(2, 3).sounds(BlockSoundGroup.WOOD)), ItemGroups.BUILDING_BLOCKS);
|
|
|
|
|
|
|
|
Block STRIPPED_PALM_LOG = register("stripped_palm_log", createLogBlock(MapColor.OFF_WHITE, MapColor.OFF_WHITE), ItemGroups.BUILDING_BLOCKS);
|
|
|
|
Block STRIPPED_PALM_WOOD = register("stripped_palm_wood", createWoodBlock(MapColor.OFF_WHITE), ItemGroups.BUILDING_BLOCKS);
|
|
|
|
|
|
|
|
Block PALM_LEAVES = register("palm_leaves", createLeavesBlock(BlockSoundGroup.GRASS), ItemGroups.BUILDING_BLOCKS);
|
|
|
|
|
|
|
|
Block BANANAS = register("bananas", new FruitBlock(FabricBlockSettings.of(Material.GOURD, MapColor.YELLOW).sounds(BlockSoundGroup.WOOD).hardness(3), Direction.DOWN, PALM_LEAVES, VoxelShapes.fullCube()));
|
|
|
|
|
2022-12-19 00:12:49 +01:00
|
|
|
Block WEATHER_VANE = register("weather_vane", new WeatherVaneBlock(FabricBlockSettings.of(Material.METAL, MapColor.BLACK).requiresTool().strength(3.0f, 6.0f).sounds(BlockSoundGroup.METAL).nonOpaque()), ItemGroups.TOOLS);
|
2022-10-12 15:46:15 +02:00
|
|
|
|
2022-09-25 00:14:29 +02:00
|
|
|
Block GREEN_APPLE_LEAVES = register("green_apple_leaves", new FruitBearingBlock(FabricBlockSettings.copy(Blocks.OAK_LEAVES),
|
|
|
|
0xE5FFFF88,
|
|
|
|
() -> UBlocks.GREEN_APPLE,
|
|
|
|
() -> UItems.GREEN_APPLE.getDefaultStack()
|
2022-12-19 00:12:49 +01:00
|
|
|
), ItemGroups.NATURAL);
|
2022-09-25 00:14:29 +02:00
|
|
|
Block GREEN_APPLE = register("green_apple", new FruitBlock(FabricBlockSettings.of(Material.GOURD, MapColor.GREEN).sounds(BlockSoundGroup.WOOD), Direction.DOWN, GREEN_APPLE_LEAVES, FruitBlock.DEFAULT_SHAPE));
|
2022-09-25 01:55:29 +02:00
|
|
|
Block GREEN_APPLE_SPROUT = register("green_apple_sprout", new SproutBlock(0xE5FFFF88, () -> UItems.GREEN_APPLE_SEEDS, () -> UTreeGen.GREEN_APPLE_TREE.sapling().map(Block::getDefaultState).get()));
|
2022-09-25 00:14:29 +02:00
|
|
|
|
2022-09-25 15:39:07 +02:00
|
|
|
Block SWEET_APPLE_LEAVES = register("sweet_apple_leaves", new FruitBearingBlock(FabricBlockSettings.copy(Blocks.OAK_LEAVES),
|
|
|
|
0xE5FFCC88,
|
|
|
|
() -> UBlocks.SWEET_APPLE,
|
|
|
|
() -> UItems.SWEET_APPLE.getDefaultStack()
|
2022-12-19 00:12:49 +01:00
|
|
|
), ItemGroups.NATURAL);
|
2022-09-25 15:39:07 +02:00
|
|
|
Block SWEET_APPLE = register("sweet_apple", new FruitBlock(FabricBlockSettings.of(Material.GOURD, MapColor.GREEN).sounds(BlockSoundGroup.WOOD), Direction.DOWN, SWEET_APPLE_LEAVES, FruitBlock.DEFAULT_SHAPE));
|
|
|
|
Block SWEET_APPLE_SPROUT = register("sweet_apple_sprout", new SproutBlock(0xE5FFCC88, () -> UItems.SWEET_APPLE_SEEDS, () -> UTreeGen.SWEET_APPLE_TREE.sapling().map(Block::getDefaultState).get()));
|
|
|
|
|
2022-09-25 16:23:10 +02:00
|
|
|
Block SOUR_APPLE_LEAVES = register("sour_apple_leaves", new FruitBearingBlock(FabricBlockSettings.copy(Blocks.OAK_LEAVES),
|
|
|
|
0xE5FFCCCC,
|
|
|
|
() -> UBlocks.SOUR_APPLE,
|
|
|
|
() -> UItems.SOUR_APPLE.getDefaultStack()
|
2022-12-19 00:12:49 +01:00
|
|
|
), ItemGroups.NATURAL);
|
2022-09-25 16:23:10 +02:00
|
|
|
Block SOUR_APPLE = register("sour_apple", new FruitBlock(FabricBlockSettings.of(Material.GOURD, MapColor.GREEN).sounds(BlockSoundGroup.WOOD), Direction.DOWN, SOUR_APPLE_LEAVES, FruitBlock.DEFAULT_SHAPE));
|
|
|
|
Block SOUR_APPLE_SPROUT = register("sour_apple_sprout", new SproutBlock(0xE5FFCC88, () -> UItems.SOUR_APPLE_SEEDS, () -> UTreeGen.SOUR_APPLE_TREE.sapling().map(Block::getDefaultState).get()));
|
|
|
|
|
2022-09-30 00:54:09 +02:00
|
|
|
Block APPLE_PIE = register("apple_pie", new PieBlock(FabricBlockSettings.of(Material.CAKE, MapColor.ORANGE).strength(0.5F).sounds(BlockSoundGroup.WET_GRASS), () -> UItems.APPLE_PIE_SLICE));
|
2022-09-29 22:01:56 +02:00
|
|
|
|
2022-09-28 22:43:45 +02:00
|
|
|
SegmentedCropBlock OATS = register("oats", SegmentedCropBlock.create(11, 5, AbstractBlock.Settings.copy(Blocks.WHEAT), () -> UItems.OAT_SEEDS, null, () -> UBlocks.OATS_STEM));
|
|
|
|
SegmentedCropBlock OATS_STEM = register("oats_stem", OATS.createNext(5));
|
|
|
|
SegmentedCropBlock OATS_CROWN = register("oats_crown", OATS_STEM.createNext(5));
|
|
|
|
|
2022-09-25 00:14:29 +02:00
|
|
|
static <T extends Block> T register(String name, T item) {
|
|
|
|
return register(Unicopia.id(name), item);
|
|
|
|
}
|
|
|
|
|
|
|
|
static <T extends Block> T register(String name, T block, ItemGroup group) {
|
|
|
|
return register(Unicopia.id(name), block, group);
|
2021-09-02 19:11:51 +02:00
|
|
|
}
|
|
|
|
|
2022-09-25 00:14:29 +02:00
|
|
|
static <T extends Block> T register(Identifier id, T block, ItemGroup group) {
|
2022-12-19 00:12:49 +01:00
|
|
|
UItems.register(id, ItemGroupRegistry.register(new BlockItem(block, new Item.Settings()), group));
|
2022-09-25 00:14:29 +02:00
|
|
|
return register(id, block);
|
|
|
|
}
|
2022-09-23 23:25:00 +02:00
|
|
|
|
2022-09-25 00:14:29 +02:00
|
|
|
static <T extends Block> T register(Identifier id, T block) {
|
|
|
|
if (block instanceof TintedBlock) {
|
|
|
|
TintedBlock.REGISTRY.add(block);
|
|
|
|
}
|
2022-09-28 22:43:45 +02:00
|
|
|
if (block instanceof SaplingBlock || block instanceof SproutBlock || block instanceof FruitBlock || block instanceof CropBlock) {
|
2022-09-25 01:55:29 +02:00
|
|
|
TRANSLUCENT_BLOCKS.add(block);
|
|
|
|
}
|
2022-12-19 00:12:49 +01:00
|
|
|
return Registry.register(Registries.BLOCK, id, block);
|
2022-09-25 00:14:29 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
static void bootstrap() {
|
|
|
|
StrippableBlockRegistry.register(ZAP_LOG, STRIPPED_ZAP_LOG);
|
2023-05-23 19:49:56 +02:00
|
|
|
StrippableBlockRegistry.register(PALM_LOG, STRIPPED_PALM_LOG);
|
2022-09-25 00:14:29 +02:00
|
|
|
StrippableBlockRegistry.register(ZAP_WOOD, STRIPPED_ZAP_WOOD);
|
2023-05-23 19:49:56 +02:00
|
|
|
StrippableBlockRegistry.register(PALM_WOOD, STRIPPED_PALM_WOOD);
|
2022-10-12 15:46:15 +02:00
|
|
|
TRANSLUCENT_BLOCKS.add(WEATHER_VANE);
|
2023-05-23 19:49:56 +02:00
|
|
|
TintedBlock.REGISTRY.add(PALM_LEAVES);
|
|
|
|
|
|
|
|
FlammableBlockRegistry.getDefaultInstance().add(PALM_LEAVES, 30, 60);
|
|
|
|
FlammableBlockRegistry.getDefaultInstance().add(PALM_LOG, 5, 5);
|
|
|
|
FlammableBlockRegistry.getDefaultInstance().add(PALM_WOOD, 5, 5);
|
|
|
|
FlammableBlockRegistry.getDefaultInstance().add(STRIPPED_PALM_LOG, 5, 5);
|
|
|
|
FlammableBlockRegistry.getDefaultInstance().add(STRIPPED_PALM_WOOD, 5, 5);
|
|
|
|
FlammableBlockRegistry.getDefaultInstance().add(PALM_PLANKS, 5, 20);
|
|
|
|
FlammableBlockRegistry.getDefaultInstance().add(BANANAS, 5, 20);
|
2022-10-12 15:46:15 +02:00
|
|
|
|
|
|
|
UBlockEntities.bootstrap();
|
2022-09-25 00:14:29 +02:00
|
|
|
}
|
2022-09-23 23:25:00 +02:00
|
|
|
|
|
|
|
static boolean never(BlockState state, BlockView world, BlockPos pos) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2023-05-23 19:49:56 +02:00
|
|
|
static PillarBlock createLogBlock(MapColor topMapColor, MapColor sideMapColor) {
|
|
|
|
return new PillarBlock(AbstractBlock.Settings.of(Material.WOOD, state -> state.get(PillarBlock.AXIS) == Direction.Axis.Y ? topMapColor : sideMapColor).strength(2).sounds(BlockSoundGroup.WOOD));
|
|
|
|
}
|
|
|
|
|
|
|
|
static PillarBlock createWoodBlock(MapColor mapColor) {
|
|
|
|
return new PillarBlock(AbstractBlock.Settings.of(Material.WOOD, mapColor).strength(2).sounds(BlockSoundGroup.WOOD));
|
|
|
|
}
|
|
|
|
|
|
|
|
static LeavesBlock createLeavesBlock(BlockSoundGroup soundGroup) {
|
|
|
|
return new LeavesBlock(AbstractBlock.Settings.of(Material.LEAVES).strength(0.2F).ticksRandomly().sounds(soundGroup).nonOpaque().allowsSpawning(UBlocks::canSpawnOnLeaves).suffocates(UBlocks::never).blockVision(UBlocks::never));
|
|
|
|
}
|
|
|
|
|
2022-09-23 23:25:00 +02:00
|
|
|
static Boolean canSpawnOnLeaves(BlockState state, BlockView world, BlockPos pos, EntityType<?> type) {
|
|
|
|
return type == EntityType.OCELOT || type == EntityType.PARROT;
|
|
|
|
}
|
2021-09-02 19:11:51 +02:00
|
|
|
}
|