Jump to content

Recommended Posts

Posted

I want my mod to only load when running on the logical client side. The problem is that on initial setup `Minecraft.getInstance().level` is null and so I cannot tell the sides apart. Is there any other clean way of doing this or should I use the `Thread.currentThread()` method?

Posted

Well you see DistExecutor is for the physical side. My mod will never run on a server but only on the client side. I only need to set apart the logical server and the logical client.

Posted
  On 5/28/2021 at 10:38 AM, Antonii said:

Well you see DistExecutor is for the physical side. My mod will never run on a server but only on the client side. I only need to set apart the logical server and the logical client.

Expand  

what exactly should your mod do

if you want to write a client only mod you should use DistExecutor,
if you only have one method, class, code part that is only executed on the client,
the logical side is the better choice, therefore the question what you want to do

Posted (edited)
  Quote

the logical side is the better choice, therefore the question what you want to do

Expand  

Yes indeed logical side is better and exactly what I want to do! Now how do I do that? isClientSide() doesn't work....because `level` is null

Edited by Antonii
Posted
  On 5/28/2021 at 12:22 PM, Antonii said:

Yes indeed logical side is better and exactly what I want to do! Now how do I do that?

Expand  

again what exactly do you want to do, show your code, because I can't find a solution for your problem with:

  On 5/28/2021 at 12:22 PM, Antonii said:

isClientSide() doesn't work....because `level` is null

Expand  

 

Posted
public Main() {
	DistExecutor.safeRunWhenOn(Dist.CLIENT,()->SomeClass::Init);
}
//SomeClass::Init contains register code

This bad/not needed - my mod will never run on physical server

public Main() {
	if (Minecraft.getInstance() == null || !Minecraft.getInstance().level.isClientSide()) return;
	FMLJavaModLoadingContext.get().getModEventBus().addListener(this::Init);
}

This good but doesn't work because `level` is null

Posted (edited)

Now now there is no need for irony or insults. I am just asking for help. Redirecting me to a page I already read doesn't help, does it?

Now here is what I understood:

  Quote

The logical server is present within the physical server, but is also can run inside a physical client together with a logical client,

Expand  

So I must "protect" my code from all forms of server. Taking into consideration that this mod will only run on my PC and not on a physical server that leaves me with the following problem: how to differentiate between the logical server and logical client. The method isClientSide() seems appropriate but it is not available where I need it (perhaps at a later stage?)

 

 

  Quote

Yes it will. Do not write mods that will crash on server or client

Expand  

Let's say I do what you keep insisting I should do; I use DistExecutor for Dist.CLIENT and....I don't know if the mod is loaded on logical server or logical client. And this is because

  Quote

DistExecutor, which provides various methods to run different methods on different physical sides

Expand  

 

Edited by Antonii
Posted
  On 5/28/2021 at 12:46 PM, Antonii said:

how to differentiate between the logical server and logical client. The method isClientSide() seems appropriate but it is not available where I need it.

Expand  

you don't need it if your mod only runs on the client, this method would always return true

 

  On 5/28/2021 at 12:46 PM, Antonii said:

Let's say I do what you keep insisting I should do; I use DistExecutor for Dist.CLIENT and....I don't know if the mod is loaded on logical server or logical client. And this is because

Expand  

you still haven't understood Dist and DistExecutor, if your mod only runs on the client, the physical and logical side is the client

Posted (edited)

I admit I left one thing out: I will want to play a normal game locally. When I will do that won't my mod be loaded also on the logical server? It's true that in normal conditions the check is somewhat useless but just sometimes I don't want to load it when playing a singleplayer game. Also I will test my mod locally on a singleplayer world and that will have the same issues.

 

I used to have some sort of check in my mod in 1.12 version that did this.

Edited by Antonii
Posted (edited)
  Quote

This question makes no sense. Mod loading takes place before there is any kind of logical side. At mod loading time there is no integrated server, because there is no world loaded yet. As such the question "am I loading on the logical server" makes no sense.

Expand  

This is exactly what I thought! Thanks. This is why I said

  Quote

but it is not available where I need it (perhaps at a later stage?)

Expand  

So the issue at hand is to differentiate between the two...when? On events? I recall that some events where called on both sides.

 

  Quote

 At mod loading time there is no integrated server, because there is no world loaded yet.

Expand  

You must put this in the docs perhaps on the Sided page

Edited by Antonii
positive reinforcement
Posted (edited)
  On 5/28/2021 at 12:59 PM, Antonii said:

So the issue at hand is to differentiate between the two...when? On events? I recall that some events where called on both sides.

Expand  

yes or if you have data that only exist on one side (Edit: Example would be a capability)

Edited by Luis_ST

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

    • After some time minecraft crashes with an error. Here is the log https://drive.google.com/file/d/1o-2R6KZaC8sxjtLaw5qj0A-GkG_SuoB5/view?usp=sharing
    • The specific issue is that items in my inventory wont stack properly. For instance, if I punch a tree down to collect wood, the first block I collected goes to my hand. So when I punch the second block of wood to collect it, it drops, but instead of stacking with the piece of wood already in my hand, it goes to the second slot in my hotbar instead. Another example is that I'll get some dirt, and then when I'm placing it down later I'll accidentally place a block where I don't want it. When I harvest it again, it doesn't go back to the stack that it came from on my hotbar, where it should have gone, but rather into my inventory. That means that if my inventory is full, then the dirt wont be picked up even though there should be space available in the stack I'm holding. The forge version I'm using is 40.3.0, for java 1.18.2. I'll leave the mods I'm using here, and I'd appreciate it if anybody can point me in the right direction in regards to figuring out how to fix this. I forgot to mention that I think it only happens on my server but I'm not entirely sure. PLEASE HELP ME! LIST OF THE MODS. aaa_particles Adorn AdvancementPlaques AI-Improvements AkashicTome alexsdelight alexsmobs AmbientSounds amwplushies Animalistic another_furniture AppleSkin Aquaculture aquamirae architectury artifacts Atlas-Lib AutoLeveling AutoRegLib auudio balm betterfpsdist biggerstacks biomancy BiomesOPlenty blockui blueprint Bookshelf born_in_chaos Botania braincell BrassAmberBattleTowers brutalbosses camera CasinoCraft cfm (MrCrayfish’s Furniture Mod) chat_heads citadel cloth-config Clumps CMDCam CNB cobweb collective comforts convenientcurioscontainer cookingforblockheads coroutil CosmeticArmorReworked CozyHome CrabbersDelight crashexploitfixer crashutilities Create CreativeCore creeperoverhaul cristellib crittersandcompanions Croptopia CroptopiaAdditions CullLessLeaves curios curiouslanterns curiouslights Curses' Naturals CustomNPCs CyclopsCore dannys_expansion decocraft Decoration Mod DecorationDelightRefurbished Decorative Blocks Disenchanting DistantHorizons doubledoors DramaticDoors drippyloadingscreen durabilitytooltip dynamic-fps dynamiclights DynamicTrees DynamicTreesBOP DynamicTreesPlus Easy Dungeons EasyAnvils EasyMagic easy_npc eatinganimation ecologics effective_fg elevatorid embeddium emotecraft enchantlimiter EnchantmentDescriptions EnderMail engineersdecor entityculling entity_model_features entity_texture_features epicfight EvilCraft exlinefurniture expandability explosiveenhancement factory-blocks fairylights fancymenu FancyVideo FarmersDelight fast-ip-ping FastSuite ferritecore finsandtails FixMySpawnR Forge Middle Ages fossil FpsReducer2 furnish GamingDeco geckolib goblintraders goldenfood goodall H.e.b habitat harvest-with-ease hexerei hole_filler huge-structure-blocks HunterIllager iammusicplayer Iceberg illuminations immersive_paintings incubation infinitybuttons inventoryhud InventoryProfilesNext invocore ItemBorders itemzoom Jade jei (Just Enough Items) JetAndEliasArmors journeymap JRFTL justzoom kiwiboi Kobolds konkrete kotlinforforge lazydfu LegendaryTooltips libIPN lightspeed lmft lodestone LongNbtKiller LuckPerms Lucky77 MagmaMonsters malum ManyIdeasCore ManyIdeasDoors marbledsarsenal marg mcw-furniture mcw-lights mcw-paths mcw-stairs mcw-trapdoors mcw-windows meetyourfight melody memoryleakfix Mimic minecraft-comes-alive MineTraps minibosses MmmMmmMmmMmm MOAdecor (ART, BATH, COOKERY, GARDEN, HOLIDAYS, LIGHTS, SCIENCE) MobCatcher modonomicon mods_optimizer morehitboxes mowziesmobs MutantMonsters mysticalworld naturalist NaturesAura neapolitan NekosEnchantedBooks neoncraft2 nerb nifty NightConfigFixes nightlights nocube's_villagers_sell_animals NoSeeNoTick notenoughanimations obscure_api oculus oresabovediamonds otyacraftengine Paraglider Patchouli physics-mod Pillagers Gun PizzaCraft placeableitems Placebo player-animation-lib pneumaticcraft-repressurized polymorph PrettyPipes Prism projectbrazier Psychadelic-Chemistry PuzzlesLib realmrpg_imps_and_demons RecipesLibrary reeves-furniture RegionsUnexplored restrictedportals revive-me Scary_Mobs_And_Bosses selene shetiphiancore ShoulderSurfing smoothboot
    • Hi everyone, I'm currently developing a Forge 1.21 mod for Minecraft and I want to display a custom HUD overlay for a minigame. My goal: When the game starts, all players should see an item/block icon (from the base game, not a custom texture) plus its name/text in the HUD – similar to how the bossbar overlay works. The HUD should appear centered above the hotbar (or at a similar prominent spot), and update dynamically (icon and name change as the target item changes). What I've tried: I looked at many online tutorials and several GitHub repos (e.g. SeasonHUD, MiniHUD), but most of them use NeoForge or Forge versions <1.20 that provide the IGuiOverlay API (e.g. implements IGuiOverlay, RegisterGuiOverlaysEvent). In Forge 1.21, it seems that neither IGuiOverlay nor RegisterGuiOverlaysEvent exist anymore – at least, I can't import them and they are missing from the docs and code completion. I tried using RenderLevelStageEvent as a workaround but it is probably not intended for custom HUDs. I am not using NeoForge, and switching the project to NeoForge is currently not an option for me. I tried to look at the original minecraft source code to see how elements like hearts, hotbar etc are drawn on the screen but I am too new to Minecraft modding to understand. What I'm looking for: What is the correct way to add a custom HUD element (icon + text) in Forge 1.21, given that the previous overlay API is missing? Is there a new recommended event, callback, or method in Forge 1.21 for custom HUD overlays, or is everyone just using a workaround? Is there a minimal open-source example repo for Forge 1.21 that demonstrates a working HUD overlay without relying on NeoForge or deprecated Forge APIs? My ideal solution: Centered HUD element with an in-game item/block icon (from the base game's assets, e.g. a diamond or any ItemStack / Item) and its name as text, with a transparent background rectangle. It should be visible to the players when the mini game is running. Easy to update the item (e.g. static variable or other method), so it can change dynamically during the game. Any help, code snippets, or up-to-date references would be really appreciated! If this is simply not possible right now in Forge 1.21, it would also help to know that for sure. Thank you very much in advance!
    • The simple answer is there is not an easy way. You would need to know how to program in Java, as well as at least some familiarity with how Forge works so you could port the differences. You would also need the sourcecode for the original mod, and permission from the author to modify it, if they did not use some sort of open source license. So it's not impossible, but it would take some effort, but doing so would open up a whole new world of possibilities for you!
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

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