Thank you very much! With your Information I could get it to work ?
For anybody interested, this is my code now.
Mod class:
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.world.server.ServerWorld;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.world.WorldEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
// The value here should match an entry in the META-INF/mods.toml file
@Mod(ModQuestion.MODID)
public class ModQuestion
{
public static final String MODID = "questionmod";
private static final Logger LOGGER = LogManager.getLogger();
public ModQuestion()
{
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onClientSetupEvent);
MinecraftForge.EVENT_BUS.addListener(this::onWorldLoaded);
MinecraftForge.EVENT_BUS.addListener(this::onWorldSaved);
}
private void onClientSetupEvent(final FMLClientSetupEvent event)
{
//LOGGER.debug("Hello from the Client Setup!");
}
public void onWorldLoaded(WorldEvent.Load event)
{
if (!event.getWorld().isRemote() && event.getWorld() instanceof ServerWorld)
{
MySavedData saver = MySavedData.forWorld((ServerWorld) event.getWorld());
if(saver.data.contains("MyData"))
{
LOGGER.debug("Found my data: " + saver.data.get("MyData"));
//Do whatever you want to do with the data
}
}
}
public void onWorldSaved(WorldEvent.Save event)
{
if (!event.getWorld().isRemote() && event.getWorld() instanceof ServerWorld)
{
MySavedData saver = MySavedData.forWorld((ServerWorld) event.getWorld());
CompoundNBT myData = new CompoundNBT();
myData.putInt("MyData", 0); //Put in whatever you want with myData.put
saver.data = myData;
saver.markDirty();
LOGGER.debug("Put my data in!");
}
}
}
WorldSaverData class:
import java.util.function.Supplier;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.world.server.ServerWorld;
import net.minecraft.world.storage.DimensionSavedDataManager;
import net.minecraft.world.storage.WorldSavedData;
public class MySavedData extends WorldSavedData implements Supplier
{
public CompoundNBT data = new CompoundNBT();
public MySavedData()
{
super(ModQuestion.MODID);
}
public MySavedData(String name)
{
super(name);
}
@Override
public void read(CompoundNBT nbt)
{
data = nbt.getCompound("MyCompound");
}
@Override
public CompoundNBT write(CompoundNBT nbt)
{
nbt.put("MyCompound", data);
return nbt;
}
public static MySavedData forWorld(ServerWorld world)
{
DimensionSavedDataManager storage = world.getSavedData();
Supplier<MySavedData> sup = new MySavedData();
MySavedData saver = (MySavedData) storage.getOrCreate(sup, ModQuestion.MODID);
if (saver == null)
{
saver = new MySavedData();
storage.set(saver);
}
return saver;
}
@Override
public Object get()
{
return this;
}
}