Skip to content

Commit

Permalink
File Perm Checking
Browse files Browse the repository at this point in the history
  • Loading branch information
eleksploded committed Aug 15, 2019
1 parent 1399482 commit 9c9c30d
Show file tree
Hide file tree
Showing 5 changed files with 152 additions and 7 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ apply plugin: 'net.minecraftforge.gradle.forge'
//Only edit below this line, the above code adds and enables the necessary things for Forge to be setup.


version = "1.0"
version = "1.1"
group = "com.eleksploded.ldcompat" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = "ldcompat"

Expand Down
11 changes: 11 additions & 0 deletions src/main/java/com/eleksploded/ldcompathelper/ClientProxy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.eleksploded.ldcompathelper;

import net.minecraftforge.fml.client.registry.ClientRegistry;

public class ClientProxy extends CommonProxy {

@Override
public void register(){
ClientRegistry.registerKeyBinding(LDCompatHelper.key);
}
}
6 changes: 6 additions & 0 deletions src/main/java/com/eleksploded/ldcompathelper/CommonProxy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.eleksploded.ldcompathelper;

public class CommonProxy {
public void register() {
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package com.eleksploded.ldcompathelper;

import java.io.File;
import java.nio.file.Files;
import java.nio.file.attribute.PosixFilePermission;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import net.minecraft.client.Minecraft;
import net.minecraft.world.World;
import net.minecraftforge.common.DimensionManager;

public class ErrorCheckerThread extends Thread {
public boolean error = false;
public World world;
File worldDir;

public ErrorCheckerThread(World worldIn){
world = worldIn;
}

public void run() {
while(!error){
worldDir = DimensionManager.getCurrentSaveRootDirectory() == null ? worldDir : DimensionManager.getCurrentSaveRootDirectory();

if(world.isRemote){
//System.out.println("Client");
break;
} else {
//System.out.println("Server");
}

try{
if(Minecraft.getMinecraft().getIntegratedServer() == null) {
onError();
}
} catch (java.lang.NoSuchMethodError e) {

}
if(error){
break;
}
}
}

public void onError() {
error = true;
System.out.println("Crash Detected");
File file = new File(worldDir + "/" + "LDCompat_FileTest");
try{
file.createNewFile();
Files.write(file.toPath(), buildList());

} catch(Exception e){

}
try {
Set<PosixFilePermission> perms = Files.getPosixFilePermissions(file.toPath());
for(PosixFilePermission perm : perms){
System.out.println(perm.toString());
}
} catch (Exception e1) {
e1.printStackTrace();
}
}

private List<String> buildList() {
List<String> list = new ArrayList<String>();
for(int i = 0; i < 150; i++){
list.add(String.valueOf(i));
}
return list;
}
}
65 changes: 59 additions & 6 deletions src/main/java/com/eleksploded/ldcompathelper/LDCompatHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,24 +9,66 @@

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.lwjgl.input.Keyboard;

import net.minecraft.client.Minecraft;
import net.minecraft.item.ItemBlock;
import net.minecraft.client.settings.KeyBinding;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.FurnaceRecipes;
import net.minecraftforge.client.settings.KeyConflictContext;
import net.minecraftforge.client.settings.KeyModifier;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.world.WorldEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.SidedProxy;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.eventhandler.EventPriority;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.InputEvent.KeyInputEvent;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

@Mod(modid = LDCompatHelper.MODID, name = LDCompatHelper.NAME, version = LDCompatHelper.VERSION)
@EventBusSubscriber(modid = LDCompatHelper.MODID)
public class LDCompatHelper
{
public static final String MODID = "ldcompat";
public static final String NAME = "LD Compatibility Helper";
public static final String VERSION = "1.0";
public static Logger logger = LogManager.getLogger(MODID);

@SidedProxy(clientSide = "com.eleksploded.ldcompathelper.ClientProxy", serverSide = "com.eleksploded.ldcompathelper.CommonProxy")
private static CommonProxy proxy;

public static KeyBinding key = new KeyBinding("key.crash.desc",KeyConflictContext.UNIVERSAL, KeyModifier.ALT, Keyboard.KEY_V, "key.crash.category");

static List<String> toWrite = new ArrayList<String>();
Thread checkThread;

@SubscribeEvent(priority = EventPriority.LOWEST)
public void Start(WorldEvent.Load e){
if(e.getWorld().provider.getDimension() == 0){
ErrorCheckerThread check = new ErrorCheckerThread(e.getWorld());
checkThread = new Thread(check);
checkThread.start();
}
}

@EventHandler
public void Stop(WorldEvent.Unload e){
if(checkThread.isAlive()){
checkThread.stop();
}
}

@EventHandler
public void init(FMLInitializationEvent event){
proxy.register();
MinecraftForge.EVENT_BUS.register(this);
}

@EventHandler
public void postInit(FMLPostInitializationEvent event)
Expand All @@ -42,20 +84,31 @@ public void postInit(FMLPostInitializationEvent event)

toWrite.add(builder.toString());
}
write();
write("LDCompatOut");
}

private void write() {
private void write(String fileName) {
try {
File file = new File(Minecraft.getMinecraft().mcDataDir, "logs/LDCompatOut.txt");
File file = new File(Minecraft.getMinecraft().mcDataDir, "logs/" + fileName + ".txt");
if(file.exists()) Files.delete(file.toPath());

file.createNewFile();
Files.write(file.toPath(), toWrite);

} catch (IOException e) {
e.printStackTrace();
}

}


@SideOnly(Side.CLIENT)
@SubscribeEvent(priority=EventPriority.NORMAL, receiveCanceled=true)
public static void onEvent(KeyInputEvent event)
{
if (key.isPressed())
{
throw new RuntimeException("Forced Crash");
}
}
}

0 comments on commit 9c9c30d

Please sign in to comment.