Jump to content

[1.15.2- 31.1.0] DefferdWorkQueue is Deprecated what should i use instead ?


TheZombie1999

Recommended Posts

Dear Fellow Minecraft Modders,

i am currently trying to register an Screen Object in the FmlClientSetup event.

To do this many tutorial use the DefferdWorkQueue.runLater Method, but in my current minecraft forge version [1.15.2- 31.1.0] this class is deprecated and doesn't work.

So my question is what do is use instead to achieve the same goal.

The documentation recomends to use the IThreadListener but i cant find out how to use it over even where the Interface or class should be located.

 

When i launch the mod using the DefferdWorkQueue following error Message appears:

encounterd an errror processing defferd work

java.lang.NullPointerException: Registry Object not present

 

Source:

@SubscribeEvent
   public static void clientSetupEvent (final FMLClientSetupEvent event){
       
       DeferredWorkQueue.runLater(()->ScreenManager.registerFactory(ModContainerTypes.SOLAR_PANEL.get(),SolarPanelScreen::new));


   }

 

if you need more information in a happy to provide more.

 

Edited by TheZombie1999
Link to comment
Share on other sites

DeferredWorkQueue works fine. Did you even read the documentation? There is no replacement yet.

 

If you receive that error, it is not related to DeferredWorkQueue (in fact it means that DeferredWorkQueue works, right? Otherwise your code would not be called). It means that you have not used DeferredRegister properly. Show more of your code.

  • Thanks 1
Link to comment
Share on other sites

Thank you for your quick reply. 

i included my log files because i don't understand what my mistake is.

 

my code is as follows:

 

public class ModContainerTypes {
    public static final DeferredRegister<ContainerType<?>> CONTAINER_TYPES = new DeferredRegister<>(ForgeRegistries.CONTAINERS, NovusTechnica.MODID);

    public static final RegistryObject<ContainerType<SolarPanelContainer>> SOLAR_PANEL = CONTAINER_TYPES.register("solar_panel",() -> (IForgeContainerType.create(SolarPanelContainer::new)));
}

 

 

public class SolarPanelScreen extends ContainerScreen<SolarPanelContainer> {

    private static final ResourceLocation BACKGROUND_TEXTURE = new ResourceLocation(NovusTechnica.MODID,"/textures/gui/solar_panle_container.png");

    public SolarPanelScreen(SolarPanelContainer screenContainer, PlayerInventory inv, ITextComponent titleIn) {
        super(screenContainer, inv, titleIn);
    }

    @Override
    protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) {
        RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F);
        getMinecraft().getTextureManager().bindTexture(BACKGROUND_TEXTURE);
        int startX = this.guiLeft;
        int startY = this.guiTop;

        this.blit(startX,startY, 0,0,this.xSize,this.ySize);

        final SolarPanelTileEntity tileEntity = container.tileEntity;
      final SettableEnergyStorage settableStorage = tileEntity.energy;

      final int energyStored = settableStorage.getEnergyStored();

      if (energyStored > 0) { // Draw energy bar
         //this.blit();
            // ToDo set blit
      }
    }

    @Override
    public void render(int mouseX, int mouseY, float partickelTicks) {
        this.renderBackground();
        super.render(mouseX, mouseY, partickelTicks);
        this.renderHoveredToolTip(mouseX,mouseY);

        // TODO zahlen werte anpassen
        int relMouseX = mouseX - this.guiLeft;
      int relMouseY = mouseY - this.guiTop;
      boolean energyBarHovered = relMouseX > 151 && relMouseX < 166 && relMouseY > 10 && relMouseY < 76;
      if (energyBarHovered) {
         String tooltip = new TranslationTextComponent(
               "gui." + NovusTechnica.MODID + ".energy",
               this.container.tileEntity.energy.getEnergyStored()
         ).getFormattedText();
         this.renderTooltip(tooltip, mouseX, mouseY);
      }


    }
}

 

I have absolutly no idea whats wrong so i really need your help Thank you very much for your support !!!!

latest.log

Link to comment
Share on other sites

thanks mate now it works.

But how did you realize that i didn't register the defferdRegister, because i could figure it out form the log.

May be you could give me some insight so i can figure it out my self the next time.

and Thanks again for your time and great advise.

Link to comment
Share on other sites

The exception message states "registry object not present". This happens if you are trying to use a RegistryObject before its created. This either means the registry events didn't fire yet (which is not possible in this case, since this happens after FMLClientSetupEvent, where they have definitely fired) or you didn't register the DeferredRegister to the event bus, so it cannot receive the registry events.

  • Like 1
Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now


×
×
  • Create New...

Important Information

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