123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- package me.km.dimensions;
- import me.km.KajetansMod;
- import me.km.api.Location;
- import me.km.api.Module;
- import me.km.api.ModuleListener;
- import me.km.api.SimpleConfig;
- import me.km.utils.ReflectionUtils;
- import net.minecraft.entity.player.EntityPlayer;
- import net.minecraft.inventory.InventoryEnderChest;
- import net.minecraft.item.ItemStack;
- import net.minecraft.util.FoodStats;
- import net.minecraft.util.NonNullList;
- import net.minecraftforge.common.DimensionManager;
- import net.minecraftforge.event.world.WorldEvent;
- import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
- import net.minecraftforge.fml.common.gameevent.PlayerEvent;
- public class ChangeWorldEvent extends ModuleListener
- {
- public ChangeWorldEvent(Module m)
- {
- super(m);
- }
- @SubscribeEvent
- public void onWorldUnload(WorldEvent.Unload e)
- {
- // doing this should be safe here
- int i = e.getWorld().provider.getDimension();
- if(i >= -1 && i <= 1)
- {
- return;
- }
- if(DimensionManager.isDimensionRegistered(i))
- {
- DimensionManager.unregisterDimension(i);
- ModDimensions.LOADED_DIMS.remove(i);
- }
- }
- @SubscribeEvent
- public void changeWorldEvent(PlayerEvent.PlayerChangedDimensionEvent e)
- {
- if(e.fromDim >= 2 || e.toDim >= 2)
- {
- savePlayerInventory(e.player, e.fromDim);
- loadPlayerInventory(e.player, e.toDim);
- }
- }
-
- public void savePlayerInventory(EntityPlayer p, int dimension)
- {
- String s;
- if(dimension <= 1)
- {
- s = DimensionManager.getWorld(0).getWorldInfo().getWorldName();
- }
- else
- {
- s = ModDimensions.getWorldName(DimensionManager.getWorld(dimension));
- }
- SimpleConfig sp = new SimpleConfig(KajetansMod.worldManager, "world/" + p.getUniqueID() + "/" + s + ".yml", false);
-
- // general data
- sp.setInt("exp", p.experienceTotal);
- FoodStats stats = p.getFoodStats();
- sp.setFloat("exhaustion", ReflectionUtils.getExhaustion(stats));
- sp.setFloat("saturation", ReflectionUtils.getSaturation(stats));
- sp.setInt("foodlevel", stats.getFoodLevel());
- sp.setFloat("currenthealth", p.getHealth());
- sp.setFloat("maxhealth", 20);
- sp.setInt("maxair", p.getAir());
-
-
- // position in world
- sp.setLocation("location", new Location(p.world, p.getPositionVector()));
-
- // main inventory
- int counter = 0;
- for(ItemStack stack : p.inventory.mainInventory)
- {
- sp.setItemStack("inv." + counter, stack);
- counter++;
- }
-
- // armor inventory
- counter = 0;
- for(ItemStack stack : p.inventory.armorInventory)
- {
- sp.setItemStack("armor." + counter, stack);
- counter++;
- }
-
- // offhand inventory
- counter = 0;
- for(ItemStack stack : p.inventory.offHandInventory)
- {
- sp.setItemStack("offhand." + counter, stack);
- counter++;
- }
-
- // enderchest
- InventoryEnderChest chest = p.getInventoryEnderChest();
- for(counter = 0; counter < chest.getSizeInventory(); counter++)
- {
- sp.setItemStack("enderchest." + counter, chest.getStackInSlot(counter));
- }
-
- if(sp.save())
- {
- this.getModule().sendToConsole("Der Spieler '" + p.getName() + "' wurde gespeichert.");
- return;
- }
- this.getModule().sendWarningToConsole("Der Spieler '" + p.getName() + "' konnte nicht gespeichert werden.");
- }
-
- public void loadPlayerInventory(EntityPlayer p, int dimension)
- {
- String s;
- if(dimension <= 1)
- {
- s = DimensionManager.getWorld(0).getWorldInfo().getWorldName();
- }
- else
- {
- s = ModDimensions.getWorldName(DimensionManager.getWorld(dimension));
- }
- SimpleConfig sp = new SimpleConfig(KajetansMod.worldManager, "world/" + p.getUniqueID() + "/" + s + ".yml", true);
- if(!sp.exists())
- {
- this.getModule().sendToConsole("Der Spieler '" + p.getName() + "' hat keine Daten in der Welt '" + s + "'.");
- p.inventory.clear();
- p.experienceTotal = 0;
- FoodStats stats = p.getFoodStats();
- stats.setFoodLevel(20);
- ReflectionUtils.setExhaustion(stats, 1);
- ReflectionUtils.setSaturation(stats, 5);
- p.setHealth(20);
- p.getInventoryEnderChest().clear();
- return;
- }
- // general data
- p.experience = 0;
- p.experienceTotal = 0;
- p.experienceLevel = 0;
- p.addExperience(sp.getInt("exp", 0));
- FoodStats stats = p.getFoodStats();
- ReflectionUtils.setExhaustion(stats, sp.getFloat("exhaustion", 1));
- ReflectionUtils.setSaturation(stats, sp.getFloat("saturation", 5));
- stats.setFoodLevel(sp.getInt("foodlevel", 20));
- p.setHealth(sp.getFloat("currenthealth", 20));
- // position in world
- //Utils.teleportEntity(p, sp.getLocation("location"));
-
- // main inventory
- int counter;
- NonNullList<ItemStack> inv = p.inventory.mainInventory;
- for(counter = 0; counter < inv.size(); counter++)
- {
- inv.set(counter, sp.getItemStack("inv." + counter));
- counter++;
- }
-
- // armor inventory
- inv = p.inventory.armorInventory;
- for(counter = 0; counter < inv.size(); counter++)
- {
- inv.set(counter, sp.getItemStack("armor." + counter));
- counter++;
- }
-
- // offhand inventory
- inv = p.inventory.offHandInventory;
- for(counter = 0; counter < inv.size(); counter++)
- {
- inv.set(counter, sp.getItemStack("offhand." + counter));
- counter++;
- }
-
- // enderchest
- InventoryEnderChest chest = p.getInventoryEnderChest();
- for(counter = 0; counter < chest.getSizeInventory(); counter++)
- {
- chest.setInventorySlotContents(counter, sp.getItemStack("enderchest." + counter));
- }
- this.getModule().sendToConsole("Der Spieler '" + p.getName() + "' wurde geladen.");
- }
- }
|