Jump to content

Offline Support


xkyouchoux

Recommended Posts

This is a pretty silly request, but some of the big forge mods like EE2 use the players username for saving stuff, and if your offline it uses a random username, and I have already fixed this, but I am asking if Forge can detect if the game is playing in offline, and if so, set net.minecraft.client.Minecraft.session.username to the first UTF in the .minecraft/lastlogin file, so when your playing offline, you would stille have your username. Its pretty easy to implement, but im not posting code because the lastlogin file uses a Cipher (assuming a cipher is a encrytion.. lol) :/

 

Edit:

 

code with cipher removed :)

 

@Override
public void load()
{
	File file = new File(Minecraft.getAppDir("minecraft"), "lastlogin");
	if(file.exists() && isOffline())
	{
		try
		{
			CipherInputStream cipherStream = new CipherInputStream(new FileInputStream(file), getCipher(2, "passwordfile"));
			DataInputStream stream = new DataInputStream(cipherStream);
			String username = stream.readUTF();
			System.out.println("Setting offline username as " + username + ".");
			ModLoader.getMinecraftInstance().session.username = username;
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
}

/**
 * Copied directly from Minecraft.exe to get access to the lastligin files because it uses a cipher.
 * 
 * @param mode
 * @param password
 * @return
 * @throws Exception
 */
private Cipher getCipher(int mode, String password)
{
	//removed for various reasons
                return null;
}

public static boolean isOffline()
{
	try
	{
		URL var1 = new URL("http://s3.amazonaws.com/MinecraftResources/");
            DocumentBuilderFactory var2 = DocumentBuilderFactory.newInstance();
            DocumentBuilder var3 = var2.newDocumentBuilder();
            Document var4 = var3.parse(var1.openStream());
            return false;
	}
	catch(Exception e)
	{
		return true;
	}
}

 

It is possibly to do in a simple mod_ file, but it would be more effective if it is ran before mods are initialized.

Link to comment
Share on other sites

this should actually be deemed a bug in the mod, no client-side mod has need for the username to store data properly, doing so is therefore useless

 

storing info on a SMP server by username i can get, not on a client where a mod SHOULD assume a single user per world anyhow

Being noobish since 96, being dumb since birth!

Link to comment
Share on other sites

... play minecraft, go offline, play "cracked" (its not exactly cracked, but you'll be playing as YourPlayerName instead of Player, and thats like playing cracked, and you can easily modify the code to change the YourPlayerName)

No, you do NOT need jar modding!

Link to comment
Share on other sites

Again, this is nothing like cracked, you still need a minecraft username and password to login to minecraft to get a lastlogin file, which this would only set the username to your lastlogin IF your playing without a internet connection, not in offline mode. locking this thread so it doesnt turn into flame. :/

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.


  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • I personally create registries using DataPackRegistryEvent.NewRegistry. It's pretty powerful as long as you know how to make codecs. In some class, make a registry key like so: public static final ResourceKey<Registry<MyDataType>> MY_REGISTRY = ResourceKey.createRegistryKey(new ResourceLocation(MyMod.MOD_ID, "registry_name")); This will make a registry that holds objects of type "MyDataType". JSON files stored in data/<datapack_namespace>/modid/registryname/ will be parsed and put into this registry. Note that the directory structure has a folder named after your mod inside your datapack directory, so the actual path would look like: data/my_mod/my_mod/registry_name (or if another mod uses your registry: data/their_mod/my_mod/registry_name. To register this registry, subscribe to the DataPackRegistryEvent.NewRegistry event on the MOD event bus and call event.dataPackRegistry() for every registry you have. An example of what I'm doing for my mod (this is in the constructor for the main mod file): IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus(); bus.addListener((DataPackRegistryEvent.NewRegistry event) -> { event.dataPackRegistry(ModRegistries.INSULATOR_DATA, InsulatorData.CODEC); }); CODEC is a public static field inside the class for the custom data type I am registering. It holds a Codec<InsulatorData> that tells Minecraft how to serialize/deserialize the data. Most of my data so far can be represented by records, so I use RecordCodecBuilder.create() to do this: public static final Codec<InsulatorData> CODEC = RecordCodecBuilder.create(instance -> instance.group( // Yadda yadda ).apply(instance, InsulatorData::new)); What exactly to put here depends on what you're trying to do, so that's up to you. But basically you're just defining a list of codecs that correspond to the parameters of the record (data type). Most primitive data types have records in the Codec class (ex. Codec.INT) that you can use, and other classes like ResourceLocation have their own codecs as a static field (ex. ResourceLocation.CODEC). Hopefully this is what you're looking for, and that this helps.
    • Good days  I finnaly manage to fix and get a working gui from BlockItem and from BlockEntity the next issues i have to fix is this the block Entity model for some reason is moved to the south west  this briefcase model must be centered but is moved to a side, i have nothing weird in the code but this is happening // ########## ########## ########## ########## @Override public RenderShape getRenderShape(BlockState blkstate) {     return RenderShape.MODEL; } the block model is out of place However The hitBox of the block is right in place   ########################################################################################################### This next issue  Mi gui also adds the 5 slots from the player equipment the thing is theres no filter to determine whats can be put in an armor slot and what not      i have this method that draws the slots for the armor, the part i dont get i slike wheres the code that responds when you set an item in a item slot to do checks and allow the item to be set or not  //########## ########## ########## //Draw Player Armor private void addPlayerArmorSlots(Inventory playerInventory) { // 36 this.addSlot(new Slot(playerInventory, 39, 8, 8)); this.addSlot(new Slot(playerInventory, 38, 8, 26)); this.addSlot(new Slot(playerInventory, 37, 8, 44)); this.addSlot(new Slot(playerInventory, 36, 8, 62)); this.addSlot(new Slot(playerInventory, 40, 26, 53)); }   theres must be a method that triggers when you set a itemstack inside an slot and allows to do a check if its a valid item for that slot                                             
    • No like how do I use my new PreperableReloadListener, I know how to set it up now and register it, I just need to know how to use it in other classes.
    • Completely out of the blue my forge loader is lagging, although at 120 fps. Like when I turn it lags, or hit mobs it lags, or run sometimes although staying at 120 fps. I found another person having a similar problem:  But there was no solution I dont think. I tried everything from: 1. Updating my computer 2. Updating/reinstalling forge 3. Testing if allocated memory was problem (if it was low or high or mid nothing changed) 4. Adding various performance mods 5. Deleting most of my profiles if storage was a problem.   Really not sure what to do next or if forge is just broken for ever for me now.  
  • Topics

×
×
  • Create New...

Important Information

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