ecaa90a438
Partially overhauled our command classes. Added DDCommandBase - it extends CommandBase and acts as a new base class for our commands. It removes a little redundancy in our code and provides increased convenience. Removed the static fields for our commands in mod_pocketDim. There was no point in keeping them when nothing was using them. Changed in-game command names to be shorter yet relevant. Converted all commands to singletons so proper instances can be retrieved if necessary. Migrated some of the custom dungeon start/ending logic to DungeonHelper and made customDungeonStatus private. Except for data objects, we shouldn't be exposing state variables like that without any kind of checks. I've rewritten the code in some commands but it's been quite tiring. Still need to fix up lots of things.
410 lines
No EOL
17 KiB
Java
410 lines
No EOL
17 KiB
Java
package StevenDimDoors.mod_pocketDim;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.HashMap;
|
|
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.block.material.Material;
|
|
import net.minecraft.entity.EntityEggInfo;
|
|
import net.minecraft.entity.EntityList;
|
|
import net.minecraft.entity.item.EntityItem;
|
|
import net.minecraft.item.Item;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.world.biome.BiomeGenBase;
|
|
import net.minecraftforge.common.DimensionManager;
|
|
import net.minecraftforge.common.MinecraftForge;
|
|
import StevenDimDoors.mod_pocketDim.blocks.BlockDimWall;
|
|
import StevenDimDoors.mod_pocketDim.blocks.BlockDimWallPerm;
|
|
import StevenDimDoors.mod_pocketDim.blocks.BlockLimbo;
|
|
import StevenDimDoors.mod_pocketDim.blocks.BlockRift;
|
|
import StevenDimDoors.mod_pocketDim.blocks.ChaosDoor;
|
|
import StevenDimDoors.mod_pocketDim.blocks.ExitDoor;
|
|
import StevenDimDoors.mod_pocketDim.blocks.dimDoor;
|
|
import StevenDimDoors.mod_pocketDim.blocks.dimHatch;
|
|
import StevenDimDoors.mod_pocketDim.commands.CommandCreateDungeonRift;
|
|
import StevenDimDoors.mod_pocketDim.commands.CommandDeleteAllLinks;
|
|
import StevenDimDoors.mod_pocketDim.commands.CommandDeleteDimensionData;
|
|
import StevenDimDoors.mod_pocketDim.commands.CommandDeleteRifts;
|
|
import StevenDimDoors.mod_pocketDim.commands.CommandEndDungeonCreation;
|
|
import StevenDimDoors.mod_pocketDim.commands.CommandPrintDimensionData;
|
|
import StevenDimDoors.mod_pocketDim.commands.CommandPruneDimensions;
|
|
import StevenDimDoors.mod_pocketDim.commands.CommandStartDungeonCreation;
|
|
import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper;
|
|
import StevenDimDoors.mod_pocketDim.helpers.dimHelper;
|
|
import StevenDimDoors.mod_pocketDim.items.ItemChaosDoor;
|
|
import StevenDimDoors.mod_pocketDim.items.ItemRiftBlade;
|
|
import StevenDimDoors.mod_pocketDim.items.ItemStabilizedRiftSignature;
|
|
import StevenDimDoors.mod_pocketDim.items.ItemStableFabric;
|
|
import StevenDimDoors.mod_pocketDim.items.itemDimDoor;
|
|
import StevenDimDoors.mod_pocketDim.items.itemExitDoor;
|
|
import StevenDimDoors.mod_pocketDim.items.itemLinkSignature;
|
|
import StevenDimDoors.mod_pocketDim.items.itemRiftRemover;
|
|
import StevenDimDoors.mod_pocketDim.ticking.MobObelisk;
|
|
import StevenDimDoors.mod_pocketDim.world.BiomeGenLimbo;
|
|
import StevenDimDoors.mod_pocketDim.world.BiomeGenPocket;
|
|
import StevenDimDoors.mod_pocketDim.world.LimboProvider;
|
|
import StevenDimDoors.mod_pocketDim.world.pocketProvider;
|
|
import StevenDimDoors.mod_pocketDimClient.ClientPacketHandler;
|
|
import StevenDimDoors.mod_pocketDimClient.ClientTickHandler;
|
|
import cpw.mods.fml.common.Mod;
|
|
import cpw.mods.fml.common.Mod.Init;
|
|
import cpw.mods.fml.common.Mod.Instance;
|
|
import cpw.mods.fml.common.Mod.PostInit;
|
|
import cpw.mods.fml.common.Mod.PreInit;
|
|
import cpw.mods.fml.common.Mod.ServerStarting;
|
|
import cpw.mods.fml.common.Mod.ServerStopping;
|
|
import cpw.mods.fml.common.SidedProxy;
|
|
import cpw.mods.fml.common.event.FMLInitializationEvent;
|
|
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
|
|
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
|
import cpw.mods.fml.common.event.FMLServerStartingEvent;
|
|
import cpw.mods.fml.common.event.FMLServerStoppingEvent;
|
|
import cpw.mods.fml.common.network.NetworkMod;
|
|
import cpw.mods.fml.common.network.NetworkMod.SidedPacketHandler;
|
|
import cpw.mods.fml.common.registry.EntityRegistry;
|
|
import cpw.mods.fml.common.registry.GameRegistry;
|
|
import cpw.mods.fml.common.registry.LanguageRegistry;
|
|
import cpw.mods.fml.common.registry.TickRegistry;
|
|
import cpw.mods.fml.relauncher.Side;
|
|
|
|
|
|
@Mod(modid = mod_pocketDim.modid, name = "Dimensional Doors", version = mod_pocketDim.version)
|
|
|
|
|
|
@NetworkMod(clientSideRequired = true, serverSideRequired = false,
|
|
clientPacketHandlerSpec =
|
|
@SidedPacketHandler(channels = {"pocketDim" }, packetHandler = ClientPacketHandler.class),
|
|
serverPacketHandlerSpec =
|
|
@SidedPacketHandler(channels = {"pocketDim" }, packetHandler = ServerPacketHandler.class),
|
|
channels={"DimDoorPackets"}, packetHandler = PacketHandler.class, connectionHandler=ConnectionHandler.class)
|
|
|
|
public class mod_pocketDim
|
|
{
|
|
public static final String version = "1.5.2R1.4.0RC1";
|
|
public static final String modid = "DimDoors";
|
|
|
|
//need to clean up
|
|
@SidedProxy(clientSide = "StevenDimDoors.mod_pocketDimClient.ClientProxy", serverSide = "StevenDimDoors.mod_pocketDim.CommonProxy")
|
|
public static CommonProxy proxy;
|
|
|
|
@Instance("PocketDimensions")
|
|
public static mod_pocketDim instance = new mod_pocketDim();
|
|
|
|
public static SchematicLoader loader;
|
|
public static pocketTeleporter teleporter;
|
|
|
|
public static Block transientDoor;
|
|
public static Block ExitDoor;
|
|
public static Block chaosDoor;
|
|
public static Block blockRift;
|
|
public static Block blockLimbo;
|
|
public static Block dimDoor;
|
|
public static Block blockDimWall;
|
|
public static Block dimHatch;
|
|
public static Block blockDimWallPerm;
|
|
|
|
public static Item itemRiftBlade;
|
|
public static Item itemDimDoor;
|
|
public static Item itemExitDoor;
|
|
public static Item itemRiftRemover;
|
|
public static Item itemLinkSignature;
|
|
public static Item itemStableFabric;
|
|
public static Item itemChaosDoor;
|
|
public static Item itemStabilizedLinkSignature;
|
|
|
|
public static BiomeGenBase limboBiome;
|
|
public static BiomeGenBase pocketBiome;
|
|
|
|
public static PlayerRespawnTracker tracker;
|
|
|
|
public static HashMap<String,ArrayList<EntityItem>> limboSpawnInventory = new HashMap<String,ArrayList<EntityItem>>();
|
|
|
|
public static ArrayList<Integer> blocksImmuneToRift = new ArrayList<Integer>();
|
|
|
|
public static boolean hasInitDims = false;
|
|
public static boolean isPlayerWearingGoogles = false;
|
|
|
|
private static DDProperties properties;
|
|
public static RiftGenerator riftGen;
|
|
|
|
public static long genTime;
|
|
public static int teleTimer = 0;
|
|
|
|
@PreInit
|
|
public void PreInit(FMLPreInitializationEvent event)
|
|
{
|
|
//This should be the FIRST thing that gets done.
|
|
properties = DDProperties.initialize(event.getSuggestedConfigurationFile());
|
|
|
|
//Now do other stuff
|
|
MinecraftForge.EVENT_BUS.register(new EventHookContainer());
|
|
|
|
//These fields MUST be initialized after properties are loaded to prevent
|
|
//instances from holding onto null references to the properties.
|
|
|
|
loader = new SchematicLoader();
|
|
teleporter = new pocketTeleporter();
|
|
tracker = new PlayerRespawnTracker();
|
|
riftGen = new RiftGenerator();
|
|
}
|
|
|
|
@Init
|
|
public void Init(FMLInitializationEvent event)
|
|
{
|
|
|
|
transientDoor = (new TransientDoor(properties.TransientDoorID, Material.iron)).setHardness(1.0F) .setUnlocalizedName("transientDoor");
|
|
|
|
blockDimWall = (new BlockDimWall(properties.FabricBlockID, 0, Material.iron)).setLightValue(1.0F).setHardness(0.1F).setUnlocalizedName("blockDimWall");
|
|
blockDimWallPerm = (new BlockDimWallPerm(properties.PermaFabricBlockID, 0, Material.iron)).setLightValue(1.0F).setBlockUnbreakable().setHardness(100000.0F).setUnlocalizedName("blockDimWallPerm");
|
|
ExitDoor = (new ExitDoor(properties.WarpDoorID, Material.wood)).setHardness(1.0F) .setUnlocalizedName("dimDoorWarp");
|
|
blockRift = (new BlockRift(properties.RiftBlockID, 0, Material.air).setHardness(1.0F) .setUnlocalizedName("rift"));
|
|
blockLimbo = (new BlockLimbo(properties.LimboBlockID, 15, Material.iron).setHardness(.2F).setUnlocalizedName("BlockLimbo").setLightValue(.0F));
|
|
chaosDoor = (new ChaosDoor(properties.UnstableDoorID, Material.iron).setHardness(.2F).setUnlocalizedName("chaosDoor").setLightValue(.0F) );
|
|
dimDoor = (new dimDoor(properties.DimensionalDoorID, Material.iron)).setHardness(1.0F).setResistance(2000.0F) .setUnlocalizedName("dimDoor");
|
|
dimHatch = (new dimHatch(properties.TransTrapdoorID, 84, Material.iron)).setHardness(1.0F) .setUnlocalizedName("dimHatch");
|
|
// dimRail = (new DimRail(dimRailID, 88, false)).setHardness(.5F) .setUnlocalizedName("dimRail");
|
|
|
|
itemDimDoor = (new itemDimDoor(properties.DimensionalDoorItemID, Material.iron)).setUnlocalizedName("itemDimDoor");
|
|
itemExitDoor = (new itemExitDoor(properties.WarpDoorItemID, Material.wood)).setUnlocalizedName("itemDimDoorWarp");
|
|
itemLinkSignature = (new itemLinkSignature(properties.RiftSignatureItemID)).setUnlocalizedName("itemLinkSignature");
|
|
itemRiftRemover = (new itemRiftRemover(properties.RiftRemoverItemID, Material.wood)).setUnlocalizedName("itemRiftRemover");
|
|
itemStableFabric = (new ItemStableFabric(properties.StableFabricItemID, 0)).setUnlocalizedName("itemStableFabric");
|
|
itemChaosDoor = (new ItemChaosDoor(properties.UnstableDoorItemID, Material.iron)).setUnlocalizedName("itemChaosDoor");
|
|
itemRiftBlade = (new ItemRiftBlade(properties.RiftBladeItemID, Material.iron)).setUnlocalizedName("ItemRiftBlade");
|
|
itemStabilizedLinkSignature = (new ItemStabilizedRiftSignature(properties.StabilizedRiftSignatureItemID)).setUnlocalizedName("itemStabilizedRiftSig");
|
|
|
|
mod_pocketDim.limboBiome= (new BiomeGenLimbo(properties.LimboBiomeID));
|
|
mod_pocketDim.pocketBiome= (new BiomeGenPocket(properties.PocketBiomeID));
|
|
|
|
GameRegistry.registerWorldGenerator(mod_pocketDim.riftGen);
|
|
|
|
GameRegistry.registerBlock(chaosDoor, "Unstable Door");
|
|
GameRegistry.registerBlock(ExitDoor, "Warp Door");
|
|
GameRegistry.registerBlock(blockRift, "Rift");
|
|
GameRegistry.registerBlock(blockLimbo, "Unraveled Fabric");
|
|
GameRegistry.registerBlock(dimDoor, "Dimensional Door");
|
|
GameRegistry.registerBlock(dimHatch,"Transdimensional Trapdoor");
|
|
GameRegistry.registerBlock(blockDimWall, "Fabric of Reality");
|
|
GameRegistry.registerBlock(blockDimWallPerm, "Fabric of RealityPerm");
|
|
GameRegistry.registerBlock(transientDoor, "transientDoor");
|
|
|
|
GameRegistry.registerPlayerTracker(tracker);
|
|
|
|
DimensionManager.registerProviderType(properties.PocketProviderID, pocketProvider.class, false);
|
|
DimensionManager.registerProviderType(properties.LimboProviderID, LimboProvider.class, false);
|
|
DimensionManager.registerDimension(properties.LimboDimensionID, properties.LimboProviderID);
|
|
|
|
LanguageRegistry.addName(transientDoor , "transientDoor");
|
|
LanguageRegistry.addName(blockRift , "Rift");
|
|
LanguageRegistry.addName(blockLimbo , "Unraveled Fabric");
|
|
LanguageRegistry.addName(ExitDoor , "Warp Door");
|
|
LanguageRegistry.addName(chaosDoor , "Unstable Door");
|
|
LanguageRegistry.addName(blockDimWall , "Fabric of Reality");
|
|
LanguageRegistry.addName(blockDimWallPerm , "Fabric of Reality");
|
|
LanguageRegistry.addName(dimDoor, "Dimensional Door");
|
|
LanguageRegistry.addName(dimHatch, "Transdimensional Trapdoor");
|
|
|
|
LanguageRegistry.addName(itemExitDoor, "Warp Door");
|
|
LanguageRegistry.addName(itemLinkSignature , "Rift Signature");
|
|
LanguageRegistry.addName(itemStabilizedLinkSignature, "Stabilized Rift Signature");
|
|
LanguageRegistry.addName(itemRiftRemover , "Rift Remover");
|
|
LanguageRegistry.addName(itemStableFabric , "Stable Fabric");
|
|
LanguageRegistry.addName(itemChaosDoor , "Unstable Door");
|
|
LanguageRegistry.addName(itemDimDoor, "Dimensional Door");
|
|
LanguageRegistry.addName(itemRiftBlade , "Rift Blade");
|
|
|
|
TickRegistry.registerTickHandler(new ClientTickHandler(), Side.CLIENT);
|
|
TickRegistry.registerTickHandler(new CommonTickHandler(), Side.SERVER);
|
|
|
|
//GameRegistry.registerTileEntity(TileEntityDimDoor.class, "TileEntityDimRail");
|
|
|
|
GameRegistry.registerTileEntity(TileEntityDimDoor.class, "TileEntityDimDoor");
|
|
GameRegistry.registerTileEntity(TileEntityRift.class, "TileEntityRift");
|
|
|
|
EntityRegistry.registerModEntity(MobObelisk.class, "Monolith", properties.MonolithEntityID, this, 70, 1, true);
|
|
EntityList.IDtoClassMapping.put(properties.MonolithEntityID, MobObelisk.class);
|
|
EntityList.entityEggs.put(properties.MonolithEntityID, new EntityEggInfo(properties.MonolithEntityID, 0, 0xffffff));
|
|
LanguageRegistry.instance().addStringLocalization("entity.DimDoors.Obelisk.name", "Monolith");
|
|
|
|
//GameRegistry.addBiome(this.limboBiome);
|
|
//GameRegistry.addBiome(this.pocketBiome);
|
|
|
|
if (properties.CraftingDimensionaDoorAllowed)
|
|
{
|
|
GameRegistry.addRecipe(new ItemStack(itemDimDoor, 1), new Object[]
|
|
{
|
|
" ", "yxy", " ", 'x', Item.enderPearl, 'y', Item.doorIron
|
|
});
|
|
|
|
GameRegistry.addRecipe(new ItemStack(itemDimDoor, 1), new Object[]
|
|
{
|
|
" ", "yxy", " ", 'x', mod_pocketDim.itemStableFabric, 'y', Item.doorIron
|
|
});
|
|
}
|
|
|
|
/**
|
|
if(this.enableDimRail)
|
|
{
|
|
GameRegistry.addRecipe(new ItemStack(dimRail, 1), new Object[]
|
|
{
|
|
" ", "yxy", " ", 'x', this.itemDimDoor, 'y', Block.rail
|
|
});
|
|
|
|
GameRegistry.addRecipe(new ItemStack(dimRail, 1), new Object[]
|
|
{
|
|
" ", "yxy", " ", 'x', this.itemExitDoor, 'y', Block.rail
|
|
});
|
|
}
|
|
**/
|
|
|
|
if(properties.CraftingUnstableDoorAllowed)
|
|
{
|
|
GameRegistry.addRecipe(new ItemStack(itemChaosDoor, 1), new Object[]
|
|
{
|
|
" ", "yxy", " ", 'x', Item.eyeOfEnder, 'y', mod_pocketDim.itemDimDoor
|
|
});
|
|
}
|
|
if(properties.CraftingWarpDoorAllowed)
|
|
{
|
|
GameRegistry.addRecipe(new ItemStack(itemExitDoor, 1), new Object[]
|
|
{
|
|
" ", "yxy", " ", 'x', Item.enderPearl, 'y', Item.doorWood
|
|
});
|
|
|
|
GameRegistry.addRecipe(new ItemStack(itemExitDoor, 1), new Object[]
|
|
{
|
|
" ", "yxy", " ", 'x', mod_pocketDim.itemStableFabric, 'y', Item.doorWood
|
|
});
|
|
}
|
|
if(properties.CraftingTransTrapdoorAllowed)
|
|
{
|
|
GameRegistry.addRecipe(new ItemStack(dimHatch, 1), new Object[]
|
|
{
|
|
" y ", " x ", " y ", 'x', Item.enderPearl, 'y', Block.trapdoor
|
|
});
|
|
|
|
GameRegistry.addRecipe(new ItemStack(dimHatch, 1), new Object[]
|
|
{
|
|
" y ", " x ", " y ", 'x', mod_pocketDim.itemStableFabric, 'y', Block.trapdoor
|
|
});
|
|
}
|
|
if(properties.CraftingRiftSignatureAllowed)
|
|
{
|
|
GameRegistry.addRecipe(new ItemStack(itemLinkSignature, 1), new Object[]
|
|
{
|
|
" y ", "yxy", " y ", 'x', Item.enderPearl, 'y', Item.ingotIron
|
|
});
|
|
|
|
GameRegistry.addRecipe(new ItemStack(itemLinkSignature, 1), new Object[]
|
|
{
|
|
" y ", "yxy", " y ", 'x', mod_pocketDim.itemStableFabric, 'y', Item.ingotIron
|
|
});
|
|
}
|
|
|
|
if(properties.CraftingRiftRemoverAllowed)
|
|
{
|
|
GameRegistry.addRecipe(new ItemStack(itemRiftRemover, 1), new Object[]
|
|
{
|
|
" y ", "yxy", " y ", 'x', Item.enderPearl, 'y', Item.ingotGold
|
|
});
|
|
GameRegistry.addRecipe(new ItemStack(itemRiftRemover, 1), new Object[]
|
|
{
|
|
"yyy", "yxy", "yyy", 'x', mod_pocketDim.itemStableFabric, 'y', Item.ingotGold
|
|
});
|
|
}
|
|
|
|
if (properties.CraftingRiftBladeAllowed)
|
|
{
|
|
|
|
GameRegistry.addRecipe(new ItemStack(itemRiftBlade, 1), new Object[]
|
|
{
|
|
" x ", " x ", " y ", 'x', Item.enderPearl, 'y',mod_pocketDim.itemRiftRemover
|
|
});
|
|
}
|
|
|
|
if (properties.CraftingStableFabricAllowed)
|
|
{
|
|
GameRegistry.addRecipe(new ItemStack(itemStableFabric, 4), new Object[]
|
|
{
|
|
" y ", "yxy", " y ", 'x', Item.enderPearl, 'y', mod_pocketDim.blockDimWall
|
|
});
|
|
}
|
|
|
|
if (properties.CraftingStabilizedRiftSignatureAllowed)
|
|
{
|
|
GameRegistry.addRecipe(new ItemStack(mod_pocketDim.itemStabilizedLinkSignature,1), new Object[]
|
|
{
|
|
" y ", "yxy", " y ", 'x', mod_pocketDim.itemLinkSignature, 'y', mod_pocketDim.itemStableFabric
|
|
});
|
|
}
|
|
|
|
mod_pocketDim.blocksImmuneToRift.add(properties.FabricBlockID);
|
|
mod_pocketDim.blocksImmuneToRift.add(properties.PermaFabricBlockID);
|
|
mod_pocketDim.blocksImmuneToRift.add(properties.DimensionalDoorID);
|
|
mod_pocketDim.blocksImmuneToRift.add(properties.WarpDoorID);
|
|
mod_pocketDim.blocksImmuneToRift.add(properties.TransTrapdoorID);
|
|
mod_pocketDim.blocksImmuneToRift.add(properties.UnstableDoorID);
|
|
mod_pocketDim.blocksImmuneToRift.add(properties.RiftBlockID);
|
|
mod_pocketDim.blocksImmuneToRift.add(properties.TransientDoorID);
|
|
mod_pocketDim.blocksImmuneToRift.add(Block.blockIron.blockID);
|
|
mod_pocketDim.blocksImmuneToRift.add(Block.blockDiamond.blockID);
|
|
mod_pocketDim.blocksImmuneToRift.add(Block.blockEmerald.blockID);
|
|
mod_pocketDim.blocksImmuneToRift.add(Block.blockGold.blockID);
|
|
mod_pocketDim.blocksImmuneToRift.add(Block.blockLapis.blockID);
|
|
mod_pocketDim.blocksImmuneToRift.add(Block.bedrock.blockID);
|
|
|
|
DungeonHelper.initialize();
|
|
|
|
proxy.loadTextures();
|
|
proxy.registerRenderers();
|
|
}
|
|
|
|
|
|
@PostInit
|
|
public void PostInit(FMLPostInitializationEvent event)
|
|
{
|
|
//Register loot chests
|
|
DDLoot.registerInfo();
|
|
}
|
|
|
|
@ServerStopping
|
|
public void serverStopping(FMLServerStoppingEvent event)
|
|
{
|
|
try
|
|
{
|
|
dimHelper.instance.save();
|
|
dimHelper.instance.unregsisterDims();
|
|
dimHelper.dimList.clear();
|
|
dimHelper.blocksToDecay.clear();
|
|
dimHelper.instance.interDimLinkList.clear();
|
|
mod_pocketDim.hasInitDims=false;
|
|
}
|
|
catch(Exception e)
|
|
{
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
|
|
@ServerStarting
|
|
public void serverStarting(FMLServerStartingEvent event)
|
|
{
|
|
CommandCreateDungeonRift.instance().register(event);
|
|
CommandDeleteAllLinks.instance().register(event);
|
|
CommandDeleteDimensionData.instance().register(event);
|
|
CommandDeleteRifts.instance().register(event);
|
|
CommandEndDungeonCreation.instance().register(event);
|
|
CommandPrintDimensionData.instance().register(event);
|
|
CommandPruneDimensions.instance().register(event);
|
|
CommandStartDungeonCreation.instance().register(event);
|
|
|
|
dimHelper.instance.load();
|
|
if(!dimHelper.dimList.containsKey(properties.LimboDimensionID))
|
|
{
|
|
dimHelper.dimList.put(properties.LimboDimensionID, new DimData( properties.LimboDimensionID, false, 0, new LinkData()));
|
|
}
|
|
|
|
|
|
}
|
|
} |