diff options
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/moe/nea/funnyteleporters/ColouredChestBlock.java | 113 | ||||
-rw-r--r-- | src/main/java/moe/nea/funnyteleporters/ColouredChestBlockEntity.java | 17 | ||||
-rw-r--r-- | src/main/java/moe/nea/funnyteleporters/FunnyRegistry.java | 34 | ||||
-rw-r--r-- | src/main/java/moe/nea/funnyteleporters/FunnyTeleporters.java | 17 | ||||
-rw-r--r-- | src/main/java/moe/nea/funnyteleporters/mixin/ExampleMixin.java | 15 | ||||
-rw-r--r-- | src/main/resources/assets/funny-teleporters/icon.png | bin | 0 -> 4352 bytes | |||
-rw-r--r-- | src/main/resources/fabric.mod.json | 41 | ||||
-rw-r--r-- | src/main/resources/funny-teleporters.mixins.json | 11 |
8 files changed, 248 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 diff --git a/src/main/resources/assets/funny-teleporters/icon.png b/src/main/resources/assets/funny-teleporters/icon.png Binary files differnew file mode 100644 index 0000000..71d4949 --- /dev/null +++ b/src/main/resources/assets/funny-teleporters/icon.png diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json new file mode 100644 index 0000000..4f92431 --- /dev/null +++ b/src/main/resources/fabric.mod.json @@ -0,0 +1,41 @@ +{ + "schemaVersion": 1, + "id": "funny-teleporters", + "version": "${version}", + "name": "Funny Teleporters", + "description": "This is an example description! Tell everyone what your mod is about!", + "authors": [ + "Me!" + ], + "contact": { + "homepage": "https://fabricmc.net/", + "sources": "https://github.com/FabricMC/fabric-example-mod" + }, + "license": "CC0-1.0", + "icon": "assets/funny-teleporters/icon.png", + "environment": "*", + "entrypoints": { + "main": [ + "moe.nea.funnyteleporters.FunnyTeleporters" + ], + "client": [ + "moe.nea.funnyteleporters.FunnyTeleportersClient" + ] + }, + "mixins": [ + "funny-teleporters.mixins.json", + { + "config": "funny-teleporters.client.mixins.json", + "environment": "client" + } + ], + "depends": { + "fabricloader": ">=0.16.9", + "minecraft": "~1.21", + "java": ">=21", + "fabric-api": "*" + }, + "suggests": { + "another-mod": "*" + } +}
\ No newline at end of file diff --git a/src/main/resources/funny-teleporters.mixins.json b/src/main/resources/funny-teleporters.mixins.json new file mode 100644 index 0000000..1b0964e --- /dev/null +++ b/src/main/resources/funny-teleporters.mixins.json @@ -0,0 +1,11 @@ +{ + "required": true, + "package": "moe.nea.funnyteleporters.mixin", + "compatibilityLevel": "JAVA_21", + "mixins": [ + "ExampleMixin" + ], + "injectors": { + "defaultRequire": 1 + } +}
\ No newline at end of file |