From 59489f290f5aa9877bff601b9c6322d0700eb9bd Mon Sep 17 00:00:00 2001 From: StevenRS11 Date: Wed, 6 Nov 2013 15:16:07 -0500 Subject: [PATCH] Finished Server mode Also added World Thread --- .../mod_pocketDim/CraftingManager.java | 135 ++++++++++++++++++ .../mod_pocketDim/DDProperties.java | 14 +- .../helpers/ChunkLoaderHelper.java | 2 - .../mod_pocketDim/items/ItemWorldThread.java | 19 +++ .../mod_pocketDim/mod_pocketDim.java | 121 ++-------------- .../mod_pocketDim/world/ItemWorldThread.java | 6 - .../textures/items/ItemWorldThread.png | Bin 0 -> 3277 bytes 7 files changed, 175 insertions(+), 122 deletions(-) create mode 100644 StevenDimDoors/mod_pocketDim/CraftingManager.java create mode 100644 StevenDimDoors/mod_pocketDim/items/ItemWorldThread.java delete mode 100644 StevenDimDoors/mod_pocketDim/world/ItemWorldThread.java create mode 100644 resources/mods/DimDoors/textures/items/ItemWorldThread.png diff --git a/StevenDimDoors/mod_pocketDim/CraftingManager.java b/StevenDimDoors/mod_pocketDim/CraftingManager.java new file mode 100644 index 0000000..065ae05 --- /dev/null +++ b/StevenDimDoors/mod_pocketDim/CraftingManager.java @@ -0,0 +1,135 @@ +package StevenDimDoors.mod_pocketDim; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import cpw.mods.fml.common.registry.GameRegistry; +import static StevenDimDoors.mod_pocketDim.mod_pocketDim.*; + +public class CraftingManager +{ + + public static void registerRecipies() + { + Item coreCraftingItem = Item.enderPearl; + + if(properties.enableServerMode) + { + coreCraftingItem = itemWorldThread; + } + if (properties.CraftingDimensionalDoorAllowed) + { + GameRegistry.addRecipe(new ItemStack(itemDimDoor, 1), new Object[] + { + " ", "yxy", " ", 'x', coreCraftingItem, 'y', Item.doorIron + }); + + GameRegistry.addRecipe(new ItemStack(itemDimDoor, 1), new Object[] + { + " ", "yxy", " ", 'x', mod_pocketDim.itemStableFabric, 'y', Item.doorIron + }); + } + 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', coreCraftingItem, '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(transTrapdoor, 1), new Object[] + { + " y ", " x ", " y ", 'x', coreCraftingItem, 'y', Block.trapdoor + }); + + GameRegistry.addRecipe(new ItemStack(transTrapdoor, 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', coreCraftingItem, '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', coreCraftingItem, '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', coreCraftingItem, 'y',mod_pocketDim.itemRiftRemover + }); + } + + if (properties.CraftingStableFabricAllowed) + { + GameRegistry.addRecipe(new ItemStack(itemStableFabric, 1), new Object[] + { + " y ", "yxy", " y ", 'x', coreCraftingItem, 'y', mod_pocketDim.itemWorldThread + }); + } + + if (properties.CraftingStabilizedRiftSignatureAllowed) + { + GameRegistry.addRecipe(new ItemStack(mod_pocketDim.itemStabilizedLinkSignature,1), new Object[] + { + " y ", "yxy", " y ", 'x', mod_pocketDim.itemLinkSignature, 'y', mod_pocketDim.itemStableFabric + }); + } + if (properties.CraftingGoldDimDoorAllowed) + { + GameRegistry.addRecipe(new ItemStack(mod_pocketDim.itemGoldDimDoor,1), new Object[] + { + " x ", " y ", " x ", 'x', mod_pocketDim.itemGoldDoor, 'y', Item.eyeOfEnder + }); + } + if (properties.CraftingGoldDoorAllowed) + { + GameRegistry.addRecipe(new ItemStack(mod_pocketDim.itemGoldDoor,1), new Object[] + { + "yy ", "yy ", "yy ", 'y', Item.ingotGold + }); + + GameRegistry.addRecipe(new ItemStack(mod_pocketDim.itemGoldDoor,1), new Object[] + { + " yy", " yy", " yy", 'y', Item.ingotGold + }); + } + + } + + +} diff --git a/StevenDimDoors/mod_pocketDim/DDProperties.java b/StevenDimDoors/mod_pocketDim/DDProperties.java index 18e3218..182dde2 100644 --- a/StevenDimDoors/mod_pocketDim/DDProperties.java +++ b/StevenDimDoors/mod_pocketDim/DDProperties.java @@ -43,6 +43,8 @@ public class DDProperties public final int DimensionalDoorItemID; public final int UnstableDoorItemID; public final int WarpDoorItemID; + public final int ItemWorldThreadID; + /** * Other IDs @@ -91,6 +93,7 @@ public class DDProperties * Other Flags */ + public final boolean enableServerMode; public final boolean WorldRiftGenerationEnabled; public final boolean RiftSpreadEnabled; public final boolean RiftGriefingEnabled; @@ -100,6 +103,7 @@ public class DDProperties public final boolean LimboReturnsInventoryEnabled; public final boolean DoorRenderingEnabled; public final boolean TNFREAKINGT_Enabled; + /** * Other @@ -112,11 +116,13 @@ public class DDProperties public final int LimboReturnRange; public final String CustomSchematicDirectory; + //Singleton instance private static DDProperties instance = null; //Path for custom dungeons within configuration directory private final String CUSTOM_SCHEMATIC_SUBDIRECTORY = "/DimDoors_Custom_schematics"; //Names of categories + private final String CATEGORY_SERVERMODE = "server mode"; private final String CATEGORY_CRAFTING = "crafting"; private final String CATEGORY_ENTITY = "entity"; private final String CATEGORY_DIMENSION = "dimension"; @@ -178,6 +184,11 @@ public class DDProperties "Weighs the chance that a block will not be TNT. Must be greater than or equal to 0. " + "EXPLOSIONS must be set to true for this to have any effect.").getInt(); + enableServerMode = config.get(CATEGORY_SERVERMODE, "Server Mode", false, + "Enables servermode, changing all crafting recipies to require stabilized fabric. " + + "Stabilized fabric, in turn, requires the item World Thread, which is not craftable or obtainable at all. "+ + "It is up to the server manager on how to distribute it.").getBoolean(false); + DoorRenderEntityID=config.get(CATEGORY_ENTITY, "Door Render Entity ID", 89).getInt(); MonolithEntityID = config.get(CATEGORY_ENTITY, "Monolith Entity ID", 125).getInt(); @@ -201,7 +212,8 @@ public class DDProperties StabilizedRiftSignatureItemID = config.getItem("Stabilized Rift Signature Item ID", 5677).getInt(); GoldDoorItemID = config.getItem("Gold Door Item ID", 5678).getInt(); GoldDimDoorItemID = config.getItem("Gold Dim Door Item ID", 5679).getInt(); - + ItemWorldThreadID = config.getItem("World Thread Item ID", 5680).getInt(); + LimboBlockID = config.getTerrainBlock("World Generation Block IDs - must be less than 256", "Limbo Block ID", 217, "Blocks used for the terrain in Limbo").getInt(); PermaFabricBlockID = config.getTerrainBlock("World Generation Block IDs - must be less than 256", diff --git a/StevenDimDoors/mod_pocketDim/helpers/ChunkLoaderHelper.java b/StevenDimDoors/mod_pocketDim/helpers/ChunkLoaderHelper.java index 9c00f58..1e368ec 100644 --- a/StevenDimDoors/mod_pocketDim/helpers/ChunkLoaderHelper.java +++ b/StevenDimDoors/mod_pocketDim/helpers/ChunkLoaderHelper.java @@ -53,9 +53,7 @@ public class ChunkLoaderHelper implements LoadingCallback PocketManager.loadDimension(data.id()); } } - } } - } } \ No newline at end of file diff --git a/StevenDimDoors/mod_pocketDim/items/ItemWorldThread.java b/StevenDimDoors/mod_pocketDim/items/ItemWorldThread.java new file mode 100644 index 0000000..0f5a10e --- /dev/null +++ b/StevenDimDoors/mod_pocketDim/items/ItemWorldThread.java @@ -0,0 +1,19 @@ +package StevenDimDoors.mod_pocketDim.items; + +import net.minecraft.client.renderer.texture.IconRegister; +import net.minecraft.item.Item; +import StevenDimDoors.mod_pocketDim.mod_pocketDim; + +public class ItemWorldThread extends Item +{ + public ItemWorldThread(int itemID) + { + super(itemID); + this.setCreativeTab(mod_pocketDim.dimDoorsCreativeTab); + } + + public void registerIcons(IconRegister par1IconRegister) + { + this.itemIcon = par1IconRegister.registerIcon(mod_pocketDim.modid + ":" + this.getUnlocalizedName().replace("item.", "")); + } +} diff --git a/StevenDimDoors/mod_pocketDim/mod_pocketDim.java b/StevenDimDoors/mod_pocketDim/mod_pocketDim.java index 2ee71b9..570b2b1 100644 --- a/StevenDimDoors/mod_pocketDim/mod_pocketDim.java +++ b/StevenDimDoors/mod_pocketDim/mod_pocketDim.java @@ -44,6 +44,7 @@ import StevenDimDoors.mod_pocketDim.items.ItemStabilizedRiftSignature; import StevenDimDoors.mod_pocketDim.items.ItemStableFabric; import StevenDimDoors.mod_pocketDim.items.ItemUnstableDoor; import StevenDimDoors.mod_pocketDim.items.ItemWarpDoor; +import StevenDimDoors.mod_pocketDim.items.ItemWorldThread; import StevenDimDoors.mod_pocketDim.items.itemRiftRemover; import StevenDimDoors.mod_pocketDim.ticking.CommonTickHandler; import StevenDimDoors.mod_pocketDim.ticking.LimboDecay; @@ -117,6 +118,8 @@ public class mod_pocketDim public static Item itemGoldDimDoor; public static Item itemGoldDoor; + public static Item itemWorldThread; + public static Item itemRiftBlade; public static Item itemDimDoor; public static Item itemExitDoor; @@ -201,7 +204,9 @@ public class mod_pocketDim itemChaosDoor = (new ItemUnstableDoor(properties.UnstableDoorItemID, Material.iron)).setUnlocalizedName("itemChaosDoor"); itemRiftBlade = (new ItemRiftBlade(properties.RiftBladeItemID, EnumToolMaterial.GOLD, properties)).setUnlocalizedName("ItemRiftBlade"); itemStabilizedLinkSignature = (new ItemStabilizedRiftSignature(properties.StabilizedRiftSignatureItemID)).setUnlocalizedName("itemStabilizedRiftSig"); + itemWorldThread = (new ItemWorldThread(properties.ItemWorldThreadID)).setUnlocalizedName("itemWorldThread"); + mod_pocketDim.limboBiome= (new BiomeGenLimbo(properties.LimboBiomeID)); mod_pocketDim.pocketBiome= (new BiomeGenPocket(properties.PocketBiomeID)); @@ -246,6 +251,8 @@ public class mod_pocketDim LanguageRegistry.addName(itemChaosDoor , "Unstable Door"); LanguageRegistry.addName(itemDimDoor, "Dimensional Door"); LanguageRegistry.addName(itemRiftBlade , "Rift Blade"); + LanguageRegistry.addName(itemWorldThread, "World Thread"); + /** * Add names for multiblock inventory item @@ -266,120 +273,8 @@ public class mod_pocketDim 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.CraftingDimensionalDoorAllowed) - { - 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(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(transTrapdoor, 1), new Object[] - { - " y ", " x ", " y ", 'x', Item.enderPearl, 'y', Block.trapdoor - }); - - GameRegistry.addRecipe(new ItemStack(transTrapdoor, 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 - }); - } - if (properties.CraftingGoldDimDoorAllowed) - { - GameRegistry.addRecipe(new ItemStack(mod_pocketDim.itemGoldDimDoor,1), new Object[] - { - " x ", " y ", " x ", 'x', mod_pocketDim.itemGoldDoor, 'y', Item.eyeOfEnder - }); - } - if (properties.CraftingGoldDoorAllowed) - { - GameRegistry.addRecipe(new ItemStack(mod_pocketDim.itemGoldDoor,1), new Object[] - { - "yy ", "yy ", "yy ", 'y', Item.ingotGold - }); - - GameRegistry.addRecipe(new ItemStack(mod_pocketDim.itemGoldDoor,1), new Object[] - { - " yy", " yy", " yy", 'y', Item.ingotGold - }); - } + CraftingManager.registerRecipies(); DungeonHelper.initialize(); proxy.loadTextures(); diff --git a/StevenDimDoors/mod_pocketDim/world/ItemWorldThread.java b/StevenDimDoors/mod_pocketDim/world/ItemWorldThread.java deleted file mode 100644 index 8c4a55f..0000000 --- a/StevenDimDoors/mod_pocketDim/world/ItemWorldThread.java +++ /dev/null @@ -1,6 +0,0 @@ -package StevenDimDoors.mod_pocketDim.world; - -public class ItemWorldThread -{ - -} diff --git a/resources/mods/DimDoors/textures/items/ItemWorldThread.png b/resources/mods/DimDoors/textures/items/ItemWorldThread.png new file mode 100644 index 0000000000000000000000000000000000000000..8af4bf8f0f7d34ab9ce91bc9d5bbfb51d4d0f3a3 GIT binary patch literal 3277 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