Jump to content

Recommended Posts

Posted

Hi,

I'm trying to develop a server-side mod that add some basic command to forge basic server(without cauldron).

I don't know why but the server crash without reason, only this string:

[FML]: Fatal errors were detected during the transition from SERVER_ABOUT_TO_START to SERVER_STARTING. Loading cannot continue

Here are my classes:

 

Main

package net.robyrho.cdacommands;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import net.robyrho.cdacommands.commands.HomeCommand;
import net.robyrho.cdacommands.commands.SetHomeCommand;
import net.robyrho.cdacommands.commands.SetSpawnCommand;
import net.robyrho.cdacommands.commands.SpawnCommand;
import net.robyrho.cdacommands.commands.TPACommand;
import net.robyrho.cdacommands.commands.TPAcceptCommand;
import net.robyrho.cdacommands.handlers.ServerProxy;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.event.FMLServerStartingEvent;
import cpw.mods.fml.relauncher.FMLInjectionData;

@Mod(modid = "cdacommands", version = "1.7.10-1.0")
public class CdACommands {

          //Proxy are blank classes, I'll not post them
@SidedProxy(serverSide = "net.robyrho.cdacommands.handlers.ServerProxy", clientSide = "net.robyrho.cdacommands.handlers.ClientProxy")
public static ServerProxy proxy;

private static String basePath;
private static File locationsFile;

@EventHandler
public void preInit(FMLPreInitializationEvent e) {
	basePath = ((File)(FMLInjectionData.data()[6])).getAbsolutePath().replace(File.separatorChar, '/').replace("/.", "") + File.separator + "mods" + File.separator + "CdACommands";
	File baseDir = new File(basePath);
	if(!baseDir.exists()) {
		baseDir.mkdirs();
		locationsFile = new File(basePath + File.separator + "Locations.json");
		if(!locationsFile.exists()) {
			try {
				locationsFile.createNewFile();
			} catch(IOException ex) {
				System.err.append(ex.getMessage());
			}
			try {
				FileWriter wr = new FileWriter(locationsFile);
				wr.write("{\n}");
				wr.flush();
				wr.close();
			} catch (IOException e1) {
				e1.printStackTrace();
			}
		}
	} else {
		locationsFile = new File(basePath + File.separator + "Locations.json");
		if(!locationsFile.exists()) {
			try {
				locationsFile.createNewFile();
			} catch(IOException ex) {
				System.err.append(ex.getMessage());
			}
			try {
				FileWriter wr = new FileWriter(locationsFile);
				wr.write("{\n}");
				wr.flush();
				wr.close();
			} catch (IOException e1) {
				e1.printStackTrace();
			}
		}
	}
}

@EventHandler
public void init(FMLInitializationEvent e) {

}

@EventHandler
public void serverInit(FMLServerStartingEvent e) {
	e.registerServerCommand(new SetSpawnCommand());
	e.registerServerCommand(new SpawnCommand());
	e.registerServerCommand(new TPACommand());
	e.registerServerCommand(new TPAcceptCommand());
	e.registerServerCommand(new SetHomeCommand());
	e.registerServerCommand(new HomeCommand());
}

public static File getLocationsFile() {
	return locationsFile;
}
}

 

SetSpawnCommand:

package net.robyrho.cdacommands.commands;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;

import net.minecraft.command.ICommand;
import net.minecraft.command.ICommandSender;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.management.ServerConfigurationManager;
import net.minecraft.util.ChatStyle;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IChatComponent;
import net.robyrho.cdacommands.CdACommands;

import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

import scala.actors.threadpool.Arrays;

public class SetSpawnCommand implements ICommand {

@Override
public int compareTo(Object arg0) {
	return 0;
}

@Override
public String getCommandName() {
	return "setspawn";
}

@Override
public String getCommandUsage(ICommandSender p_71518_1_) {
	return "/setspawn";
}

@Override
public List getCommandAliases() {
	return null;
}

@SuppressWarnings("null")
@Override
public void processCommand(ICommandSender sender, String[] args) {
	JSONParser parser = new JSONParser();
	EntityPlayerMP p = (EntityPlayerMP) sender;
	if(!Arrays.asList(MinecraftServer.getServer().getConfigurationManager().func_152606_n()).contains(p.getDisplayName())) {
		IChatComponent argsErr = null;
		argsErr = argsErr.setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED));
		argsErr.appendText("Non hai i permessi per eseguire questo comando");
		p.addChatMessage(argsErr);
		return;
	}

	if(args.length == 0) {
		try {
			Object obj = parser.parse(new FileReader(CdACommands.getLocationsFile()));
			JSONObject jsonObject = (JSONObject) obj;

			jsonObject.put("Spawn", p.posX + ";" + p.posY + ";" + p.posZ + ";" + p.cameraYaw + ";" + p.cameraPitch);
			try {
				FileWriter writer = new FileWriter(CdACommands.getLocationsFile());
				writer.write(jsonObject.toJSONString());
				writer.flush();
				writer.close();
			} catch(IOException ex) {
				ex.printStackTrace();
			}
			IChatComponent mess = null;
			mess = mess.setChatStyle(new ChatStyle().setColor(EnumChatFormatting.DARK_GREEN));
			mess.appendText("Punto di spawn impostato corretamente");
			p.addChatMessage(mess);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ParseException e) {
			e.printStackTrace();
		}

	} else {
		IChatComponent argsErr = null;
		argsErr = argsErr.setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED));
		argsErr.appendText("Usa " + getCommandUsage(sender));
		p.addChatMessage(argsErr);
	}
}

@Override
public boolean canCommandSenderUseCommand(ICommandSender sender) {
	if(sender instanceof EntityPlayerMP) {
		return true;
	}
	return false;
}

@Override
public List addTabCompletionOptions(ICommandSender p_71516_1_, String[] p_71516_2_) {
	return null;
}

@Override
public boolean isUsernameIndex(String[] p_82358_1_, int p_82358_2_) {
	return false;
}

}

 

SpawnCommand

package net.robyrho.cdacommands.commands;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.List;

import net.minecraft.command.ICommand;
import net.minecraft.command.ICommandSender;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.util.ChatStyle;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IChatComponent;
import net.robyrho.cdacommands.CdACommands;

import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

public class SpawnCommand implements ICommand {

@Override
public int compareTo(Object arg0) {
	return 0;
}

@Override
public String getCommandName() {
	return "spawn";
}

@Override
public String getCommandUsage(ICommandSender p_71518_1_) {
	return "/spawn";
}

@Override
public List getCommandAliases() {
	return null;
}

@SuppressWarnings("null")
@Override
public void processCommand(ICommandSender sender, String[] args) {
	JSONParser parser = new JSONParser();
	EntityPlayerMP p = (EntityPlayerMP) sender;

	try {
		Object obj = parser.parse(new FileReader(CdACommands.getLocationsFile()));
		JSONObject jsonObject = (JSONObject) obj;

		if(jsonObject.containsKey("Spawn")) {
			String s = (String) jsonObject.get("Spawn");
			String[] sList = s.split(";");
			try {
			p.setPositionAndRotation(Double.parseDouble(sList[0]), Double.parseDouble(sList[1]), Double.parseDouble(sList[2]), Float.parseFloat(sList[3]), Float.parseFloat(sList[4]));
			} catch(NumberFormatException ex) {
				IChatComponent argsErr = null;
				argsErr = argsErr.setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED));
				argsErr.appendText("Qualcosa non ha funzionato nella lettura delle coordinate, contatta un OP!");
				p.addChatMessage(argsErr);
			}
		}
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	} catch (ParseException e) {
		e.printStackTrace();
	}
}

@Override
public boolean canCommandSenderUseCommand(ICommandSender sender) {
	if(sender instanceof EntityPlayerMP) {
		return true;
	}
	return false;
}

@Override
public List addTabCompletionOptions(ICommandSender p_71516_1_, String[] p_71516_2_) {
	return null;
}

@Override
public boolean isUsernameIndex(String[] p_82358_1_, int p_82358_2_) {
	return false;
}

}

 

SetHomeCommand

package net.robyrho.cdacommands.commands;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;

import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

import scala.actors.threadpool.Arrays;
import net.minecraft.command.ICommand;
import net.minecraft.command.ICommandSender;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.ChatStyle;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IChatComponent;
import net.robyrho.cdacommands.CdACommands;

public class SetHomeCommand implements ICommand {

@Override
public int compareTo(Object arg0) {
	return 0;
}

@Override
public String getCommandName() {
	return "sethome";
}

@Override
public String getCommandUsage(ICommandSender p_71518_1_) {
	return "/sethome";
}

@Override
public List getCommandAliases() {
	return null;
}

@SuppressWarnings("null")
@Override
public void processCommand(ICommandSender sender, String[] args) {
	JSONParser parser = new JSONParser();
	EntityPlayerMP p = (EntityPlayerMP) sender;

	if(args.length == 0) {
		try {
			Object obj = parser.parse(new FileReader(CdACommands.getLocationsFile()));
			JSONObject jsonObject = (JSONObject) obj;

			jsonObject.put(p.getDisplayName(), p.posX + ";" + p.posY + ";" + p.posZ + ";" + p.cameraYaw + ";" + p.cameraPitch);
			try {
				FileWriter writer = new FileWriter(CdACommands.getLocationsFile());
				writer.write(jsonObject.toJSONString());
				writer.flush();
				writer.close();
			} catch(IOException ex) {
				ex.printStackTrace();
			}
			IChatComponent mess = null;
			mess = mess.setChatStyle(new ChatStyle().setColor(EnumChatFormatting.DARK_GREEN));
			mess.appendText("Benvenuto a casa!");
			p.addChatMessage(mess);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ParseException e) {
			e.printStackTrace();
		}

	} else {
		IChatComponent argsErr = null;
		argsErr = argsErr.setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED));
		argsErr.appendText("Usa " + getCommandUsage(sender));
		p.addChatMessage(argsErr);
	}
}

@Override
public boolean canCommandSenderUseCommand(ICommandSender sender) {
	if(sender instanceof EntityPlayerMP) {
		return true;
	}
	return false;
}

@Override
public List addTabCompletionOptions(ICommandSender p_71516_1_, String[] p_71516_2_) {
	return null;
}

@Override
public boolean isUsernameIndex(String[] p_82358_1_, int p_82358_2_) {
	return false;
}

}

 

HomeCommand

package net.robyrho.cdacommands.commands;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.List;

import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

import net.minecraft.command.ICommand;
import net.minecraft.command.ICommandSender;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.util.ChatStyle;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IChatComponent;
import net.robyrho.cdacommands.CdACommands;

public class HomeCommand implements ICommand {

@Override
public int compareTo(Object arg0) {
	return 0;
}

@Override
public String getCommandName() {
	return "home";
}

@Override
public String getCommandUsage(ICommandSender p_71518_1_) {
	return "/home";
}

@Override
public List getCommandAliases() {
	return null;
}

@SuppressWarnings("null")
@Override
public void processCommand(ICommandSender sender, String[] args) {
	JSONParser parser = new JSONParser();
	EntityPlayerMP p = (EntityPlayerMP) sender;

	try {
		Object obj = parser.parse(new FileReader(CdACommands.getLocationsFile()));
		JSONObject jsonObject = (JSONObject) obj;

		if(jsonObject.containsKey(p.getDisplayName())) {
			String s = (String) jsonObject.get(p.getDisplayName());
			String[] sList = s.split(";");
			try {
			p.setPositionAndRotation(Double.parseDouble(sList[0]), Double.parseDouble(sList[1]), Double.parseDouble(sList[2]), Float.parseFloat(sList[3]), Float.parseFloat(sList[4]));
			} catch(NumberFormatException ex) {
				IChatComponent argsErr = null;
				argsErr = argsErr.setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED));
				argsErr.appendText("Qualcosa non ha funzionato nella lettura delle coordinate, contatta un OP!");
				p.addChatMessage(argsErr);
			}
		}
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	} catch (ParseException e) {
		e.printStackTrace();
	}
}

@Override
public boolean canCommandSenderUseCommand(ICommandSender sender) {
	if(sender instanceof EntityPlayerMP) {
		return true;
	}
	return false;
}

@Override
public List addTabCompletionOptions(ICommandSender p_71516_1_, String[] p_71516_2_) {
	return null;
}

@Override
public boolean isUsernameIndex(String[] p_82358_1_, int p_82358_2_) {
	return false;
}

}

 

TPACommand

package net.robyrho.cdacommands.commands;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

import net.minecraft.command.ICommand;
import net.minecraft.command.ICommandSender;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.ChatStyle;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IChatComponent;
import net.minecraft.world.WorldServer;

public class TPACommand implements ICommand {
public static HashMap<EntityPlayerMP, List<EntityPlayerMP>> requests = new HashMap<EntityPlayerMP, List<EntityPlayerMP>>();

@Override
public int compareTo(Object arg0) {
	return 0;
}

@Override
public String getCommandName() {
	return "tpa";
}

@Override
public String getCommandUsage(ICommandSender p_71518_1_) {
	return "/tpa <player>";
}

@Override
public List getCommandAliases() {
	return null;
}

@SuppressWarnings("null")
@Override
public void processCommand(ICommandSender sender, String[] args) {
	final EntityPlayerMP p = (EntityPlayerMP) sender;
	if(args.length == 1) {
		String[] pList = MinecraftServer.getServer().getAllUsernames();
		if(Arrays.asList(pList).contains(args[0])) {
			WorldServer[] ws= MinecraftServer.getServer().worldServers;
			for(WorldServer w : ws) {
				if(w.playerEntities.contains(w.getPlayerEntityByName(args[0]))) {
					final EntityPlayerMP pt = (EntityPlayerMP) w.getPlayerEntityByName(args[0]);
					List<EntityPlayerMP> l = requests.get(pt);
					l.add(p);
					requests.put(pt, l);
					IChatComponent argsErr = null;
					argsErr = argsErr.setChatStyle(new ChatStyle().setColor(EnumChatFormatting.GOLD));
					argsErr.appendText("Hai ricevuto una richiesta di teletrasporto da " + p.getDisplayName() + ". Scrivi /tpaccept entro 15 secondi per accettarla.");
					pt.addChatMessage(argsErr);
					Timer t = new Timer();
					t.schedule(new TimerTask(){
						@Override
						public void run() {
							List<EntityPlayerMP> l = requests.get(pt);
							l.remove(p);
							requests.put(pt, l);
						}
					}, 15000L);
				}
			}
		} else {
			IChatComponent argsErr = null;
			argsErr = argsErr.setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED));
			argsErr.appendText("Il giocatore " + args[0] + " non è online");
			p.addChatMessage(argsErr);
		}
	} else {
		IChatComponent argsErr = null;
		argsErr = argsErr.setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED));
		argsErr.appendText("Usa " + getCommandUsage(sender));
		p.addChatMessage(argsErr);
	}
}

@Override
public boolean canCommandSenderUseCommand(ICommandSender sender) {
	if(sender instanceof EntityPlayerMP) {
		return true;
	}
	return false;
}

@Override
public List addTabCompletionOptions(ICommandSender p_71516_1_, String[] p_71516_2_) {
	return null;
}

@Override
public boolean isUsernameIndex(String[] p_82358_1_, int p_82358_2_) {
	return false;
}

}

 

TPAcceptCommand

package net.robyrho.cdacommands.commands;

import java.util.List;

import scala.actors.threadpool.Arrays;
import net.minecraft.command.ICommand;
import net.minecraft.command.ICommandSender;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.ChatStyle;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IChatComponent;
import net.minecraft.world.WorldServer;

public class TPAcceptCommand implements ICommand {

@Override
public int compareTo(Object arg0) {
	return 0;
}

@Override
public String getCommandName() {
	return "tpaccept";
}

@Override
public String getCommandUsage(ICommandSender p_71518_1_) {
	return "/tpaccept";
}

@Override
public List getCommandAliases() {
	return null;
}

@SuppressWarnings("null")
@Override
public void processCommand(ICommandSender sender, String[] args) {
	EntityPlayerMP p = (EntityPlayerMP) sender;
	if(args.length == 0) {
		if(TPACommand.requests.containsKey(p)) {
			List<EntityPlayerMP> pl = TPACommand.requests.get(p);
			for(EntityPlayerMP pf : pl) {
			pf.setPosition(p.posX, p.posY, p.posZ);
			}
			TPACommand.requests.remove(p);
		} else {
			IChatComponent argsErr = null;
			argsErr = argsErr.setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED));
			argsErr.appendText("Non hai nessuna richiesta di teletrasporto!");
			p.addChatMessage(argsErr);
		}
	} else {
		IChatComponent argsErr = null;
		argsErr = argsErr.setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED));
		argsErr.appendText("Usa " + getCommandUsage(sender));
		p.addChatMessage(argsErr);
	}
}

@Override
public boolean canCommandSenderUseCommand(ICommandSender sender) {
	if(sender instanceof EntityPlayerMP) {
		return true;
	}
	return false;
}

@Override
public List addTabCompletionOptions(ICommandSender p_71516_1_, String[] p_71516_2_) {
	return null;
}

@Override
public boolean isUsernameIndex(String[] p_82358_1_, int p_82358_2_) {
	return false;
}

}

 

Please guys, only a little suggestion for me.

Thank you

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

    • That seems to have fixed it, thank you!
    • I am having some issues starting an RLCraft server on a minimal install of Debian 12. I have Java installed and I'm able to start the vanilla Minecraft server jar no problem and people can join and play without any issues, as soon as I try to create a new directory with the Forge jar the initial install with the INSTALLER jar works when I use the java command with the --installServer flag, but as soon as I try to start the server using the forge jar that is NOT labelled with installer I get the following error: A problem occurred running the Server launcher.java.lang.reflect.InvocationTargetException         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)         at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)         at java.base/java.lang.reflect.Method.invoke(Method.java:569)         at net.minecraftforge.fml.relauncher.ServerLaunchWrapper.run(ServerLaunchWrapper.java:70)         at net.minecraftforge.fml.relauncher.ServerLaunchWrapper.main(ServerLaunchWrapper.java:34) Caused by: java.lang.ClassCastException: class jdk.internal.loader.ClassLoaders$AppClassLoader cannot be cast to class java.net.URLClassLoader (jdk.internal.loader.ClassLoaders$AppClassLoader and java.net.URLClassLoader are in module java.base of loader 'bootstrap')         at net.minecraft.launchwrapper.Launch.<init>(Launch.java:34)         at net.minecraft.launchwrapper.Launch.main(Launch.java:28)         ... 6 more   I have tried using newer versions of Java directly from Oracle as well. Has anybody been successful in starting and running a RLCraft server from the terminal on a Linux machine? I cannot figure out why it doesn't want to work but the vanilla jar works without issue. Thank you in advance!
    • This is my latest attempt :  public class ManaScreen extends Screen { Mana mana = new Mana(); boolean removeManaBar = false; ResourceLocation manaBar = ResourceLocation.fromNamespaceAndPath(RSGArmoury.MOD_ID, "/textures/block/spawnable_arena_wall.png"); public ManaScreen() { super(Component.literal("Mana")); } @Override protected void init() { super.init(); Minecraft.getInstance().setScreen(this); } @Override public boolean isPauseScreen() { return false; } @Override public void render(GuiGraphics pGuiGraphics, int pMouseX, int pMouseY, float pPartialTick) { pGuiGraphics.blit(manaBar, 10, -10, 0, 0, mana.getMana(), 10, mana.getMana(), 10); if (removeManaBar) { this.onClose(); return; } super.render(pGuiGraphics, pMouseX, pMouseY, pPartialTick); } public void addManaBar() { removeManaBar = false; Minecraft.getInstance().setScreen(new ManaScreen()); } public boolean removeManaBar() { return removeManaBar = true; } }
    • I tried a few different things that all didnt work. Right now I have nothing but what I had that seemed most likely to work was just a guiOverlay.blit(x, y, z, vx, vy, getMana()). I dont remember the exact code but it was somthing along those lines. It was in a new class extending screen I believe.
  • Topics

×
×
  • Create New...

Important Information

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