Skip to content

Commit

Permalink
Streamlined registries, Hamster fixes, etc.
Browse files Browse the repository at this point in the history
  • Loading branch information
Sydokiddo committed Oct 25, 2024
1 parent 758ae88 commit 004df64
Show file tree
Hide file tree
Showing 61 changed files with 1,303 additions and 1,461 deletions.
7 changes: 3 additions & 4 deletions src/main/java/com/starfish_studios/hamsters/CreateCompat.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package com.starfish_studios.hamsters;

import com.simibubi.create.content.kinetics.BlockStressDefaults;
import net.minecraft.resources.ResourceLocation;

public class CreateCompat {

public static void setup(){
BlockStressDefaults.DEFAULT_CAPACITIES.put(new ResourceLocation(Hamsters.MOD_ID, "hamster_wheel"), 16.0);
BlockStressDefaults.DEFAULT_CAPACITIES.put(Hamsters.id("hamster_wheel"), 16.0);
}

}
}
20 changes: 13 additions & 7 deletions src/main/java/com/starfish_studios/hamsters/Hamsters.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,28 @@
import com.starfish_studios.hamsters.registry.*;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.loader.api.FabricLoader;

import net.minecraft.resources.ResourceLocation;

public class Hamsters implements ModInitializer {

public static final String MOD_ID = "hamsters";

public static ResourceLocation id(String name) {
return new ResourceLocation(MOD_ID, name);
}

@Override
public void onInitialize() {

FabricLoader.getInstance().getModContainer("create" ).ifPresent(modContainer -> CreateCompat.setup());

Reflection.initialize(
HamstersCreativeModeTab.class,
HamstersSoundEvents.class,
HamstersItems.class,
HamstersBlocks.class,
HamstersEntityType.class,
HamstersBlockEntities.class
HamstersItems.class,
HamstersBlocks.class,
HamstersEntityType.class,
HamstersBlockEntities.class,
HamstersSoundEvents.class,
HamstersCreativeModeTab.class
);
HamstersVanillaIntegration.serverInit();
}
Expand Down
16 changes: 6 additions & 10 deletions src/main/java/com/starfish_studios/hamsters/HamstersClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.client.rendering.v1.BlockEntityRendererRegistry;
import net.fabricmc.fabric.impl.blockrenderlayer.BlockRenderLayerMapImpl;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderers;
import net.minecraft.client.renderer.item.ItemProperties;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.resources.ResourceLocation;
Expand All @@ -20,26 +20,22 @@ public class HamstersClient implements ClientModInitializer {

@Override
public void onInitializeClient() {

HamstersVanillaIntegration.Client.clientInit();
registerRenderers();

GeckoLib.initialize();

ItemProperties.register(HamstersItems.HAMSTER, new ResourceLocation("variant"), (stack, world, entity, num) -> {
CompoundTag compoundTag = stack.getTag();
if (compoundTag != null && compoundTag.contains("Variant")) {
return (float)compoundTag.getInt("Variant") / 7;
}
String variantString = "Variant";
if (compoundTag != null && compoundTag.contains(variantString)) return (float) compoundTag.getInt(variantString) / 7;
return 0.333F;
});
}



@SuppressWarnings("all")
public static void registerRenderers() {
BlockEntityRendererRegistry.register(HamstersBlockEntities.HAMSTER_WHEEL,
context -> new HamsterWheelRenderer());

BlockEntityRenderers.register(HamstersBlockEntities.HAMSTER_WHEEL, context -> new HamsterWheelRenderer());
BlockRenderLayerMapImpl.INSTANCE.putBlock(HamstersBlocks.HAMSTER_WHEEL, RenderType.cutout());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,15 @@
import net.minecraft.client.model.geom.ModelLayerLocation;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.entity.EntityRendererProvider;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType;

import java.util.function.Supplier;

public class HamstersVanillaIntegration {
public static final ModelLayerLocation HAMSTER_LAYER = new ModelLayerLocation(new ResourceLocation(Hamsters.MOD_ID, "sitting_hamster"), "main");

public static final ModelLayerLocation HAMSTER_LAYER = new ModelLayerLocation(Hamsters.id("sitting_hamster"), "main");

public static void serverInit() {
}
public static void serverInit() {}

@Environment(EnvType.CLIENT)
public static class Client {
Expand All @@ -41,51 +38,51 @@ private static void registerRenderers() {
private static void registerModelLayers() {
EntityRendererRegistry.register(HamstersEntityType.HAMSTER, HamsterRenderer::new);
EntityRendererRegistry.register(HamstersEntityType.HAMSTER_NEW, HamsterNewRenderer::new);
EntityRendererRegistry.register(HamstersEntityType.HAMSTER_BALL, HamsterBallRenderer::new);

EntityModelLayerRegistry.registerModelLayer(HAMSTER_LAYER, LeftSittingHamsterModel::createBodyLayer);
EntityRendererRegistry.register(HamstersEntityType.HAMSTER_BALL, HamsterBallRenderer::new);
}

private static void registerBlockRenderLayers() {
BlockRenderLayerMap.INSTANCE.putBlocks(RenderType.cutout(),
HamstersBlocks.CAGE_PANEL,
HamstersBlocks.RED_CAGE_PANEL,
HamstersBlocks.ORANGE_CAGE_PANEL,
HamstersBlocks.YELLOW_CAGE_PANEL,
HamstersBlocks.LIME_CAGE_PANEL,
HamstersBlocks.GREEN_CAGE_PANEL,
HamstersBlocks.CYAN_CAGE_PANEL,
HamstersBlocks.BLUE_CAGE_PANEL,
HamstersBlocks.LIGHT_BLUE_CAGE_PANEL,
HamstersBlocks.PINK_CAGE_PANEL,
HamstersBlocks.MAGENTA_CAGE_PANEL,
HamstersBlocks.PURPLE_CAGE_PANEL,
HamstersBlocks.WHITE_CAGE_PANEL,
HamstersBlocks.LIGHT_GRAY_CAGE_PANEL,
HamstersBlocks.GRAY_CAGE_PANEL,
HamstersBlocks.BLACK_CAGE_PANEL,
HamstersBlocks.BROWN_CAGE_PANEL,
HamstersBlocks.RED_HAMSTER_BOWL,
HamstersBlocks.ORANGE_HAMSTER_BOWL,
HamstersBlocks.YELLOW_HAMSTER_BOWL,
HamstersBlocks.LIME_HAMSTER_BOWL,
HamstersBlocks.GREEN_HAMSTER_BOWL,
HamstersBlocks.CYAN_HAMSTER_BOWL,
HamstersBlocks.BLUE_HAMSTER_BOWL,
HamstersBlocks.LIGHT_BLUE_HAMSTER_BOWL,
HamstersBlocks.PINK_HAMSTER_BOWL,
HamstersBlocks.MAGENTA_HAMSTER_BOWL,
HamstersBlocks.PURPLE_HAMSTER_BOWL,
HamstersBlocks.WHITE_HAMSTER_BOWL,
HamstersBlocks.LIGHT_GRAY_HAMSTER_BOWL,
HamstersBlocks.GRAY_HAMSTER_BOWL,
HamstersBlocks.BLACK_HAMSTER_BOWL,
HamstersBlocks.BROWN_HAMSTER_BOWL
HamstersBlocks.CAGE_PANEL,
HamstersBlocks.RED_CAGE_PANEL,
HamstersBlocks.ORANGE_CAGE_PANEL,
HamstersBlocks.YELLOW_CAGE_PANEL,
HamstersBlocks.LIME_CAGE_PANEL,
HamstersBlocks.GREEN_CAGE_PANEL,
HamstersBlocks.CYAN_CAGE_PANEL,
HamstersBlocks.BLUE_CAGE_PANEL,
HamstersBlocks.LIGHT_BLUE_CAGE_PANEL,
HamstersBlocks.PINK_CAGE_PANEL,
HamstersBlocks.MAGENTA_CAGE_PANEL,
HamstersBlocks.PURPLE_CAGE_PANEL,
HamstersBlocks.WHITE_CAGE_PANEL,
HamstersBlocks.LIGHT_GRAY_CAGE_PANEL,
HamstersBlocks.GRAY_CAGE_PANEL,
HamstersBlocks.BLACK_CAGE_PANEL,
HamstersBlocks.BROWN_CAGE_PANEL,
HamstersBlocks.RED_HAMSTER_BOWL,
HamstersBlocks.ORANGE_HAMSTER_BOWL,
HamstersBlocks.YELLOW_HAMSTER_BOWL,
HamstersBlocks.LIME_HAMSTER_BOWL,
HamstersBlocks.GREEN_HAMSTER_BOWL,
HamstersBlocks.CYAN_HAMSTER_BOWL,
HamstersBlocks.BLUE_HAMSTER_BOWL,
HamstersBlocks.LIGHT_BLUE_HAMSTER_BOWL,
HamstersBlocks.PINK_HAMSTER_BOWL,
HamstersBlocks.MAGENTA_HAMSTER_BOWL,
HamstersBlocks.PURPLE_HAMSTER_BOWL,
HamstersBlocks.WHITE_HAMSTER_BOWL,
HamstersBlocks.LIGHT_GRAY_HAMSTER_BOWL,
HamstersBlocks.GRAY_HAMSTER_BOWL,
HamstersBlocks.BLACK_HAMSTER_BOWL,
HamstersBlocks.BROWN_HAMSTER_BOWL
);
}
}

public static <T extends Entity> void registerEntityRenderers(Supplier<EntityType<T>> type, EntityRendererProvider<T> renderProvider) {
@SuppressWarnings("all")
private static <T extends Entity> void registerEntityRenderers(Supplier<EntityType<T>> type, EntityRendererProvider<T> renderProvider) {
EntityRendererRegistry.register(type.get(), renderProvider);
}
}
}
72 changes: 29 additions & 43 deletions src/main/java/com/starfish_studios/hamsters/block/BottleBlock.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,7 @@
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.sounds.SoundSource;
import net.minecraft.util.RandomSource;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level;
Expand All @@ -22,89 +16,81 @@
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
import net.minecraft.world.level.block.state.properties.BooleanProperty;
import net.minecraft.world.level.block.state.properties.DirectionProperty;
import net.minecraft.world.level.block.state.properties.IntegerProperty;
import net.minecraft.world.level.material.Fluids;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

public class BottleBlock extends BaseEntityBlock implements SimpleWaterloggedBlock {
public static VoxelShape NORTH_AABB = Block.box(5, 2, 8, 11, 16, 16);
public static VoxelShape SOUTH_AABB = Block.box(5, 2, 0, 11, 16, 8);
public static VoxelShape EAST_AABB = Block.box(0, 2, 5, 8, 16, 11);
public static VoxelShape WEST_AABB = Block.box(8, 2, 5, 16, 16, 11);

private static final VoxelShape NORTH_AABB = Block.box(5, 2, 8, 11, 16, 16);
private static final VoxelShape SOUTH_AABB = Block.box(5, 2, 0, 11, 16, 8);
private static final VoxelShape EAST_AABB = Block.box(0, 2, 5, 8, 16, 11);
private static final VoxelShape WEST_AABB = Block.box(8, 2, 5, 16, 16, 11);

public static final DirectionProperty FACING = BlockStateProperties.FACING;
public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED;
private static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING;
private static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED;

public BottleBlock(Properties properties) {
super(properties);
this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH));
this.registerDefaultState(this.getStateDefinition().any().setValue(FACING, Direction.NORTH));
}

@Override
public BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
return HamstersBlockEntities.BLUE_HAMSTER_BOTTLE.create(pos, state);
public BlockEntity newBlockEntity(@NotNull BlockPos blockPos, @NotNull BlockState blockState) {
return HamstersBlockEntities.HAMSTER_BOTTLE.create(blockPos, blockState);
}

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

@Nullable
@Override
@Nullable @Override
public BlockState getStateForPlacement(BlockPlaceContext context) {
boolean waterlogged = context.getLevel().getFluidState(context.getClickedPos()).getType() == Fluids.WATER;
return this.getStateDefinition().any()
.setValue(FACING, context.getHorizontalDirection().getOpposite())
.setValue(WATERLOGGED, waterlogged);
.setValue(FACING, context.getHorizontalDirection().getOpposite())
.setValue(WATERLOGGED, context.getLevel().getFluidState(context.getClickedPos()).getType() == Fluids.WATER);
}

@Override
public void animateTick(BlockState blockState, Level level, BlockPos pos, RandomSource randomSource) {
if (level.getBlockState(pos.below()).isAir()) {
for (int i = 0; i < 1; ++i) {
double x = (double) pos.getX() + 0.6 + (level.random.nextDouble() * 0.25D - 0.25D);
double y = (double) pos.getY() - 0.0 + (level.random.nextDouble() * 0.2D - 0.1D);
double z = (double) pos.getZ() + 0.6 + (level.random.nextDouble() * 0.25D - 0.25D);
public void animateTick(@NotNull BlockState blockState, Level level, BlockPos blockPos, @NotNull RandomSource randomSource) {
if (level.getBlockState(blockPos.below()).isAir()) {
for (int particleAmount = 0; particleAmount < 1; ++particleAmount) {
double x = (double) blockPos.getX() + 0.6 + (level.getRandom().nextDouble() * 0.25D - 0.25D);
double y = (double) blockPos.getY() - 0.0 + (level.getRandom().nextDouble() * 0.2D - 0.1D);
double z = (double) blockPos.getZ() + 0.6 + (level.getRandom().nextDouble() * 0.25D - 0.25D);
level.addParticle(ParticleTypes.FALLING_WATER, x, y, z, 0.0D, 0.0D, 0.0D);
}
}
}



@Override
public InteractionResult use(BlockState blockState, Level level, BlockPos blockPos, Player player, InteractionHand interactionHand, BlockHitResult blockHitResult) {
return InteractionResult.PASS;
}

@Override
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
builder.add(FACING, WATERLOGGED);
}

@Override
public boolean propagatesSkylightDown(BlockState blockState, BlockGetter blockGetter, BlockPos blockPos) {
public boolean propagatesSkylightDown(@NotNull BlockState blockState, @NotNull BlockGetter blockGetter, @NotNull BlockPos blockPos) {
return true;
}

@SuppressWarnings("deprecation")
@Override
public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos currentPos, BlockPos neighborPos) {
if (state.getValue(WATERLOGGED)) level.scheduleTick(currentPos, Fluids.WATER, Fluids.WATER.getTickDelay(level));
return super.updateShape(state, direction, neighborState, level, currentPos, neighborPos);
public @NotNull BlockState updateShape(BlockState blockState, @NotNull Direction direction, @NotNull BlockState neighborState, @NotNull LevelAccessor level, @NotNull BlockPos currentPos, @NotNull BlockPos neighborPos) {
if (blockState.getValue(WATERLOGGED)) level.scheduleTick(currentPos, Fluids.WATER, Fluids.WATER.getTickDelay(level));
return super.updateShape(blockState, direction, neighborState, level, currentPos, neighborPos);
}

@SuppressWarnings("deprecation")
@Override
public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
return switch (state.getValue(FACING)) {
public @NotNull VoxelShape getShape(BlockState blockState, @NotNull BlockGetter blockGetter, @NotNull BlockPos blockPos, @NotNull CollisionContext collisionContext) {
return switch (blockState.getValue(FACING)) {
case SOUTH -> SOUTH_AABB;
case EAST -> EAST_AABB;
case WEST -> WEST_AABB;
default -> NORTH_AABB;
};
}
}
}
Loading

0 comments on commit 004df64

Please sign in to comment.