diff options
Diffstat (limited to 'src/main/java/moe/nea/funnyteleporters')
5 files changed, 196 insertions, 0 deletions
diff --git a/src/main/java/moe/nea/funnyteleporters/ColouredChestBlock.java b/src/main/java/moe/nea/funnyteleporters/ColouredChestBlock.java new file mode 100644 index 0000000..eb68f95 --- /dev/null +++ b/src/main/java/moe/nea/funnyteleporters/ColouredChestBlock.java @@ -0,0 +1,113 @@ +package moe.nea.funnyteleporters; + +import com.mojang.serialization.MapCodec; +import eu.pb4.polymer.core.api.block.PolymerBlock; +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.AbstractChestBlock; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.ChestBlock; +import net.minecraft.block.DoubleBlockProperties; +import net.minecraft.block.EnderChestBlock; +import net.minecraft.block.FacingBlock; +import net.minecraft.block.HorizontalFacingBlock; +import net.minecraft.block.Waterloggable; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.ChestBlockEntity; +import net.minecraft.entity.ai.pathing.NavigationType; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.fluid.FluidState; +import net.minecraft.fluid.Fluids; +import net.minecraft.item.ItemPlacementContext; +import net.minecraft.state.StateManager; +import net.minecraft.state.property.Properties; +import net.minecraft.state.property.Property; +import net.minecraft.text.Text; +import net.minecraft.util.ActionResult; +import net.minecraft.util.BlockMirror; +import net.minecraft.util.BlockRotation; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.world.World; +import net.minecraft.world.WorldAccess; + +public class ColouredChestBlock extends AbstractChestBlock<ColouredChestBlockEntity> implements PolymerBlock, Waterloggable { + static Property<Direction> FACING = HorizontalFacingBlock.FACING; + static Property<Boolean> WATERLOGGED = Properties.WATERLOGGED; + + public ColouredChestBlock(Settings settings) { + super(settings, () -> FunnyRegistry.COLOURED_CHEST_ENTITY); + setDefaultState(getStateManager() + .getDefaultState() + .with(FACING, Direction.NORTH) + .with(WATERLOGGED, false)); + } + + @Override + public BlockState getPolymerBlockState(BlockState blockState) { + return Blocks.CHEST.getStateWithProperties(blockState); + } + + @Override + public BlockEntity createBlockEntity(BlockPos pos, BlockState state) { + return new ColouredChestBlockEntity(pos, state); + } + + @Override + public BlockState getPlacementState(ItemPlacementContext ctx) { + return getDefaultState().with(FACING, ctx.getHorizontalPlayerFacing().getOpposite()).with(WATERLOGGED, ctx.getWorld().getFluidState(ctx.getBlockPos()).getFluid() == Fluids.WATER); + } + + @Override + protected ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, BlockHitResult hit) { + // TODO: create a ui or something to configure frequency + player.sendMessage(Text.literal("Ender Chest geƶffnet" + player)); + return super.onUse(state, world, pos, player, hit); + } + + @Override + protected BlockState rotate(BlockState state, BlockRotation rotation) { + return state.with(FACING, rotation.rotate(state.get(FACING))); + } + + @Override + protected BlockState mirror(BlockState state, BlockMirror mirror) { + return state.rotate(mirror.getRotation(state.get(FACING))); + } + + @Override + protected void appendProperties(StateManager.Builder<Block, BlockState> builder) { + builder.add(FACING, WATERLOGGED); + } + + @Override + protected FluidState getFluidState(BlockState state) { + return state.get(WATERLOGGED) ? Fluids.WATER.getStill(false) : super.getFluidState(state); + } + + @Override + protected BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) { + if (state.get(WATERLOGGED)) + world.scheduleFluidTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world)); + return super.getStateForNeighborUpdate(state, direction, neighborState, world, pos, neighborPos); + } + + @Override + protected boolean canPathfindThrough(BlockState state, NavigationType type) { + return false; + } + + static final MapCodec<ColouredChestBlock> CODEC = createCodec(ColouredChestBlock::new); + + @Override + protected MapCodec<? extends AbstractChestBlock<ColouredChestBlockEntity>> getCodec() { + return CODEC; + } + + @Override + public DoubleBlockProperties.PropertySource<? extends ChestBlockEntity> getBlockEntitySource(BlockState state, World world, BlockPos pos, boolean ignoreBlocked) { + return DoubleBlockProperties.PropertyRetriever::getFallback; + } +} diff --git a/src/main/java/moe/nea/funnyteleporters/ColouredChestBlockEntity.java b/src/main/java/moe/nea/funnyteleporters/ColouredChestBlockEntity.java new file mode 100644 index 0000000..e26aea1 --- /dev/null +++ b/src/main/java/moe/nea/funnyteleporters/ColouredChestBlockEntity.java @@ -0,0 +1,17 @@ +package moe.nea.funnyteleporters; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.block.entity.ChestBlockEntity; +import net.minecraft.util.math.BlockPos; + +public class ColouredChestBlockEntity extends ChestBlockEntity { + public ColouredChestBlockEntity(BlockPos blockPos, BlockState blockState) { + this(FunnyRegistry.COLOURED_CHEST_ENTITY, blockPos, blockState); + } + + protected ColouredChestBlockEntity(BlockEntityType<?> blockEntityType, BlockPos blockPos, BlockState blockState) { + super(blockEntityType, blockPos, blockState); + } +} diff --git a/src/main/java/moe/nea/funnyteleporters/FunnyRegistry.java b/src/main/java/moe/nea/funnyteleporters/FunnyRegistry.java new file mode 100644 index 0000000..0297425 --- /dev/null +++ b/src/main/java/moe/nea/funnyteleporters/FunnyRegistry.java @@ -0,0 +1,34 @@ +package moe.nea.funnyteleporters; + +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.Block; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; +import net.minecraft.registry.Registries; +import net.minecraft.registry.Registry; +import net.minecraft.util.Identifier; + +public class FunnyRegistry { + public static Block COLOURED_CHEST = registerBlock("coloured_chest", new ColouredChestBlock(AbstractBlock.Settings.create())); + public static BlockEntityType<ColouredChestBlockEntity> COLOURED_CHEST_ENTITY = registerBlockEntity("coloured_chest", BlockEntityType.Builder.create(ColouredChestBlockEntity::new, COLOURED_CHEST)); + + + private static <T extends BlockEntity> BlockEntityType<T> registerBlockEntity(String name, BlockEntityType.Builder<T> builder, Block... blocks) { + return Registry.register(Registries.BLOCK_ENTITY_TYPE, + Identifier.of("funny_teleporters", name), + builder.build() + ); + } + + private static <T extends Block> T registerBlock(String name, T block) { + var id = Identifier.of("funny_teleporters", name); + Registry.register(Registries.ITEM, id, new BlockItem(block, new Item.Settings())); + return Registry.register(Registries.BLOCK, id, block); + } + + public static void init() { + + } +} diff --git a/src/main/java/moe/nea/funnyteleporters/FunnyTeleporters.java b/src/main/java/moe/nea/funnyteleporters/FunnyTeleporters.java new file mode 100644 index 0000000..eb4accb --- /dev/null +++ b/src/main/java/moe/nea/funnyteleporters/FunnyTeleporters.java @@ -0,0 +1,17 @@ +package moe.nea.funnyteleporters; + +import net.fabricmc.api.ModInitializer; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class FunnyTeleporters implements ModInitializer { + public static final String MOD_ID = "funny-teleporters"; + + public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID); + + @Override + public void onInitialize() { + FunnyRegistry.init(); + } +}
\ No newline at end of file diff --git a/src/main/java/moe/nea/funnyteleporters/mixin/ExampleMixin.java b/src/main/java/moe/nea/funnyteleporters/mixin/ExampleMixin.java new file mode 100644 index 0000000..082f20b --- /dev/null +++ b/src/main/java/moe/nea/funnyteleporters/mixin/ExampleMixin.java @@ -0,0 +1,15 @@ +package moe.nea.funnyteleporters.mixin; + +import net.minecraft.server.MinecraftServer; +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(MinecraftServer.class) +public class ExampleMixin { + @Inject(at = @At("HEAD"), method = "loadWorld") + private void init(CallbackInfo info) { + // This code is injected into the start of MinecraftServer.loadWorld()V + } +}
\ No newline at end of file |