Wooden Material

This commit is contained in:
paulevsGitch 2020-09-26 15:40:09 +03:00
parent c20d0014cd
commit 6ec2b53edd
23 changed files with 388 additions and 5 deletions

View file

@ -9,6 +9,7 @@ import net.minecraft.block.MaterialColor;
import net.minecraft.sound.BlockSoundGroup;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.BlockView;
import ru.betterend.blocks.basis.BlockBase;
public class AeterniumBlock extends BlockBase {

View file

@ -5,6 +5,7 @@ import net.minecraft.block.Blocks;
import net.minecraft.block.MaterialColor;
import net.minecraft.sound.BlockSoundGroup;
import net.minecraft.sound.SoundEvents;
import ru.betterend.blocks.basis.BlockBase;
public class BlockTerrain extends BlockBase {
public static final BlockSoundGroup TERRAIN_SOUND = new BlockSoundGroup(1.0F, 1.0F,

View file

@ -7,7 +7,6 @@ import java.util.Random;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.block.Block;
import net.minecraft.block.BlockRenderType;
import net.minecraft.block.BlockState;
@ -37,6 +36,7 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.world.BlockView;
import net.minecraft.world.World;
import ru.betterend.blocks.basis.BaseBlockWithEntity;
public class EndStoneSmelter extends BaseBlockWithEntity {
public static final DirectionProperty FACING = HorizontalFacingBlock.FACING;

View file

@ -9,6 +9,7 @@ import net.minecraft.block.MaterialColor;
import net.minecraft.sound.BlockSoundGroup;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.BlockView;
import ru.betterend.blocks.basis.BlockBase;
public class EnderBlock extends BlockBase {

View file

@ -4,6 +4,7 @@ import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.block.Material;
import net.minecraft.block.MaterialColor;
import net.minecraft.sound.BlockSoundGroup;
import ru.betterend.blocks.basis.BlockBase;
public class TerminiteBlock extends BlockBase {
public TerminiteBlock() {

View file

@ -1,4 +1,4 @@
package ru.betterend.blocks;
package ru.betterend.blocks.basis;
import java.util.Collections;
import java.util.List;

View file

@ -1,4 +1,4 @@
package ru.betterend.blocks;
package ru.betterend.blocks.basis;
import java.util.Collections;
import java.util.List;

View file

@ -0,0 +1,33 @@
package ru.betterend.blocks.basis;
import java.util.Collections;
import java.util.List;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.DoorBlock;
import net.minecraft.block.enums.DoubleBlockHalf;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContext;
import ru.betterend.client.ERenderLayer;
import ru.betterend.client.IRenderTypeable;
public class BlockDoor extends DoorBlock implements IRenderTypeable {
public BlockDoor(Block block) {
super(FabricBlockSettings.copy(block).nonOpaque());
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, LootContext.Builder builder) {
if (state.get(HALF) == DoubleBlockHalf.LOWER)
return Collections.singletonList(new ItemStack(this.asItem()));
else
return Collections.emptyList();
}
@Override
public ERenderLayer getRenderLayer() {
return ERenderLayer.CUTOUT;
}
}

View file

@ -0,0 +1,22 @@
package ru.betterend.blocks.basis;
import java.util.Collections;
import java.util.List;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.FenceBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContext;
public class BlockFence extends FenceBlock {
public BlockFence(Block source) {
super(FabricBlockSettings.copyOf(source).nonOpaque());
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, LootContext.Builder builder) {
return Collections.singletonList(new ItemStack(this));
}
}

View file

@ -0,0 +1,23 @@
package ru.betterend.blocks.basis;
import java.util.Collections;
import java.util.List;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.FenceGateBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContext;
public class BlockGate extends FenceGateBlock
{
public BlockGate(Block source) {
super(FabricBlockSettings.copyOf(source).nonOpaque());
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, LootContext.Builder builder) {
return Collections.singletonList(new ItemStack(this));
}
}

View file

@ -0,0 +1,41 @@
package ru.betterend.blocks.basis;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.MaterialColor;
import net.minecraft.block.PillarBlock;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.sound.SoundCategory;
import net.minecraft.sound.SoundEvents;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Hand;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
public class BlockLogStripable extends BlockPillar {
private final Block striped;
public BlockLogStripable(MaterialColor color, Block striped) {
super(FabricBlockSettings.copyOf(striped).materialColor(color));
this.striped = striped;
}
@Override
public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) {
if (player.getMainHandStack().getItem().isIn(FabricToolTags.AXES)) {
world.playSound(player, pos, SoundEvents.ITEM_AXE_STRIP, SoundCategory.BLOCKS, 1.0F, 1.0F);
if (!world.isClient) {
world.setBlockState(pos, striped.getDefaultState().with(PillarBlock.AXIS, state.get(PillarBlock.AXIS)), 11);
if (player != null && !player.isCreative()) {
player.getMainHandStack().damage(1, world.random, (ServerPlayerEntity) player);
}
}
return ActionResult.SUCCESS;
}
return ActionResult.FAIL;
}
}

View file

@ -0,0 +1,20 @@
package ru.betterend.blocks.basis;
import java.util.Collections;
import java.util.List;
import net.minecraft.block.BlockState;
import net.minecraft.block.PillarBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContext;
public class BlockPillar extends PillarBlock {
public BlockPillar(Settings settings) {
super(settings);
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, LootContext.Builder builder) {
return Collections.singletonList(new ItemStack(this));
}
}

View file

@ -0,0 +1,22 @@
package ru.betterend.blocks.basis;
import java.util.Collections;
import java.util.List;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.PressurePlateBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContext;
public class BlockPressurePlate extends PressurePlateBlock {
public BlockPressurePlate(Block source) {
super(ActivationRule.EVERYTHING, FabricBlockSettings.copyOf(source).nonOpaque());
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, LootContext.Builder builder) {
return Collections.singletonList(new ItemStack(this));
}
}

View file

@ -0,0 +1,22 @@
package ru.betterend.blocks.basis;
import java.util.Collections;
import java.util.List;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.SlabBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContext;
public class BlockSlab extends SlabBlock {
public BlockSlab(Block source) {
super(FabricBlockSettings.copyOf(source).nonOpaque());
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, LootContext.Builder builder) {
return Collections.singletonList(new ItemStack(this));
}
}

View file

@ -0,0 +1,22 @@
package ru.betterend.blocks.basis;
import java.util.Collections;
import java.util.List;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.StairsBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContext;
public class BlockStairs extends StairsBlock {
public BlockStairs(Block source) {
super(source.getDefaultState(), FabricBlockSettings.copyOf(source));
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, LootContext.Builder builder) {
return Collections.singletonList(new ItemStack(this));
}
}

View file

@ -0,0 +1,22 @@
package ru.betterend.blocks.basis;
import java.util.Collections;
import java.util.List;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.TrapdoorBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContext;
public class BlockTrapdoor extends TrapdoorBlock {
public BlockTrapdoor(Block source) {
super(FabricBlockSettings.copyOf(source).nonOpaque());
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, LootContext.Builder builder) {
return Collections.singletonList(new ItemStack(this));
}
}

View file

@ -0,0 +1,22 @@
package ru.betterend.blocks.basis;
import java.util.Collections;
import java.util.List;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.WoodenButtonBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContext;
public class BlockWoodenButton extends WoodenButtonBlock {
public BlockWoodenButton(Block source) {
super(FabricBlockSettings.copyOf(source).nonOpaque());
}
@Override
public List<ItemStack> getDroppedStacks(BlockState state, LootContext.Builder builder) {
return Collections.singletonList(new ItemStack(this));
}
}

View file

@ -0,0 +1,90 @@
package ru.betterend.blocks.complex;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.block.Block;
import net.minecraft.block.Material;
import net.minecraft.block.MaterialColor;
import net.minecraft.item.Items;
import ru.betterend.blocks.basis.BlockBase;
import ru.betterend.blocks.basis.BlockDoor;
import ru.betterend.blocks.basis.BlockFence;
import ru.betterend.blocks.basis.BlockGate;
import ru.betterend.blocks.basis.BlockLogStripable;
import ru.betterend.blocks.basis.BlockPillar;
import ru.betterend.blocks.basis.BlockPressurePlate;
import ru.betterend.blocks.basis.BlockSlab;
import ru.betterend.blocks.basis.BlockStairs;
import ru.betterend.blocks.basis.BlockTrapdoor;
import ru.betterend.blocks.basis.BlockWoodenButton;
import ru.betterend.recipe.RecipeBuilder;
import ru.betterend.registry.BlockRegistry;
public class WoodenMaterial
{
public final Block log;
public final Block bark;
public final Block log_striped;
public final Block bark_striped;
public final Block planks;
public final Block stairs;
public final Block slab;
public final Block fence;
public final Block gate;
public final Block button;
public final Block pressure_plate;
public final Block trapdoor;
public final Block door;
//public final Block crafting_table;
//public final Block ladder;
//public final Block sign;
//public final Block chest;
//public final Block barrel;
public WoodenMaterial(String name, MaterialColor woodColor, MaterialColor planksColor)
{
FabricBlockSettings materialPlanks = FabricBlockSettings.of(Material.WOOD).materialColor(planksColor);
log_striped = BlockRegistry.registerBlock(name + "_striped_log", new BlockPillar(materialPlanks));
bark_striped = BlockRegistry.registerBlock(name + "_striped_bark", new BlockPillar(materialPlanks));
log = BlockRegistry.registerBlock(name + "_log", new BlockLogStripable(woodColor, log_striped));
bark = BlockRegistry.registerBlock(name + "_bark", new BlockLogStripable(woodColor, bark_striped));
planks = BlockRegistry.registerBlock(name + "_planks", new BlockBase(materialPlanks));
stairs = BlockRegistry.registerBlock(name + "_stairs", new BlockStairs(planks));
slab = BlockRegistry.registerBlock(name + "_slab", new BlockSlab(planks));
fence = BlockRegistry.registerBlock(name + "_fence", new BlockFence(planks));
gate = BlockRegistry.registerBlock(name + "_gate", new BlockGate(planks));
button = BlockRegistry.registerBlock(name + "_button", new BlockWoodenButton(planks));
pressure_plate = BlockRegistry.registerBlock(name + "_plate", new BlockPressurePlate(planks));
trapdoor = BlockRegistry.registerBlock(name + "_trapdoor", new BlockTrapdoor(planks));
door = BlockRegistry.registerBlock(name + "_door", new BlockDoor(planks));
//crafting_table = BlockRegistry.registerBlock("crafting_table_" + name, planks);
//ladder = BlockRegistry.registerBlock(name + "_ladder", planks);
//sign = BlockRegistry.registerBlock("sign_" + name, planks);
//chest = BlockRegistry.registerBlock("chest_" + name, planks);
//barrel = BlockRegistry.registerBlock("barrel_" + name, planks, planks_slab);
RecipeBuilder.make(name + "_planks", planks).setOutputCount(4).setList("#").addMaterial('#', log, bark).setGroup("end_planks").build();
RecipeBuilder.make(name + "_stairs", stairs).setOutputCount(4).setShape("# ", "## ", "###").addMaterial('#', planks).setGroup("end_planks_stairs").build();
RecipeBuilder.make(name + "_slab", slab).setOutputCount(6).setShape("###").addMaterial('#', planks).setGroup("end_planks_slabs").build();
RecipeBuilder.make(name + "_fence", fence).setOutputCount(3).setShape("#I#", "#I#").addMaterial('#', planks).addMaterial('I', Items.STICK).setGroup("end_planks_fences").build();
RecipeBuilder.make(name + "_gate", gate).setShape("I#I", "I#I").addMaterial('#', planks).addMaterial('I', Items.STICK).setGroup("end_planks_gates").build();
RecipeBuilder.make(name + "_button", button).setList("#").addMaterial('#', planks).setGroup("end_planks_buttons").build();
RecipeBuilder.make(name + "_pressure_plate", pressure_plate).setList("##").addMaterial('#', planks).setGroup("end_planks_plates").build();
RecipeBuilder.make(name + "_trapdoor", trapdoor).setOutputCount(2).setShape("###", "###").addMaterial('#', planks).setGroup("end_trapdoors").build();
RecipeBuilder.make(name + "_door", door).setOutputCount(3).setShape("##", "##", "##").addMaterial('#', planks).setGroup("end_doors").build();
}
public boolean isTreeLog(Block block)
{
return block == log || block == bark;
}
}

View file

@ -0,0 +1,28 @@
package ru.betterend.client;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.util.registry.Registry;
public class BetterEndClient implements ClientModInitializer
{
@Override
public void onInitializeClient() {
registerRenderLayers();
}
private void registerRenderLayers() {
RenderLayer cutout = RenderLayer.getCutout();
RenderLayer translucent = RenderLayer.getTranslucent();
Registry.BLOCK.forEach(block -> {
if (block instanceof IRenderTypeable) {
ERenderLayer layer = ((IRenderTypeable) block).getRenderLayer();
if (layer == ERenderLayer.CUTOUT)
BlockRenderLayerMap.INSTANCE.putBlock(block, cutout);
else if (layer == ERenderLayer.TRANSLUCENT)
BlockRenderLayerMap.INSTANCE.putBlock(block, translucent);
}
});
}
}

View file

@ -0,0 +1,6 @@
package ru.betterend.client;
public enum ERenderLayer {
CUTOUT,
TRANSLUCENT;
}

View file

@ -0,0 +1,6 @@
package ru.betterend.client;
public interface IRenderTypeable
{
public ERenderLayer getRenderLayer();
}

View file

@ -51,7 +51,7 @@ public class RecipeBuilder {
return this;
}
public RecipeBuilder setShape(String[] shape) {
public RecipeBuilder setShape(String... shape) {
this.shape = shape;
return this;
}

View file

@ -35,7 +35,7 @@ public class BlockRegistry {
public static void register() {}
private static Block registerBlock(String name, Block block) {
public static Block registerBlock(String name, Block block) {
Registry.register(Registry.BLOCK, new Identifier(BetterEnd.MOD_ID, name), block);
ItemRegistry.registerItem(name, new BlockItem(block, new Item.Settings().group(CreativeTab.END_TAB)));
return block;