Jump to content


  • Posts

  • Joined

  • Last visited

Everything posted by ianc1215

  1. I have been kicking around an idea for different way of backing up and restoring world data. In order for it to work I need to know more about how the dimension loading and unloading mechanism works. I have not kept up with Minecraft in a while and I am out of the game. On top of that most of the codebase has changed. So my idea is leverage filesystem mechanisms in *nix OSes. I want to create a copy of the world data every X minutes (e.g 20 minutes) only keep the latest X copies (as per the configured options). In the event something happens to the world instead of shutting down the server I could record the last known postions of all online players and then kick them to a lobby dimension (DIM999) and force unload DIM0 for example. Then restore the world data to that dimension without requiring a full server reboot. My rationale to this idea is the only thing that has changed is the world data, the mods and configurations have not, so why reboot the entire server? If no one is occupying a dimension and its unloaded from memory can the world data be modified without breaking anything? Part of me from my sysadmin background thinks its that easy but I am not a game dev so there might be things I had not considered. I imagine most of my coding will be backend connections to Linux processes. The other question is how would I deal with chunk loaders? Do chunk loaders identify themselves as such or are they a fake player? If I am sure are "real players" are off the world I could still force unload the world right? Can anyone provide insight to this?
  2. So what would be the best way to implement an inventory to the cauldron? Would l use one of base classes like InventoryBasic? All I need to do is add / remove items and know what items have been added since they will affect the recipes.
  3. I should have mentioned in my post. I would be creating a new cauldron that is based on the vanilla cauldron. But to clarify I would not be trying to use the vanilla one. My idea was something like the thaumcraft cauldron. Basically somehow take a vanilla cauldron and "transform" it into a mod specific cauldron. I am guessing that by doing so I open up my options greatly?
  4. I have a concept for a mod I am working on. To put it in a nutshell the mod would use a cauldron which the player would throw the items into. However unlike mods like Thaumcraft where the items are converted into essentia I would leave the items as items once thrown in. I'm thinking I would need to store 10 or so items inside the cauldron (maybe more). I wouldn't need any GUI of any kind, just a way to store the items so the cauldron retains the contents while rebooting the server or other events. I took a look at the various container classes that are used for chests and such. I thought that sounded like the right idea but I thought rather than possibly running around in circles I should ask for advice. I was going use the "onEntityCollidedWithBlock" (I think it's spelled right) method as the way to get the item thrown in the cauldron but that is as far as the idea got. Any ideas?
  5. My first idea would be something happened when the jar was created. How did you create the jar?
  6. Hi there, I am trying to make a simple logger class that I can wrap around the base forge logger. The issue I am having is trying to get the logger to work so I can throw FML log levels and get my mod to show up as the mod throwing the error. Here is what I got so far... package com.solignis.slimeball.util; import com.solignis.obsidian.lib.Constants; import cpw.mods.fml.common.FMLLog; import org.apache.logging.log4j.Logger; /** * Created by Ian on 2/1/2015. */ public class SlimeLogger { public static Logger logger = FMLLog.getLogger(); public void info(String logMessage) { logger.info(logMessage); } public void warning(String logMessage) { logger.warn(logMessage); } public void severe(String logMessage) { logger.error(logMessage); } } This is what my log entries look like, [20:56:47] [server thread/INFO] [FML]: Today minecraft... Tomorrow the world! [20:56:47] [server thread/WARN] [FML]: Houston we've got a problem! [20:56:47] [server thread/ERROR] [FML]: What did you break? But as you can see in the code I am using the log4j logger. I want to use the FML logger directly but inside my wrapper. Can anyone assist?
  7. The only reason I am looking into a way to use forge in my concept is so I can make it part of the server. But since I am wanting to send pings to a destination other than the minecraft server or the minecraft client the only way I can think to do so is to open a network socket on the localhost for communication. Most of the other code will sit on it own thread to try and not interfere with the game as much as possible. In essence the idea would be no more dangerous than the update checkers that come with numerous mods. The would just sends a pong when the outside app sends a ping.
  8. Looking to build a small monitoring tool that would send heartbeats from the server to a small application for logging. My idea what to make a small mod that started up with the server and opened a connection the server on the loopback address of the server. Like I said just a simple monitoring application nothing more nothing less.
  9. I was wondering if there are any access restrictions built into Forge / FML that would throw anything similar to a SecurityException. If I wanted to connect to an external resource on a remote port by opening a new socket would Forge stop me?
  10. After thinking on my idea a little more I realized it would be a very bad idea to fire as a tick on the server. The idea is to make a "mod" (if you can call it that really) that writes to a text file every (user configurable) half hour. Its a proof concept I have for a small server watcher tool. So this topic was not the right direction for me to go. Still helpful though thanks.
  11. I have not used ticks before. I thought this might be an easy way to implement something simple. Don't I need to subscribe to a Forge Event Handler or something?
  12. I am looking for a way to fire an event after a specific amount of server ticks have occured. The event is simple, write to a text file. Its part of a much larger idea I have. 1. What is the best way to so? 2. Is forge sandboxed in such a way that would prevent me from writing to a raw text file while the game is running? Not a config I am talking about an actual text file on the system.
  13. hmmm I think this gives me an idea at least. I still gotta get some base mod code going so I can flesh out the idea. But this should help me a little bit. Thanks!
  14. Ok now just clarify when you mean a block placing event... you are referring to the player placing the block on the ground? Or the world generator placing the block in the world?
  15. I had an idea for a food mod where I want to restrict what containers can hold food. For example I want to restrict normal chests from storing food related items for examples let say bread. Instead bread could only be stored in a food storage box. How could I change make this possible? I would image I would need to use some access transformers or reflection to modify base classes so wooden chests and such would be modified. But how would you actually filter items? Check the ItemStack when placed inside or something and see if it is allowed to be there? Am I close?
  16. Ah I see, you make some good point I did not consider. Thanks for the insight. I will just go the normal route.
  17. I am curious... With how fast minecraft development moves it feels like stability is never guaranteed with mods between versions. With the idea I am working on now I was considering making my classes that extend Block directly rather than using the chain of classes that extend Block for me. For example I am referring to BlockCrops. Which itself extends BlockBush which extends Block. My reasoning is if I make my Crop class I would have less trouble porting my code over when a new version comes out. Does this make any difference? Or am I just wasting my time? I was thinking if I made all of my Blocks and Items extend their what I call parent class (is that what you would call this?) that I could keep thing more tightly group together and make it easier to debug and update things. So... Who here thinks I am crazy?
  18. I was wondering if someone knows what the real names for the method in IGrowable are. public interface IGrowable { boolean func_149851_a(World p_149851_1_, int p_149851_2_, int p_149851_3_, int p_149851_4_, boolean p_149851_5_); boolean func_149852_a(World p_149852_1_, Random p_149852_2_, int p_149852_3_, int p_149852_4_, int p_149852_5_); void func_149853_b(World p_149853_1_, Random p_149853_2_, int p_149853_3_, int p_149853_4_, int p_149853_5_); } I am not really sure how to implement them since the stuff is hard to read in its "native" form. I am not sure what these methods are supposed to do and I don't using code I dont understand because it makes debugging impossible. If anyone could shed some light on this... thanks.
  19. Well the block would be grown like a wheat crop. Basically I am looking to make it so I can water a plant and have a buff applied to the plant. But then have the buff effect wear off after so much time has elapsed. My original idea involved using a TileEntity to store NBT data about the attributes on the block. But if I was to do this how would I make the buff expire? Also is there a better way to do it?
  20. I was wondering if is possible to assign an expiring value to a block. Basically I am looking for a way to buff a block with an effect that would drop off like a buff on a player. Maybe have the buff last for 20000 ticks then stop. Is this even possible, if so where can I look or how could begin with such?
  21. Yeah I did not read clearly enough. I actually found my answer when I stumbled upon this. http://minalien.com/tutorial-setting-up-forgegradle-for-intellij-idea-scala/ Note to self, RTFW.
  22. I am trying to gain access to 2 variables in the minecraft source code. net.minecraft.item.ItemSkull.field_94586_c net.minecraft.item.ItemBucket.isFull I was looking at this tutorial. http://www.minecraftforge.net/wiki/Using_Access_Transformers I did what it said, I made a file which ends with _at.cfg The contents of my file are as such; # My Access Transformers public zb.c # net/minecraft/item/ItemSkull/field_94586_c public wr.a # net/minecraft/item/ItemBucket/isFull I save the file at the root of my gradle project, the same place you find gradlew and gradlew.bat Then I re run the gradle options "clean", "setupDecompWorkspace", "idea" When I re-open the project it complains that the vars are still private. What am I doing wrong?
  23. I was hoping to could pick the hive mind brain. I am looking for a way to use and arduino or similar device to to create an interface between the real world and minecraft. With the fact that the game runs now as a client server model instead of a local instance in the previous version predating 1.3.2. Honestly I am not sure where one would start... To make something work over multiplayer I would need a packet handler correct? Anyone throw me a bone? Thanks!
  24. Yeah, at first I thought they were related then after looking at it again I realized they are not. Thanks for the explained code. It helps a lot. Hopefully things get better in 1.7 soon. I know they are hard at work.
  25. I am working on a custom crop and instead of just copying and pasting code I am trying to understand what is going on. Some of the code I understand but the code related to the ticking of the block is throwing me could someone explain what is going on? The mechanics, not the Java basics... I got that part down but the obfuscation is making this hard to wrap my head around. Here is the code (BlockCrops.java from mojang) Basically I get the idea that the block ticks. On each tick it checks if there is enough light to support the plant, but what is the part about the floating point numbers looking like they have something to with the size of bounding box around the plant. Am I on the right path? My guess is not close...
  • Create New...

Important Information

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