Jump to content

[1.12.2] Custom Player Capability


FelipeMunhoz

Recommended Posts


 

Can someone point me to where I went wrong?

I'm trying to add a new ability to the player, everything works fine,
but the data is not persisting!
Sorry for my english

 

The CosmoStorage class:

Spoiler

package com.pegasusgamer.saintseiyamod.capabilities.cosmo;

import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagInt;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.Capability.IStorage;

public class CosmoStorage implements IStorage<ICosmo>{

    @Override
    public NBTBase writeNBT(Capability<ICosmo> capability, ICosmo instance, EnumFacing side) {
        
        NBTTagCompound tag = new NBTTagCompound();           
        tag.setDouble("cosmo", instance.getCosmo());  
        tag.setDouble("cosmo_limit", instance.getLimit());
        tag.setDouble("cosmo_regen", instance.getRegen());
        
        System.out.println("Salvando no NBT(Cosmo): "+instance.getCosmo());
        
        return tag;
    }

    @Override
    public void readNBT(Capability<ICosmo> capability, ICosmo instance, EnumFacing side, NBTBase nbt) {
        
        NBTTagCompound tag = (NBTTagCompound) nbt;
        instance.setCosmo(tag.getDouble("cosmo"));
        instance.setLimit(tag.getDouble("cosmo_limit"));
        instance.setRegen(tag.getDouble("cosmo_regen"));
        
        System.out.println("Carregando do NBT(Cosmo): "+instance.getCosmo());
        
    }

}

 

The CosmoProvider class:

Spoiler

package com.pegasusgamer.saintseiyamod.capabilities.cosmo;

import net.minecraft.nbt.NBTBase;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.CapabilityInject;
import net.minecraftforge.common.capabilities.ICapabilitySerializable;

public class CosmoProvider implements ICapabilitySerializable<NBTBase> {
    
    @CapabilityInject(ICosmo.class)
    public static Capability<ICosmo> COSMO_CAP = null;

    private final ICosmo instance = COSMO_CAP.getDefaultInstance();
    

    @Override
    public boolean hasCapability(Capability<?> capability, EnumFacing facing) {
        return capability == COSMO_CAP;
    }

    @Override
    public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
        return capability == COSMO_CAP ? COSMO_CAP.<T> cast(this.instance) : null;
    }

    @Override
    public NBTBase serializeNBT() {
        return COSMO_CAP.getStorage().writeNBT(COSMO_CAP, this.instance, null);
    }

    @Override
    public void deserializeNBT(NBTBase nbt) {
        COSMO_CAP.getStorage().readNBT(COSMO_CAP, this.instance, null, nbt);
    }

}

 

The CapabilityHandler class:

Spoiler

package com.pegasusgamer.saintseiyamod.capabilities;

import com.pegasusgamer.saintseiyamod.capabilities.cosmo.CosmoProvider;
import com.pegasusgamer.saintseiyamod.util.Reference;

import net.minecraft.client.Minecraft;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.event.AttachCapabilitiesEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;

public class CapabilityHandler {
    
    public static final ResourceLocation COSMO_CAP = new ResourceLocation(Reference.MOD_ID, "cosmo");

    @SubscribeEvent
    public void attachCapability(AttachCapabilitiesEvent<Entity> event) {
        if (!(event.getObject() instanceof EntityPlayer)) return;
        
        event.addCapability(COSMO_CAP, new CosmoProvider());
    }
    
}

 

The CommonProxy class:

Spoiler

package com.pegasusgamer.saintseiyamod.proxy;

import org.lwjgl.input.Keyboard;

import com.pegasusgamer.saintseiyamod.Main;
import com.pegasusgamer.saintseiyamod.capabilities.CapabilityHandler;
import com.pegasusgamer.saintseiyamod.capabilities.cosmo.Cosmo;
import com.pegasusgamer.saintseiyamod.capabilities.cosmo.CosmoStorage;
import com.pegasusgamer.saintseiyamod.capabilities.cosmo.ICosmo;
import com.pegasusgamer.saintseiyamod.events.CosmoEventHandler;
import com.pegasusgamer.saintseiyamod.gui.overlays.CosmoGUI;
import com.pegasusgamer.saintseiyamod.util.Config;
import com.pegasusgamer.saintseiyamod.util.Reference;

import net.minecraft.client.model.ModelBase;
import net.minecraft.client.renderer.entity.Render;
import net.minecraft.client.settings.KeyBinding;
import net.minecraft.entity.Entity;
import net.minecraft.entity.monster.EntityMob;
import net.minecraft.item.Item;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.capabilities.CapabilityManager;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.client.registry.ClientRegistry;

public class CommonProxy {
    
    public void preInit() {        
        //Registro das Capacidades
        CapabilityManager.INSTANCE.register(ICosmo.class, new CosmoStorage(), () -> new Cosmo());
        MinecraftForge.EVENT_BUS.register(new CapabilityHandler());
        
        //Registro dos Eventos    
        MinecraftForge.EVENT_BUS.register(new CosmoEventHandler());    
    }
    
    public void init() {}
    
    public void postInit() {}
    
    public void registerItemRenderer(Item item, int meta, String id) {}
    
}

 

Edited by FelipeMunhoz
Best view
Link to comment
Share on other sites

21 minutes ago, diesieben07 said:

Não vejo você mudando os dados em nenhum lugar.

Sorry

 

package com.pegasusgamer.saintseiyamod.events;

import com.pegasusgamer.saintseiyamod.capabilities.cosmo.CosmoProvider;
import com.pegasusgamer.saintseiyamod.capabilities.cosmo.ICosmo;

import net.minecraft.client.Minecraft;
import net.minecraft.entity.item.EntityXPOrb;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
import net.minecraftforge.event.entity.player.PlayerEvent;
import net.minecraftforge.event.entity.player.PlayerPickupXpEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent.Phase;
import net.minecraftforge.fml.common.gameevent.TickEvent.PlayerTickEvent;

public class CosmoEventHandler {
	
	@SubscribeEvent
	public void onPlayeTick (PlayerTickEvent event) {

        if(event.phase == Phase.END) {
        	
        	EntityPlayer player = event.player;
        	
        	//if (!player.world.isRemote) return;
        	
        	ICosmo cosmo = player.getCapability(CosmoProvider.COSMO_CAP, null);       			    		
        	
    		//Regeneração padrão do cosmo se o mesmo estiver abaixo do limite
    		if(cosmo.getCosmo() < cosmo.getLimit())
    			cosmo.increaseCosmo(cosmo.getRegen()/20);
    		
    		//Define o cosmo atual para o cosmo maximo se o mesmo passar do limite
    		if(cosmo.getCosmo() > cosmo.getLimit())
    			cosmo.setCosmo(cosmo.getLimit());
    		
        }
        
	}

	/**
     * Copy data from dead player to the new player
     */
    @SubscribeEvent
    public void onPlayerClone(PlayerEvent.Clone event) {
    	
        EntityPlayer player = event.getEntityPlayer();
        
        ICosmo cosmo = player.getCapability(CosmoProvider.COSMO_CAP, null);
        ICosmo oldCosmo = event.getOriginal().getCapability(CosmoProvider.COSMO_CAP, null);
        
        //Define o cosmo atual para metade do cosmo anterior a morte. 
		cosmo.setCosmo(oldCosmo.getCosmo()/2);
		//Define o limite de cosmo para o anterior subtraido da quantidade de xp dropada
        cosmo.setLimit(oldCosmo.getLimit()-Math.min((event.getOriginal().experienceLevel*7), 100));
        //Define a regeneração de cosmo para a anterior a morte.
        cosmo.setRegen(oldCosmo.getRegen());
    }
    
    @SubscribeEvent
    public void onPlayerPickupXp(PlayerPickupXpEvent event) {

    	EntityPlayer player = event.getEntityPlayer();
    	ICosmo cosmo = player.getCapability(CosmoProvider.COSMO_CAP, null);
    	
    	//Aumenta o limite de cosmo ao coletar xp na mesma proporção
    	cosmo.increaseLimit(event.getOrb().getXpValue());

    }
    
}

 

Link to comment
Share on other sites

2 minutes ago, diesieben07 said:

Você só deve modificar os dados no servidor.

O que exatamente faz você pensar que os dados não estão persistindo (quais sintomas você está observando)?

 

There is a gui that displays the current cosmo

 

package com.pegasusgamer.saintseiyamod.gui.overlays;

import com.pegasusgamer.saintseiyamod.capabilities.cosmo.CosmoProvider;
import com.pegasusgamer.saintseiyamod.capabilities.cosmo.ICosmo;
import com.pegasusgamer.saintseiyamod.util.Reference;

import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.fml.common.FMLCommonHandler;
import net.minecraftforge.fml.common.eventhandler.EventPriority;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

public class CosmoGUI {
	
	public static class GUIRenderEventClass {
		
		@SubscribeEvent(priority = EventPriority.NORMAL)
		public void onRenderGui(RenderGameOverlayEvent event) {
			if (!event.isCancelable() && event.getType() == RenderGameOverlayEvent.ElementType.EXPERIENCE) {			
				
				Minecraft mc = Minecraft.getMinecraft();
				mc.renderEngine.bindTexture(new ResourceLocation(Reference.MOD_ID+":textures/gui/cosmo_bar_overlay.png"));
				
				EntityPlayer player = mc.player;
				ICosmo cosmo = player.getCapability(CosmoProvider.COSMO_CAP, null);		
				
				int posX = event.getResolution().getScaledWidth() / 2 + 10;
				int posY = event.getResolution().getScaledHeight() - 45;
				
				//Retorna caso o player esteja no modo criativo
				if(player.isCreative())
					return;
			
				//Desenha a barra de cosmo na tela
				mc.ingameGUI.drawTexturedModalRect(posX, posY, 0, 0, 81, 5);				
				int barWidht = (int)((cosmo.getCosmo()/cosmo.getLimit())*81);				
				mc.ingameGUI.drawTexturedModalRect(posX, posY, 0, 5, barWidht, 5);
				
				//Desenha o texto com quantidade de cosmo atual e maxima
				int stringSize = ((cosmo.getCosmo()+" / "+cosmo.getLimit()).toString().length()*4);
				mc.fontRenderer.drawStringWithShadow((int)cosmo.getCosmo()+" / "+(int)cosmo.getLimit(), (posX+41)-(int)(stringSize/2), posY-8, -13421569);
				
			}
		}
	}
	
}

 

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
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.



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • TO update, no dice, sadly. I switched replace to true, but it's not showing up. I found something odd though. I installed JER to verify the loot tables for the dragon eggs, but it's not working on those items. I made sure that the server-config to allow loot tables was enabled for the single player world I'm testing in as well. It almost seems like the mod itself is not spawning eggs at all for some reason, but I figure a loot modifier should still make that happen regardless?
    • *First of all, thank you, because of what you pointed out, I managed to make even more progress and now I know where to start fixing this problem (and any problems that I will have later on) *Second,actually I'm making a new block and not trying to replace a minecraft block because I know I don't have the knowledge for that. *Third, I didn't know about this forum rule, I thought I could get some help since I love to program but I've never taken a class on it and everything I know I'm learning the hard way. But I want to share a success here, I managed to make a first progress. (it still only stays in that position and if I aim at the ground, in addition to just opening the grindstone menu for half a second, but I already know where to start to solve this)
    • Broken configuration file. If you don't have a backup of the file and don't know how to fix it, delete the file and it will be recreated with default values.
    • Not sure how to fix this one; Time: 2023-03-22 17:31:08 Description: Initializing game java.lang.ExceptionInInitializerError: null     at net.minecraftforge.resource.ResourceCacheManager.shouldUseCache(ResourceCacheManager.java:111) ~[forge-1.19.2-43.2.0-universal.jar%23166!/:?] {re:classloading}     at net.minecraftforge.resource.PathPackResources.m_5698_(PathPackResources.java:154) ~[forge-1.19.2-43.2.0-universal.jar%23166!/:?] {re:classloading}     at net.minecraftforge.resource.DelegatingPackResources.buildNamespaceMap(DelegatingPackResources.java:64) ~[forge-1.19.2-43.2.0-universal.jar%23166!/:?] {re:classloading}     at net.minecraftforge.resource.DelegatingPackResources.<init>(DelegatingPackResources.java:40) ~[forge-1.19.2-43.2.0-universal.jar%23166!/:?] {re:classloading}     at net.minecraftforge.client.loading.ClientModLoader.lambda$clientPackFinder$12(ClientModLoader.java:209) ~[forge-1.19.2-43.2.0-universal.jar%23166!/:?] {re:classloading,pl:runtimedistcleaner:A}     at net.minecraft.server.packs.repository.Pack.m_10430_(Pack.java:35) ~[client-1.19.2-20220805.130853-srg.jar%23161!/:?] {re:classloading}     at net.minecraftforge.client.loading.ClientModLoader.clientPackFinder(ClientModLoader.java:208) ~[forge-1.19.2-43.2.0-universal.jar%23166!/:?] {re:classloading,pl:runtimedistcleaner:A}     at net.minecraftforge.client.loading.ClientModLoader.lambda$buildPackFinder$11(ClientModLoader.java:186) ~[forge-1.19.2-43.2.0-universal.jar%23166!/:?] {re:classloading,pl:runtimedistcleaner:A}     at net.minecraft.server.packs.repository.PackRepository.m_10526_(PackRepository.java:47) ~[client-1.19.2-20220805.130853-srg.jar%23161!/:?] {re:classloading}     at net.minecraft.server.packs.repository.PackRepository.m_10506_(PackRepository.java:39) ~[client-1.19.2-20220805.130853-srg.jar%23161!/:?] {re:classloading}     at net.minecraft.client.Minecraft.<init>(Minecraft.java:469) ~[client-1.19.2-20220805.130853-srg.jar%23161!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}     at net.minecraft.client.main.Main.m_239872_(Main.java:176) ~[client-1.19.2-20220805.130853-srg.jar%23161!/:?] {re:classloading,pl:runtimedistcleaner:A}     at net.minecraft.client.main.Main.main(Main.java:51) ~[client-1.19.2-20220805.130853-srg.jar%23161!/:?] {re:classloading,pl:runtimedistcleaner:A}     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] {}     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?] {}     at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?] {}     at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?] {}     at net.minecraftforge.fml.loading.targets.CommonClientLaunchHandler.lambda$launchService$0(CommonClientLaunchHandler.java:27) ~[fmlloader-1.19.2-43.2.0.jar%2395!/:?] {}     at cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:30) [modlauncher-10.0.8.jar%2382!/:?] {}     at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:53) [modlauncher-10.0.8.jar%2382!/:?] {}     at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:71) [modlauncher-10.0.8.jar%2382!/:?] {}     at cpw.mods.modlauncher.Launcher.run(Launcher.java:106) [modlauncher-10.0.8.jar%2382!/:?] {}     at cpw.mods.modlauncher.Launcher.main(Launcher.java:77) [modlauncher-10.0.8.jar%2382!/:?] {}     at cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:26) [modlauncher-10.0.8.jar%2382!/:?] {}     at cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:23) [modlauncher-10.0.8.jar%2382!/:?] {}     at cpw.mods.bootstraplauncher.BootstrapLauncher.main(BootstrapLauncher.java:141) [bootstraplauncher-1.1.2.jar:?] {} Caused by: java.lang.RuntimeException: Failed to load Force Resource Cache Configuration from C:\Users\Nathan\AppData\Roaming\.minecraft\config\forge-resource-caching.toml     at net.minecraftforge.resource.ResourceCacheManager$ResourceManagerBootCacheConfigurationHandler.createConfiguration(ResourceCacheManager.java:531) ~[forge-1.19.2-43.2.0-universal.jar%23166!/:?] {re:classloading}     at net.minecraftforge.resource.ResourceCacheManager$ResourceManagerBootCacheConfigurationHandler.<init>(ResourceCacheManager.java:510) ~[forge-1.19.2-43.2.0-universal.jar%23166!/:?] {re:classloading}     at net.minecraftforge.resource.ResourceCacheManager$ResourceManagerBootCacheConfigurationHandler.<clinit>(ResourceCacheManager.java:497) ~[forge-1.19.2-43.2.0-universal.jar%23166!/:?] {re:classloading}     ... 26 more Caused by: com.electronwill.nightconfig.core.io.ParsingException: Not enough data available     at com.electronwill.nightconfig.core.io.ParsingException.notEnoughData(ParsingException.java:22) ~[core-3.6.4.jar%2384!/:?] {}     at com.electronwill.nightconfig.core.io.ReaderInput.directReadChar(ReaderInput.java:36) ~[core-3.6.4.jar%2384!/:?] {}     at com.electronwill.nightconfig.core.io.AbstractInput.readChar(AbstractInput.java:49) ~[core-3.6.4.jar%2384!/:?] {}     at com.electronwill.nightconfig.core.io.AbstractInput.readCharsUntil(AbstractInput.java:123) ~[core-3.6.4.jar%2384!/:?] {}     at com.electronwill.nightconfig.toml.TableParser.parseKey(TableParser.java:166) ~[toml-3.6.4.jar%2385!/:?] {}     at com.electronwill.nightconfig.toml.TableParser.parseDottedKey(TableParser.java:145) ~[toml-3.6.4.jar%2385!/:?] {}     at com.electronwill.nightconfig.toml.TableParser.parseNormal(TableParser.java:55) ~[toml-3.6.4.jar%2385!/:?] {}     at com.electronwill.nightconfig.toml.TomlParser.parse(TomlParser.java:44) ~[toml-3.6.4.jar%2385!/:?] {}     at com.electronwill.nightconfig.toml.TomlParser.parse(TomlParser.java:37) ~[toml-3.6.4.jar%2385!/:?] {}     at com.electronwill.nightconfig.core.io.ConfigParser.parse(ConfigParser.java:113) ~[core-3.6.4.jar%2384!/:?] {}     at com.electronwill.nightconfig.core.io.ConfigParser.parse(ConfigParser.java:219) ~[core-3.6.4.jar%2384!/:?] {}     at com.electronwill.nightconfig.core.io.ConfigParser.parse(ConfigParser.java:202) ~[core-3.6.4.jar%2384!/:?] {}     at com.electronwill.nightconfig.core.file.WriteSyncFileConfig.load(WriteSyncFileConfig.java:73) ~[core-3.6.4.jar%2384!/:?] {}     at com.electronwill.nightconfig.core.file.AutoreloadFileConfig.load(AutoreloadFileConfig.java:41) ~[core-3.6.4.jar%2384!/:?] {}     at com.electronwill.nightconfig.core.file.AutosaveCommentedFileConfig.load(AutosaveCommentedFileConfig.java:85) ~[core-3.6.4.jar%2384!/:?] {}     at net.minecraftforge.resource.ResourceCacheManager$ResourceManagerBootCacheConfigurationHandler.createConfiguration(ResourceCacheManager.java:527) ~[forge-1.19.2-43.2.0-universal.jar%23166!/:?] {re:classloading}     at net.minecraftforge.resource.ResourceCacheManager$ResourceManagerBootCacheConfigurationHandler.<init>(ResourceCacheManager.java:510) ~[forge-1.19.2-43.2.0-universal.jar%23166!/:?] {re:classloading}     at net.minecraftforge.resource.ResourceCacheManager$ResourceManagerBootCacheConfigurationHandler.<clinit>(ResourceCacheManager.java:497) ~[forge-1.19.2-43.2.0-universal.jar%23166!/:?] {re:classloading}     ... 26 more A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Head -- Thread: Render thread Stacktrace:     at net.minecraftforge.resource.ResourceCacheManager.shouldUseCache(ResourceCacheManager.java:111) ~[forge-1.19.2-43.2.0-universal.jar%23166!/:?] {re:classloading}     at net.minecraftforge.resource.PathPackResources.m_5698_(PathPackResources.java:154) ~[forge-1.19.2-43.2.0-universal.jar%23166!/:?] {re:classloading}     at net.minecraftforge.resource.DelegatingPackResources.buildNamespaceMap(DelegatingPackResources.java:64) ~[forge-1.19.2-43.2.0-universal.jar%23166!/:?] {re:classloading}     at net.minecraftforge.resource.DelegatingPackResources.<init>(DelegatingPackResources.java:40) ~[forge-1.19.2-43.2.0-universal.jar%23166!/:?] {re:classloading}     at net.minecraftforge.client.loading.ClientModLoader.lambda$clientPackFinder$12(ClientModLoader.java:209) ~[forge-1.19.2-43.2.0-universal.jar%23166!/:?] {re:classloading,pl:runtimedistcleaner:A}     at net.minecraft.server.packs.repository.Pack.m_10430_(Pack.java:35) ~[client-1.19.2-20220805.130853-srg.jar%23161!/:?] {re:classloading}     at net.minecraftforge.client.loading.ClientModLoader.clientPackFinder(ClientModLoader.java:208) ~[forge-1.19.2-43.2.0-universal.jar%23166!/:?] {re:classloading,pl:runtimedistcleaner:A}     at net.minecraftforge.client.loading.ClientModLoader.lambda$buildPackFinder$11(ClientModLoader.java:186) ~[forge-1.19.2-43.2.0-universal.jar%23166!/:?] {re:classloading,pl:runtimedistcleaner:A}     at net.minecraft.server.packs.repository.PackRepository.m_10526_(PackRepository.java:47) ~[client-1.19.2-20220805.130853-srg.jar%23161!/:?] {re:classloading}     at net.minecraft.server.packs.repository.PackRepository.m_10506_(PackRepository.java:39) ~[client-1.19.2-20220805.130853-srg.jar%23161!/:?] {re:classloading}     at net.minecraft.client.Minecraft.<init>(Minecraft.java:469) ~[client-1.19.2-20220805.130853-srg.jar%23161!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}  
    • At the top of this forum is the EAQ (excessively asked questions). Read the part where it asks "How do I install Forge?". There is no windows specific installer. The installer uses java. https://en.wikipedia.org/wiki/Write_once,_run_anywhere
  • Topics

×
×
  • Create New...

Important Information

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