Jump to content

powerLineDayDreams

Members
  • Posts

    16
  • Joined

  • Last visited

Everything posted by powerLineDayDreams

  1. I'm working on setting up some commands for my mod, and I'm just wondering if there's any style guide or best practices for which colors to use in which situation. For example, I've already put any sort of command errors in red. I'm hoping this can be answered more generally, but in my case, some of the things I have commands for are: list all player empires look up player empires create/delete player empires add/remove players from empires add/remove chunks from empires add/remove resources from empires
  2. Gotcha, thank you! Time to learn some OpenGL haha. Any suggestions on resources to do this?
  3. Would these be BakedQuads or what class should I be looking in?
  4. I'm looking for some direction on a way to render a glowy border around certain blocks. I'm imagining something that looks a little like Microblock strips that renders on all four edges of a block. It shouldn't interact/collide with anything and hopefully would allow another block to intersect with it. I was originally looking at the debug chunk border functionality in Vanilla, but from what I can tell, the associated classes/methods only allow you to essentially make 1d lines rather than a 3d glow. Any help/ideas that people might have would be super helpful. Thanks
  5. Gotcha! I will try adjusting the code based on this. Thank you!
  6. Where would I store this map? And then I'm assuming that every time that I read a new Empire from the EmpireList WorldSavedData that I'll want to add it as an entry in this Map.
  7. Okay, cool... Now I'm wondering how I would go about implementing a findEmpireByID method to grab the vassal when I read from the NBT.
  8. They'd each be an instance of Empire, so yeah, they would also be stored on their own in the WorldSavedData EmpireList. When you refer to a are you saying that I should/could have a Map somewhere containing Empires and their empireIDs? If so, where would I store this? It seems like this might simplify a lot of this stuff, especially if I could do the same with cities, tiles, resources, etc.
  9. Ahh yes, I did that because someEmpire might include someOtherEmpire as its vassal. Is there a better way to handle this case? Would it be possible to include a NBTTagList of each vassal within my someEmpire NBTTagCompound (if so, should I be doing this with my resources, territory, etc. Maps as well)? Or should I try to implement some sort of getEmpireByID method (not really sure how I'd go about doing this) and then just store the empireID for each vassal? Thanks for all of the help so far
  10. Okay, so this is what I've come up with so far for my Empire class. I opted to outsource the NBT generation for each of my custom objects to the classes for each of them (I haven't actually written these methods, though). Are there any obvious issues with what I've done thus far? public NBTTagCompound writeToNBT (NBTTagCompound nbt, @Nullable String externalID) { if(externalID == null) { externalID = ""; } else { externalID = externalID + "_"; } nbt.setInteger(externalID + "empireID", this.empireID); nbt.setBoolean(externalID + "empireExists", this.exists); nbt.setString(externalID + "empireName", this.empireName); nbt = this.empireTurn.writeToNBT(nbt, externalID); nbt.setInteger(externalID + "playerListSize", this.playerList.size()); if(this.playerList.size() > 0) { int i = 0; for(Map.Entry<EntityPlayer, String> entry : this.playerList.entrySet()) { String playerNumber = externalID + "#player_" + i; String playerPosition = externalID + "@player_" + i; nbt.setInteger(playerNumber, entry.getKey().getEntityId()); nbt.setString(playerPosition, entry.getValue()); i++; } } nbt.setInteger("resourceListSize", this.resources.size()); if(this.resources.size() > 0) { int i = 0; for(Map.Entry<Resource, Long> entry : this.resources.entrySet()) { String resourceID = externalID + "#resource_" + i; nbt = entry.getKey().writeToNBT(nbt, resourceID); nbt.setLong(resourceID + "_amount", entry.getValue()); i++; } } nbt.setInteger("territorySize", this.territory.size()); if(this.territory.size() > 0) { int i = 0; for(Map.Entry<Tile, Integer> entry : this.territory.entrySet()) { String tileID = externalID + "#tile_" + i; nbt = entry.getKey().writeToNBT(nbt, tileID); nbt.setLong(tileID + "_length", entry.getValue()); i++; } } nbt.setInteger("vassalListSize", this.vassalList.size()); if(this.vassalList.size() > 0) { int i = 0; for(Map.Entry<Empire, Integer> entry : this.vassalList.entrySet()) { String vassalID = externalID + "#vassal_" + i; nbt = entry.getKey().writeToNBT(nbt, vassalID); nbt.setInteger(vassalID + "_length", entry.getValue()); i++; } } nbt.setInteger("cityListSize", this.cityList.size()); if(this.cityList.size() > 0) { int i = 0; for(Map.Entry<City, Integer> entry : this.cityList.entrySet()) { String cityID = externalID + "#city_" + i; nbt = entry.getKey().writeToNBT(nbt, cityID); nbt.setInteger(cityID + "_length", entry.getValue()); i++; } } return nbt; }
  11. Awesome, I will do that! Thank you for the guidance. Related question, I will be storing Tiles and Cities separately in NBT in a WorldSavedData TileList and CityList. Would it be a problem to have them stored this way? Will Minecraft recognize that someTile stored in someEmpire's territory Map and in the TileList are the same thing?
  12. Okay, so then will I want to just integrate the Empire serialization into the read/writeFromNBT methods in the EmpireList class or add some new methods in my EmpireList class or in my Empire class to do that. I've also included my Empire class below. Resource, Tile, City are all custom objects with a lot of fields themselves. Does this seem doable to store in WorldSavedData? Thank you for all the help so far. package com.example.examplemod.common.core.empire; import java.util.Map; import com.example.examplemod.common.caps.turn.EmpireTurn; import com.example.examplemod.common.core.city.City; import com.example.examplemod.common.core.turn.WorldTurn; import com.example.examplemod.common.map.tile.Tile; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.world.World; public class Empire { private int empireID = 0; private boolean exists = false; private String empireName = ""; private World empireWorld = null; private EmpireTurn empireTurn = null; private Map<EntityPlayer, String> playerList = null; private Map<Resource, Long> resources = null; private Map<Tile, Integer> territory = null; private Map<Empire, Integer> vassalList = null; private Map<City, Integer> cityList = null; public Empire(String empireName, World world, EntityPlayer player, String playerPosition, Map<Resource, Long> startingResources, Tile tile) { this.empireID = this.createEmpireID(world); this.exists = true; int turn = WorldTurn.get(world).getTurn(); this.empireName = empireName; this.empireWorld = world; this.empireTurn = new EmpireTurn(world, this.empireID); this.playerList.put(player, playerPosition); this.resources.putAll(startingResources); this.territory.put(tile, turn); //EmpireList.get(world).addEmpire(this); tile.setOwnership(this, turn); } private int createEmpireID(World world) { return 0; //EmpireList.get(world).getEmpireList().size(); } public boolean addCity(City city) { if(!this.canAddCity()) return false; WorldTurn worldTurn = WorldTurn.get(this.empireWorld); cityList.put(city, worldTurn.getTurn()); return true; } public boolean addVassal(Empire empire) { if(!this.canAddVassal(empire.getEmpireValue())) return false; WorldTurn worldTurn = WorldTurn.get(this.empireWorld); vassalList.put(empire,worldTurn.getTurn()); return true; } public void addResource(Resource resource, long amount) { if (this.resources.putIfAbsent(resource, amount) != null) { this.resources.put(resource, this.resources.get(resource) + amount); } } public boolean canAddVassal(int empireValue) { return false; } public boolean canAddCity() { return true; } public void changeName(String name) { this.empireName = name; } public Map<City, Integer> getCities() { return this.cityList; } public int getMaximumVassalSize() { return 0; } public int getEmpireValue() { return 0; } public boolean empireExists() { return this.exists; } public long getResourceValue(Resource resource) { return this.resources.get(resource) != null ? this.resources.get(resource) : 0L; } public EmpireTurn getEmpireTurn() { return this.empireTurn; } public Map<Empire, Integer> getVassals() { return this.vassalList; } public String getName() { return this.empireName; } public int getID() { return this.empireID; } public Map<EntityPlayer, String> getPlayers() { return this.playerList; } public void destroyEmpire() { this.exists = false; } public void rebirthEmpire() { this.exists = true; } }
  13. Oh yeah, I figured out the extends/@Override part, but it seems like I'll have to write each int, long, string, etc. separately. Is that accurate, or is there an easier way of doing this?
  14. Thank you for your help! I'm working on overriding those two methods now, but now I'm running into questions of how exactly I should do that. I'm really new to this stuff, so I'm sorry if this is something obvious, but what should I be writing, exactly? Do I need to take my Empire object and break it down into each of its fields and write/read these separately? A lot of these fields are custom objects unto themselves and can contain an arbitrary amount of data.
  15. Hmmmm what would that look like? Would that go in my Empire (object) class or in my EmpireList (WorldSavedData) class?
  16. Hello, I have created a custom mod object "Empire" that contains a lot of diverse data (Integers, Longs, Strings, Maps, etc.) and I want to store a list or array of all of the "Empires" in a world using WorldSavedData. I'm struggling trying to figure out how to store such a list using NBT. Is anyone able to help? Here's my class code (the ????? mark the spots that I'm having trouble at): package com.example.examplemod.common.core.empire; import java.util.ArrayList; import java.util.List; import java.util.Map; import com.example.examplemod.Ref; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; import net.minecraft.world.storage.MapStorage; import net.minecraft.world.storage.WorldSavedData; public class EmpireList extends WorldSavedData { private static final String DATA_NAME = Ref.MODID + "_EmpireList"; private List<Empire> empires = new ArrayList<Empire> (); public EmpireList() { super(DATA_NAME); } public EmpireList(String s) { super(s); } @Override public void readFromNBT(NBTTagCompound nbt) { empires = ?????; } @Override public NBTTagCompound writeToNBT(NBTTagCompound nbt) { nbt.???????("empires", empires); return nbt; } public List<Empire> getEmpireList() { return empires; } public boolean addEmpire(Empire empire) { markDirty(); return !empires.contains(empire) ? empires.add(empire) : false; } public static EmpireList get(World world) { MapStorage storage = world.getMapStorage(); EmpireList instance = (EmpireList)storage.getOrLoadData(EmpireList.class, DATA_NAME); if (instance == null) { System.out.println("It was null"); instance = new EmpireList(); storage.setData(DATA_NAME, instance); } return instance; } } Thank you in advance
×
×
  • Create New...

Important Information

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