diff --git a/banned-ips.json b/banned-ips.json new file mode 100644 index 00000000..0637a088 --- /dev/null +++ b/banned-ips.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/banned-players.json b/banned-players.json new file mode 100644 index 00000000..0637a088 --- /dev/null +++ b/banned-players.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/build.properties b/build.properties index 67f6d3fb..7275cadc 100644 --- a/build.properties +++ b/build.properties @@ -1,5 +1,5 @@ # -#Mon Feb 16 07:21:21 EST 2015 +#Fri Feb 20 07:40:39 EST 2015 mod_name=BloodMagic forge_version=10.13.2.1232 ccc_version=1.0.4.29 @@ -8,5 +8,5 @@ nei_version=1.0.3.64 package_group=com.wayoftime.bloodmagic mod_version=1.3.1Beta1 minetweaker_version=Dev-1.7.10-3.0.9B -build_number=4 mc_version=1.7.10 +build_number=7 diff --git a/eula.txt b/eula.txt new file mode 100644 index 00000000..c7ba20ee --- /dev/null +++ b/eula.txt @@ -0,0 +1,3 @@ +#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula). +#Thu Feb 19 14:13:34 EST 2015 +eula=true \ No newline at end of file diff --git a/ops.json b/ops.json new file mode 100644 index 00000000..0637a088 --- /dev/null +++ b/ops.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/server.properties b/server.properties new file mode 100644 index 00000000..2b6ea534 --- /dev/null +++ b/server.properties @@ -0,0 +1,33 @@ +#Minecraft server properties +#Thu Feb 19 17:21:32 EST 2015 +generator-settings= +op-permission-level=4 +allow-nether=true +level-name=world +enable-query=false +allow-flight=false +announce-player-achievements=true +server-port=25565 +level-type=DEFAULT +enable-rcon=false +force-gamemode=false +level-seed= +server-ip= +max-build-height=256 +spawn-npcs=true +white-list=false +spawn-animals=true +hardcore=false +snooper-enabled=true +online-mode=true +resource-pack= +pvp=true +difficulty=1 +enable-command-block=false +gamemode=0 +player-idle-timeout=0 +max-players=20 +spawn-monsters=true +generate-structures=true +view-distance=10 +motd=A Minecraft Server diff --git a/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java b/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java index 4d92f39e..5e1fd37b 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java +++ b/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java @@ -1,14 +1,8 @@ package WayofTime.alchemicalWizardry; -import java.io.BufferedReader; -import java.io.DataInputStream; import java.io.File; -import java.io.FileNotFoundException; import java.io.FileOutputStream; -import java.io.IOException; import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.PrintWriter; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; @@ -17,7 +11,6 @@ import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; -import net.minecraft.client.Minecraft; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.init.Blocks; import net.minecraft.init.Items; @@ -76,7 +69,6 @@ import WayofTime.alchemicalWizardry.common.achievements.ModAchievements; import WayofTime.alchemicalWizardry.common.alchemy.CombinedPotionRegistry; import WayofTime.alchemicalWizardry.common.block.ArmourForge; import WayofTime.alchemicalWizardry.common.bloodAltarUpgrade.UpgradedAltars; -import WayofTime.alchemicalWizardry.common.book.BUEntries; import WayofTime.alchemicalWizardry.common.commands.CommandBind; import WayofTime.alchemicalWizardry.common.commands.CommandSN; import WayofTime.alchemicalWizardry.common.commands.CommandUnbind; @@ -141,7 +133,6 @@ import WayofTime.alchemicalWizardry.common.potion.PotionReciprocation; import WayofTime.alchemicalWizardry.common.potion.PotionSoulFray; import WayofTime.alchemicalWizardry.common.potion.PotionSoulHarden; import WayofTime.alchemicalWizardry.common.renderer.AlchemyCircleRenderer; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectAlphaPact; import WayofTime.alchemicalWizardry.common.rituals.RitualEffectAnimalGrowth; import WayofTime.alchemicalWizardry.common.rituals.RitualEffectAutoAlchemy; import WayofTime.alchemicalWizardry.common.rituals.RitualEffectBiomeChanger; @@ -166,8 +157,6 @@ import WayofTime.alchemicalWizardry.common.rituals.RitualEffectLava; import WayofTime.alchemicalWizardry.common.rituals.RitualEffectLeap; import WayofTime.alchemicalWizardry.common.rituals.RitualEffectLifeConduit; import WayofTime.alchemicalWizardry.common.rituals.RitualEffectMagnetic; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectOmegaStalling; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectOmegaTest; import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSoulBound; import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSpawnWard; import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSummonMeteor; @@ -290,8 +279,6 @@ import cpw.mods.fml.common.event.FMLServerStartingEvent; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.EntityRegistry; import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; @Mod(modid = "AWWayofTime", name = "AlchemicalWizardry", version = "v1.3.1", guiFactory = "WayofTime.alchemicalWizardry.client.gui.ConfigGuiFactory") @@ -941,6 +928,8 @@ public class AlchemicalWizardry MeteorRegistry.registerMeteorParadigm(ironBlockStack, this.ironBlockMeteorArray, this.ironBlockMeteorRadius); MeteorRegistry.registerMeteorParadigm(new ItemStack(Items.nether_star), this.netherStarMeteorArray, this.netherStarMeteorRadius); + ItemStack stickStack = new ItemStack(Items.stick, 1, craftingConstant); + //Register spell component recipes ItemStack complexSpellCrystalStack = new ItemStack(ModItems.itemComplexSpellCrystal); ItemStack quartzRodStack = new ItemStack(ModItems.baseItems, 1, 0); @@ -975,6 +964,8 @@ public class AlchemicalWizardry ItemStack soulShardStack = new ItemStack(ModItems.baseItems, 1, 29); ItemStack soulRunicPlateStack = new ItemStack(ModItems.baseItems, 1, 30); ItemStack livingBraceStack = new ItemStack(ModItems.baseItems, 1, 31); + ItemStack enderShardStack = new ItemStack(ModItems.baseItems, 1, 32); + ItemStack enderShardCraftedStack = new ItemStack(ModItems.baseItems, 8, 32); GameRegistry.addRecipe(new ItemStack(ModBlocks.blockCrystal), "lsl", "sls", "lsl", 'l', lifeShardStack, 's', soulShardStack); GameRegistry.addRecipe(new ItemStack(ModBlocks.blockCrystal, 4, 1), "ss", "ss", 's', new ItemStack(ModBlocks.blockCrystal, 1, 0)); @@ -1068,6 +1059,15 @@ public class AlchemicalWizardry GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModItems.itemSigilOfSupression), "wtl", "wvl", "wol", 'v', new ItemStack(ModItems.voidSigil), 't', new ItemStack(ModBlocks.blockTeleposer), 'o', masterBloodOrbStack, 'l', lavaBucketStack, 'w', waterBucketStack)); GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModItems.itemSigilOfEnderSeverance), "ptp", "ese", "pop", 's', new ItemStack(ModItems.demonicSlate), 't', weakBloodShardStack, 'o', masterBloodOrbStack, 'e', new ItemStack(Items.ender_eye), 'p', new ItemStack(Items.ender_pearl))); + GameRegistry.addShapelessRecipe(enderShardCraftedStack, weakBloodShardStack, new ItemStack(Items.ender_pearl)); + + GameRegistry.addRecipe(new ItemStack(ModItems.inputRoutingFocus), "sgs", "geg", "sgs", 'e', enderShardStack, 's', stickStack, 'g', glassStack); + GameRegistry.addRecipe(new ItemStack(ModItems.outputRoutingFocus, 1, 0), "sgs", "geg", "sgs", 'e', enderShardStack, 's', stickStack, 'g', stoneStack); + GameRegistry.addRecipe(new ItemStack(ModItems.outputRoutingFocus, 1, 1), "sgs", "geg", "sgs", 'e', enderShardStack, 's', stickStack, 'g', new ItemStack(Blocks.sandstone)); + GameRegistry.addRecipe(new ItemStack(ModItems.outputRoutingFocus, 1, 2), "sgs", "geg", "sgs", 'e', enderShardStack, 's', stickStack, 'g', new ItemStack(Items.dye, 1, craftingConstant)); + GameRegistry.addRecipe(new ItemStack(ModItems.outputRoutingFocus, 1, 3), "sgs", "geg", "sgs", 'e', enderShardStack, 's', stickStack, 'g', obsidianStack); + + AlchemyRecipeRegistry.registerRecipe(new ItemStack(Items.flint, 2, 0), 1, new ItemStack[]{new ItemStack(Blocks.gravel), new ItemStack(Items.flint)}, 1); AlchemyRecipeRegistry.registerRecipe(new ItemStack(Blocks.grass), 2, new ItemStack[]{new ItemStack(Blocks.dirt), new ItemStack(Items.dye, 1, 15), new ItemStack(Items.wheat_seeds), new ItemStack(Items.wheat_seeds)}, 1); AlchemyRecipeRegistry.registerRecipe(new ItemStack(Items.leather, 3, 0), 2, new ItemStack[]{new ItemStack(Items.rotten_flesh), new ItemStack(Items.rotten_flesh), new ItemStack(Items.rotten_flesh), waterBucketStack, new ItemStack(Items.flint)}, 1); @@ -1087,8 +1087,7 @@ public class AlchemicalWizardry @EventHandler public void postInit(FMLPostInitializationEvent event) { - BUEntries entries = new BUEntries(); - entries.postInit(); + proxy.registerPostSideObjects(); //TODO Thaumcraft Integration if (Loader.isModLoaded("Thaumcraft")) { @@ -1189,8 +1188,8 @@ public class AlchemicalWizardry DemonVillageLootRegistry.init(); - if(parseTextFiles) - this.parseTextFile(); +// if(parseTextFiles) +// this.parseTextFile(); // this.createItemTextureFiles(); } @@ -1365,10 +1364,10 @@ public class AlchemicalWizardry Rituals.registerRitual("AW029VeilOfEvil", 1, 150000, new RitualEffectVeilOfEvil(), "Veil of Evil", new AlchemyCircleRenderer(new ResourceLocation("alchemicalwizardry:textures/models/SimpleTransCircle.png"), 0, 0, 0, 255, 0, 0.501, 0.501, 0, 1.5, false)); Rituals.registerRitual("AW030FullStomach", 1, 100000, new RitualEffectFullStomach(), "Requiem of the Satiated Stomach", new AlchemyCircleRenderer(new ResourceLocation("alchemicalwizardry:textures/models/SimpleTransCircle.png"), 0, 0, 0, 255, 0, 0.501, 0.501, 0, 1.5, false)); Rituals.registerRitual("AW031Convocation",isDemonRitualCreativeOnly ? 10 : 2, 15000000, new RitualEffectDemonPortal(), "Convocation of the Damned", new AlchemyCircleRenderer(new ResourceLocation("alchemicalwizardry:textures/models/TransCircleDemon.png"), 220, 22, 22, 255, 0, 0.501, 0.501, 0, 5, false)); - Rituals.registerRitual("AW032", 1, 100, new RitualEffectOmegaTest(), "Symmetry of the Omega"); - Rituals.registerRitual("AW033", 2, 100, new RitualEffectOmegaStalling(), "Omega Stalling"); - Rituals.registerRitual("AW034", 2, 100, new RitualEffectAlphaPact(), "Alpha Pact"); - Rituals.registerRitual("AW035", 1, 100, new RitualEffectItemRouting(), "Orchestra of the Phantom Hands"); +// Rituals.registerRitual("AW032", 1, 100, new RitualEffectOmegaTest(), "Symmetry of the Omega"); +// Rituals.registerRitual("AW033", 2, 100, new RitualEffectOmegaStalling(), "Omega Stalling"); +// Rituals.registerRitual("AW034", 2, 100, new RitualEffectAlphaPact(), "Alpha Pact"); + Rituals.registerRitual("AW035", 1, 10000, new RitualEffectItemRouting(), "Orchestra of the Phantom Hands"); //Rituals.registerRitual(1,100,new RitualEffectApiaryOverclock(),"Apiary Overclock")); } @@ -1572,187 +1571,187 @@ public class AlchemicalWizardry return strings; } - @SideOnly(Side.CLIENT) - public void parseTextFile() - { - File textFiles = new File("config/BloodMagic/bookDocs"); - //if(textFiles.exists()) - { - try { - System.out.println("I am in an island of files!"); - - InputStream input = AlchemicalWizardry.class.getResourceAsStream("/assets/alchemicalwizardryBooks/books/book.txt"); - - Minecraft.getMinecraft().fontRenderer.setUnicodeFlag(true); - - if(input != null) - { - DataInputStream in = new DataInputStream(input); - BufferedReader br = new BufferedReader(new InputStreamReader(in)); - String strLine; - //Read File Line By Line - - int defMaxLines = 16; - int maxLines = defMaxLines; - - int currentPage = 0; - - int pageIndex = 1; - - String currentTitle = "aw.entry.Magnus"; - - String[] strings = new String[1]; - strings[0] = ""; - - while ((strLine = br.readLine()) != null) - { - if(strLine.trim().isEmpty()) - { - continue; - } - - if(strLine.startsWith("//TITLE ")) //New entry~ - { - String[] newStrings = new String[currentPage + 1 + 1]; //Just to show that it is increasing - for(int i=0; i<strings.length; i++) - { - newStrings[i] = strings[i]; - } - - currentPage++; - newStrings[currentPage - 1] = currentTitle + "." + pageIndex + "=" + newStrings[currentPage - 1]; - newStrings[currentPage] = ""; - strings = newStrings; - - pageIndex = 1; - - String title = strLine.replaceFirst("//TITLE ", " ").trim(); - currentTitle = "aw.entry." + title; - - continue; - }else if(strLine.startsWith("//SPECIAL ")) - { - if(strings[currentPage].isEmpty()) - { - String lines = strLine.replaceFirst("//SPECIAL ", ""); - Integer ln = Integer.decode(lines); - if(ln != null) - { - maxLines = ln; - } - }else - { - String[] newStrings = new String[currentPage + 1 + 1]; //Just to show that it is increasing - for(int i=0; i<strings.length; i++) - { - newStrings[i] = strings[i]; - } - - currentPage++; - newStrings[currentPage - 1] = currentTitle + "." + pageIndex + "=" + newStrings[currentPage - 1]; - newStrings[currentPage] = ""; - strings = newStrings; - } - - continue; - } - - strLine = strLine.replace('�', '"').replace('�','"').replace("�", "...").replace('�', '\'').replace('�', '-'); - - if(Minecraft.getMinecraft() != null && Minecraft.getMinecraft().fontRenderer != null) - { - List list = Minecraft.getMinecraft().fontRenderer.listFormattedStringToWidth(strLine, 110); - if(list != null) - { - System.out.println("Number of lines: " + list.size()); - } - } - - String[] cutStrings = strLine.split(" "); - - for(String word : cutStrings) - { - boolean changePage = false; - int length = word.length(); - word = word.replace('\t', ' '); - List list = Minecraft.getMinecraft().fontRenderer.listFormattedStringToWidth(strings[currentPage] + " " + word, 110); - - if(list.size() > maxLines) - { - changePage = true; - } - if(changePage) //Encode into current entry, then move to next entry - { - String[] newStrings = new String[currentPage + 1 + 1]; //Just to show that it is increasing - for(int i=0; i<strings.length; i++) - { - newStrings[i] = strings[i]; - } - - currentPage++; - - newStrings[currentPage - 1] = currentTitle + "." + pageIndex + "=" + newStrings[currentPage - 1]; - newStrings[currentPage] = word; - strings = newStrings; - - pageIndex++; - - maxLines = defMaxLines; - - changePage = false; - }else - { - strings[currentPage] = strings[currentPage] + " " + word; - } - } - - int currentLines = Minecraft.getMinecraft().fontRenderer.listFormattedStringToWidth(strings[currentPage], 110).size(); - while(Minecraft.getMinecraft().fontRenderer.listFormattedStringToWidth(strings[currentPage] + " ", 110).size() <= currentLines) - { - { - strings[currentPage] = strings[currentPage] + " "; - } - } - - System.out.println("" + strLine); - } - - strings[currentPage] = currentTitle + "." + pageIndex + "=" + strings[currentPage]; - - File bmDirectory = new File("src/main/resources/assets/alchemicalwizardryBooks"); - if(!bmDirectory.exists()) - { - bmDirectory.mkdirs(); - } - - File file = new File(bmDirectory, "books.txt"); -// if (file.exists() && file.length() > 3L) -// { -// -// }else - { - PrintWriter writer = new PrintWriter(file); - for(String stri : strings) - { - writer.println(stri); - } - writer.close(); - } - +// @SideOnly(Side.CLIENT) +// public void parseTextFile() +// { +// File textFiles = new File("config/BloodMagic/bookDocs"); +// //if(textFiles.exists()) +// { +// try { +// System.out.println("I am in an island of files!"); +// +// InputStream input = AlchemicalWizardry.class.getResourceAsStream("/assets/alchemicalwizardryBooks/books/book.txt"); +// +// Minecraft.getMinecraft().fontRenderer.setUnicodeFlag(true); +// +// if(input != null) +// { +// DataInputStream in = new DataInputStream(input); +// BufferedReader br = new BufferedReader(new InputStreamReader(in)); +// String strLine; +// //Read File Line By Line // - } - - Minecraft.getMinecraft().fontRenderer.setUnicodeFlag(false); - - } catch (FileNotFoundException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - } +// int defMaxLines = 16; +// int maxLines = defMaxLines; +// +// int currentPage = 0; +// +// int pageIndex = 1; +// +// String currentTitle = "aw.entry.Magnus"; +// +// String[] strings = new String[1]; +// strings[0] = ""; +// +// while ((strLine = br.readLine()) != null) +// { +// if(strLine.trim().isEmpty()) +// { +// continue; +// } +// +// if(strLine.startsWith("//TITLE ")) //New entry~ +// { +// String[] newStrings = new String[currentPage + 1 + 1]; //Just to show that it is increasing +// for(int i=0; i<strings.length; i++) +// { +// newStrings[i] = strings[i]; +// } +// +// currentPage++; +// newStrings[currentPage - 1] = currentTitle + "." + pageIndex + "=" + newStrings[currentPage - 1]; +// newStrings[currentPage] = ""; +// strings = newStrings; +// +// pageIndex = 1; +// +// String title = strLine.replaceFirst("//TITLE ", " ").trim(); +// currentTitle = "aw.entry." + title; +// +// continue; +// }else if(strLine.startsWith("//SPECIAL ")) +// { +// if(strings[currentPage].isEmpty()) +// { +// String lines = strLine.replaceFirst("//SPECIAL ", ""); +// Integer ln = Integer.decode(lines); +// if(ln != null) +// { +// maxLines = ln; +// } +// }else +// { +// String[] newStrings = new String[currentPage + 1 + 1]; //Just to show that it is increasing +// for(int i=0; i<strings.length; i++) +// { +// newStrings[i] = strings[i]; +// } +// +// currentPage++; +// newStrings[currentPage - 1] = currentTitle + "." + pageIndex + "=" + newStrings[currentPage - 1]; +// newStrings[currentPage] = ""; +// strings = newStrings; +// } +// +// continue; +// } +// +// strLine = strLine.replace('�', '"').replace('�','"').replace("�", "...").replace('�', '\'').replace('�', '-'); +// +// if(Minecraft.getMinecraft() != null && Minecraft.getMinecraft().fontRenderer != null) +// { +// List list = Minecraft.getMinecraft().fontRenderer.listFormattedStringToWidth(strLine, 110); +// if(list != null) +// { +// System.out.println("Number of lines: " + list.size()); +// } +// } +// +// String[] cutStrings = strLine.split(" "); +// +// for(String word : cutStrings) +// { +// boolean changePage = false; +// int length = word.length(); +// word = word.replace('\t', ' '); +// List list = Minecraft.getMinecraft().fontRenderer.listFormattedStringToWidth(strings[currentPage] + " " + word, 110); +// +// if(list.size() > maxLines) +// { +// changePage = true; +// } +// if(changePage) //Encode into current entry, then move to next entry +// { +// String[] newStrings = new String[currentPage + 1 + 1]; //Just to show that it is increasing +// for(int i=0; i<strings.length; i++) +// { +// newStrings[i] = strings[i]; +// } +// +// currentPage++; +// +// newStrings[currentPage - 1] = currentTitle + "." + pageIndex + "=" + newStrings[currentPage - 1]; +// newStrings[currentPage] = word; +// strings = newStrings; +// +// pageIndex++; +// +// maxLines = defMaxLines; +// +// changePage = false; +// }else +// { +// strings[currentPage] = strings[currentPage] + " " + word; +// } +// } +// +// int currentLines = Minecraft.getMinecraft().fontRenderer.listFormattedStringToWidth(strings[currentPage], 110).size(); +// while(Minecraft.getMinecraft().fontRenderer.listFormattedStringToWidth(strings[currentPage] + " ", 110).size() <= currentLines) +// { +// { +// strings[currentPage] = strings[currentPage] + " "; +// } +// } +// +// System.out.println("" + strLine); +// } +// +// strings[currentPage] = currentTitle + "." + pageIndex + "=" + strings[currentPage]; +// +// File bmDirectory = new File("src/main/resources/assets/alchemicalwizardryBooks"); +// if(!bmDirectory.exists()) +// { +// bmDirectory.mkdirs(); +// } +// +// File file = new File(bmDirectory, "books.txt"); +//// if (file.exists() && file.length() > 3L) +//// { +//// +//// }else +// { +// PrintWriter writer = new PrintWriter(file); +// for(String stri : strings) +// { +// writer.println(stri); +// } +// writer.close(); +// } +// +//// +// } +// +// Minecraft.getMinecraft().fontRenderer.setUnicodeFlag(false); +// +// } catch (FileNotFoundException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } catch (IOException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// } +// } @Mod.EventHandler public void initCommands(FMLServerStartingEvent event) diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/ILimitingLogic.java b/src/main/java/WayofTime/alchemicalWizardry/api/ILimitingLogic.java new file mode 100644 index 00000000..30ab2ca8 --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/api/ILimitingLogic.java @@ -0,0 +1,6 @@ +package WayofTime.alchemicalWizardry.api; + +public interface ILimitingLogic +{ + public int getRoutingLimit(); +} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogicLimit.java b/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogicLimit.java new file mode 100644 index 00000000..4e2d9065 --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogicLimit.java @@ -0,0 +1,9 @@ +package WayofTime.alchemicalWizardry.api; + +public class RoutingFocusLogicLimit extends RoutingFocusLogic implements ILimitingLogic +{ + public int getRoutingLimit() + { + return 0; + } +} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogicLimitDefault.java b/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogicLimitDefault.java new file mode 100644 index 00000000..62bb3457 --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogicLimitDefault.java @@ -0,0 +1,26 @@ +package WayofTime.alchemicalWizardry.api; + +import net.minecraft.item.ItemStack; +import WayofTime.alchemicalWizardry.common.items.routing.ILimitedRoutingFocus; + +public class RoutingFocusLogicLimitDefault extends RoutingFocusLogicLimit +{ + public int limit = 0; + + public RoutingFocusLogicLimitDefault(ItemStack stack) + { + if(stack != null && stack.getItem() instanceof ILimitedRoutingFocus) + { + limit = ((ILimitedRoutingFocus)stack.getItem()).getRoutingFocusLimit(stack); + }else + { + limit = 0; + } + } + + @Override + public int getRoutingLimit() + { + return limit; + } +} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogicLimitIgnMeta.java b/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogicLimitIgnMeta.java new file mode 100644 index 00000000..cd1d93bf --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogicLimitIgnMeta.java @@ -0,0 +1,26 @@ +package WayofTime.alchemicalWizardry.api; + +import net.minecraft.item.ItemStack; +import WayofTime.alchemicalWizardry.common.items.routing.ILimitedRoutingFocus; + +public class RoutingFocusLogicLimitIgnMeta extends RoutingFocusLogicIgnMeta implements ILimitingLogic +{ + public int limit = 0; + + public RoutingFocusLogicLimitIgnMeta(ItemStack stack) + { + if(stack != null && stack.getItem() instanceof ILimitedRoutingFocus) + { + limit = ((ILimitedRoutingFocus)stack.getItem()).getRoutingFocusLimit(stack); + }else + { + limit = 0; + } + } + + @Override + public int getRoutingLimit() + { + return limit; + } +} diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogicLimitMatchNBT.java b/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogicLimitMatchNBT.java new file mode 100644 index 00000000..94eba0fb --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogicLimitMatchNBT.java @@ -0,0 +1,26 @@ +package WayofTime.alchemicalWizardry.api; + +import net.minecraft.item.ItemStack; +import WayofTime.alchemicalWizardry.common.items.routing.ILimitedRoutingFocus; + +public class RoutingFocusLogicLimitMatchNBT extends RoutingFocusLogicMatchNBT implements ILimitingLogic +{ + public int limit = 0; + + public RoutingFocusLogicLimitMatchNBT(ItemStack stack) + { + if(stack != null && stack.getItem() instanceof ILimitedRoutingFocus) + { + limit = ((ILimitedRoutingFocus)stack.getItem()).getRoutingFocusLimit(stack); + }else + { + limit = 0; + } + } + + @Override + public int getRoutingLimit() + { + return limit; + } +} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogicLimitModItems.java b/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogicLimitModItems.java new file mode 100644 index 00000000..67bcb78d --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogicLimitModItems.java @@ -0,0 +1,26 @@ +package WayofTime.alchemicalWizardry.api; + +import net.minecraft.item.ItemStack; +import WayofTime.alchemicalWizardry.common.items.routing.ILimitedRoutingFocus; + +public class RoutingFocusLogicLimitModItems extends RoutingFocusLogicModItems implements ILimitingLogic +{ + public int limit = 0; + + public RoutingFocusLogicLimitModItems(ItemStack stack) + { + if(stack != null && stack.getItem() instanceof ILimitedRoutingFocus) + { + limit = ((ILimitedRoutingFocus)stack.getItem()).getRoutingFocusLimit(stack); + }else + { + limit = 0; + } + } + + @Override + public int getRoutingLimit() + { + return limit; + } +} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusParadigm.java b/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusParadigm.java index 8c467e88..c41cab43 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusParadigm.java +++ b/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusParadigm.java @@ -20,6 +20,10 @@ public class RoutingFocusParadigm public void addLogic(RoutingFocusLogic logic) { + if(logic instanceof ILimitingLogic) + { + maximumAmount += ((ILimitingLogic)logic).getRoutingLimit(); + } logicList.add(logic); } diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/ClientProxy.java b/src/main/java/WayofTime/alchemicalWizardry/client/ClientProxy.java index 6b85b67a..c7129aeb 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/client/ClientProxy.java +++ b/src/main/java/WayofTime/alchemicalWizardry/client/ClientProxy.java @@ -7,6 +7,7 @@ import net.minecraftforge.common.MinecraftForge; import WayofTime.alchemicalWizardry.ModBlocks; import WayofTime.alchemicalWizardry.api.spell.EntitySpellProjectile; import WayofTime.alchemicalWizardry.common.CommonProxy; +import WayofTime.alchemicalWizardry.common.book.BUEntries; import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGrunt; import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntEarth; import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntFire; @@ -105,6 +106,13 @@ public class ClientProxy extends CommonProxy public static int renderPass; public static int altarRenderType; + @Override + public void registerPostSideObjects() + { + BUEntries entries = new BUEntries(); + entries.postInit(); + } + @Override public void registerRenderers() { diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/CommonProxy.java b/src/main/java/WayofTime/alchemicalWizardry/common/CommonProxy.java index a3a738c0..c42748eb 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/CommonProxy.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/CommonProxy.java @@ -35,6 +35,11 @@ public class CommonProxy { // Nothing here as the server doesn't render graphics! } + + public void registerPostSideObjects() + { + + } public void registerEntities() { diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/book/BUEntries.java b/src/main/java/WayofTime/alchemicalWizardry/common/book/BUEntries.java index 1fdaaf37..08d441a7 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/book/BUEntries.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/book/BUEntries.java @@ -17,6 +17,8 @@ import WayofTime.alchemicalWizardry.book.entries.EntryText; import WayofTime.alchemicalWizardry.book.entries.IEntry; import WayofTime.alchemicalWizardry.book.enums.EnumType; import WayofTime.alchemicalWizardry.book.registries.EntryRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; public class BUEntries { @@ -47,6 +49,7 @@ public class BUEntries EntryRegistry.registerCategories(BUEntries.categoryTest); } + @SideOnly(Side.CLIENT) public void initEntries() { HashMap<Integer, IEntry> aIntroMap = new HashMap(); diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemComponents.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemComponents.java index e47a3782..4175c955 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemComponents.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemComponents.java @@ -16,7 +16,7 @@ import java.util.List; public class ItemComponents extends Item { - private static final String[] ITEM_NAMES = new String[]{"QuartzRod", "EmptyCore", "MagicalesCable", "WoodBrace", "StoneBrace", "ProjectileCore", "SelfCore", "MeleeCore", "ParadigmBackPlate", "OutputCable", "FlameCore", "IcyCore", "GustCore", "EarthenCore", "InputCable", "CrackedRunicPlate", "RunicPlate", "ScribedRunicPlate", "DefaultCore", "OffensiveCore", "DefensiveCore", "EnvironmentalCore", "PowerCore", "CostCore", "PotencyCore", "ObsidianBrace", "ToolCore", "EtherealSlate", "LifeShard", "SoulShard", "SoulRunicPlate", "LifeBrace"}; + private static final String[] ITEM_NAMES = new String[]{"QuartzRod", "EmptyCore", "MagicalesCable", "WoodBrace", "StoneBrace", "ProjectileCore", "SelfCore", "MeleeCore", "ParadigmBackPlate", "OutputCable", "FlameCore", "IcyCore", "GustCore", "EarthenCore", "InputCable", "CrackedRunicPlate", "RunicPlate", "ScribedRunicPlate", "DefaultCore", "OffensiveCore", "DefensiveCore", "EnvironmentalCore", "PowerCore", "CostCore", "PotencyCore", "ObsidianBrace", "ToolCore", "EtherealSlate", "LifeShard", "SoulShard", "SoulRunicPlate", "LifeBrace", "EnderShard"}; @SideOnly(Side.CLIENT) private IIcon[] icons; diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/ILimitedRoutingFocus.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/ILimitedRoutingFocus.java new file mode 100644 index 00000000..f92ce7b9 --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/ILimitedRoutingFocus.java @@ -0,0 +1,10 @@ +package WayofTime.alchemicalWizardry.common.items.routing; + +import net.minecraft.item.ItemStack; + +public interface ILimitedRoutingFocus +{ + public int getRoutingFocusLimit(ItemStack stack); + + public void setRoutingFocusLimit(ItemStack stack, int limit); +} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/OutputRoutingFocus.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/OutputRoutingFocus.java index 17f6737d..7f4cb654 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/OutputRoutingFocus.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/OutputRoutingFocus.java @@ -4,30 +4,54 @@ import java.util.List; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.IIcon; +import net.minecraft.util.StatCollector; import WayofTime.alchemicalWizardry.api.RoutingFocusLogic; -import WayofTime.alchemicalWizardry.api.RoutingFocusLogicIgnMeta; -import WayofTime.alchemicalWizardry.api.RoutingFocusLogicMatchNBT; -import WayofTime.alchemicalWizardry.api.RoutingFocusLogicModItems; +import WayofTime.alchemicalWizardry.api.RoutingFocusLogicLimitDefault; +import WayofTime.alchemicalWizardry.api.RoutingFocusLogicLimitIgnMeta; +import WayofTime.alchemicalWizardry.api.RoutingFocusLogicLimitMatchNBT; +import WayofTime.alchemicalWizardry.api.RoutingFocusLogicLimitModItems; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -public class OutputRoutingFocus extends RoutingFocus +public class OutputRoutingFocus extends RoutingFocus implements ILimitedRoutingFocus { IIcon modItemIcon; + IIcon ignMetaIcon; + IIcon matchNBTIcon; + public OutputRoutingFocus() { super(); } + @Override + public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) + { + super.addInformation(par1ItemStack, par2EntityPlayer, par3List, par4); + + if (!(par1ItemStack.getTagCompound() == null)) + { + int limit = this.getRoutingFocusLimit(par1ItemStack); + if(limit > 0) + { + par3List.add(StatCollector.translateToLocal("tooltip.routingFocus.limit") + " " + limit); + } + } + } + @Override @SideOnly(Side.CLIENT) public void registerIcons(IIconRegister iconRegister) { this.itemIcon = iconRegister.registerIcon("AlchemicalWizardry:OutputRoutingFocus"); this.modItemIcon = iconRegister.registerIcon("AlchemicalWizardry:OutputRoutingFocusModItems"); + this.ignMetaIcon = iconRegister.registerIcon("AlchemicalWizardry:OutputRoutingFocusIgnMeta"); + this.matchNBTIcon = iconRegister.registerIcon("AlchemicalWizardry:OutputRoutingFocusMatchNBT"); } @SideOnly(Side.CLIENT) @@ -39,6 +63,10 @@ public class OutputRoutingFocus extends RoutingFocus return this.itemIcon; case 1: return this.modItemIcon; + case 2: + return this.ignMetaIcon; + case 3: + return this.matchNBTIcon; } return this.itemIcon; } @@ -78,19 +106,49 @@ public class OutputRoutingFocus extends RoutingFocus } @Override - public RoutingFocusLogic getLogic(int damage) + public RoutingFocusLogic getLogic(ItemStack itemStack) { - switch(damage) + if(itemStack != null) { - case 0: - return new RoutingFocusLogic(); - case 1: - return new RoutingFocusLogicModItems(); - case 2: - return new RoutingFocusLogicIgnMeta(); - case 3: - return new RoutingFocusLogicMatchNBT(); + switch(itemStack.getItemDamage()) + { + case 0: + return new RoutingFocusLogicLimitDefault(itemStack); + case 1: + return new RoutingFocusLogicLimitModItems(itemStack); + case 2: + return new RoutingFocusLogicLimitIgnMeta(itemStack); + case 3: + return new RoutingFocusLogicLimitMatchNBT(itemStack); + } } + return new RoutingFocusLogic(); - } + } + + public int getDefaultStackLimit(int damage) + { + return 0; + } + + public int getRoutingFocusLimit(ItemStack itemStack) + { + if (!(itemStack.getTagCompound() == null)) + { + return itemStack.getTagCompound().getInteger("stackLimit"); + } else + { + return getDefaultStackLimit(itemStack.getItemDamage()); + } + } + + public void setRoutingFocusLimit(ItemStack itemStack, int amt) + { + if ((itemStack.getTagCompound() == null)) + { + itemStack.setTagCompound(new NBTTagCompound()); + } + + itemStack.getTagCompound().setInteger("stackLimit", amt); + } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/RoutingFocus.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/RoutingFocus.java index 9e8004e8..83ff4cb9 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/RoutingFocus.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/RoutingFocus.java @@ -8,6 +8,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentText; import net.minecraft.util.StatCollector; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -15,6 +16,7 @@ import WayofTime.alchemicalWizardry.AlchemicalWizardry; import WayofTime.alchemicalWizardry.api.Int3; import WayofTime.alchemicalWizardry.api.RoutingFocusLogic; import WayofTime.alchemicalWizardry.api.RoutingFocusPosAndFacing; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; public class RoutingFocus extends Item { @@ -30,25 +32,25 @@ public class RoutingFocus extends Item return new RoutingFocusPosAndFacing(new Int3(this.xCoord(itemStack), this.yCoord(itemStack), this.zCoord(itemStack)), this.getSetDirection(itemStack)); } - @Override - public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) - { - this.cycleDirection(itemStack); - return itemStack; - } - - public void cycleDirection(ItemStack itemStack) - { - ForgeDirection dir = this.getSetDirection(itemStack); - int direction = dir.ordinal(); - direction++; - if(direction >= ForgeDirection.VALID_DIRECTIONS.length) - { - direction = 0; - } - - this.setSetDirection(itemStack, ForgeDirection.getOrientation(direction)); - } +// @Override +// public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) +// { +// this.cycleDirection(itemStack); +// return itemStack; +// } +// +// public void cycleDirection(ItemStack itemStack) +// { +// ForgeDirection dir = this.getSetDirection(itemStack); +// int direction = dir.ordinal(); +// direction++; +// if(direction >= ForgeDirection.VALID_DIRECTIONS.length) +// { +// direction = 0; +// } +// +// this.setSetDirection(itemStack, ForgeDirection.getOrientation(direction)); +// } public ForgeDirection getSetDirection(ItemStack itemStack) { @@ -77,7 +79,7 @@ public class RoutingFocus extends Item @Override public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) { - par3List.add(this.getFocusDescription()); + par3List.add(StatCollector.translateToLocal(this.getFocusDescription())); if (!(par1ItemStack.getTagCompound() == null)) { @@ -96,15 +98,35 @@ public class RoutingFocus extends Item @Override public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ) { + if(world.isRemote) + { + return false; + } + TileEntity tile = world.getTileEntity(x, y, z); if(tile instanceof IInventory) { + if(player.isSneaking()) + { + if(this instanceof ILimitedRoutingFocus) + { + int pastAmount = ((ILimitedRoutingFocus)this).getRoutingFocusLimit(stack); + int amount = SpellHelper.getNumberOfItemsInInventory((IInventory)tile, ForgeDirection.getOrientation(side)); + if(amount != pastAmount) + { + ((ILimitedRoutingFocus)this).setRoutingFocusLimit(stack, amount); + player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("message.routerfocus.limit") + amount)); + } + } + } + this.setCoordinates(stack, x, y, z); + this.setSetDirection(stack, ForgeDirection.getOrientation(side)); return true; } - - return false; + + return true; } public void setCoordinates(ItemStack itemStack, int x, int y, int z) @@ -154,34 +176,8 @@ public class RoutingFocus extends Item } } - public RoutingFocusLogic getLogic(int damage) + public RoutingFocusLogic getLogic(ItemStack itemStack) { return new RoutingFocusLogic(); } - - public int getDefaultStackLimit(int damage) - { - return 0; - } - - public int getStackLimitAmount(ItemStack itemStack) - { - if (!(itemStack.getTagCompound() == null)) - { - return itemStack.getTagCompound().getInteger("stackLimit"); - } else - { - return getDefaultStackLimit(itemStack.getItemDamage()); - } - } - - public void setStackLimitAmount(ItemStack itemStack, int amt) - { - if ((itemStack.getTagCompound() == null)) - { - itemStack.setTagCompound(new NBTTagCompound()); - } - - itemStack.getTagCompound().setInteger("stackLimit", amt); - } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectItemRouting.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectItemRouting.java index 8ee86c53..5472b92c 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectItemRouting.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectItemRouting.java @@ -199,7 +199,7 @@ public class RitualEffectItemRouting extends RitualEffect outputFocus = (OutputRoutingFocus)keyStack.getItem(); parad.addRoutingFocusPosAndFacing(outputFocus.getPosAndFacing(keyStack)); - parad.addLogic(outputFocus.getLogic(keyStack.getItemDamage())); + parad.addLogic(outputFocus.getLogic(keyStack)); lastItemWasFocus = true; continue; }else @@ -228,7 +228,14 @@ public class RitualEffectItemRouting extends RitualEffect if(parad.doesItemMatch(keyStack, syphonedStack)) { - ItemStack newStack = SpellHelper.insertStackIntoInventory(syphonedStack, outputChestInventory, inputDirection); + ItemStack newStack = null; + if(parad.maximumAmount <= 0) + { + newStack = SpellHelper.insertStackIntoInventory(syphonedStack, outputChestInventory, inputDirection); + }else + { + newStack = SpellHelper.insertStackIntoInventory(syphonedStack, outputChestInventory, inputDirection, parad.maximumAmount); + } if(size == newStack.stackSize) { continue; diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellHelper.java b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellHelper.java index ddb058e4..e9460ab4 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellHelper.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellHelper.java @@ -479,6 +479,37 @@ public class SpellHelper return stack1.getItem() == stack2.getItem() && tagsEqual && stack1.getItemDamage() == stack2.getItemDamage() && Math.min(stack2.getMaxStackSize() - stack2.stackSize, stack1.stackSize) > 0; } + /** + * @param stack1 Stack that is placed into a slot + * @param stack2 Slot content that stack1 is placed into + * @return Stacks after stacking + */ + public static ItemStack[] combineStacks(ItemStack stack1, ItemStack stack2, int transferMax) + { + ItemStack[] returned = new ItemStack[2]; + + if (canCombine(stack1, stack2)) + { + int transferedAmount = Math.min(transferMax, stack2 == null ? stack1.stackSize : Math.min(stack2.getMaxStackSize() - stack2.stackSize, stack1.stackSize)); + if (transferedAmount > 0) + { + ItemStack copyStack = stack1.splitStack(transferedAmount); + if (stack2 == null) + { + stack2 = copyStack; + } else + { + stack2.stackSize += transferedAmount; + } + } + } + + returned[0] = stack1; + returned[1] = stack2; + + return returned; + } + /** * @param stack1 Stack that is placed into a slot * @param stack2 Slot content that stack1 is placed into @@ -553,6 +584,115 @@ public class SpellHelper return stack; } + + public static ItemStack insertStackIntoInventory(ItemStack stack, IInventory inventory, ForgeDirection dir, int limit) + { + if (stack == null) + { + return stack; + } + + boolean[] canBeInserted = new boolean[inventory.getSizeInventory()]; + + if(inventory instanceof ISidedInventory) + { + int[] array = ((ISidedInventory)inventory).getAccessibleSlotsFromSide(dir.ordinal()); + for(int in : array) + { + canBeInserted[in] = ((ISidedInventory)inventory).canInsertItem(in, stack, dir.ordinal()); + } + }else + { + for(int i=0; i<canBeInserted.length; i++) + { + canBeInserted[i] = true; + } + } + + int numberMatching = 0; + + for (int i = 0; i < inventory.getSizeInventory(); i++) + { + if(!canBeInserted[i]) + { + continue; + } + + ItemStack invStack = inventory.getStackInSlot(i); + + if(invStack != null && canCombine(stack, invStack)) + { + numberMatching += invStack.stackSize; + } + } + + if(numberMatching >= limit) + { + return stack; + } + + int newLimit = limit - numberMatching; + + for (int i = 0; i < inventory.getSizeInventory(); i++) + { + if(!canBeInserted[i]) + { + continue; + } + + int prevStackSize = stack.stackSize; + + ItemStack[] combinedStacks = combineStacks(stack, inventory.getStackInSlot(i), newLimit); + stack = combinedStacks[0]; + inventory.setInventorySlotContents(i, combinedStacks[1]); + + newLimit -= (prevStackSize - stack.stackSize); + + if (newLimit <= 0 || stack.stackSize <= 0) + { + return stack; + } + } + + return stack; + } + + public static int getNumberOfItemsInInventory(IInventory inventory, ForgeDirection dir) + { + boolean[] canBeInserted = new boolean[inventory.getSizeInventory()]; + + if(inventory instanceof ISidedInventory) + { + int[] array = ((ISidedInventory)inventory).getAccessibleSlotsFromSide(dir.ordinal()); + for(int in : array) + { + canBeInserted[in] = true; + } + }else + { + for(int i=0; i<canBeInserted.length; i++) + { + canBeInserted[i] = true; + } + } + + int amountOfItems = 0; + + for(int i=0; i<canBeInserted.length; i++) + { + if(canBeInserted[i]) + { + ItemStack stack = inventory.getStackInSlot(i); + + if(stack != null) + { + amountOfItems += stack.stackSize; + } + } + } + + return amountOfItems; + } public static boolean hydrateSoil(World world, int x, int y, int z) { diff --git a/src/main/resources/assets/alchemicalwizardry/lang/en_US.lang b/src/main/resources/assets/alchemicalwizardry/lang/en_US.lang index 09d11f10..86a43764 100644 --- a/src/main/resources/assets/alchemicalwizardry/lang/en_US.lang +++ b/src/main/resources/assets/alchemicalwizardry/lang/en_US.lang @@ -378,6 +378,7 @@ tooltip.tanksegmenter.desc2=reagents can go into a container tooltip.telepositionfocus.desc=An Enderpearl imbued with blood tooltip.voidsigil.desc=Better than a Swiffer! tooltip.watersigil.desc=Infinite water, anyone? +tooltip.routingFocus.limit=Limit: #Messages message.altar.capacity=Capacity: %s LP @@ -416,6 +417,7 @@ message.ritualdemonportal.missingjar=A jar on one of the pillars appears to be m message.tanksegmenter.nowhas=Tank now has message.tanksegmenter.setto=Tank Segmenter now set to: message.tanksegmenter.tankssetto=tank(s) set to: +message.routerfocus.limit=Focus' Item Limit set to: #Achievements achievement.firstPrick=Your first prick! diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/OutputRoutingFocusIgnMeta.png b/src/main/resources/assets/alchemicalwizardry/textures/items/OutputRoutingFocusIgnMeta.png new file mode 100644 index 00000000..0265f368 Binary files /dev/null and b/src/main/resources/assets/alchemicalwizardry/textures/items/OutputRoutingFocusIgnMeta.png differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/OutputRoutingFocusMatchNBT.png b/src/main/resources/assets/alchemicalwizardry/textures/items/OutputRoutingFocusMatchNBT.png new file mode 100644 index 00000000..834ed8f6 Binary files /dev/null and b/src/main/resources/assets/alchemicalwizardry/textures/items/OutputRoutingFocusMatchNBT.png differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemEnderShard.png b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemEnderShard.png new file mode 100644 index 00000000..b8783acc Binary files /dev/null and b/src/main/resources/assets/alchemicalwizardry/textures/items/baseItemEnderShard.png differ diff --git a/usercache.json b/usercache.json new file mode 100644 index 00000000..0637a088 --- /dev/null +++ b/usercache.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/whitelist.json b/whitelist.json new file mode 100644 index 00000000..0637a088 --- /dev/null +++ b/whitelist.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/world/DIM-1/data/villages.dat b/world/DIM-1/data/villages.dat new file mode 100644 index 00000000..33ca9d88 Binary files /dev/null and b/world/DIM-1/data/villages.dat differ diff --git a/world/DIM-1/forcedchunks.dat b/world/DIM-1/forcedchunks.dat new file mode 100644 index 00000000..e4345475 Binary files /dev/null and b/world/DIM-1/forcedchunks.dat differ diff --git a/world/DIM-1/multipart.dat b/world/DIM-1/multipart.dat new file mode 100644 index 00000000..ffe9e925 Binary files /dev/null and b/world/DIM-1/multipart.dat differ diff --git a/world/DIM1/data/villages.dat b/world/DIM1/data/villages.dat new file mode 100644 index 00000000..33ca9d88 Binary files /dev/null and b/world/DIM1/data/villages.dat differ diff --git a/world/DIM1/forcedchunks.dat b/world/DIM1/forcedchunks.dat new file mode 100644 index 00000000..e4345475 Binary files /dev/null and b/world/DIM1/forcedchunks.dat differ diff --git a/world/DIM1/multipart.dat b/world/DIM1/multipart.dat new file mode 100644 index 00000000..ffe9e925 Binary files /dev/null and b/world/DIM1/multipart.dat differ diff --git a/world/data/villages.dat b/world/data/villages.dat new file mode 100644 index 00000000..33ca9d88 Binary files /dev/null and b/world/data/villages.dat differ diff --git a/world/forcedchunks.dat b/world/forcedchunks.dat new file mode 100644 index 00000000..e4345475 Binary files /dev/null and b/world/forcedchunks.dat differ diff --git a/world/level.dat b/world/level.dat new file mode 100644 index 00000000..5e8991d5 Binary files /dev/null and b/world/level.dat differ diff --git a/world/level.dat_old b/world/level.dat_old new file mode 100644 index 00000000..2c2274fa Binary files /dev/null and b/world/level.dat_old differ diff --git a/world/multipart.dat b/world/multipart.dat new file mode 100644 index 00000000..ffe9e925 Binary files /dev/null and b/world/multipart.dat differ diff --git a/world/region/r.-1.-1.mca b/world/region/r.-1.-1.mca new file mode 100644 index 00000000..3deddd5e Binary files /dev/null and b/world/region/r.-1.-1.mca differ diff --git a/world/region/r.-1.0.mca b/world/region/r.-1.0.mca new file mode 100644 index 00000000..590d8d9f Binary files /dev/null and b/world/region/r.-1.0.mca differ diff --git a/world/region/r.0.-1.mca b/world/region/r.0.-1.mca new file mode 100644 index 00000000..321e5ead Binary files /dev/null and b/world/region/r.0.-1.mca differ diff --git a/world/region/r.0.0.mca b/world/region/r.0.0.mca new file mode 100644 index 00000000..0f4bfa4b Binary files /dev/null and b/world/region/r.0.0.mca differ diff --git a/world/session.lock b/world/session.lock new file mode 100644 index 00000000..49b485f4 Binary files /dev/null and b/world/session.lock differ