Jump to content

Server with Forge accepting vanilla clients


copygirl

Recommended Posts

I started making a server mod with optional client mod only to get surprised by this message after trying to connect with a vanilla client to a Forge server:

 

"You don't have FML installed, or your installation is too old"

 

Does this mean Forge servers will not accept any vanilla clients?

If so, why is that? And would it be possible/a good idea to change that for future versions of Forge?

 

Thanks.

 

PS: Maybe this is just me derping up. My mod has clientSideRequired set to false though, so not sure if it's my fault.

Link to comment
Share on other sites

You will need forge and any installed mods to join a modded server. However there is a bukkit plugin called Miltimodworld (http://www.mcportcentral.co.za/index.php?topic=929.0). It is still 1.2.5 but It allows you to make a modded world and unmodded. Vanilla clients can join the unmodded default world.

Link to comment
Share on other sites

You will need forge and any installed mods to join a modded server. However there is a bukkit plugin called Miltimodworld (http://www.mcportcentral.co.za/index.php?topic=929.0). It is still 1.2.5 but It allows you to make a modded world and unmodded. Vanilla clients can join the unmodded default world.

Thanks for the info, but that doesn't really help me as a mod developer.

Link to comment
Share on other sites

Forge/FML packets are altered, so yes, need it on both sides.

What's the reason for that? And would it be possible to remove the need for clients to have forge installed in the future?

It's kind of weird, as a player, having to install a mod loader/API without installing any actual mods that use it (in this rare case).

Link to comment
Share on other sites

Forge/FML packets are altered, so yes, need it on both sides.

What's the reason for that? And would it be possible to remove the need for clients to have forge installed in the future?

It's kind of weird, as a player, having to install a mod loader/API without installing any actual mods that use it (in this rare case).

 

Because Forge needs to alter packages for various hooks and because the Client runs internally a server now (which needs packets, too), I doubt this will be changed.

Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! |

mah twitter

This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.

Link to comment
Share on other sites

Because Forge needs to alter packages for various hooks and because the Client runs internally a server now (which needs packets, too), I doubt this will be changed.

Mind explaining that to someone who does not yet have understanding of the inner workings of Forge? Which packets are altered and why? And why do you think this won't get changed?

Also what do you mean by "because the Client runs internally a server now"? I don't see why that would matter in this case.

 

Thanks for all the responses so far.

 

I'm aware that making a plugin for Bukkit instead would be the better choice, but I'm not a fan of it. Also Forge is meant/used mainly for Client mods, I think. Though I see no reasons not to perhaps change that in there future, are there any? It would be cool to be able to develop mods that work on the server, and are only optional on the client, without the need for Forge, so it works with vanilla clients as well.

Link to comment
Share on other sites

It doesnt alter any packets, it however does interrupt the login sequence to do things that are absolutely necessary to make mods work.

Almost every mod has a client side componenet, or SHOULD have a client side component, so needing Forge client side is not that big of a deal.

If you want to work around it bukkit is designed for soley server side mods, and with CB+ Forge and Bukkit work together just fine.

I do Forge for free, however the servers to run it arn't free, so anything is appreciated.
Consider supporting the team on Patreon

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Hello everyone, I'm making this post to seek help for my modded block, It's a special block called FrozenBlock supposed to take the place of an old block, then after a set amount of ticks, it's supposed to revert its Block State, Entity, data... to the old block like this :  The problem I have is that the system breaks when handling multi blocks (I tried some fix but none of them worked) :  The bug I have identified is that the function "setOldBlockFields" in the item's "setFrozenBlock" function gets called once for the 1st block of multiblock getting frozen (as it should), but gets called a second time BEFORE creating the first FrozenBlock with the data of the 1st block, hence giving the same data to the two FrozenBlock :   Old Block Fields set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=head] BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@73681674 BlockEntityData : id:"minecraft:bed",x:3,y:-60,z:-6} Old Block Fields set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} Frozen Block Entity set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockPos{x=3, y=-60, z=-6} BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} Frozen Block Entity set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockPos{x=2, y=-60, z=-6} BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} here is the code inside my custom "freeze" item :    @Override     public @NotNull InteractionResult useOn(@NotNull UseOnContext pContext) {         if (!pContext.getLevel().isClientSide() && pContext.getHand() == InteractionHand.MAIN_HAND) {             BlockPos blockPos = pContext.getClickedPos();             BlockPos secondBlockPos = getMultiblockPos(blockPos, pContext.getLevel().getBlockState(blockPos));             if (secondBlockPos != null) {                 createFrozenBlock(pContext, secondBlockPos);             }             createFrozenBlock(pContext, blockPos);             return InteractionResult.SUCCESS;         }         return super.useOn(pContext);     }     public static void createFrozenBlock(UseOnContext pContext, BlockPos blockPos) {         BlockState oldState = pContext.getLevel().getBlockState(blockPos);         BlockEntity oldBlockEntity = oldState.hasBlockEntity() ? pContext.getLevel().getBlockEntity(blockPos) : null;         CompoundTag oldBlockEntityData = oldState.hasBlockEntity() ? oldBlockEntity.serializeNBT() : null;         if (oldBlockEntity != null) {             pContext.getLevel().removeBlockEntity(blockPos);         }         BlockState FrozenBlock = setFrozenBlock(oldState, oldBlockEntity, oldBlockEntityData);         pContext.getLevel().setBlockAndUpdate(blockPos, FrozenBlock);     }     public static BlockState setFrozenBlock(BlockState blockState, @Nullable BlockEntity blockEntity, @Nullable CompoundTag blockEntityData) {         BlockState FrozenBlock = BlockRegister.FROZEN_BLOCK.get().defaultBlockState();         ((FrozenBlock) FrozenBlock.getBlock()).setOldBlockFields(blockState, blockEntity, blockEntityData);         return FrozenBlock;     }  
    • It is an issue with quark - update it to this build: https://www.curseforge.com/minecraft/mc-mods/quark/files/3642325
    • Remove Instant Massive Structures Mod from your server     Add new crash-reports with sites like https://paste.ee/  
    • Update your drivers: https://www.amd.com/en/support/graphics/amd-radeon-r9-series/amd-radeon-r9-200-series/amd-radeon-r9-280x
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.