Skip to content

Commit

Permalink
Add crafting station, wire copper and lithium ore types
Browse files Browse the repository at this point in the history
  • Loading branch information
mrmelon54 committed Jul 5, 2023
1 parent 62ea7aa commit c6b59f3
Show file tree
Hide file tree
Showing 57 changed files with 1,762 additions and 0 deletions.
29 changes: 29 additions & 0 deletions common/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
architectury {
common(rootProject.enabled_platforms.split(","))
}

loom {
accessWidenerPath = file("src/main/resources/arctech.accesswidener")
}

dependencies {
// We depend on fabric loader here to use the fabric @Environment annotations and get the mixin dependencies
// Do NOT use other classes from fabric loader
modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}"
// Remove the next line if you don't want to depend on the API
modApi "dev.architectury:architectury:${rootProject.architectury_version}"
}

publishing {
publications {
mavenCommon(MavenPublication) {
artifactId = rootProject.archives_base_name
from components.java
}
}

// See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing.
repositories {
// Add repositories to publish to here.
}
}
16 changes: 16 additions & 0 deletions common/src/main/java/com/mrmelon54/ArcTech/ArcTech.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.mrmelon54.ArcTech;

import com.google.common.base.Suppliers;
import dev.architectury.registry.registries.RegistrarManager;

import java.util.function.Supplier;

public class ArcTech {
public static final String MOD_ID = "arctech";
public static final Supplier<RegistrarManager> MANAGER = Suppliers.memoize(() -> RegistrarManager.get(ArcTech.MOD_ID));

public static void init() {
CreativeTab.init();
BlocksAndItems.init();
}
}
18 changes: 18 additions & 0 deletions common/src/main/java/com/mrmelon54/ArcTech/Blocks.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.mrmelon54.ArcTech;

import com.mrmelon54.ArcTech.block.CraftingStationBlock;
import com.mrmelon54.ArcTech.block.WireCopperBlock;
import net.minecraft.util.valueproviders.UniformInt;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.DropExperienceBlock;
import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.block.state.properties.NoteBlockInstrument;
import net.minecraft.world.level.material.MapColor;

public class Blocks {
public static final Block CRAFTING_STATION = new CraftingStationBlock(BlockBehaviour.Properties.of().sound(SoundType.WOOD).strength(2.5f).ignitedByLava());
public static final Block WIRE_COPPER = new WireCopperBlock(BlockBehaviour.Properties.of().sound(SoundType.COPPER).strength(0.5f).dynamicShape());
public static final Block LITHIUM_ORE = new DropExperienceBlock(BlockBehaviour.Properties.of().mapColor(MapColor.STONE).instrument(NoteBlockInstrument.BASEDRUM).requiresCorrectToolForDrops().strength(3.0F, 3.0F), UniformInt.of(3, 7));
public static final Block DEEPSLATE_LITHIUM_ORE = new DropExperienceBlock(BlockBehaviour.Properties.copy(LITHIUM_ORE).mapColor(MapColor.DEEPSLATE).strength(4.5F, 3.0F).sound(SoundType.DEEPSLATE), UniformInt.of(3, 7));
}
29 changes: 29 additions & 0 deletions common/src/main/java/com/mrmelon54/ArcTech/BlocksAndItems.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.mrmelon54.ArcTech;

import dev.architectury.registry.registries.Registrar;
import net.minecraft.core.registries.Registries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.Block;

public class BlocksAndItems {
private static final Registrar<Block> blockReg = ArcTech.MANAGER.get().get(Registries.BLOCK);
private static final Registrar<Item> itemReg = ArcTech.MANAGER.get().get(Registries.ITEM);

public static void init() {
initBlockItem("arctech:crafting_station", Blocks.CRAFTING_STATION, new Item.Properties().stacksTo(61).arch$tab(CreativeTab.ARCTECH_CREATIVE_TAB));
initBlockItem("arctech:wire_copper", Blocks.WIRE_COPPER, new Item.Properties().arch$tab(CreativeTab.ARCTECH_CREATIVE_TAB));
initBlockItem("arctech:lithium_ore", Blocks.LITHIUM_ORE, new Item.Properties().arch$tab(CreativeTab.ARCTECH_CREATIVE_TAB));
initBlockItem("arctech:deepslate_lithium_ore", Blocks.DEEPSLATE_LITHIUM_ORE, new Item.Properties().arch$tab(CreativeTab.ARCTECH_CREATIVE_TAB));
}

private static ResourceLocation id(String a) {
return new ResourceLocation(a);
}

private static void initBlockItem(String loc, Block block, Item.Properties properties) {
blockReg.register(id(loc), () -> block);
itemReg.register(id(loc), () -> new BlockItem(block, properties));
}
}
16 changes: 16 additions & 0 deletions common/src/main/java/com/mrmelon54/ArcTech/CreativeTab.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.mrmelon54.ArcTech;

import dev.architectury.registry.CreativeTabRegistry;
import net.minecraft.core.registries.Registries;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.ItemStack;

public class CreativeTab {
public static final CreativeModeTab ARCTECH_CREATIVE_TAB = CreativeTabRegistry.create(Component.translatable("creative-tab.arctech.title"), () -> new ItemStack(Blocks.CRAFTING_STATION));

public static void init() {
ArcTech.MANAGER.get().get(Registries.CREATIVE_MODE_TAB).register(new ResourceLocation("creative-tab.arctech"), () -> CreativeTab.ARCTECH_CREATIVE_TAB);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package com.mrmelon54.ArcTech.block;

import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.RenderShape;
import net.minecraft.world.level.block.SimpleWaterloggedBlock;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
import net.minecraft.world.level.block.state.properties.BooleanProperty;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.level.material.FluidState;
import net.minecraft.world.level.material.Fluids;
import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.Shapes;
import net.minecraft.world.phys.shapes.VoxelShape;

public class CraftingStationBlock extends Block implements SimpleWaterloggedBlock {
public static VoxelShape SHAPE = Shapes.or(
Block.box(0, 13, 0, 16, 15, 16),
Block.box(0, 13, 0, 16, 16, 2),
Block.box(0, 13, 0, 2, 16, 16),
Block.box(14, 13, 0, 16, 16, 16),
Block.box(0, 13, 14, 16, 16, 16),
Block.box(0, 0, 0, 3, 15, 3),
Block.box(13, 0, 13, 16, 15, 16),
Block.box(0, 0, 13, 3, 15, 16),
Block.box(13, 0, 0, 16, 15, 3)
);
public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED;

public CraftingStationBlock(Properties properties) {
super(properties);
registerDefaultState(defaultBlockState().setValue(WATERLOGGED, false));
}

public BlockState updateShape(BlockState blockState, Direction direction, BlockState blockState2, LevelAccessor levelAccessor, BlockPos blockPos, BlockPos blockPos2) {
if (blockState.getValue(WATERLOGGED)) {
levelAccessor.scheduleTick(blockPos, Fluids.WATER, Fluids.WATER.getTickDelay(levelAccessor));
}

return super.updateShape(blockState, direction, blockState2, levelAccessor, blockPos, blockPos2);
}

@Override
public RenderShape getRenderShape(BlockState blockState) {
return RenderShape.MODEL;
}

@Override
public VoxelShape getShape(BlockState blockState, BlockGetter blockGetter, BlockPos blockPos, CollisionContext collisionContext) {
return SHAPE;
}

@Override
public boolean canPlaceLiquid(BlockGetter blockGetter, BlockPos blockPos, BlockState blockState, Fluid fluid) {
return fluid == Fluids.WATER;
}

public BlockState getStateForPlacement(BlockPlaceContext blockPlaceContext) {
FluidState fluidState = blockPlaceContext.getLevel().getFluidState(blockPlaceContext.getClickedPos());
boolean bl = fluidState.getType() == Fluids.WATER;
return defaultBlockState().setValue(WATERLOGGED, bl);
}

@Override
public FluidState getFluidState(BlockState blockState) {
return blockState.getValue(WATERLOGGED) ? Fluids.WATER.getSource(false) : super.getFluidState(blockState);
}

@Override
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
builder.add(WATERLOGGED);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.mrmelon54.ArcTech.block;

import net.minecraft.world.level.block.Block;

public class WireBlock extends Block {
public WireBlock(Properties properties) {
super(properties);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.mrmelon54.ArcTech.block;

public class WireCopperBlock extends WireBlock {
public WireCopperBlock(Properties properties) {
super(properties);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.mrmelon54.ArcTech.expect;

import dev.architectury.injectables.annotations.ExpectPlatform;
import net.minecraft.client.resources.model.UnbakedModel;
import net.minecraft.resources.ResourceLocation;

import java.util.function.Supplier;

public class LoadModelExpectPlatform {
@ExpectPlatform
public static <T extends UnbakedModel> void loadModel(ResourceLocation id, Supplier<T> supplier) {
throw new AssertionError();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.mrmelon54.ArcTech.mixin;

import net.minecraft.client.gui.screens.TitleScreen;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(TitleScreen.class)
public class MixinTitleScreen {
@Inject(at = @At("HEAD"), method = "init()V")
private void init(CallbackInfo info) {
System.out.println("Hello from example architectury common mixin!");
}
}
109 changes: 109 additions & 0 deletions common/src/main/java/com/mrmelon54/ArcTech/wire/WireBakedModel.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
package com.mrmelon54.ArcTech.wire;

import com.mrmelon54.ArcTech.ArcTech;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.renderer.block.model.ItemOverrides;
import net.minecraft.client.renderer.block.model.ItemTransforms;
import net.minecraft.client.renderer.texture.TextureAtlas;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.client.resources.model.Material;
import net.minecraft.core.Direction;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.RandomSource;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
import net.minecraft.world.level.block.state.properties.BooleanProperty;
import org.jetbrains.annotations.Nullable;

import java.util.*;
import java.util.function.Function;

@Environment(EnvType.CLIENT)
public class WireBakedModel implements BakedModel {
private final Map<ResourceLocation, BakedModel> partModels;
private final TextureAtlasSprite particleTexture;
private static final Material TEXTURE_WIRE_COPPER = new Material(TextureAtlas.LOCATION_BLOCKS, new ResourceLocation(ArcTech.MOD_ID, "part/wire_copper/"));

private static final ResourceLocation PART_CENTRAL = new ResourceLocation("arctech:part/wire_copper/central");
private static final ResourceLocation[] PART_SIDE = new ResourceLocation[]{
new ResourceLocation("arctech:part/wire_copper/up"),
new ResourceLocation("arctech:part/wire_copper/down"),
new ResourceLocation("arctech:part/wire_copper/north"),
new ResourceLocation("arctech:part/wire_copper/south"),
new ResourceLocation("arctech:part/wire_copper/east"),
new ResourceLocation("arctech:part/wire_copper/west"),
};
private static final BooleanProperty[] PART_PROPERTY = new BooleanProperty[]{
BlockStateProperties.UP,
BlockStateProperties.DOWN,
BlockStateProperties.NORTH,
BlockStateProperties.SOUTH,
BlockStateProperties.EAST,
BlockStateProperties.WEST,
};

WireBakedModel(Map<ResourceLocation, BakedModel> partModels, TextureAtlasSprite particleTexture) {
this.partModels = partModels;
this.particleTexture = particleTexture;
}


@Override
public List<BakedQuad> getQuads(@Nullable BlockState blockState, @Nullable Direction direction, RandomSource randomSource) {
if (blockState == null) return List.of();
List<Boolean> sides = Arrays.stream(PART_PROPERTY).map(new Function<BooleanProperty, Boolean>() {
@Override
public Boolean apply(BooleanProperty booleanProperty) {
return blockState.getValue(booleanProperty);
}
}).toList();

// start with central quad
List<BakedQuad> bakedQuads = new ArrayList<>(partModels.get(PART_CENTRAL).getQuads(blockState, direction, randomSource));

// add side quads
for (int i = 0; i < sides.size(); i++) {
if (sides.get(i))
bakedQuads.addAll(partModels.get(PART_SIDE[i]).getQuads(blockState, direction, randomSource));
}
return bakedQuads;
}

@Override
public boolean useAmbientOcclusion() {
return false;
}

@Override
public boolean isGui3d() {
return false;
}

@Override
public boolean usesBlockLight() {
return false;
}

@Override
public boolean isCustomRenderer() {
return true;
}

@Override
public TextureAtlasSprite getParticleIcon() {
return particleTexture;
}

@Override
public ItemTransforms getTransforms() {
return null;
}

@Override
public ItemOverrides getOverrides() {
return null;
}
}
5 changes: 5 additions & 0 deletions common/src/main/java/com/mrmelon54/ArcTech/wire/WireType.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.mrmelon54.ArcTech.wire;

public enum WireType {
COPPER
}
3 changes: 3 additions & 0 deletions common/src/main/resources/architectury.common.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"accessWidener": "arctech.accesswidener"
}
14 changes: 14 additions & 0 deletions common/src/main/resources/arctech-common.mixins.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"required": true,
"package": "com.mrmelon54.ArcTech.mixin",
"compatibilityLevel": "JAVA_17",
"minVersion": "0.8",
"client": [
"MixinTitleScreen"
],
"mixins": [
],
"injectors": {
"defaultRequire": 1
}
}
1 change: 1 addition & 0 deletions common/src/main/resources/arctech.accesswidener
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
accessWidener v2 named
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"variants": {
"": {
"model": "arctech:block/crafting_station"
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"variants": {
"": {
"model": "arctech:block/deepslate_lithium_ore"
}
}
}
Loading

0 comments on commit c6b59f3

Please sign in to comment.