Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
2563784
Fix tiles, chiseled & roof tiles recipes
Jukoz Jul 27, 2026
6f4bbad
Fix recipes, tags and duplicate vanilla recipes
Jukoz Jul 27, 2026
707b2a2
Fix shovel & axe mineable, recipes and more fixes
Jukoz Jul 28, 2026
d1e232b
Fix houses spawning underwater, edhel axe, etc.
Jukoz Jul 29, 2026
a76bbb1
Add cold smithing, aule blessing enchant & fixes
Jukoz Jul 29, 2026
261648a
Spooky scary skeletons, shivers down your spine
Jukoz Jul 30, 2026
30e6532
feat(zh-cn): nuggets, and typo fix
NumberSir Jul 30, 2026
3406d87
Add ol skull block
Jukoz Jul 30, 2026
2ffb138
Merge pull request #407 from NumberSir/dev
Jukoz Jul 30, 2026
9e3f090
Add small chandelier 🕯
Jukoz Jul 30, 2026
3cac361
Add global mob cap - First iteration
krahab Jul 31, 2026
f5f7cf7
Update french localization
M4elstr0m Jul 31, 2026
98e4bcf
Fix zoom-in/out translations
M4elstr0m Jul 31, 2026
7ced49f
Update french localization
M4elstr0m Jul 31, 2026
caadb4e
Update localization mod id for fr_fr.json
M4elstr0m Jul 31, 2026
a24db60
Add pt_br.json
IamKahina Jul 31, 2026
59a7c7f
Add second small chandelier variant block
Jukoz Jul 31, 2026
c8ffb96
Merge pull request #409 from IamKahina/main
Jukoz Jul 31, 2026
0bc9da3
Add beekeeper mask 🐝 🍯
Jukoz Aug 1, 2026
d99e262
Update french localization to latest mod version
M4elstr0m Aug 1, 2026
c1f5af2
Corrected some french localization
M4elstr0m Aug 1, 2026
682b038
fix(compat): modmenu keys
NumberSir Aug 1, 2026
3bfe273
Merge pull request #411 from M4elstr0m/main
Jukoz Aug 1, 2026
7d97e85
Merge branch 'dev' into pr/410
Jukoz Aug 1, 2026
345b865
Merge pull request #410 from NumberSir/dev
Jukoz Aug 1, 2026
54c0629
make bh goats immune to powdered snow
TomSchlom Aug 1, 2026
1927aae
Add ancient DG shield (dungeon loot)
Jukoz Aug 2, 2026
e4242a1
Add 3 more dol guldur shields
Jukoz Aug 2, 2026
95e70b0
Add chaperon & baggy hat
Jukoz Aug 2, 2026
64d480c
Fix floaty ear 👂
krahab Aug 2, 2026
db05648
Properly fix ears
krahab Aug 2, 2026
ede7cba
Merge branch 'fixes' into mob-spawning-fixes-v2
krahab Aug 2, 2026
27e0185
Add default biome events
krahab Aug 3, 2026
c455bb0
Add cached chunks to wild spawn
krahab Aug 3, 2026
711c686
Add blacksmith apron, recipes & tweaks
Jukoz Aug 3, 2026
4b9ff48
Add glasses & dwarven monocle 🧐
Jukoz Aug 4, 2026
5ff85b8
Add big chandeliers 🕯️🕯️
Jukoz Aug 4, 2026
eb55cc0
Add small & big bronze chandeliers
Jukoz Aug 4, 2026
7d0e58b
Merge pull request #408 from Jukoz/mob-spawning-fixes-v2
Jukoz Aug 4, 2026
e5b5409
Merge branch 'fixes' into wild-spawn-fixes
krahab Aug 5, 2026
eba6b5b
Fix hewing (silk touch), loot table & recipes
Jukoz Aug 5, 2026
29f2ce2
Merge pull request #412 from Jukoz/wild-spawn-fixes
Jukoz Aug 5, 2026
90d0f1b
Merge pull request #405 from Jukoz/fixes
Jukoz Aug 5, 2026
6545064
More fixes & dyes from flowers
Jukoz Aug 6, 2026
fe5db1c
Update to 1.0.2
Jukoz Aug 6, 2026
e5b7e60
Merge branch 'dev' into fixes
Jukoz Aug 6, 2026
d576f18
Merge branch 'new-stuff' into fixes
Jukoz Aug 7, 2026
e83dffe
Fix chandeliers, and more tags & recipes
Jukoz Aug 8, 2026
baf4a74
More recipe fixes, arrow & plate
Jukoz Aug 9, 2026
3cf26ea
Fix more recipes, warg, leaves and playerbook
Jukoz Aug 10, 2026
2aaf131
New panorama and bonemeal holly & mallorn leaves
Jukoz Aug 10, 2026
5251987
Fix cobbled khagalaban (stinky rock)
Jukoz Aug 11, 2026
af563c8
feat(zh-cn): update & fix typo
NumberSir Aug 12, 2026
ee79dc1
feat(inscription): make inscription translatable
NumberSir Aug 13, 2026
acb9a66
Merge pull request #415 from NumberSir/dev
Jukoz Aug 13, 2026
b92dbab
Merge pull request #413 from Jukoz/fixes
Jukoz Aug 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion middle-earth/gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ loom_version=1.11-SNAPSHOT
fabric_version=0.129.0+1.21.8

# Mod Properties
mod_version = 1.0.1-1.21.8-beta
mod_version = 1.0.2-1.21.8-beta
maven_group = net.sevenstars.middleearth
archives_base_name = Middle-earth

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import net.sevenstars.middleearth.block.special.pots.LootablePotBlockEntityRenderer;
import net.sevenstars.middleearth.block.special.reinforcedChest.ReinforcedChestEntityRenderer;
import net.sevenstars.middleearth.block.special.shapingAnvil.ShapingAnvilEntityRenderer;
import net.sevenstars.middleearth.block.special.skull.OldSkullBlockEntityRenderer;
import net.sevenstars.middleearth.client.BlockColorsME;
import net.sevenstars.middleearth.client.model.equipment.CustomBootsModel;
import net.sevenstars.middleearth.client.model.equipment.CustomChestplateModel;
Expand Down Expand Up @@ -166,6 +167,7 @@ public void onInitializeClient() {
BlockEntityRendererFactories.register(ModBlockEntities.OAK_COFFER, OakCofferEntityRenderer::new);
BlockEntityRendererFactories.register(ModBlockEntities.WILLOW_COFFER, WillowCofferEntityRenderer::new);
BlockEntityRendererFactories.register(ModBlockEntities.REINFORCED_CHEST, ReinforcedChestEntityRenderer::new);
BlockEntityRendererFactories.register(ModBlockEntities.OLD_SKULL, OldSkullBlockEntityRenderer::new);
BlockEntityRendererFactories.register(ModBlockEntities.BELLOWS, BellowsBlockEntityRenderer::new);
//BlockEntityRendererFactories.register(ModBlockEntities.CROCKPOT, CrockpotEntityRenderer::new);
BlockEntityRendererFactories.register(ModBlockEntities.PLATE, PlateEntityRenderer::new);
Expand Down Expand Up @@ -622,11 +624,17 @@ private void initializeRenderLayerMap() {
BlockRenderLayerMap.putBlock(ModDecorativeBlocks.BROWN_FAT_POT, BlockRenderLayer.CUTOUT);
BlockRenderLayerMap.putBlock(ModDecorativeBlocks.FAT_POT, BlockRenderLayer.CUTOUT);

BlockRenderLayerMap.putBlock(ModDecorativeBlocks.SKELETON, BlockRenderLayer.CUTOUT);

BlockRenderLayerMap.putBlock(ModDecorativeBlocks.CANDLESTICK, BlockRenderLayer.CUTOUT);
BlockRenderLayerMap.putBlock(ModDecorativeBlocks.CERAMIC_LAMP, BlockRenderLayer.CUTOUT);
BlockRenderLayerMap.putBlock(ModDecorativeBlocks.CANDLE_HOLDER, BlockRenderLayer.CUTOUT);
BlockRenderLayerMap.putBlock(ModDecorativeBlocks.SKULL_CANDLE, BlockRenderLayer.CUTOUT);
BlockRenderLayerMap.putBlock(ModDecorativeBlocks.CANDLE_HEAP, BlockRenderLayer.CUTOUT);
BlockRenderLayerMap.putBlock(ModDecorativeBlocks.SMALL_BRONZE_CHANDELIER, BlockRenderLayer.CUTOUT);
BlockRenderLayerMap.putBlock(ModDecorativeBlocks.BRONZE_CHANDELIER, BlockRenderLayer.CUTOUT);
BlockRenderLayerMap.putBlock(ModDecorativeBlocks.SMALL_CHANDELIER, BlockRenderLayer.CUTOUT);
BlockRenderLayerMap.putBlock(ModDecorativeBlocks.CHANDELIER, BlockRenderLayer.CUTOUT);

BlockRenderLayerMap.putBlock(ModDecorativeBlocks.BIG_BRAZIER, BlockRenderLayer.CUTOUT);
BlockRenderLayerMap.putBlock(ModDecorativeBlocks.SMALL_BRAZIER, BlockRenderLayer.CUTOUT);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -425,7 +425,8 @@ public class GenericBlockSets {
ItemGroupsME.MISC_BLOCKS_CONTENTS));

private static GenericBlockSetBuilder registerBlockSet(GenericBlockSetBuilder set){
set.blockSet = BlockSetRegistration.createRegularSet(set.setName , set.hardness, set.blastResistance, set.mapColor, set.instrument, set.soundGroup, false, set.group, set.requiresTool);
set.blockSet = BlockSetRegistration.createRegularSet(set.setName , set.hardness, set.blastResistance, set.mapColor,
set.instrument, set.soundGroup, false, set.group, set.requiresTool);

genericSetsList.add(set);

Expand All @@ -440,14 +441,16 @@ private static GenericBlockSetBuilder registerBlockSet(GenericBlockSetBuilder se
return set;
}
private static SimpleBlockSetBuilder registerSimpleBlockSet(SimpleBlockSetBuilder set){
set.blockSet = BlockSetRegistration.createSimpleSet(set.setName , set.hardness, set.blastResistance, set.mapColor, set.instrument, set.soundGroup, false, set.group, set.requiresTool);
set.blockSet = BlockSetRegistration.createSimpleSet(set.setName , set.hardness, set.blastResistance, set.mapColor,
set.instrument, set.soundGroup, false, set.group, set.requiresTool);
simpleSetsList.add(set);

return set;
}

private static GenericBlockSetBuilder registerPillarBlockSet(GenericBlockSetBuilder set){
set.blockSet = BlockSetRegistration.createRegularSet(set.setName , set.hardness, set.blastResistance, set.mapColor, set.instrument, set.soundGroup, true, set.group, set.requiresTool);
set.blockSet = BlockSetRegistration.createRegularSet(set.setName , set.hardness, set.blastResistance, set.mapColor,
set.instrument, set.soundGroup, true, set.group, set.requiresTool);

genericSetsList.add(set);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import net.sevenstars.middleearth.block.special.sack.SackBlockEntity;
import net.sevenstars.middleearth.block.special.shapingAnvil.ShapingAnvilBlockEntity;
import net.sevenstars.middleearth.block.special.shapingAnvil.stoneanvil.StoneAnvilBlockEntity;
import net.sevenstars.middleearth.block.special.skull.OldSkullBlockEntity;
import net.sevenstars.middleearth.block.special.structureManager.StructureManagerBlockEntity;
import net.sevenstars.middleearth.block.special.structureManager.nest.StructureNestBlockEntity;
import net.sevenstars.middleearth.block.special.wood_pile.WoodPileBlockEntity;
Expand Down Expand Up @@ -50,6 +51,8 @@ public class ModBlockEntities {
public static BlockEntityType<OakCofferBlockEntity> OAK_COFFER = register("oak_coffer", OakCofferBlockEntity::new, ModDecorativeBlocks.OAK_COFFER);
public static BlockEntityType<WillowCofferBlockEntity> WILLOW_COFFER = register("willow_coffer", WillowCofferBlockEntity::new, ModDecorativeBlocks.WILLOW_COFFER);

public static BlockEntityType<OldSkullBlockEntity> OLD_SKULL = register("old_skull", OldSkullBlockEntity::new, ModDecorativeBlocks.OLD_SKULL);

public static BlockEntityType<SackBlockEntity> SACK = register("sack", SackBlockEntity::new, ModDecorativeBlocks.SACK);

public static BlockEntityType<ReinforcedChestBlockEntity> REINFORCED_CHEST = register("reinforced_chest", ReinforcedChestBlockEntity::new,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,7 @@
import net.sevenstars.middleearth.block.special.artisantable.ArtisanTable;
import net.sevenstars.middleearth.block.special.beds.CustomBedBlock;
import net.sevenstars.middleearth.block.special.bellows.BellowsBlock;
import net.sevenstars.middleearth.block.special.candles.CandleHolderBlock;
import net.sevenstars.middleearth.block.special.candles.CandleStickBlock;
import net.sevenstars.middleearth.block.special.candles.CeramicLampBlock;
import net.sevenstars.middleearth.block.special.candles.SkullCandleBlock;
import net.sevenstars.middleearth.block.special.candles.*;
import net.sevenstars.middleearth.block.special.coffers.*;
import net.sevenstars.middleearth.block.special.curtains.CurtainsBlock;
import net.sevenstars.middleearth.block.special.curtains.SmallCurtainsBlock;
Expand All @@ -32,6 +29,7 @@
import net.sevenstars.middleearth.block.special.shapingAnvil.orcishTreatedAnvil.OrcishTreatedAnvilblock;
import net.sevenstars.middleearth.block.special.shapingAnvil.stoneanvil.StoneAnvilBlock;
import net.sevenstars.middleearth.block.special.shapingAnvil.treatedAnvil.TreatedAnvilblock;
import net.sevenstars.middleearth.block.special.skull.OldSkullBlock;
import net.sevenstars.middleearth.block.special.statues.FlipStatueBlock;
import net.sevenstars.middleearth.block.special.statues.StatueBlock;
import net.sevenstars.middleearth.block.special.structureManager.StructureManagerBlock;
Expand Down Expand Up @@ -171,6 +169,12 @@ public class ModDecorativeBlocks {
public static final Block WOOD_PILE = registerBlock("wood_pile",
WoodPileBlock::new, AbstractBlock.Settings.copy(Blocks.OAK_PLANKS).strength(1.0f).nonOpaque());

public static final Block OLD_SKULL = registerBlockWithItem("old_skull",
OldSkullBlock::new, AbstractBlock.Settings.copy(Blocks.SKELETON_SKULL).nonOpaque().sounds(BlockSoundGroup.BONE));
public static final Block SKELETON = registerBlockWithItem("skeleton",
SkeletonBlock::new, AbstractBlock.Settings.create().mapColor(MapColor.PALE_YELLOW)
.instrument(NoteBlockInstrument.XYLOPHONE).strength(0.5F).sounds(BlockSoundGroup.BONE));

public static final Block CANDLESTICK = registerBlockWithItem("candlestick",
CandleStickBlock::new, AbstractBlock.Settings.copy(Blocks.CANDLE).luminance(createLightLevelFromLitBlockState(15)).nonOpaque());
public static final Block CERAMIC_LAMP = registerBlockWithItem("ceramic_lamp",
Expand All @@ -181,6 +185,14 @@ public class ModDecorativeBlocks {
SkullCandleBlock::new, AbstractBlock.Settings.copy(Blocks.CANDLE).luminance(createLightLevelFromLitBlockState(15)).nonOpaque());
public static final Block CANDLE_HEAP = registerBlockWithItem("candle_heap",
CandleHeapBlock::new, AbstractBlock.Settings.copy(Blocks.CANDLE).nonOpaque().luminance(createLightLevelFromLitBlockState(10)));
public static final Block SMALL_BRONZE_CHANDELIER = registerBlockWithItem("small_bronze_chandelier",
SmallChandelierBlock::new, AbstractBlock.Settings.copy(Blocks.CANDLE).luminance(createLightLevelFromLitBlockState(15)).nonOpaque());
public static final Block BRONZE_CHANDELIER = registerBlockWithItem("bronze_chandelier",
ChandelierBlock::new, AbstractBlock.Settings.copy(Blocks.CANDLE).luminance(createLightLevelFromLitBlockState(15)).nonOpaque());
public static final Block SMALL_CHANDELIER = registerBlockWithItem("small_chandelier",
SmallChandelierBlock::new, AbstractBlock.Settings.copy(Blocks.CANDLE).luminance(createLightLevelFromLitBlockState(15)).nonOpaque());
public static final Block CHANDELIER = registerBlockWithItem("chandelier",
ChandelierBlock::new, AbstractBlock.Settings.copy(Blocks.CANDLE).luminance(createLightLevelFromLitBlockState(15)).nonOpaque());

public static final Block STONE_LECTERN = registerBlockWithItem("stone_lectern",
StoneLecternBlock::new, AbstractBlock.Settings.copy(Blocks.STONE).nonOpaque().requiresTool());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ public class StoneBlockSets {
public static List<StoneBlockSetBuilder> stoneSetsList = new ArrayList<>();

public static StoneBlockSetBuilder STONE_SET = registerStoneSet(new StoneBlockSetBuilder("stone",
STONE_HARDNESS, STONE_BLAST_RESISTANCE, MapColor.STONE_GRAY, NoteBlockInstrument.BASEDRUM, BlockSoundGroup.STONE, true, true)
STONE_HARDNESS, STONE_BLAST_RESISTANCE, MapColor.STONE_GRAY, NoteBlockInstrument.BASEDRUM, BlockSoundGroup.STONE,
true, true, true, true, false)
.addToSet(StoneBlockTypes.BASE_BLOCKS)
.addToSet(StoneBlockTypes.COBBLESTONE_BLOCKS)
.addToSet(StoneBlockTypes.SMOOTH_BLOCKS)
Expand All @@ -43,7 +44,8 @@ public class StoneBlockSets {
.addToSet(StoneBlockTypes.CARVED_WINDOW));

public static StoneBlockSetBuilder GRANITE_SET = registerStoneSet(new StoneBlockSetBuilder("granite",
STONE_HARDNESS, STONE_BLAST_RESISTANCE, MapColor.ORANGE, NoteBlockInstrument.BASEDRUM, BlockSoundGroup.STONE, true, true)
STONE_HARDNESS, STONE_BLAST_RESISTANCE, MapColor.ORANGE, NoteBlockInstrument.BASEDRUM, BlockSoundGroup.STONE,
true, true, true, false, true)
.addToSet(StoneBlockTypes.BASE_BLOCKS)
.addToSet(StoneBlockTypes.COBBLED_BLOCKS)
.addToSet(StoneBlockTypes.SMOOTH_BLOCKS)
Expand All @@ -56,7 +58,8 @@ public class StoneBlockSets {
.addToSet(StoneBlockTypes.OLD_BLOCKS));

public static StoneBlockSetBuilder DIORITE_SET = registerStoneSet(new StoneBlockSetBuilder("diorite",
STONE_HARDNESS, STONE_BLAST_RESISTANCE, MapColor.WHITE, NoteBlockInstrument.BASEDRUM, BlockSoundGroup.STONE, true, true)
STONE_HARDNESS, STONE_BLAST_RESISTANCE, MapColor.WHITE, NoteBlockInstrument.BASEDRUM, BlockSoundGroup.STONE,
true, true, true, false, true)
.addToSet(StoneBlockTypes.BASE_BLOCKS)
.addToSet(StoneBlockTypes.COBBLED_BLOCKS)
.addToSet(StoneBlockTypes.SMOOTH_BLOCKS)
Expand All @@ -69,7 +72,8 @@ public class StoneBlockSets {
.addToSet(StoneBlockTypes.OLD_BLOCKS));

public static StoneBlockSetBuilder ANDESITE_SET = registerStoneSet(new StoneBlockSetBuilder("andesite",
STONE_HARDNESS, STONE_BLAST_RESISTANCE, MapColor.WHITE_GRAY, NoteBlockInstrument.BASEDRUM, BlockSoundGroup.STONE, true, true)
STONE_HARDNESS, STONE_BLAST_RESISTANCE, MapColor.WHITE_GRAY, NoteBlockInstrument.BASEDRUM, BlockSoundGroup.STONE,
true, true, true, false, true)
.addToSet(StoneBlockTypes.BASE_BLOCKS)
.addToSet(StoneBlockTypes.COBBLED_BLOCKS)
.addToSet(StoneBlockTypes.SMOOTH_BLOCKS)
Expand Down Expand Up @@ -103,7 +107,8 @@ public class StoneBlockSets {
.addToSet(StoneBlockTypes.BRICK_BLOCKS));

public static StoneBlockSetBuilder DEEPSLATE_SET = registerStoneSet(new StoneBlockSetBuilder("deepslate",
DEEPSLATE_HARDNESS, DEEPSLATE_BLAST_RESISTANCE, MapColor.DEEPSLATE_GRAY, NoteBlockInstrument.BASEDRUM, BlockSoundGroup.DEEPSLATE, true, true)
DEEPSLATE_HARDNESS, DEEPSLATE_BLAST_RESISTANCE, MapColor.DEEPSLATE_GRAY, NoteBlockInstrument.BASEDRUM, BlockSoundGroup.DEEPSLATE,
true, true, true, true, true)
.addToSet(StoneBlockTypes.BASE_BLOCKS)
.addToSet(StoneBlockTypes.COBBLED_BLOCKS)
.addToSet(StoneBlockTypes.SMOOTH_BLOCKS)
Expand Down Expand Up @@ -145,7 +150,8 @@ public class StoneBlockSets {
.addToSet(StoneBlockTypes.CARVED_WINDOW));

public static StoneBlockSetBuilder BLACKSTONE_SET = registerStoneSet(new StoneBlockSetBuilder("blackstone",
STONE_HARDNESS, STONE_BLAST_RESISTANCE, MapColor.BLACK, NoteBlockInstrument.BASEDRUM, BlockSoundGroup.STONE, true, true)
STONE_HARDNESS, STONE_BLAST_RESISTANCE, MapColor.BLACK, NoteBlockInstrument.BASEDRUM, BlockSoundGroup.STONE,
true, true, true, true, true)
.addToSet(StoneBlockTypes.BASE_BLOCKS)
.addToSet(StoneBlockTypes.COBBLED_BLOCKS)
.addToSet(StoneBlockTypes.SMOOTH_BLOCKS)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import net.minecraft.item.ItemStack;
import net.minecraft.sound.BlockSoundGroup;
import net.sevenstars.middleearth.MiddleEarth;
import net.sevenstars.middleearth.block.special.plants.BerryHollyLeavesBlock;
import net.sevenstars.middleearth.block.special.plants.ModLeavesBlock;
import net.sevenstars.middleearth.block.utils.BlockSetRegistration;
import net.sevenstars.middleearth.block.utils.WoodBlockTypes;
Expand Down Expand Up @@ -461,6 +462,10 @@ private static WoodBlockSetBuilder registerWoodSet(WoodBlockSetBuilder set) {
set.leaves = getVanillaOrCreateNew(woodStoneTypes.getPrefix() + set.setName + woodStoneTypes.getSuffix(),
(settings) -> new ModLeavesBlock(0.01F, settings, false), AbstractBlock.Settings.copy(Blocks.OAK_LEAVES)
.strength(LEAVES_STRENGTH).mapColor(MapColor.YELLOW).sounds(BlockSoundGroup.GRASS).burnable(), itemGroup);
} else if(set.setName.equals("holly")){
set.leaves = getVanillaOrCreateNew(woodStoneTypes.getPrefix() + set.setName + woodStoneTypes.getSuffix(),
(settings) -> new BerryHollyLeavesBlock(0.01F, settings), AbstractBlock.Settings.copy(Blocks.OAK_LEAVES)
.strength(LEAVES_STRENGTH).mapColor(MapColor.YELLOW).sounds(BlockSoundGroup.GRASS).burnable(), itemGroup);
} else {
set.leaves = getVanillaOrCreateNew(woodStoneTypes.getPrefix() + set.setName + woodStoneTypes.getSuffix(),
(settings) -> new TintedParticleLeavesBlock(0.01F, settings), AbstractBlock.Settings.copy(Blocks.OAK_LEAVES)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
package net.sevenstars.middleearth.block.special;

import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.block.ShapeContext;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemPlacementContext;
import net.minecraft.item.ItemStack;
import net.minecraft.state.StateManager;
import net.minecraft.state.property.EnumProperty;
import net.minecraft.state.property.IntProperty;
import net.minecraft.state.property.Properties;
import net.minecraft.util.ActionResult;
import net.minecraft.util.BlockMirror;
import net.minecraft.util.BlockRotation;
import net.minecraft.util.Hand;
import net.minecraft.util.hit.BlockHitResult;
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 net.minecraft.world.tick.ScheduledTickView;

import java.util.Objects;

public class SkeletonBlock extends Block {
private static final int MAX_POSES = 9;
public static final IntProperty POSE = IntProperty.of("pose", 1, MAX_POSES);
public static final EnumProperty<Direction> HORIZONTAL_FACING = Properties.HORIZONTAL_FACING;

public SkeletonBlock(Settings settings) {
super(settings);
this.setDefaultState((this.stateManager.getDefaultState()).with(HORIZONTAL_FACING, Direction.NORTH).with(POSE, 1));
}

@Override
protected void appendProperties(StateManager.Builder<Block, BlockState> builder) {
builder.add(HORIZONTAL_FACING, POSE);
}

@Override
protected ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, BlockHitResult hit) {
if (world.isClient) {
return ActionResult.SUCCESS;
} else {
world.setBlockState(pos, state.cycle(POSE));
}
return ActionResult.SUCCESS;
}

public BlockState getPlacementState(ItemPlacementContext ctx) {
BlockState blockState = ctx.getWorld().getBlockState(ctx.getBlockPos());
if (blockState.isOf(this)) {
return blockState.cycle(POSE).with(HORIZONTAL_FACING, ctx.getHorizontalPlayerFacing().getOpposite());
} else {
return Objects.requireNonNull(super.getPlacementState(ctx)).with(HORIZONTAL_FACING, ctx.getHorizontalPlayerFacing().getOpposite());
}
}

protected BlockState getStateForNeighborUpdate(BlockState state, WorldView world, ScheduledTickView tickView, BlockPos pos, Direction direction, BlockPos neighborPos, BlockState neighborState, Random random) {
return direction == Direction.DOWN && !state.canPlaceAt(world, pos) ? Blocks.AIR.getDefaultState() :
super.getStateForNeighborUpdate(state, world, tickView, pos, direction, neighborPos, neighborState, random);
}

public BlockState rotate(BlockState state, BlockRotation rotation) {
return state.with(HORIZONTAL_FACING, rotation.rotate(state.get(HORIZONTAL_FACING)));
}

public BlockState mirror(BlockState state, BlockMirror mirror) {
return state.rotate(mirror.getRotation(state.get(HORIZONTAL_FACING)));
}

@Override
protected VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) {
int pose = state.get(POSE);
if(pose == 1 || pose == 2 || pose == 9) return Block.createCuboidShape(2.0, 0.0, 2.0, 14.0, 12.0, 14.0);
else if(pose == 6 || pose == 7) return Block.createCuboidShape(2.0, 0.0, 2.0, 14.0, 4.0, 14.0);
else return Block.createCuboidShape(2.0, 0.0, 2.0, 14.0, 8.0, 14.0);
}
}
Loading
Loading