Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.

removing unused superhaunted blocks

Lera 112f4bd4 eb0a1aac

-174
-2
common/src/main/java/net/lerariemann/infinity/InfinityModClient.java
··· 4 4 import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; 5 5 import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; 6 6 import net.lerariemann.infinity.item.F4Item; 7 - import net.lerariemann.infinity.registry.core.ModBlockEntities; 8 7 import net.lerariemann.infinity.registry.core.ModEntities; 9 8 import net.lerariemann.infinity.registry.core.ModItems; 10 9 import net.lerariemann.infinity.registry.var.ModPayloads; ··· 25 24 public static void initializeClient() { 26 25 ModPayloads.registerPayloadsClient(); 27 26 ModEntities.registerEntityRenderers(); 28 - ModBlockEntities.registerBlockEntityRenderers(); 29 27 ModScreenHandlers.register(); 30 28 KeyMappingRegistry.register(f4ConfigKey); 31 29 ClientTickEvents.END_CLIENT_TICK.register(client -> {
-78
common/src/main/java/net/lerariemann/infinity/block/custom/SuperHauntedBlock.java
··· 1 - package net.lerariemann.infinity.block.custom; 2 - 3 - import com.mojang.serialization.MapCodec; 4 - import net.lerariemann.infinity.block.entity.HauntedBlockEntity; 5 - import net.minecraft.block.*; 6 - import net.minecraft.block.entity.BlockEntity; 7 - import net.minecraft.server.world.ServerWorld; 8 - import net.minecraft.util.math.BlockPos; 9 - import net.minecraft.util.math.Direction; 10 - import net.minecraft.util.math.random.Random; 11 - import net.minecraft.util.shape.VoxelShape; 12 - import net.minecraft.world.BlockView; 13 - import net.minecraft.world.World; 14 - import org.jetbrains.annotations.Nullable; 15 - 16 - public class SuperHauntedBlock extends BlockWithEntity { 17 - public static final MapCodec<SuperHauntedBlock> CODEC = createCodec(SuperHauntedBlock::new); 18 - public SuperHauntedBlock(Settings settings) { 19 - super(settings); 20 - } 21 - 22 - public static BlockState getOriginal(BlockView w, BlockPos p) { 23 - if (w.getBlockEntity(p) instanceof HauntedBlockEntity e) return e.original; 24 - return Blocks.GLASS.getDefaultState(); 25 - } 26 - 27 - @Override 28 - public void onBlockAdded(BlockState state, World world, BlockPos pos, BlockState oldState, boolean notify) { 29 - super.onBlockAdded(state, world, pos, oldState, notify); 30 - if (world.getBlockEntity(pos) instanceof HauntedBlockEntity e) { 31 - e.updateFrom(oldState); 32 - } 33 - int t = HauntedBlockEntity.getExpiryTicks(world); 34 - if (t > 0) world.scheduleBlockTick(pos, this, t); 35 - } 36 - 37 - @Override 38 - public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, net.minecraft.util.math.random.Random random) { 39 - super.scheduledTick(state, world, pos, random); 40 - world.setBlockState(pos, getOriginal(world, pos)); 41 - } 42 - 43 - @Override 44 - public void randomTick(BlockState state, ServerWorld world, BlockPos pos, Random random) { 45 - world.setBlockState(pos, getOriginal(world, pos)); 46 - } 47 - 48 - @Override 49 - public VoxelShape getCollisionShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { 50 - return getOriginal(world, pos).getCollisionShape(world, pos); 51 - } 52 - @Override 53 - protected VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { 54 - return getOriginal(world, pos).getOutlineShape(world, pos); 55 - } 56 - 57 - @Override 58 - public int getWeakRedstonePower(BlockState state, BlockView world, BlockPos pos, Direction direction) { 59 - return 15; 60 - } 61 - @Override 62 - public int getStrongRedstonePower(BlockState state, BlockView world, BlockPos pos, Direction direction) { 63 - return 15; 64 - } 65 - @Override 66 - protected boolean emitsRedstonePower(BlockState state) { 67 - return true; 68 - } 69 - 70 - @Override 71 - protected MapCodec<? extends BlockWithEntity> getCodec() { 72 - return CODEC; 73 - } 74 - @Override 75 - public @Nullable BlockEntity createBlockEntity(BlockPos pos, BlockState state) { 76 - return new HauntedBlockEntity(pos, state); 77 - } 78 - }
-54
common/src/main/java/net/lerariemann/infinity/block/entity/HauntedBlockEntity.java
··· 1 - package net.lerariemann.infinity.block.entity; 2 - 3 - import net.lerariemann.infinity.registry.core.ModBlockEntities; 4 - import net.minecraft.block.BlockState; 5 - import net.minecraft.block.Blocks; 6 - import net.minecraft.block.entity.BlockEntity; 7 - import net.minecraft.nbt.NbtCompound; 8 - import net.minecraft.nbt.NbtOps; 9 - import net.minecraft.network.listener.ClientPlayPacketListener; 10 - import net.minecraft.network.packet.Packet; 11 - import net.minecraft.network.packet.s2c.play.BlockEntityUpdateS2CPacket; 12 - import net.minecraft.registry.RegistryWrapper; 13 - import net.minecraft.util.math.BlockPos; 14 - import net.minecraft.world.World; 15 - import org.jetbrains.annotations.Nullable; 16 - 17 - public class HauntedBlockEntity extends BlockEntity { 18 - public BlockState original; 19 - 20 - public HauntedBlockEntity(BlockPos pos, BlockState state) { 21 - super(ModBlockEntities.HAUNTED.get(), pos, state); 22 - original = Blocks.AIR.getDefaultState(); 23 - } 24 - 25 - public static int getExpiryTicks(World w) { 26 - return w.random.nextBetween(20, 200); 27 - } 28 - 29 - public void writeNbt(NbtCompound tag, RegistryWrapper.WrapperLookup registryLookup) { 30 - super.writeNbt(tag, registryLookup); 31 - BlockState.CODEC.encodeStart(NbtOps.INSTANCE, original).ifSuccess(e -> tag.put("InnerBlockState", e)); 32 - } 33 - 34 - public void readNbt(NbtCompound tag, RegistryWrapper.WrapperLookup registryLookup) { 35 - super.readNbt(tag, registryLookup); 36 - if (tag.contains("InnerBlockState")) 37 - BlockState.CODEC.decode(NbtOps.INSTANCE, tag.get("InnerBlockState")).ifSuccess(e -> original = e.getFirst()); 38 - } 39 - 40 - @Nullable 41 - @Override 42 - public Packet<ClientPlayPacketListener> toUpdatePacket() { 43 - return BlockEntityUpdateS2CPacket.create(this); 44 - } 45 - @Override 46 - public NbtCompound toInitialChunkDataNbt(RegistryWrapper.WrapperLookup registryLookup) { 47 - return createNbt(registryLookup); 48 - } 49 - 50 - public void updateFrom(BlockState bs) { 51 - original = bs; 52 - markDirty(); 53 - } 54 - }
-30
common/src/main/java/net/lerariemann/infinity/block/entity/HauntedRenderer.java
··· 1 - package net.lerariemann.infinity.block.entity; 2 - 3 - import net.fabricmc.api.EnvType; 4 - import net.fabricmc.api.Environment; 5 - import net.minecraft.block.BlockRenderType; 6 - import net.minecraft.block.BlockState; 7 - import net.minecraft.client.render.RenderLayers; 8 - import net.minecraft.client.render.VertexConsumerProvider; 9 - import net.minecraft.client.render.block.BlockRenderManager; 10 - import net.minecraft.client.render.block.entity.BlockEntityRenderer; 11 - import net.minecraft.client.render.block.entity.BlockEntityRendererFactory; 12 - import net.minecraft.client.util.math.MatrixStack; 13 - import net.minecraft.util.math.random.Random; 14 - 15 - @Environment(EnvType.CLIENT) 16 - public class HauntedRenderer implements BlockEntityRenderer<HauntedBlockEntity> { 17 - BlockRenderManager manager; 18 - 19 - public HauntedRenderer(BlockEntityRendererFactory.Context ctx) { 20 - manager = ctx.getRenderManager(); 21 - } 22 - 23 - @Override 24 - public void render(HauntedBlockEntity entity, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) { 25 - BlockState bs = entity.original; 26 - if (bs.getRenderType() != BlockRenderType.INVISIBLE) 27 - manager.renderBlock(bs, entity.getPos(), entity.getWorld(), matrices, 28 - vertexConsumers.getBuffer(RenderLayers.getBlockLayer(bs)), true, Random.create()); 29 - } 30 - }
-8
common/src/main/java/net/lerariemann/infinity/registry/core/ModBlockEntities.java
··· 37 37 BlockEntityType.Builder.create(ChromaticBlockEntity::new, 38 38 ModBlocks.CHROMATIC_WOOL.get(), 39 39 ModBlocks.CHROMATIC_CARPET.get()).build(type("chromatic"))); 40 - public static final RegistrySupplier<BlockEntityType<HauntedBlockEntity>> HAUNTED = 41 - BLOCK_ENTITY_TYPES.register("haunted", () -> 42 - BlockEntityType.Builder.create(HauntedBlockEntity::new, 43 - ModBlocks.HAUNTED.get()).build(type("haunted"))); 44 40 45 41 46 42 public static void registerBlockEntities() { 47 43 BLOCK_ENTITY_TYPES.register(); 48 - } 49 - 50 - public static void registerBlockEntityRenderers() { 51 - BlockEntityRendererRegistry.register(HAUNTED.get(), HauntedRenderer::new); 52 44 } 53 45 }
-2
common/src/main/java/net/lerariemann/infinity/registry/core/ModBlocks.java
··· 50 50 new IridescentKelpBlock.Plant(AbstractBlock.Settings.copy(Blocks.KELP).mapColor(MapColor.MAGENTA))); 51 51 public static final RegistrySupplier<Block> NOTES_BLOCK = BLOCKS.register("notes_block", () -> 52 52 new NotesBlock(AbstractBlock.Settings.copy(Blocks.NOTE_BLOCK).ticksRandomly())); 53 - public static final RegistrySupplier<Block> HAUNTED = BLOCKS.register("haunted", () -> 54 - new SuperHauntedBlock(AbstractBlock.Settings.copy(Blocks.GLASS))); 55 53 public static final RegistrySupplier<Block> HAUNTED_AIR = BLOCKS.register("haunted_air", () -> 56 54 new HauntedBlock(Blocks.AIR)); 57 55