diff --git a/gradle/.gradle/2.1/taskArtifacts/cache.properties b/gradle/.gradle/2.1/taskArtifacts/cache.properties new file mode 100644 index 00000000..18d2fcb2 --- /dev/null +++ b/gradle/.gradle/2.1/taskArtifacts/cache.properties @@ -0,0 +1 @@ +#Sat Jan 03 10:20:50 EST 2015 diff --git a/gradle/.gradle/2.1/taskArtifacts/cache.properties.lock b/gradle/.gradle/2.1/taskArtifacts/cache.properties.lock new file mode 100644 index 00000000..29e44d00 Binary files /dev/null and b/gradle/.gradle/2.1/taskArtifacts/cache.properties.lock differ diff --git a/gradle/.gradle/2.1/taskArtifacts/fileHashes.bin b/gradle/.gradle/2.1/taskArtifacts/fileHashes.bin new file mode 100644 index 00000000..a2a5c9e7 Binary files /dev/null and b/gradle/.gradle/2.1/taskArtifacts/fileHashes.bin differ diff --git a/gradle/.gradle/2.1/taskArtifacts/fileSnapshots.bin b/gradle/.gradle/2.1/taskArtifacts/fileSnapshots.bin new file mode 100644 index 00000000..67532665 Binary files /dev/null and b/gradle/.gradle/2.1/taskArtifacts/fileSnapshots.bin differ diff --git a/gradle/.gradle/2.1/taskArtifacts/outputFileStates.bin b/gradle/.gradle/2.1/taskArtifacts/outputFileStates.bin new file mode 100644 index 00000000..4409058c Binary files /dev/null and b/gradle/.gradle/2.1/taskArtifacts/outputFileStates.bin differ diff --git a/gradle/.gradle/2.1/taskArtifacts/taskArtifacts.bin b/gradle/.gradle/2.1/taskArtifacts/taskArtifacts.bin new file mode 100644 index 00000000..4917db12 Binary files /dev/null and b/gradle/.gradle/2.1/taskArtifacts/taskArtifacts.bin differ diff --git a/gradle/gradle/wrapper/gradle-wrapper.jar b/gradle/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 00000000..3d0dee6e Binary files /dev/null and b/gradle/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/gradle/wrapper/gradle-wrapper.properties b/gradle/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..1cfebde6 --- /dev/null +++ b/gradle/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Sat Jan 03 10:20:50 EST 2015 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-2.1-bin.zip diff --git a/gradle/gradlew b/gradle/gradlew new file mode 100644 index 00000000..91a7e269 --- /dev/null +++ b/gradle/gradlew @@ -0,0 +1,164 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; +esac + +# For Cygwin, ensure paths are in UNIX format before anything is touched. +if $cygwin ; then + [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` +fi + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >&- +APP_HOME="`pwd -P`" +cd "$SAVED" >&- + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/gradle/gradlew.bat b/gradle/gradlew.bat new file mode 100644 index 00000000..8a0b282a --- /dev/null +++ b/gradle/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/src/api/java/thaumcraft/api/aspects/IEssentiaContainerItem.java b/src/api/java/thaumcraft/api/aspects/IEssentiaContainerItem.java index 6a82c0e6..f92a7de4 100644 --- a/src/api/java/thaumcraft/api/aspects/IEssentiaContainerItem.java +++ b/src/api/java/thaumcraft/api/aspects/IEssentiaContainerItem.java @@ -1,7 +1,6 @@ package thaumcraft.api.aspects; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; /** * diff --git a/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java b/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java index c5b7b13d..003b7ee0 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java +++ b/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java @@ -139,6 +139,7 @@ import WayofTime.alchemicalWizardry.common.rituals.RitualEffectAnimalGrowth; import WayofTime.alchemicalWizardry.common.rituals.RitualEffectAutoAlchemy; import WayofTime.alchemicalWizardry.common.rituals.RitualEffectBiomeChanger; import WayofTime.alchemicalWizardry.common.rituals.RitualEffectContainment; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectCrafting; import WayofTime.alchemicalWizardry.common.rituals.RitualEffectCrushing; import WayofTime.alchemicalWizardry.common.rituals.RitualEffectDemonPortal; import WayofTime.alchemicalWizardry.common.rituals.RitualEffectEllipsoid; @@ -284,7 +285,7 @@ import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.EntityRegistry; import cpw.mods.fml.common.registry.GameRegistry; -@Mod(modid = "AWWayofTime", name = "AlchemicalWizardry", version = "v1.3.1", guiFactory = "WayofTime.alchemicalWizardry.client.gui.ConfigGuiFactory") +@Mod(modid = "AWWayofTime", name = "AlchemicalWizardry", version = "v1.3.2", guiFactory = "WayofTime.alchemicalWizardry.client.gui.ConfigGuiFactory") public class AlchemicalWizardry { @@ -643,6 +644,8 @@ public class AlchemicalWizardry ItemStack simpleCatalystStack = new ItemStack(ModItems.simpleCatalyst); ItemStack duskRitualDivinerStack = new ItemStack(ModItems.itemRitualDiviner); ((ItemRitualDiviner) duskRitualDivinerStack.getItem()).setMaxRuneDisplacement(duskRitualDivinerStack, 1); + ItemStack dawnRitualDivinerStack = new ItemStack(ModItems.itemRitualDiviner); + ((ItemRitualDiviner) dawnRitualDivinerStack.getItem()).setMaxRuneDisplacement(dawnRitualDivinerStack, 2); waterSigilStackCrafted.setItemDamage(waterSigilStackCrafted.getMaxDamage()); lavaSigilStackCrafted.setItemDamage(lavaSigilStackCrafted.getMaxDamage()); voidSigilStackCrafted.setItemDamage(voidSigilStackCrafted.getMaxDamage()); @@ -731,6 +734,7 @@ public class AlchemicalWizardry customPotionAmphibian = (new PotionAmphibian(customPotionAmphibianID, false, 0).setIconIndex(0, 0).setPotionName("Amphibian")); ItemStack masterBloodOrbStack = new ItemStack(ModItems.masterBloodOrb); + ItemStack transcendentBloodOrbStack = new ItemStack(ModItems.transcendentBloodOrb); // ModBlocks.blockLifeEssence.setUnlocalizedName("lifeEssenceBlock"); FluidContainerRegistry.registerFluidContainer(lifeEssenceFluid, new ItemStack(ModItems.bucketLife), FluidContainerRegistry.EMPTY_BUCKET); @@ -1071,6 +1075,11 @@ public class AlchemicalWizardry GameRegistry.addRecipe(new ItemStack(ModItems.outputRoutingFocus, 1, 3), "sgs", "geg", "sgs", 'e', enderShardStack, 's', stickStack, 'g', obsidianStack); GameRegistry.addRecipe(new ItemStack(ModItems.outputRoutingFocus, 1, 4), "sgs", "geg", "sgs", 'e', enderShardStack, 's', stickStack, 'g', stringStack); + GameRegistry.addRecipe(new ItemStack(ModBlocks.blockStabilityGlyph), "1s1", "grg", "bob", 'o', transcendentBloodOrbStack, 'r', bloodRuneStack, '1', crepitousStack, 'g', etherealSlateStack, 'b', praesidiumStack, 's', magicalesStack); + GameRegistry.addRecipe(new ItemStack(ModBlocks.blockEnchantmentGlyph, 1, 0), "1s1", "grg", "bob", 'o', transcendentBloodOrbStack, 'r', bloodRuneStack, 'g', etherealSlateStack, 'b', magicalesStack, '1', offensaStack, 's', lifeShardStack); + GameRegistry.addRecipe(new ItemStack(ModBlocks.blockEnchantmentGlyph, 1, 1), "1s1", "grg", "bob", 'o', transcendentBloodOrbStack, 'r', bloodRuneStack, 'g', etherealSlateStack, 'b', magicalesStack, '1', virtusStack, 's', soulShardStack); + + GameRegistry.addRecipe(dawnRitualDivinerStack, " d ", "srs", " d ", 'd', new ItemStack(ModItems.dawnScribeTool), 's', etherealSlateStack, 'r', duskRitualDivinerStack); 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); @@ -1086,6 +1095,12 @@ public class AlchemicalWizardry AlchemyRecipeRegistry.registerRecipe(new ItemStack(Blocks.soul_sand, 3, 0), 3, new ItemStack[]{new ItemStack(Blocks.sand), new ItemStack(Blocks.sand), new ItemStack(Blocks.sand), waterBucketStack, weakBloodShardStack}, 3); AlchemyRecipeRegistry.registerRecipe(new ItemStack(Blocks.mycelium, 1, 0), 5, new ItemStack[]{new ItemStack(Blocks.grass), new ItemStack(Blocks.brown_mushroom), new ItemStack(Blocks.red_mushroom)}, 2); AlchemyRecipeRegistry.registerRecipe(new ItemStack(Blocks.ice), 2, new ItemStack[]{waterBucketStack, new ItemStack(Items.snowball)}, 1); + AlchemyRecipeRegistry.registerRecipe(new ItemStack(Items.potionitem, 1, 0), 1, new ItemStack[]{new ItemStack(Items.glass_bottle), new ItemStack(Blocks.cactus)}, 1); + AlchemyRecipeRegistry.registerRecipe(waterBucketStack, 1, new ItemStack[]{emptyBucketStack, new ItemStack(Blocks.cactus)}, 1); + AlchemyRecipeRegistry.registerRecipe(new ItemStack(Items.glass_bottle, 3), 1, new ItemStack[]{glassStack, glassStack, glassStack}, 1); + AlchemyRecipeRegistry.registerRecipe(new ItemStack(Items.ghast_tear, 2), 100, new ItemStack[]{ghastTearStack, concentratedCatalystStack, weakBloodShardStack, new ItemStack(Blocks.soul_sand), new ItemStack(Blocks.soul_sand)}, 5); + AlchemyRecipeRegistry.registerRecipe(new ItemStack(Items.coal, 5), 1, new ItemStack[]{new ItemStack(Items.coal, 1, 1), new ItemStack(Items.coal, 1, 1), new ItemStack(Items.coal, 1, 1), new ItemStack(Items.coal, 1, 1), new ItemStack(Items.coal, 1, 1)}, 1); + AlchemyRecipeRegistry.registerRecipe(new ItemStack(Items.clay_ball, 4), 5, new ItemStack[]{new ItemStack(Blocks.sand), waterBucketStack}, 2); } @EventHandler @@ -1115,7 +1130,7 @@ public class AlchemicalWizardry Item itemThaumBoots = GameRegistry.findItem("Thaumcraft", "ItemBootsThaumium"); AspectList aspectList = new AspectList(); - aspectList.add(Aspect.ARMOR, 5).add(Aspect.MAGIC, 5); +// aspectList.add(Aspect.ARMOR, 5).add(Aspect.MAGIC, 5); ThaumcraftApi.registerObjectTag(new ItemStack(ModItems.sanguineHelmet), aspectList); ThaumcraftApi.registerObjectTag(new ItemStack(ModItems.sanguineRobe), aspectList); @@ -1336,6 +1351,7 @@ public class AlchemicalWizardry AltarRecipeRegistry.registerAltarRecipe(new ItemStack(ModItems.alchemyFlask), new ItemStack(Items.glass_bottle), 2, 2000, 5, 5, false); AltarRecipeRegistry.registerAltarRecipe(new ItemStack(ModItems.reinforcedSlate), new ItemStack(ModItems.blankSlate), 2, 2000, 5, 5, false); AltarRecipeRegistry.registerAltarRecipe(new ItemStack(ModItems.bucketLife), new ItemStack(Items.bucket), 1, 1000, 5, 0, false); + AltarRecipeRegistry.registerAltarRecipe(new ItemStack(ModItems.dawnScribeTool), new ItemStack(Blocks.glowstone), 6, 20000, 50, 35, false); } public static void initRituals() @@ -1371,9 +1387,11 @@ 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("AW032Symmetry", 2, 15000000, new RitualEffectOmegaTest(), "Symmetry of the Omega"); + Rituals.registerRitual("AW033Stalling", 2, 15000000, new RitualEffectOmegaStalling(), "Duet of the Fused Souls"); + + Rituals.registerRitual("AW034Crafting", 1, 15000, new RitualEffectCrafting(), "Rhythm of the Beating Anvil"); + Rituals.registerRitual("AW035", 1, 10000, new RitualEffectItemRouting(), "Orchestra of the Phantom Hands"); //Rituals.registerRitual(1,100,new RitualEffectApiaryOverclock(),"Apiary Overclock")); } diff --git a/src/main/java/WayofTime/alchemicalWizardry/ModBlocks.java b/src/main/java/WayofTime/alchemicalWizardry/ModBlocks.java index 35ff732d..f451d5ad 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/ModBlocks.java +++ b/src/main/java/WayofTime/alchemicalWizardry/ModBlocks.java @@ -22,6 +22,7 @@ import WayofTime.alchemicalWizardry.common.block.BlockSpellEffect; import WayofTime.alchemicalWizardry.common.block.BlockSpellEnhancement; import WayofTime.alchemicalWizardry.common.block.BlockSpellModifier; import WayofTime.alchemicalWizardry.common.block.BlockSpellParadigm; +import WayofTime.alchemicalWizardry.common.block.BlockStabilityGlyph; import WayofTime.alchemicalWizardry.common.block.BlockTeleposer; import WayofTime.alchemicalWizardry.common.block.BlockWritingTable; import WayofTime.alchemicalWizardry.common.block.BloodRune; @@ -41,10 +42,12 @@ import WayofTime.alchemicalWizardry.common.demonVillage.tileEntity.BlockDemonChe import WayofTime.alchemicalWizardry.common.items.ItemBlockCrystalBelljar; import WayofTime.alchemicalWizardry.common.items.ItemBloodRuneBlock; import WayofTime.alchemicalWizardry.common.items.ItemCrystalBlock; +import WayofTime.alchemicalWizardry.common.items.ItemEnchantmentGlyphBlock; import WayofTime.alchemicalWizardry.common.items.ItemSpellEffectBlock; import WayofTime.alchemicalWizardry.common.items.ItemSpellEnhancementBlock; import WayofTime.alchemicalWizardry.common.items.ItemSpellModifierBlock; import WayofTime.alchemicalWizardry.common.items.ItemSpellParadigmBlock; +import WayofTime.alchemicalWizardry.common.items.ItemStabilityGlyphBlock; import cpw.mods.fml.common.registry.GameRegistry; /** @@ -94,6 +97,7 @@ public class ModBlocks public static Block blockCrystal; public static Block blockMimic; public static Block blockEnchantmentGlyph; + public static Block blockStabilityGlyph; public static void init() @@ -136,6 +140,7 @@ public class ModBlocks blockLifeEssence = new LifeEssenceBlock(); blockEnchantmentGlyph = new BlockEnchantmentGlyph(); + blockStabilityGlyph = new BlockStabilityGlyph(); } public static void registerBlocksInPre() @@ -179,7 +184,8 @@ public class ModBlocks GameRegistry.registerBlock(ModBlocks.blockDemonChest, "blockDemonChest"); GameRegistry.registerBlock(ModBlocks.blockCrystal, ItemCrystalBlock.class, "blockCrystal"); GameRegistry.registerBlock(ModBlocks.blockMimic, "blockMimic"); - GameRegistry.registerBlock(ModBlocks.blockEnchantmentGlyph, "blockEnchantmentGlyph"); + GameRegistry.registerBlock(ModBlocks.blockEnchantmentGlyph, ItemEnchantmentGlyphBlock.class, "blockEnchantmentGlyph"); + GameRegistry.registerBlock(ModBlocks.blockStabilityGlyph, ItemStabilityGlyphBlock.class, "blockStabilityGlyph"); } public static void registerBlocksInInit() diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/soulNetwork/SoulNetworkHandler.java b/src/main/java/WayofTime/alchemicalWizardry/api/soulNetwork/SoulNetworkHandler.java index 973d293a..a2060b4f 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/api/soulNetwork/SoulNetworkHandler.java +++ b/src/main/java/WayofTime/alchemicalWizardry/api/soulNetwork/SoulNetworkHandler.java @@ -417,7 +417,7 @@ public class SoulNetworkHandler public static String getUsername(EntityPlayer player) { - return player.getDisplayName(); + return player.getCommandSenderName(); } public static EntityPlayer getPlayerForUsername(String str) diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/spell/APISpellHelper.java b/src/main/java/WayofTime/alchemicalWizardry/api/spell/APISpellHelper.java index bab2963e..19a324c9 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/api/spell/APISpellHelper.java +++ b/src/main/java/WayofTime/alchemicalWizardry/api/spell/APISpellHelper.java @@ -164,6 +164,23 @@ public class APISpellHelper data.setFloat("BM:MaxAddedHP", maxHP); } + public static int getPlayerReagentRegenCooldownTag(EntityPlayer player) + { + NBTTagCompound data = APISpellHelper.getPersistentDataTag(player); + if(data.hasKey("BM:ReagentRegenCooldown")) + { + return data.getInteger("BM:ReagentRegenCooldown"); + } + + return 0; + } + + public static void setPlayerReagentRegenCooldownTag(EntityPlayer player, int amount) + { + NBTTagCompound data = APISpellHelper.getPersistentDataTag(player); + data.setInteger("BM:ReagentRegenCooldown", amount); + } + public static MovingObjectPosition raytraceFromEntity(World world, Entity player, boolean par3, double range) { float f = 1.0F; diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/ClientEventHandler.java b/src/main/java/WayofTime/alchemicalWizardry/client/ClientEventHandler.java index a3e0a531..23984f27 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/client/ClientEventHandler.java +++ b/src/main/java/WayofTime/alchemicalWizardry/client/ClientEventHandler.java @@ -7,8 +7,6 @@ import net.minecraftforge.client.event.sound.SoundEvent; import WayofTime.alchemicalWizardry.AlchemicalWizardry; import WayofTime.alchemicalWizardry.ModBlocks; import WayofTime.alchemicalWizardry.client.renderer.RenderHelper; -import WayofTime.alchemicalWizardry.common.ClientToServerPacketHandler; -import WayofTime.alchemicalWizardry.common.MessageKeyPressed; import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.common.eventhandler.Event.Result; import cpw.mods.fml.common.eventhandler.SubscribeEvent; @@ -23,12 +21,12 @@ public class ClientEventHandler @SubscribeEvent public void onKeyInput(InputEvent.KeyInputEvent event) { - if(KeyBindings.omegaTest.isPressed()) - { - System.out.println("ping"); -// NewPacketHandler.INSTANCE.sendToServer(NewPacketHandler.getKeyboardPressPacket((byte)2)); - ClientToServerPacketHandler.INSTANCE.sendToServer(new MessageKeyPressed(MessageKeyPressed.Key.OMEGA_ACTIVE)); - } +// if(KeyBindings.omegaTest.isPressed()) +// { +// System.out.println("ping"); +//// NewPacketHandler.INSTANCE.sendToServer(NewPacketHandler.getKeyboardPressPacket((byte)2)); +// ClientToServerPacketHandler.INSTANCE.sendToServer(new MessageKeyPressed(MessageKeyPressed.Key.OMEGA_ACTIVE)); +// } } @SubscribeEvent diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/ClientProxy.java b/src/main/java/WayofTime/alchemicalWizardry/client/ClientProxy.java index c7129aeb..ead88598 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/client/ClientProxy.java +++ b/src/main/java/WayofTime/alchemicalWizardry/client/ClientProxy.java @@ -1,5 +1,6 @@ package WayofTime.alchemicalWizardry.client; +import WayofTime.alchemicalWizardry.client.renderer.RitualDivinerRender; import net.minecraft.item.ItemBlock; import net.minecraft.world.World; import net.minecraftforge.client.MinecraftForgeClient; @@ -110,7 +111,7 @@ public class ClientProxy extends CommonProxy public void registerPostSideObjects() { BUEntries entries = new BUEntries(); - entries.postInit(); +// entries.postInit(); } @Override @@ -146,6 +147,7 @@ public class ClientProxy extends CommonProxy RenderingRegistry.registerEntityRenderingHandler(EntityMinorDemonGruntGuardianEarth.class, new RenderMinorDemonGruntGuardian(new ModelMinorDemonGruntGuardian(), 0.5F)); RenderingRegistry.registerEntityRenderingHandler(EntityMinorDemonGruntGuardianWind.class, new RenderMinorDemonGruntGuardian(new ModelMinorDemonGruntGuardian(), 0.5F)); + MinecraftForge.EVENT_BUS.register(new RitualDivinerRender()); ClientRegistry.bindTileEntitySpecialRenderer(TEAltar.class, new TEAltarRenderer()); ClientRegistry.bindTileEntitySpecialRenderer(TEPedestal.class, new RenderPedestal()); diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/KeyBindings.java b/src/main/java/WayofTime/alchemicalWizardry/client/KeyBindings.java index 26943f9b..b616b662 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/client/KeyBindings.java +++ b/src/main/java/WayofTime/alchemicalWizardry/client/KeyBindings.java @@ -2,18 +2,14 @@ package WayofTime.alchemicalWizardry.client; import net.minecraft.client.settings.KeyBinding; -import org.lwjgl.input.Keyboard; - -import cpw.mods.fml.client.registry.ClientRegistry; - public class KeyBindings { public static KeyBinding omegaTest; public static void init() { - omegaTest = new KeyBinding("key.ping", Keyboard.KEY_O, "key.categories.alchemicalwizardry"); - - ClientRegistry.registerKeyBinding(omegaTest); +// omegaTest = new KeyBinding("key.ping", Keyboard.KEY_O, "key.categories.alchemicalwizardry"); +// +// ClientRegistry.registerKeyBinding(omegaTest); } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/nei/NEIBindingRitualHandler.java b/src/main/java/WayofTime/alchemicalWizardry/client/nei/NEIBindingRitualHandler.java index 7ef876aa..21f2fba8 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/client/nei/NEIBindingRitualHandler.java +++ b/src/main/java/WayofTime/alchemicalWizardry/client/nei/NEIBindingRitualHandler.java @@ -20,8 +20,7 @@ public class NEIBindingRitualHandler extends TemplateRecipeHandler { public class CachedBindingRecipe extends CachedRecipe { - PositionedStack input; - PositionedStack output; + PositionedStack input, output; public CachedBindingRecipe(BindingRecipe recipe) { @@ -45,7 +44,7 @@ public class NEIBindingRitualHandler extends TemplateRecipeHandler @Override public void loadCraftingRecipes(String outputId, Object... results) { - if (outputId.equals("alchemicalwizardry.binding") && getClass() == NEIBindingRitualHandler.class) + if (outputId.equals("alchemicalwizardry.bindingritual") && getClass() == NEIBindingRitualHandler.class) { for (BindingRecipe recipe : BindingRegistry.bindingRecipes) { @@ -94,13 +93,13 @@ public class NEIBindingRitualHandler extends TemplateRecipeHandler @Override public String getOverlayIdentifier() { - return "bindingritual"; + return "alchemicalwizardry.bindingritual"; } @Override public void loadTransferRects() { - transferRects.add(new RecipeTransferRect(new Rectangle(90, 32, 22, 16), "alchemicalwizardry.bindingritual")); + transferRects.add(new RecipeTransferRect(new Rectangle(68, 20, 22, 16), "alchemicalwizardry.bindingritual")); } @Override diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/renderer/Helper.java b/src/main/java/WayofTime/alchemicalWizardry/client/renderer/Helper.java new file mode 100644 index 00000000..1d3bcada --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/client/renderer/Helper.java @@ -0,0 +1,17 @@ +package WayofTime.alchemicalWizardry.client.renderer; + +import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; +import WayofTime.alchemicalWizardry.api.rituals.Rituals; + +public class Helper +{ + public static RitualEffect getEffectFromString(String name) + { + Rituals ritual = Rituals.ritualMap.get(name); + + if (ritual == null) + return null; + + return ritual.effect; + } +} diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/renderer/Render.scala b/src/main/java/WayofTime/alchemicalWizardry/client/renderer/Render.scala new file mode 100644 index 00000000..aac68267 --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/client/renderer/Render.scala @@ -0,0 +1,70 @@ +package WayofTime.alchemicalWizardry.client.renderer + +import net.minecraft.block.Block +import net.minecraft.client.renderer.Tessellator +import net.minecraft.world.World + +object Render { + + def drawFakeBlock(v:Vector3, b:Block, meta:Int, min:(Double, Double, Double), w: World): Unit = { + + val (minX, minY, minZ) = min + val (maxX, maxY, maxZ) = (minX + 1, minY + 1, minZ + 1) + + val tessellator = Tessellator.instance + + tessellator.startDrawingQuads() +// tessellator.setBrightness(b.getMixedBrightnessForBlock(w, v.x, v.y, v.z)) + tessellator.setColorRGBA(255, 255, 255, 26) + + var tex: (Float, Float, Float, Float) = null + + def textureMinU = tex._1 + def textureMaxU = tex._2 + def textureMinV = tex._3 + def textureMaxV = tex._4 + + tex = g(b, meta, 0) + tessellator.addVertexWithUV(minX, minY, minZ, textureMinU, textureMinV) + tessellator.addVertexWithUV(maxX, minY, minZ, textureMaxU, textureMinV) + tessellator.addVertexWithUV(maxX, minY, maxZ, textureMaxU, textureMaxV) + tessellator.addVertexWithUV(minX, minY, maxZ, textureMinU, textureMaxV) + + tex = g(b, meta, 1) + tessellator.addVertexWithUV(minX, maxY, maxZ, textureMinU, textureMaxV) + tessellator.addVertexWithUV(maxX, maxY, maxZ, textureMaxU, textureMaxV) + tessellator.addVertexWithUV(maxX, maxY, minZ, textureMaxU, textureMinV) + tessellator.addVertexWithUV(minX, maxY, minZ, textureMinU, textureMinV) + + tex = g(b, meta, 2) + tessellator.addVertexWithUV(maxX, minY, minZ, textureMinU, textureMaxV) + tessellator.addVertexWithUV(minX, minY, minZ, textureMaxU, textureMaxV) + tessellator.addVertexWithUV(minX, maxY, minZ, textureMaxU, textureMinV) + tessellator.addVertexWithUV(maxX, maxY, minZ, textureMinU, textureMinV) + + tex = g(b, meta, 3) + tessellator.addVertexWithUV(minX, minY, maxZ, textureMinU, textureMaxV) + tessellator.addVertexWithUV(maxX, minY, maxZ, textureMaxU, textureMaxV) + tessellator.addVertexWithUV(maxX, maxY, maxZ, textureMaxU, textureMinV) + tessellator.addVertexWithUV(minX, maxY, maxZ, textureMinU, textureMinV) + + tex = g(b, meta, 4) + tessellator.addVertexWithUV(minX, minY, minZ, textureMinU, textureMaxV) + tessellator.addVertexWithUV(minX, minY, maxZ, textureMaxU, textureMaxV) + tessellator.addVertexWithUV(minX, maxY, maxZ, textureMaxU, textureMinV) + tessellator.addVertexWithUV(minX, maxY, minZ, textureMinU, textureMinV) + + tex = g(b, meta, 5) + tessellator.addVertexWithUV(maxX, minY, maxZ, textureMinU, textureMaxV) + tessellator.addVertexWithUV(maxX, minY, minZ, textureMaxU, textureMaxV) + tessellator.addVertexWithUV(maxX, maxY, minZ, textureMaxU, textureMinV) + tessellator.addVertexWithUV(maxX, maxY, maxZ, textureMinU, textureMinV) + + tessellator.draw + } + + def g(b: Block, m: Int, s: Int): (Float, Float, Float, Float) = { + val i = b.getIcon(s, m) + (i.getMinU, i.getMaxU, i.getMinV, i.getMaxV) + } +} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/renderer/RitualDivinerRender.scala b/src/main/java/WayofTime/alchemicalWizardry/client/renderer/RitualDivinerRender.scala new file mode 100644 index 00000000..300bb7ed --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/client/renderer/RitualDivinerRender.scala @@ -0,0 +1,54 @@ +package WayofTime.alchemicalWizardry.client.renderer + +import WayofTime.alchemicalWizardry.ModBlocks +import WayofTime.alchemicalWizardry.api.rituals.{RitualComponent, IMasterRitualStone} +import WayofTime.alchemicalWizardry.common.items.ItemRitualDiviner +import cpw.mods.fml.common.eventhandler.SubscribeEvent +import net.minecraft.client.Minecraft +import net.minecraft.client.entity.EntityClientPlayerMP +import net.minecraft.tileentity.TileEntity +import net.minecraft.util.MovingObjectPosition +import net.minecraft.world.World +import net.minecraftforge.client.event.RenderWorldLastEvent + +import scala.collection.JavaConversions + +class RitualDivinerRender { + + @SubscribeEvent + def render(e: RenderWorldLastEvent) + { + val mc: Minecraft = Minecraft.getMinecraft + val p: EntityClientPlayerMP = mc.thePlayer + val w: World = p.worldObj + + if (mc.objectMouseOver == null || mc.objectMouseOver.typeOfHit != MovingObjectPosition.MovingObjectType.BLOCK) + return + + val te: TileEntity = w.getTileEntity(mc.objectMouseOver.blockX, mc.objectMouseOver.blockY, mc.objectMouseOver.blockZ) + + if (!te.isInstanceOf[IMasterRitualStone]) + return + + val v3 = new Vector3(mc.objectMouseOver.blockX, mc.objectMouseOver.blockY, mc.objectMouseOver.blockZ) + val (px, py, pz) = (p.lastTickPosX + (p.posX - p.lastTickPosX) * e.partialTicks, p.lastTickPosY + (p.posY - p.lastTickPosY) * e.partialTicks, p.lastTickPosZ + (p.posZ - p.lastTickPosZ) * e.partialTicks) + + if (p.inventory.getCurrentItem != null && p.inventory.getCurrentItem.getItem.isInstanceOf[ItemRitualDiviner]) { + val d = p.inventory.getCurrentItem.getItem.asInstanceOf[ItemRitualDiviner] + val dir = d.getDirection(p.inventory.getCurrentItem) + + val r = Helper.getEffectFromString(d.getCurrentRitual(p.inventory.getCurrentItem)) + if (r == null) + return + + for (x <- JavaConversions.asScalaBuffer[RitualComponent](r.getRitualComponentList)) + { + val v: Vector3 = v3 + (x.getX(dir), x.getY, x.getZ(dir)) + val min = (v.x - px, v.y - py, v.z - pz) + + if (!w.getBlock(v.x, v.y, v.z).isOpaqueCube) + Render.drawFakeBlock(v, ModBlocks.ritualStone, x.getStoneType, min, w) + } + } + } +} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/renderer/Vector3.scala b/src/main/java/WayofTime/alchemicalWizardry/client/renderer/Vector3.scala new file mode 100644 index 00000000..8648f4bf --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/client/renderer/Vector3.scala @@ -0,0 +1,24 @@ +package WayofTime.alchemicalWizardry.client.renderer + +class Vector3 (val x: Int, val y: Int, val z: Int) { + + def +(w: (Int,Int,Int)): Vector3 = new Vector3(x + w._1, y+ w._2, z + w._3) + + override def toString = s"V3(${x}},${y}},${z}})" + + def canEqual(other: Any): Boolean = other.isInstanceOf[Vector3] + + override def equals(other: Any): Boolean = other match { + case that: Vector3 => + (that canEqual this) && + x == that.x && + y == that.y && + z == that.z + case _ => false + } + + override def hashCode(): Int = { + val state = Seq(x, y, z) + state.map(_.hashCode()).foldLeft(0)((a, b) => 31 * a + b) + } +} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/AlchemicalWizardryEventHooks.java b/src/main/java/WayofTime/alchemicalWizardry/common/AlchemicalWizardryEventHooks.java index 20e77f78..3d809346 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/AlchemicalWizardryEventHooks.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/AlchemicalWizardryEventHooks.java @@ -5,6 +5,7 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Random; import net.minecraft.block.Block; import net.minecraft.entity.Entity; @@ -67,6 +68,8 @@ public class AlchemicalWizardryEventHooks public static Map> respawnMap = new HashMap(); public static Map> forceSpawnMap = new HashMap(); + + public static Random rand = new Random(); @SubscribeEvent public void onEntityInteractEvent(EntityInteractEvent event) @@ -106,12 +109,20 @@ public class AlchemicalWizardryEventHooks { EntityPlayer player = (EntityPlayer)event.entityLiving; + if(APISpellHelper.getCurrentAdditionalMaxHP(player) > 0) + { + APISpellHelper.setPlayerReagentRegenCooldownTag(player, 20 * 20); + } + float prevHp = APISpellHelper.getCurrentAdditionalHP((EntityPlayer)event.entityLiving); if(prevHp > 0) { + double originalDamage = event.ammount; + double initialReagentHp = prevHp; + float recalculatedAmount = ArmorProperties.ApplyArmor(player, player.inventory.armorInventory, event.source, event.ammount); if (recalculatedAmount <= 0) return; - recalculatedAmount = SpellHelper.applyPotionDamageCalculations(player, event.source, recalculatedAmount); + recalculatedAmount = SpellHelper.applyPotionDamageCalculations(player, event.source, recalculatedAmount); //Recalculated damage float ratio = recalculatedAmount / event.ammount; @@ -121,37 +132,43 @@ public class AlchemicalWizardryEventHooks if(prevHp > recalculatedAmount) { - float hp = (prevHp - recalculatedAmount); - - if(hp > 0) - { - event.ammount = 0; - }else - { - event.ammount -= hp / ratio; - Reagent reagent = APISpellHelper.getPlayerReagentType(player); - OmegaParadigm paradigm = OmegaRegistry.getParadigmForReagent(reagent); - if(paradigm != null) - { - ItemStack chestStack = player.inventory.armorInventory[2]; + float hp = (prevHp - recalculatedAmount); //New HP - this is obviously > 0... - if(chestStack != null && chestStack.getItem() instanceof OmegaArmour) +// event.setCanceled(true); + event.ammount = 0; + Reagent reagent = APISpellHelper.getPlayerReagentType(player); + OmegaParadigm paradigm = OmegaRegistry.getParadigmForReagent(reagent); + if(paradigm != null) + { + ItemStack chestStack = player.inventory.armorInventory[2]; + + if(chestStack != null && chestStack.getItem() instanceof OmegaArmour) + { + if(((OmegaArmour)chestStack.getItem()).paradigm == paradigm) { - if(((OmegaArmour)chestStack.getItem()).paradigm == paradigm) - { - paradigm.onHPBarDepleted(player, chestStack); - } + paradigm.onHPBarDepleted(player, chestStack); } } } - - APISpellHelper.setCurrentAdditionalHP((EntityPlayer)event.entityLiving, Math.max(0, hp)); - System.out.println("HP: " + hp); - APISpellHelper.setCurrentAdditionalHP(player, Math.max(0, hp)); - NewPacketHandler.INSTANCE.sendTo(NewPacketHandler.getAddedHPPacket(Math.max(0, hp), APISpellHelper.getCurrentAdditionalMaxHP(player)), (EntityPlayerMP)player); + APISpellHelper.setCurrentAdditionalHP(player, hp); + NewPacketHandler.INSTANCE.sendTo(NewPacketHandler.getAddedHPPacket(hp, APISpellHelper.getCurrentAdditionalMaxHP(player)), (EntityPlayerMP)player); - } +// if(event.ammount <= 0.3) +// { +// event.ammount++; +// } + }else + { + APISpellHelper.setCurrentAdditionalHP(player, 0); + NewPacketHandler.INSTANCE.sendTo(NewPacketHandler.getAddedHPPacket(0, APISpellHelper.getCurrentAdditionalMaxHP(player)), (EntityPlayerMP)player); + + event.ammount -= prevHp / ratio; + if(event.ammount < 0) + { + event.ammount = 0; + } + } } } } @@ -169,44 +186,85 @@ public class AlchemicalWizardryEventHooks if(reagentAmount > 0 && OmegaRegistry.hasParadigm(reagent)) { + int cooldown = APISpellHelper.getPlayerReagentRegenCooldownTag(player); + boolean canHealHPBar = true; + if(cooldown > 0) + { + float extra = 0; + if(player.isPotionActive(AlchemicalWizardry.customPotionSoulHarden)) + { + extra += 0.25f * (1 + player.getActivePotionEffect(AlchemicalWizardry.customPotionSoulHarden).getAmplifier()); + } + + if(player.isPotionActive(AlchemicalWizardry.customPotionSoulFray)) + { + extra -= 0.25f * (1 + player.getActivePotionEffect(AlchemicalWizardry.customPotionSoulFray).getAmplifier()); + } + + int deduction = - 1 - (extra >= 0 ? (rand.nextFloat() < extra ? 1 : 0) : (rand.nextFloat() < -extra/2 ? -1 : 0)); + + APISpellHelper.setPlayerReagentRegenCooldownTag(player, Math.max(cooldown + deduction, 0)); + canHealHPBar = false; + } + OmegaParadigm parad = OmegaRegistry.getParadigmForReagent(reagent); ReagentRegenConfiguration config = parad.getRegenConfig(player); if(parad.isPlayerWearingFullSet(player)) { - if(event.entityLiving.worldObj.getWorldTime() % config.tickRate == 0) + if(canHealHPBar) { - boolean hasHealthChanged = false; - int maxHealth = parad.getMaxAdditionalHealth(); + int tickRate = config.tickRate; - float health = APISpellHelper.getCurrentAdditionalHP(player); - - if(health > maxHealth) + if(player.isPotionActive(Potion.regeneration)) { - health = maxHealth; - hasHealthChanged = true; - }else if(health < maxHealth) - { - float addedAmount = Math.min(Math.min((reagentAmount / config.costPerPoint), config.healPerTick), maxHealth - health); - float drain = addedAmount * config.costPerPoint; - - reagentAmount -= drain; - hasReagentChanged = true; - - health += addedAmount; - - hasHealthChanged = true; + int i = player.getActivePotionEffect(Potion.regeneration).getAmplifier(); + double factor = Math.pow(1.5, i+1); + tickRate = Math.max((int)(tickRate / factor), 1); } - if(player instanceof EntityPlayerMP) + if(event.entityLiving.worldObj.getWorldTime() % tickRate == 0) { - if(hasHealthChanged) + boolean hasHealthChanged = false; + int maxHealth = parad.getMaxAdditionalHealth(); + + float health = APISpellHelper.getCurrentAdditionalHP(player); + + if(health > maxHealth) { - APISpellHelper.setCurrentAdditionalHP(player, health); - NewPacketHandler.INSTANCE.sendTo(NewPacketHandler.getAddedHPPacket(health, maxHealth), (EntityPlayerMP)player); + health = maxHealth; + hasHealthChanged = true; + }else if(health < maxHealth) + { + float addedAmount = Math.min(Math.min((reagentAmount / config.costPerPoint), config.healPerTick), maxHealth - health); + float drain = addedAmount * config.costPerPoint; + + reagentAmount -= drain; + hasReagentChanged = true; + + health += addedAmount; + + hasHealthChanged = true; + } + + if(player instanceof EntityPlayerMP) + { + if(hasHealthChanged) + { + APISpellHelper.setCurrentAdditionalHP(player, health); + NewPacketHandler.INSTANCE.sendTo(NewPacketHandler.getAddedHPPacket(health, maxHealth), (EntityPlayerMP)player); + } } } } + + }else + { + reagentAmount = 0; + APISpellHelper.setPlayerMaxReagentAmount(player, 0); + NewPacketHandler.INSTANCE.sendTo(NewPacketHandler.getReagentBarPacket(null, 0, 0), (EntityPlayerMP)player); + APISpellHelper.setCurrentAdditionalHP(player, 0); + NewPacketHandler.INSTANCE.sendTo(NewPacketHandler.getAddedHPPacket(0, 0), (EntityPlayerMP)player); } //Consumes the amount float costPerTick = parad.getCostPerTickOfUse(player); @@ -229,14 +287,22 @@ public class AlchemicalWizardryEventHooks if(reagentAmount <= 0) { + boolean hasRevertedArmour = false; ItemStack[] armourInventory = player.inventory.armorInventory; for(ItemStack stack : armourInventory) { if(stack != null && stack.getItem() instanceof OmegaArmour) { ((OmegaArmour)stack.getItem()).revertArmour(player, stack); + hasRevertedArmour = true; } } + + if(hasRevertedArmour) + { + APISpellHelper.setCurrentAdditionalHP(player, 0); + NewPacketHandler.INSTANCE.sendTo(NewPacketHandler.getAddedHPPacket(0, 0), (EntityPlayerMP)player); + } } if(player instanceof EntityPlayerMP) diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/ItemType.java b/src/main/java/WayofTime/alchemicalWizardry/common/ItemType.java new file mode 100644 index 00000000..912742c4 --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/common/ItemType.java @@ -0,0 +1,87 @@ +package WayofTime.alchemicalWizardry.common; + +import java.util.Objects; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +/** + * Represents an item together with metadata and NBT tag. + * + * @author ljfa-ag + */ +public class ItemType +{ + public final Item item; + public final int meta; + public final NBTTagCompound nbtTag; + + public ItemType(Item item, int meta, NBTTagCompound nbtTag) + { + this.item = Objects.requireNonNull(item); + this.meta = meta; + this.nbtTag = nbtTag; + } + + public ItemType(Item item, int meta) + { + this(item, meta, null); + } + + public ItemType(Item item) + { + this(item, 0, null); + } + + public ItemType(Block block, int meta, NBTTagCompound nbtTag) + { + this(Item.getItemFromBlock(block), meta, nbtTag); + } + + public ItemType(Block block, int meta) + { + this(block, meta, null); + } + + public ItemType(Block block) + { + this(block, 0, null); + } + + public ItemStack createStack(int count) + { + ItemStack result = new ItemStack(item, count, meta); + result.stackTagCompound = nbtTag; + return result; + } + + @Override + public boolean equals(Object obj) + { + if (this == obj) + return true; + if (obj == null || getClass() != obj.getClass()) + return false; + ItemType other = (ItemType) obj; + return item == other.item && meta == other.meta && Objects.equals(nbtTag, other.nbtTag); + } + + @Override + public int hashCode() + { + final int prime = 31; + int result = 1; + result = prime * result + item.hashCode(); + result = prime * result + meta; + result = prime * result + ((nbtTag == null) ? 0 : nbtTag.hashCode()); + return result; + } + + public static ItemType fromStack(ItemStack stack) + { + return new ItemType(stack.getItem(), stack.getItemDamage(), stack.stackTagCompound); + } + +} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/achievements/AchievementTrigger.java b/src/main/java/WayofTime/alchemicalWizardry/common/achievements/AchievementTrigger.java index 8e5ad2c0..836660fa 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/achievements/AchievementTrigger.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/achievements/AchievementTrigger.java @@ -2,6 +2,7 @@ package WayofTime.alchemicalWizardry.common.achievements; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.PlayerEvent; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.stats.Achievement; @@ -12,6 +13,11 @@ public class AchievementTrigger { ItemStack stack = event.pickedUp.getEntityItem(); + for (Item item : AchievementsRegistry.list) + { + + } + if (stack != null && stack.getItem() instanceof IPickupAchievement) { Achievement achievement = ((IPickupAchievement) stack.getItem()).getAchievementOnPickup(stack, event.player, event.pickedUp); diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/achievements/AchievementsRegistry.java b/src/main/java/WayofTime/alchemicalWizardry/common/achievements/AchievementsRegistry.java new file mode 100644 index 00000000..e07683fc --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/common/achievements/AchievementsRegistry.java @@ -0,0 +1,17 @@ +package WayofTime.alchemicalWizardry.common.achievements; + +import WayofTime.alchemicalWizardry.ModItems; +import net.minecraft.item.Item; + +import java.util.ArrayList; +import java.util.List; + +public class AchievementsRegistry +{ + public static List list = new ArrayList(); + + public void addItemsToList() + { + list.add(ModItems.sacrificialDagger); + } +} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/achievements/ICraftAchievement.java b/src/main/java/WayofTime/alchemicalWizardry/common/achievements/ICraftAchievement.java index 7e941c8d..47006462 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/achievements/ICraftAchievement.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/achievements/ICraftAchievement.java @@ -7,5 +7,5 @@ import net.minecraft.stats.Achievement; public interface ICraftAchievement { - public Achievement getAchievementOnCraft(ItemStack stack, EntityPlayer player, IInventory matrix); + Achievement getAchievementOnCraft(ItemStack stack, EntityPlayer player, IInventory matrix); } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/achievements/IPickupAchievement.java b/src/main/java/WayofTime/alchemicalWizardry/common/achievements/IPickupAchievement.java index 10b3fda3..3d2a7351 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/achievements/IPickupAchievement.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/achievements/IPickupAchievement.java @@ -7,5 +7,5 @@ import net.minecraft.stats.Achievement; public interface IPickupAchievement { - public Achievement getAchievementOnPickup(ItemStack stack, EntityPlayer player, EntityItem item); + Achievement getAchievementOnPickup(ItemStack stack, EntityPlayer player, EntityItem item); } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockEnchantmentGlyph.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockEnchantmentGlyph.java index b0b02ab5..561b7a29 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockEnchantmentGlyph.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockEnchantmentGlyph.java @@ -1,8 +1,14 @@ package WayofTime.alchemicalWizardry.common.block; +import java.util.List; + import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; import net.minecraft.world.World; import WayofTime.alchemicalWizardry.AlchemicalWizardry; import WayofTime.alchemicalWizardry.common.omega.IEnchantmentGlyph; @@ -11,13 +17,16 @@ import cpw.mods.fml.relauncher.SideOnly; public class BlockEnchantmentGlyph extends Block implements IEnchantmentGlyph { + public IIcon enchantability; + public IIcon enchantmentLevel; + public BlockEnchantmentGlyph() { super(Material.iron); setHardness(2.0F); setResistance(5.0F); setCreativeTab(AlchemicalWizardry.tabBloodMagic); - this.setBlockName("enchantmentGlypg"); + this.setBlockName("enchantmentGlyph"); } @Override @@ -25,17 +34,75 @@ public class BlockEnchantmentGlyph extends Block implements IEnchantmentGlyph public void registerBlockIcons(IIconRegister iconRegister) { this.blockIcon = iconRegister.registerIcon("AlchemicalWizardry:LargeBloodStoneBrick"); + this.enchantability = iconRegister.registerIcon("AlchemicalWizardry:GlyphEnchantability"); + this.enchantmentLevel = iconRegister.registerIcon("AlchemicalWizardry:GlyphEnchantmentLevel"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) + { + switch (meta) + { + case 0: + return enchantability; + case 1: + return enchantmentLevel; + default: + return this.blockIcon; + } } @Override - public int getSubtractedStabilityForFaceCount(World world, int x, int y, int z, int meta, int faceCount) + public int getAdditionalStabilityForFaceCount(World world, int x, int y, int z, int meta, int faceCount) { - return faceCount * 20; + switch(meta) + { + case 0: + return -faceCount * 10; + case 1: + return -faceCount * 20; + default: + return -faceCount * 20; + } } @Override public int getEnchantability(World world, int x, int y, int z, int meta) { - return 1; + switch(meta) + { + case 0: + return 1; + default: + return 0; + } } + + @Override + public int getEnchantmentLevel(World world, int x, int y, int z, int meta) + { + switch(meta) + { + case 1: + return 1; + default: + return 0; + } + } + + @SideOnly(Side.CLIENT) + public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List) + { + for(int i=0; i<2; i++) + { + par3List.add(new ItemStack(par1, 1, i)); + } + } + + @Override + public int damageDropped(int metadata) + { + return metadata; + } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockOrientable.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockOrientable.java index 5350fa63..16ac3581 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockOrientable.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockOrientable.java @@ -83,123 +83,9 @@ public class BlockOrientable extends BlockContainer return true; } - public int getTextureIndexForSideAndOrientation(int side, ForgeDirection input, ForgeDirection output) - { - if (ForgeDirection.getOrientation(side) == input) - { - return 0; - } - if (ForgeDirection.getOrientation(side) == output) - { - return 1; - } - if (ForgeDirection.getOrientation(side) == output.getOpposite()) - { - return 6; - } - - switch (side) - { - case 0: //BOTTOM - switch (output) - { - case NORTH: - return 2; //UP - case SOUTH: - return 3; //DOWN - case EAST: - return 4; //LEFT - case WEST: - return 5; //RIGHT - default: - break; - } - break; - case 1: //TOP - switch (output) - { - case NORTH: - return 2; //UP - case SOUTH: - return 3; //DOWN - case EAST: - return 5; - case WEST: - return 4; - default: - break; - } - break; - case 2: //NORTH - switch (output) - { - case DOWN: - return 3; - case UP: - return 2; - case EAST: - return 4; - case WEST: - return 5; - default: - break; - } - break; - case 3: //SOUTH - switch (output) - { - case DOWN: - return 3; - case UP: - return 2; - case EAST: - return 5; - case WEST: - return 4; - default: - break; - } - break; - case 4: //WEST - switch (output) - { - case DOWN: - return 3; - case UP: - return 2; - case NORTH: - return 5; - case SOUTH: - return 4; - default: - break; - } - break; - case 5: //EAST - switch (output) - { - case DOWN: - return 3; - case UP: - return 2; - case NORTH: - return 4; - case SOUTH: - return 5; - default: - break; - } - break; - } - - return 0; - } - @Override public int damageDropped(int metadata) { return metadata; } - - } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockReagentConduit.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockReagentConduit.java index fb5ffeec..16c151f3 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockReagentConduit.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockReagentConduit.java @@ -9,6 +9,7 @@ import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; public class BlockReagentConduit extends BlockContainer @@ -64,4 +65,10 @@ public class BlockReagentConduit extends BlockContainer { return -1; } + + @Override + public AxisAlignedBB getCollisionBoundingBoxFromPool(World p_149668_1_, int p_149668_2_, int p_149668_3_, int p_149668_4_) + { + return null; + } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockStabilityGlyph.java b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockStabilityGlyph.java new file mode 100644 index 00000000..dd7b8048 --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/common/block/BlockStabilityGlyph.java @@ -0,0 +1,73 @@ +package WayofTime.alchemicalWizardry.common.block; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; +import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.common.omega.IStabilityGlyph; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class BlockStabilityGlyph extends Block implements IStabilityGlyph +{ + public IIcon stability1; + + public BlockStabilityGlyph() + { + super(Material.iron); + setHardness(2.0F); + setResistance(5.0F); + setCreativeTab(AlchemicalWizardry.tabBloodMagic); + this.setBlockName("stabilityGlyph"); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) + { + this.blockIcon = iconRegister.registerIcon("AlchemicalWizardry:LargeBloodStoneBrick"); + this.stability1 = iconRegister.registerIcon("AlchemicalWizardry:GlyphStability1"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) + { + switch (meta) + { + case 0: + return stability1; + default: + return this.blockIcon; + } + } + + @Override + public int getAdditionalStabilityForFaceCount(World world, int x, int y, int z, int meta, int faceCount) + { + switch(meta) + { + case 0: + return faceCount * 2; + default: + return faceCount; + } + } + + + @SideOnly(Side.CLIENT) + public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List) + { + for(int i=0; i<1; i++) + { + par3List.add(new ItemStack(par1, 1, i)); + } + } +} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/bloodAltarUpgrade/UpgradedAltars.java b/src/main/java/WayofTime/alchemicalWizardry/common/bloodAltarUpgrade/UpgradedAltars.java index f36c0b3c..23d0845b 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/bloodAltarUpgrade/UpgradedAltars.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/bloodAltarUpgrade/UpgradedAltars.java @@ -303,7 +303,7 @@ public class UpgradedAltars fifthTierAltar.addAll(fourthTierAltar); fifthTierAltar.add(new AltarComponent(-8, -3, 8, Blocks.beacon, 0, false, false)); fifthTierAltar.add(new AltarComponent(-8, -3, -8, Blocks.beacon, 0, false, false)); - fifthTierAltar.add(new AltarComponent(8, -3, 8, Blocks.beacon, 0, false, false)); + fifthTierAltar.add(new AltarComponent(8, -3, -8, Blocks.beacon, 0, false, false)); fifthTierAltar.add(new AltarComponent(8, -3, 8, Blocks.beacon, 0, false, false)); for (int i = -6; i <= 6; i++) diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/commands/CommandBind.java b/src/main/java/WayofTime/alchemicalWizardry/common/commands/CommandBind.java index 6a2c5a1f..c97515a8 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/commands/CommandBind.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/commands/CommandBind.java @@ -1,16 +1,15 @@ package WayofTime.alchemicalWizardry.common.commands; -import WayofTime.alchemicalWizardry.api.items.interfaces.IBindable; -import WayofTime.alchemicalWizardry.common.items.EnergyItems; +import java.util.List; + import net.minecraft.command.CommandBase; import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.server.MinecraftServer; - -import java.util.List; +import WayofTime.alchemicalWizardry.api.items.interfaces.IBindable; +import WayofTime.alchemicalWizardry.common.items.EnergyItems; public class CommandBind extends CommandBase { @@ -39,7 +38,7 @@ public class CommandBind extends CommandBase if (targetPlayer == null) { - throw new CommandException("commands.bind.failed.noPlayer", new Object[0]); + throw new CommandException("commands.bind.failed.noPlayer"); } if (item != null && item.getItem() instanceof IBindable) @@ -47,16 +46,16 @@ public class CommandBind extends CommandBase if (EnergyItems.getOwnerName(item).isEmpty()) { EnergyItems.checkAndSetItemOwner(item, targetPlayer); - func_152373_a(iCommandSender, this, "commands.bind.success", new Object[0]); + func_152373_a(iCommandSender, this, "commands.bind.success"); } else { - throw new CommandException("commands.bind.failed.alreadyBound", new Object[0]); + throw new CommandException("commands.bind.failed.alreadyBound"); } } else if (!(item.getItem() instanceof IBindable)) { - throw new CommandException("commands.bind.failed.notBindable", new Object[0]); + throw new CommandException("commands.bind.failed.notBindable"); } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/commands/CommandSN.java b/src/main/java/WayofTime/alchemicalWizardry/common/commands/CommandSN.java index ac89f1bf..72fa59d7 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/commands/CommandSN.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/commands/CommandSN.java @@ -1,11 +1,13 @@ package WayofTime.alchemicalWizardry.common.commands; +import WayofTime.alchemicalWizardry.api.soulNetwork.LifeEssenceNetwork; import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; import net.minecraft.command.CommandBase; import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.server.MinecraftServer; +import net.minecraft.world.World; import java.util.List; @@ -40,7 +42,7 @@ public class CommandSN extends CommandBase int amount = parseIntBounded(icommandsender, astring[2], Integer.MIN_VALUE, Integer.MAX_VALUE); SoulNetworkHandler.addCurrentEssenceToMaximum(owner, amount, Integer.MAX_VALUE); - func_152373_a(icommandsender, this, "commands.soulnetwork.add.success", new Object[] {amount, owner}); + func_152373_a(icommandsender, this, "commands.soulnetwork.add.success", amount, owner); } else if ("subtract".equalsIgnoreCase(astring[1])) { @@ -50,42 +52,42 @@ public class CommandSN extends CommandBase { int lp = SoulNetworkHandler.getCurrentEssence(owner); SoulNetworkHandler.syphonFromNetwork(owner, lp); - func_152373_a(icommandsender, this, "commands.soulnetwork.subtract.success", new Object[] {SoulNetworkHandler.getCurrentEssence(owner), owner}); + func_152373_a(icommandsender, this, "commands.soulnetwork.subtract.success", SoulNetworkHandler.getCurrentEssence(owner), owner); } else { SoulNetworkHandler.syphonFromNetwork(owner, amount); - func_152373_a(icommandsender, this, "commands.soulnetwork.subtract.success", new Object[] {amount, owner}); + func_152373_a(icommandsender, this, "commands.soulnetwork.subtract.success", amount, owner); } } else if ("fill".equalsIgnoreCase(astring[1])) { int amount = Integer.MAX_VALUE - SoulNetworkHandler.getCurrentEssence(owner); SoulNetworkHandler.addCurrentEssenceToMaximum(owner, amount, Integer.MAX_VALUE); - func_152373_a(icommandsender, this, "commands.soulnetwork.fill.success", new Object[] {owner}); + func_152373_a(icommandsender, this, "commands.soulnetwork.fill.success", owner); } else if ("empty".equalsIgnoreCase(astring[1])) { SoulNetworkHandler.syphonFromNetwork(owner, SoulNetworkHandler.getCurrentEssence(owner)); - func_152373_a(icommandsender, this, "commands.soulnetwork.empty.success", new Object[] {owner}); + func_152373_a(icommandsender, this, "commands.soulnetwork.empty.success", owner); } else if ("get".equalsIgnoreCase(astring[1])) { int amount = SoulNetworkHandler.getCurrentEssence(owner); - func_152373_a(icommandsender, this, "commands.soulnetwork.get.success", new Object[] {amount, owner}); + func_152373_a(icommandsender, this, "commands.soulnetwork.get.success", amount, owner); } else { - throw new CommandException("commands.soulnetwork.notACommand", new Object[0]); + throw new CommandException("commands.soulnetwork.notACommand"); } } else if (astring.length == 0) { - throw new CommandException("commands.soulnetwork.noPlayer", new Object[0]); + throw new CommandException("commands.soulnetwork.noPlayer"); } else if (astring.length == 1) { - throw new CommandException("commands.soulnetwork.noCommand", new Object[0]); + throw new CommandException("commands.soulnetwork.noCommand"); } } @@ -97,7 +99,7 @@ public class CommandSN extends CommandBase } else if (astring.length == 2) { - return getListOfStringsMatchingLastWord(astring, new String[] {"add", "subtract", "fill", "empty"}); + return getListOfStringsMatchingLastWord(astring, "add", "subtract", "fill", "empty"); } return null; diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/commands/CommandUnbind.java b/src/main/java/WayofTime/alchemicalWizardry/common/commands/CommandUnbind.java index 26a2cd71..3a1cc09a 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/commands/CommandUnbind.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/commands/CommandUnbind.java @@ -36,17 +36,17 @@ public class CommandUnbind extends CommandBase { if (!EnergyItems.getOwnerName(item).isEmpty()) { - item.getTagCompound().setString("ownerName", ""); - func_152373_a(iCommandSender, this, "commands.unbind.success", new Object[0]); + item.getTagCompound().removeTag("ownerName"); + func_152373_a(iCommandSender, this, "commands.unbind.success"); } else { - throw new CommandException("commands.unbind.failed.notBindable", new Object[0]); + throw new CommandException("commands.unbind.failed.notBindable"); } } else if (!(item.getItem() instanceof IBindable)) { - throw new CommandException("commands.unbind.failed.notBindable", new Object[0]); + throw new CommandException("commands.unbind.failed.notBindable"); } } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/BoundAxe.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/BoundAxe.java index c4077953..77596f93 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/BoundAxe.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/items/BoundAxe.java @@ -1,17 +1,14 @@ package WayofTime.alchemicalWizardry.common.items; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.items.interfaces.IBindable; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; +import java.util.ArrayList; +import java.util.List; + import net.minecraft.block.Block; import net.minecraft.block.BlockLeavesBase; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemAxe; import net.minecraft.item.ItemStack; @@ -21,9 +18,15 @@ import net.minecraft.util.StatCollector; import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.ForgeHooks; +import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.api.items.interfaces.IBindable; +import WayofTime.alchemicalWizardry.common.ItemType; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import java.util.ArrayList; -import java.util.List; +import com.google.common.collect.HashMultiset; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; public class BoundAxe extends ItemAxe implements IBindable { @@ -112,6 +115,11 @@ public class BoundAxe extends ItemAxe implements IBindable par1ItemStack.getTagCompound().setInteger("worldTimeDelay", (int) (par2World.getWorldTime() - 1) % 200); return par1ItemStack; } + + if (par2World.isRemote) + { + return par1ItemStack; + } if (!getActivated(par1ItemStack) || SpellHelper.isFakePlayer(par2World, par3EntityPlayer)) { @@ -135,6 +143,8 @@ public class BoundAxe extends ItemAxe implements IBindable boolean silkTouch = EnchantmentHelper.getSilkTouchModifier(par3EntityPlayer); int fortuneLvl = EnchantmentHelper.getFortuneModifier(par3EntityPlayer); + HashMultiset dropMultiset = HashMultiset.create(); + for (int i = -5; i <= 5; i++) { for (int j = 0; j <= 10; j++) @@ -152,27 +162,18 @@ public class BoundAxe extends ItemAxe implements IBindable { if (silkTouch && block.canSilkHarvest(par2World, par3EntityPlayer, posX + i, posY + j, posZ + k, meta)) { - ItemStack droppedItem = new ItemStack(block, 1, meta); - - if (!par2World.isRemote) - { - par2World.spawnEntityInWorld(new EntityItem(par2World, posX, posY + par3EntityPlayer.getEyeHeight(), posZ, droppedItem)); - } + dropMultiset.add(new ItemType(block, meta)); } else { ArrayList itemDropList = block.getDrops(par2World, posX + i, posY + j, posZ + k, meta, fortuneLvl); if (itemDropList != null) { - for (ItemStack item : itemDropList) - { - if (!par2World.isRemote) - { - par2World.spawnEntityInWorld(new EntityItem(par2World, posX, posY + par3EntityPlayer.getEyeHeight(), posZ, item)); - } - } + for (ItemStack stack : itemDropList) + dropMultiset.add(ItemType.fromStack(stack), stack.stackSize); } } + par2World.setBlockToAir(posX + i, posY + j, posZ + k); } } @@ -180,7 +181,8 @@ public class BoundAxe extends ItemAxe implements IBindable } } - + BoundPickaxe.dropMultisetStacks(dropMultiset, par2World, posX, posY + par3EntityPlayer.getEyeHeight(), posZ); + return par1ItemStack; } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/BoundPickaxe.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/BoundPickaxe.java index 9b7c7f93..300ab966 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/BoundPickaxe.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/items/BoundPickaxe.java @@ -1,10 +1,8 @@ package WayofTime.alchemicalWizardry.common.items; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.items.interfaces.IBindable; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; +import java.util.ArrayList; +import java.util.List; + import net.minecraft.block.Block; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.enchantment.EnchantmentHelper; @@ -20,9 +18,16 @@ import net.minecraft.util.StatCollector; import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.ForgeHooks; +import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.api.items.interfaces.IBindable; +import WayofTime.alchemicalWizardry.common.ItemType; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import java.util.ArrayList; -import java.util.List; +import com.google.common.collect.HashMultiset; +import com.google.common.collect.Multiset; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; public class BoundPickaxe extends ItemPickaxe implements IBindable { @@ -114,6 +119,11 @@ public class BoundPickaxe extends ItemPickaxe implements IBindable par1ItemStack.getTagCompound().setInteger("worldTimeDelay", (int) (par2World.getWorldTime() - 1) % 200); return par1ItemStack; } + + if (par2World.isRemote) + { + return par1ItemStack; + } if (!getActivated(par1ItemStack) || SpellHelper.isFakePlayer(par2World, par3EntityPlayer)) { @@ -124,11 +134,6 @@ public class BoundPickaxe extends ItemPickaxe implements IBindable { return par1ItemStack; } - - if (par2World.isRemote) - { - return par1ItemStack; - } if(!EnergyItems.syphonBatteries(par1ItemStack, par3EntityPlayer, 10000)) { @@ -142,6 +147,8 @@ public class BoundPickaxe extends ItemPickaxe implements IBindable boolean silkTouch = EnchantmentHelper.getSilkTouchModifier(par3EntityPlayer); int fortuneLvl = EnchantmentHelper.getFortuneModifier(par3EntityPlayer); + HashMultiset dropMultiset = HashMultiset.create(); + for (int i = -5; i <= 5; i++) { for (int j = -5; j <= 5; j++) @@ -159,25 +166,15 @@ public class BoundPickaxe extends ItemPickaxe implements IBindable { if (silkTouch && block.canSilkHarvest(par2World, par3EntityPlayer, posX + i, posY + j, posZ + k, meta)) { - ItemStack droppedItem = new ItemStack(block, 1, meta); - - if (!par2World.isRemote) - { - par2World.spawnEntityInWorld(new EntityItem(par2World, posX, posY + par3EntityPlayer.getEyeHeight(), posZ, droppedItem)); - } + dropMultiset.add(new ItemType(block, meta)); } else { ArrayList itemDropList = block.getDrops(par2World, posX + i, posY + j, posZ + k, meta, fortuneLvl); if (itemDropList != null) { - for (ItemStack item : itemDropList) - { - if (!par2World.isRemote) - { - par2World.spawnEntityInWorld(new EntityItem(par2World, posX, posY + par3EntityPlayer.getEyeHeight(), posZ, item)); - } - } + for (ItemStack stack : itemDropList) + dropMultiset.add(ItemType.fromStack(stack), stack.stackSize); } } @@ -187,9 +184,31 @@ public class BoundPickaxe extends ItemPickaxe implements IBindable } } } - + + dropMultisetStacks(dropMultiset, par2World, posX, posY + par3EntityPlayer.getEyeHeight(), posZ); + return par1ItemStack; } + + public static void dropMultisetStacks(Multiset dropMultiset, World world, double x, double y, double z) + { + for (Multiset.Entry entry : dropMultiset.entrySet()) + { + int count = entry.getCount(); + ItemType type = entry.getElement(); + int maxStackSize = type.item.getItemStackLimit(type.createStack(1)); + + //Drop in groups of maximum size + while (count >= maxStackSize) + { + world.spawnEntityInWorld(new EntityItem(world, x, y, z, type.createStack(maxStackSize))); + count -= maxStackSize; + } + //Drop remainder + if (count > 0) + world.spawnEntityInWorld(new EntityItem(world, x, y, z, type.createStack(count))); + } + } @Override public void onUpdate(ItemStack par1ItemStack, World par2World, Entity par3Entity, int par4, boolean par5) diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/BoundShovel.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/BoundShovel.java index 82969790..1364d64e 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/BoundShovel.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/items/BoundShovel.java @@ -1,13 +1,8 @@ package WayofTime.alchemicalWizardry.common.items; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; -import WayofTime.alchemicalWizardry.api.items.interfaces.IBindable; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; +import java.util.ArrayList; +import java.util.List; -import com.google.common.collect.Multimap; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.enchantment.EnchantmentHelper; @@ -15,7 +10,6 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemSpade; import net.minecraft.item.ItemStack; @@ -25,9 +19,16 @@ import net.minecraft.util.StatCollector; import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.ForgeHooks; +import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.api.items.interfaces.IBindable; +import WayofTime.alchemicalWizardry.common.ItemType; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import java.util.ArrayList; -import java.util.List; +import com.google.common.collect.HashMultiset; +import com.google.common.collect.Multimap; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; public class BoundShovel extends ItemSpade implements IBindable { @@ -118,6 +119,11 @@ public class BoundShovel extends ItemSpade implements IBindable par1ItemStack.getTagCompound().setInteger("worldTimeDelay", (int) (par2World.getWorldTime() - 1) % 200); return par1ItemStack; } + + if (par2World.isRemote) + { + return par1ItemStack; + } if (!getActivated(par1ItemStack) || SpellHelper.isFakePlayer(par2World, par3EntityPlayer)) { @@ -141,6 +147,8 @@ public class BoundShovel extends ItemSpade implements IBindable boolean silkTouch = EnchantmentHelper.getSilkTouchModifier(par3EntityPlayer); int fortuneLvl = EnchantmentHelper.getFortuneModifier(par3EntityPlayer); + HashMultiset dropMultiset = HashMultiset.create(); + for (int i = -5; i <= 5; i++) { for (int j = 0; j <= 10; j++) @@ -158,25 +166,15 @@ public class BoundShovel extends ItemSpade implements IBindable { if (silkTouch && block.canSilkHarvest(par2World, par3EntityPlayer, posX + i, posY + j, posZ + k, meta)) { - ItemStack droppedItem = new ItemStack(block, 1, meta); - - if (!par2World.isRemote) - { - par2World.spawnEntityInWorld(new EntityItem(par2World, posX, posY + par3EntityPlayer.getEyeHeight(), posZ, droppedItem)); - } + dropMultiset.add(new ItemType(block, meta)); } else { ArrayList itemDropList = block.getDrops(par2World, posX + i, posY + j, posZ + k, meta, fortuneLvl); if (itemDropList != null) { - for (ItemStack item : itemDropList) - { - if (!par2World.isRemote) - { - par2World.spawnEntityInWorld(new EntityItem(par2World, posX, posY + par3EntityPlayer.getEyeHeight(), posZ, item)); - } - } + for (ItemStack stack : itemDropList) + dropMultiset.add(ItemType.fromStack(stack), stack.stackSize); } } @@ -186,6 +184,8 @@ public class BoundShovel extends ItemSpade implements IBindable } } } + + BoundPickaxe.dropMultisetStacks(dropMultiset, par2World, posX, posY + par3EntityPlayer.getEyeHeight(), posZ); return par1ItemStack; } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/DaggerOfSacrifice.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/DaggerOfSacrifice.java index f4b38f3d..c5a8cb5f 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/DaggerOfSacrifice.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/items/DaggerOfSacrifice.java @@ -8,8 +8,6 @@ import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.boss.EntityDragon; -import net.minecraft.entity.boss.EntityWither; import net.minecraft.entity.boss.IBossDisplayData; import net.minecraft.entity.monster.EntityEnderman; import net.minecraft.entity.monster.EntitySlime; diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemEnchantmentGlyphBlock.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemEnchantmentGlyphBlock.java new file mode 100644 index 00000000..a50bc6c3 --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemEnchantmentGlyphBlock.java @@ -0,0 +1,42 @@ +package WayofTime.alchemicalWizardry.common.items; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; + +public class ItemEnchantmentGlyphBlock extends ItemBlock +{ + public ItemEnchantmentGlyphBlock(Block block) + { + super(block); + setHasSubtypes(true); + } + + @Override + public String getUnlocalizedName(ItemStack itemstack) + { + String name = ""; + + switch (itemstack.getItemDamage()) + { + case 0: + name = "enchantability"; + break; + + case 1: + name = "enchantmentLevel"; + break; + + default: + name = "broken"; + } + + return getUnlocalizedName() + "." + name; + } + + @Override + public int getMetadata(int par1) + { + return par1; + } +} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemRitualDiviner.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemRitualDiviner.java index 3b00b926..073eeeb0 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemRitualDiviner.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemRitualDiviner.java @@ -21,7 +21,6 @@ import org.lwjgl.input.Keyboard; import WayofTime.alchemicalWizardry.AlchemicalWizardry; import WayofTime.alchemicalWizardry.ModBlocks; -import WayofTime.alchemicalWizardry.ModItems; import WayofTime.alchemicalWizardry.api.items.interfaces.IRitualDiviner; import WayofTime.alchemicalWizardry.api.rituals.IRitualStone; import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; @@ -59,7 +58,11 @@ public class ItemRitualDiviner extends EnergyItems implements IRitualDiviner if (this.getMaxRuneDisplacement(par1ItemStack) == 1) { par3List.add(StatCollector.translateToLocal("tooltip.ritualdiviner.canplace")); - } else + }else if (this.getMaxRuneDisplacement(par1ItemStack) >= 2) + { + par3List.add(StatCollector.translateToLocal("tooltip.ritualdiviner.canplacedawn")); + + }else { par3List.add(StatCollector.translateToLocal("tooltip.ritualdiviner.cannotplace")); } @@ -124,13 +127,16 @@ public class ItemRitualDiviner extends EnergyItems implements IRitualDiviner } } - par3List.add(StatCollector.translateToLocal("tooltip.ritualdiviner.blankstones") + " " + blankStones); + int totalStones = blankStones + airStones + waterStones + fireStones + earthStones + duskStones + dawnStones; + + par3List.add(EnumChatFormatting.WHITE + StatCollector.translateToLocal("tooltip.ritualdiviner.blankstones") + " " + blankStones); par3List.add(EnumChatFormatting.AQUA + StatCollector.translateToLocal("tooltip.ritualdiviner.airstones") + " " + airStones); par3List.add(EnumChatFormatting.BLUE + StatCollector.translateToLocal("tooltip.ritualdiviner.waterstones") + " " + waterStones); par3List.add(EnumChatFormatting.RED + StatCollector.translateToLocal("tooltip.ritualdiviner.firestones") + " " + fireStones); par3List.add(EnumChatFormatting.DARK_GREEN + StatCollector.translateToLocal("tooltip.ritualdiviner.earthstones") + " " + earthStones); - par3List.add(EnumChatFormatting.BOLD + StatCollector.translateToLocal("tooltip.ritualdiviner.duskstones") + " " + duskStones); + par3List.add(EnumChatFormatting.DARK_PURPLE + StatCollector.translateToLocal("tooltip.ritualdiviner.duskstones") + " " + duskStones); par3List.add(EnumChatFormatting.GOLD + StatCollector.translateToLocal("tooltip.ritualdiviner.dawnstones") + " " + dawnStones); + par3List.add(EnumChatFormatting.UNDERLINE + StatCollector.translateToLocal("tooltip.ritualdiviner.totalStones") + " " + totalStones); } }else { @@ -358,10 +364,15 @@ public class ItemRitualDiviner extends EnergyItems implements IRitualDiviner @SideOnly(Side.CLIENT) public void getSubItems(Item id, CreativeTabs creativeTab, List list) { - list.add(new ItemStack(ModItems.itemRitualDiviner)); - ItemStack duskRitualDivinerStack = new ItemStack(ModItems.itemRitualDiviner); - ((ItemRitualDiviner) duskRitualDivinerStack.getItem()).setMaxRuneDisplacement(duskRitualDivinerStack, 1); + list.add(new ItemStack(id)); + + ItemStack duskRitualDivinerStack = new ItemStack(id); + this.setMaxRuneDisplacement(duskRitualDivinerStack, 1); list.add(duskRitualDivinerStack); + + ItemStack dawnRitualDivinerStack = new ItemStack(id); + this.setMaxRuneDisplacement(dawnRitualDivinerStack, 2); + list.add(dawnRitualDivinerStack); } @Override diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemStabilityGlyphBlock.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemStabilityGlyphBlock.java new file mode 100644 index 00000000..209de15c --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/common/items/ItemStabilityGlyphBlock.java @@ -0,0 +1,38 @@ +package WayofTime.alchemicalWizardry.common.items; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; + +public class ItemStabilityGlyphBlock extends ItemBlock +{ + public ItemStabilityGlyphBlock(Block block) + { + super(block); + setHasSubtypes(true); + } + + @Override + public String getUnlocalizedName(ItemStack itemstack) + { + String name = ""; + + switch (itemstack.getItemDamage()) + { + case 0: + name = "stability1"; + break; + + default: + name = "broken"; + } + + return getUnlocalizedName() + "." + name; + } + + @Override + public int getMetadata(int par1) + { + return par1; + } +} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/BoundArmour.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/BoundArmour.java index 56018258..7b0ec6b0 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/BoundArmour.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/BoundArmour.java @@ -168,6 +168,21 @@ public class BoundArmour extends ItemArmor implements IAlchemyGoggles, ISpecialA return false; } + public boolean isAffectedBySoulHarden() + { + return true; + } + + public double getBaseArmourReduction() + { + return 0.9; + } + + public double getArmourPenetrationReduction() + { + return 0.9; + } + @Override public ArmorProperties getProperties(EntityLivingBase player, ItemStack armor, DamageSource source, double damage, int slot) { @@ -188,7 +203,7 @@ public class BoundArmour extends ItemArmor implements IAlchemyGoggles, ISpecialA h = player.getActivePotionEffect(AlchemicalWizardry.customPotionSoulHarden).getAmplifier() + 1; } - armourReduction = 1 - 0.1 * Math.pow(1.0/3.0, Math.max(0, h - f)) - 0.1 * Math.max(0, f-h); + armourReduction = isAffectedBySoulHarden() ? 1 - (1 - this.getBaseArmourReduction()) * Math.pow(1.0/3.0, Math.max(0, h - f)) - 0.1 * Math.max(0, f-h) : getBaseArmourReduction(); damageAmount *= (armourReduction); @@ -224,7 +239,7 @@ public class BoundArmour extends ItemArmor implements IAlchemyGoggles, ISpecialA { if (source.isUnblockable()) { - return new ArmorProperties(-1, damageAmount * 0.9d, maxAbsorption); + return new ArmorProperties(-1, damageAmount * getArmourPenetrationReduction(), maxAbsorption); } return new ArmorProperties(-1, damageAmount, maxAbsorption); @@ -373,7 +388,14 @@ public class BoundArmour extends ItemArmor implements IAlchemyGoggles, ISpecialA this.setIsInvisible(itemStack, player.isPotionActive(Potion.invisibility.id)); - if (itemStack.getItemDamage() > 0) + this.repairArmour(world, player, itemStack); + + return; + } + + public void repairArmour(World world, EntityPlayer player, ItemStack itemStack) + { + if (itemStack.getItemDamage() > 0) { EnergyItems.checkAndSetItemOwner(itemStack, player); @@ -385,8 +407,6 @@ public class BoundArmour extends ItemArmor implements IAlchemyGoggles, ISpecialA } } } - - return; } public void tickInternalInventory(ItemStack par1ItemStack, World par2World, EntityPlayer par3Entity, int par4, boolean par5) diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmour.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmour.java index 813d7e77..139387b4 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmour.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmour.java @@ -3,6 +3,7 @@ package WayofTime.alchemicalWizardry.common.items.armour; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; +import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -23,6 +24,8 @@ import net.minecraft.world.World; import net.minecraft.world.biome.BiomeGenBase; import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent; import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; +import WayofTime.alchemicalWizardry.api.spell.APISpellHelper; +import WayofTime.alchemicalWizardry.common.items.EnergyItems; import WayofTime.alchemicalWizardry.common.omega.OmegaParadigm; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -36,6 +39,10 @@ public abstract class OmegaArmour extends BoundArmour protected boolean storeYLevel = false; protected boolean storeSeesSky = false; + protected List illegalEnchantmentList = new LinkedList(); + + public float reagentDrainPerDamage = 0.1f; + public OmegaArmour(int armorType) { super(armorType); @@ -56,31 +63,52 @@ public abstract class OmegaArmour extends BoundArmour this.reagent = reagent; } + @Override + public boolean isAffectedBySoulHarden() + { + return false; + } + + @Override + public double getBaseArmourReduction() + { + return 0.9; + } + + @Override + public double getArmourPenetrationReduction() + { + return 0.5; + } + @Override public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) { super.onArmorTick(world, player, itemStack); - if(this.storeBiomeID()) + if(world.getWorldTime() % 50 == 0) { - int xCoord = (int) Math.floor(player.posX); - int zCoord = (int) Math.floor(player.posZ); - - BiomeGenBase biome = world.getBiomeGenForCoords(xCoord, zCoord); - if(biome != null) + if(this.storeBiomeID()) { - this.setBiomeIDStored(itemStack, biome.biomeID); + int xCoord = (int) Math.floor(player.posX); + int zCoord = (int) Math.floor(player.posZ); + + BiomeGenBase biome = world.getBiomeGenForCoords(xCoord, zCoord); + if(biome != null) + { + this.setBiomeIDStored(itemStack, biome.biomeID); + } + } + + if(this.storeDimensionID()) + { + this.setDimensionIDStored(itemStack, world.provider.dimensionId); + } + + if(this.storeYLevel()) + { + this.setYLevelStored(itemStack, (int) Math.floor(player.posY)); } - } - - if(this.storeDimensionID()) - { - this.setDimensionIDStored(itemStack, world.provider.dimensionId); - } - - if(this.storeYLevel()) - { - this.setYLevelStored(itemStack, (int) Math.floor(player.posY)); } if(this.armorType == 1) @@ -94,13 +122,34 @@ public abstract class OmegaArmour extends BoundArmour } } + @Override + public void repairArmour(World world, EntityPlayer player, ItemStack itemStack) + { + if (itemStack.getItemDamage() > 0) + { + if (!player.capabilities.isCreativeMode) + { + if(EnergyItems.syphonBatteries(itemStack, player, itemStack.getItemDamage() * 75)) + { + Reagent reagent = APISpellHelper.getPlayerReagentType(player); + float reagentAmount = APISpellHelper.getPlayerCurrentReagentAmount(player); + + reagentAmount -= itemStack.getItemDamage() * reagentDrainPerDamage; + APISpellHelper.setPlayerCurrentReagentAmount(player, Math.max(0, reagentAmount)); + + itemStack.setItemDamage(0); + } + } + } + } + public void revertArmour(EntityPlayer player, ItemStack itemStack) { ItemStack stack = this.getContainedArmourStack(itemStack); player.inventory.armorInventory[3-this.armorType] = stack; } - public ItemStack getSubstituteStack(ItemStack boundStack, int stability, int affinity, int enchantability, Random rand) + public ItemStack getSubstituteStack(ItemStack boundStack, int stability, int affinity, int enchantability, int enchantmentLevel, Random rand) { ItemStack omegaStack = new ItemStack(this); if(boundStack != null && boundStack.hasTagCompound()) @@ -110,13 +159,18 @@ public abstract class OmegaArmour extends BoundArmour } this.setContainedArmourStack(omegaStack, boundStack); SoulNetworkHandler.checkAndSetItemOwner(omegaStack, SoulNetworkHandler.getOwnerName(boundStack)); - this.setItemEnchantability(omegaStack, 70); + this.setItemEnchantability(omegaStack, Math.min(enchantability, 70)); + + EnchantmentHelper.setEnchantments(new HashMap(), omegaStack); List enchantList = new ArrayList(); - for(int i=0; i<100; i++) + int adjustedEnchantLevel = Math.min(enchantmentLevel, 30); + int additionalPasses = enchantmentLevel - adjustedEnchantLevel; + + for(int i=0; i<1+additionalPasses; i++) { - List lst = EnchantmentHelper.buildEnchantmentList(rand, omegaStack, 30); + List lst = EnchantmentHelper.buildEnchantmentList(rand, omegaStack, adjustedEnchantLevel); if(lst != null) { enchantList.addAll(lst); @@ -144,9 +198,17 @@ public abstract class OmegaArmour extends BoundArmour } } + for(Enchantment ench : this.illegalEnchantmentList) + { + if(map.containsKey(ench)) + { + map.remove(ench); + } + } + List newEnchantList = new ArrayList(); - for(Entry> entry : map.entrySet()) //Assume enchant # 0 is level 1 enchant + for(Entry> entry : map.entrySet()) { Enchantment ench = entry.getKey(); Map numMap = entry.getValue(); diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmourEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmourEarth.java index d858ca18..de5cc181 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmourEarth.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmourEarth.java @@ -28,6 +28,7 @@ public class OmegaArmourEarth extends OmegaArmour public OmegaArmourEarth(int armorType) { super(armorType); + this.storeYLevel = true; } @Override @@ -89,10 +90,14 @@ public class OmegaArmourEarth extends OmegaArmour } @Override - public Multimap getItemAttributeModifiers() + public Multimap getAttributeModifiers(ItemStack stack) { Multimap map = HashMultimap.create(); - map.put(SharedMonsterAttributes.knockbackResistance.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(179618 /** Random number **/, armorType), "Armor modifier" + armorType, getKnockbackResist(), 0)); + int yLevel = this.getYLevelStored(stack); + map.put(SharedMonsterAttributes.knockbackResistance.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(179618 /** Random number **/, armorType), "Knockback modifier" + armorType, getKnockbackResist(), 0)); + map.put(SharedMonsterAttributes.maxHealth.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(80532 /** Random number **/, armorType), "Health modifier" + armorType, getDefaultArmourBoost()*getHealthBoostModifierForLevel(yLevel), 1)); + map.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(85112 /** Random number **/, armorType), "Damage modifier" + armorType, getDefaultArmourBoost()*getDamageModifierForLevel(yLevel), 2)); + return map; } @@ -100,4 +105,30 @@ public class OmegaArmourEarth extends OmegaArmour { return 0.25f; } + + public float getDefaultArmourBoost() + { + switch(this.armorType) + { + case 0: + return 2.5f; + case 1: + return 4; + case 2: + return 3.5f; + case 3: + return 2; + } + return 0.25f; + } + + public float getHealthBoostModifierForLevel(int yLevel) + { + return 0.05f * (yLevel <= 50 ? 1.5f : yLevel >= 100 ? -0.5f : 0.5f); + } + + public float getDamageModifierForLevel(int yLevel) + { + return 0.03f * (yLevel <= 50 ? 1.5f : yLevel >= 100 ? -0.5f : 0.5f); + } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmourFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmourFire.java index 644ca704..0d060d57 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmourFire.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmourFire.java @@ -1,10 +1,19 @@ package WayofTime.alchemicalWizardry.common.items.armour; +import java.util.UUID; + +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Multimap; + import net.minecraft.client.model.ModelBiped; import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.enchantment.Enchantment; import net.minecraft.entity.Entity; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; +import net.minecraft.world.biome.BiomeGenBase; import WayofTime.alchemicalWizardry.ModItems; import WayofTime.alchemicalWizardry.common.renderer.model.ModelOmegaFire; import cpw.mods.fml.relauncher.Side; @@ -20,7 +29,8 @@ public class OmegaArmourFire extends OmegaArmour public OmegaArmourFire(int armorType) { super(armorType); -// this.storeYLevel = true; + this.storeBiomeID = true; + this.illegalEnchantmentList.add(Enchantment.fireProtection); } @Override @@ -81,17 +91,21 @@ public class OmegaArmourFire extends OmegaArmour return this.itemIcon; } -// @Override -// public Multimap getAttributeModifiers(ItemStack stack) -// { -// Multimap map = HashMultimap.create(); -// -//// map.put(SharedMonsterAttributes.maxHealth.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(85212 /** Random number **/, armorType), "Armor modifier" + armorType, getDefaultHealthBoost()*getHealthBoostModifierForLevel(yLevel), 0)); -// -// return map; -// } + @Override + public Multimap getAttributeModifiers(ItemStack stack) + { + Multimap map = HashMultimap.create(); + int biomeID = this.getBiomeIDStored(stack); + BiomeGenBase biome = BiomeGenBase.getBiome(biomeID); + if(biome != null) + { + map.put(SharedMonsterAttributes.maxHealth.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(895132 /** Random number **/, armorType), "Health modifier" + armorType, getDefaultArmourBoost()*getHealthBoostModifierForBiome(biome), 1)); + map.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(196312 /** Random number **/, armorType), "Damage modifier" + armorType, getDefaultArmourBoost()*getDamageModifierForBiome(biome), 1)); + } + return map; + } - public float getDefaultHealthBoost() + public float getDefaultArmourBoost() { switch(this.armorType) { @@ -107,8 +121,47 @@ public class OmegaArmourFire extends OmegaArmour return 0.25f; } -// public float getHealthBoostModifierForLevel(int yLevel) -// { -// return (float)Math.sqrt(((float)yLevel)/64f) * 1.5f - 1; -// } + public float getHealthBoostModifierForBiome(BiomeGenBase biome) + { + float modifier = 0.05f; + + if(biome.isEqualTo(BiomeGenBase.hell)) + { + return modifier * 2.0f; + } + + if(biome.isEqualTo(BiomeGenBase.ocean)) + { + return modifier * -0.5f; + } + + if(biome.temperature >= 1) + { + return modifier * 1.5f; + } + + return modifier * 0.5f; + } + + public float getDamageModifierForBiome(BiomeGenBase biome) + { + float modifier = 0.03f; + + if(biome.isEqualTo(BiomeGenBase.hell)) + { + return modifier * 2.0f; + } + + if(biome.isEqualTo(BiomeGenBase.ocean)) + { + return modifier * -0.5f; + } + + if(biome.temperature >= 1) + { + return modifier * 1.5f; + } + + return modifier * 0.5f; + } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmourWater.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmourWater.java index 1532cf70..11e0e127 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmourWater.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmourWater.java @@ -97,12 +97,13 @@ public class OmegaArmourWater extends OmegaArmour BiomeGenBase biome = BiomeGenBase.getBiome(biomeID); if(biome != null) { - map.put(SharedMonsterAttributes.maxHealth.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(85312 /** Random number **/, armorType), "Armor modifier" + armorType, getDefaultHealthBoost()*getHealthBoostModifierForBiome(biome), 0)); + map.put(SharedMonsterAttributes.maxHealth.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(85312 /** Random number **/, armorType), "Health modifier" + armorType, getDefaultArmourBoost()*getHealthBoostModifierForBiome(biome), 2)); + map.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(85432 /** Random number **/, armorType), "Damage modifier" + armorType, getDefaultArmourBoost()*getDamageModifierForBiome(biome), 2)); } return map; } - public float getDefaultHealthBoost() + public float getDefaultArmourBoost() { switch(this.armorType) { @@ -120,21 +121,44 @@ public class OmegaArmourWater extends OmegaArmour public float getHealthBoostModifierForBiome(BiomeGenBase biome) { + float modifier = 0.05f; if(biome.isEqualTo(BiomeGenBase.hell)) { - return -0.5f; + return modifier * -0.5f; } - if(biome.isEqualTo(BiomeGenBase.ocean)) + if(biome.isEqualTo(BiomeGenBase.ocean) || biome.isEqualTo(BiomeGenBase.river)) { - return 2.0f; + return modifier * 2.0f; } if(biome.isHighHumidity()) { - return 1.5f; + return modifier * 1.5f; } - return 0.5f; + return modifier * 0.5f; + } + + public float getDamageModifierForBiome(BiomeGenBase biome) + { + float modifier = 0.03f; + + if(biome.isEqualTo(BiomeGenBase.hell)) + { + return modifier * -0.5f; + } + + if(biome.isEqualTo(BiomeGenBase.ocean) || biome.isEqualTo(BiomeGenBase.river)) + { + return modifier * 2.0f; + } + + if(biome.isHighHumidity()) + { + return modifier * 1.5f; + } + + return modifier * 0.5f; } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmourWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmourWind.java index ad504314..40f090de 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmourWind.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/items/armour/OmegaArmourWind.java @@ -94,13 +94,13 @@ public class OmegaArmourWind extends OmegaArmour { Multimap map = HashMultimap.create(); int yLevel = this.getYLevelStored(stack); - - map.put(SharedMonsterAttributes.maxHealth.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(85212 /** Random number **/, armorType), "Armor modifier" + armorType, getDefaultHealthBoost()*getHealthBoostModifierForLevel(yLevel), 0)); + map.put(SharedMonsterAttributes.maxHealth.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(85212 /** Random number **/, armorType), "Health modifier" + armorType, getDefaultArmourBoost()*getHealthBoostModifierForLevel(yLevel), 1)); + map.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(86212 /** Random number **/, armorType), "Damage modifier" + armorType, getDefaultArmourBoost()*getDamageModifierForLevel(yLevel), 2)); return map; } - public float getDefaultHealthBoost() + public float getDefaultArmourBoost() { switch(this.armorType) { @@ -118,6 +118,11 @@ public class OmegaArmourWind extends OmegaArmour public float getHealthBoostModifierForLevel(int yLevel) { - return (float)Math.sqrt(((float)yLevel)/64f) * 1.5f - 1; + return 0.05f * ((((float)yLevel)/64f) * 1.5f - 1); + } + + public float getDamageModifierForLevel(int yLevel) + { + return 0.02f * ((((float)yLevel)/64f) * 1.5f - 1); } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/energy/ItemTankSegmenter.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/energy/ItemTankSegmenter.java index 08e0d294..2faf341b 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/energy/ItemTankSegmenter.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/items/energy/ItemTankSegmenter.java @@ -213,7 +213,7 @@ public class ItemTankSegmenter extends Item implements IReagentManipulator numberAssigned = 0; } - player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("message.tanksegmenter.nowhas") + " " + numberAssigned + " " + "message.tanksegmenter.tankssetto" + " " + reagent.name)); + player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("message.tanksegmenter.nowhas") + " " + numberAssigned + " " + StatCollector.translateToLocal("message.tanksegmenter.tankssetto") + " " + reagent.name)); reagentHandler.setTanksTunedToReagent(reagent, numberAssigned); } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/ItemBloodLightSigil.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/ItemBloodLightSigil.java index 514f5a1e..af0f3754 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/ItemBloodLightSigil.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/ItemBloodLightSigil.java @@ -49,7 +49,6 @@ public class ItemBloodLightSigil extends EnergyItems implements IHolding @Override public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) { - System.out.println("Being called"); if(!EnergyItems.checkAndSetItemOwner(par1ItemStack, par2EntityPlayer) || !EnergyItems.syphonBatteries(par1ItemStack, par2EntityPlayer, getEnergyUsed())) { return true; @@ -96,7 +95,7 @@ public class ItemBloodLightSigil extends EnergyItems implements IHolding @Override public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) { - if (EnergyItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) + if (!EnergyItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer) || par3EntityPlayer.isSneaking()) { return par1ItemStack; } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfTheFastMiner.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfTheFastMiner.java index 0887e900..7704bcda 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfTheFastMiner.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfTheFastMiner.java @@ -56,7 +56,7 @@ public class SigilOfTheFastMiner extends EnergyItems implements ArmourUpgrade @SideOnly(Side.CLIENT) public void registerIcons(IIconRegister iconRegister) { - this.itemIcon = iconRegister.registerIcon("AlchemicalWizardry:SigilOfTheFastMiner"); + this.itemIcon = iconRegister.registerIcon("AlchemicalWizardry:MiningSigil_deactivated"); this.activeIcon = iconRegister.registerIcon("AlchemicalWizardry:MiningSigil_activated"); this.passiveIcon = iconRegister.registerIcon("AlchemicalWizardry:MiningSigil_deactivated"); } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/omega/IEnchantmentGlyph.java b/src/main/java/WayofTime/alchemicalWizardry/common/omega/IEnchantmentGlyph.java index 113024f5..5c189f92 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/omega/IEnchantmentGlyph.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/omega/IEnchantmentGlyph.java @@ -2,8 +2,8 @@ package WayofTime.alchemicalWizardry.common.omega; import net.minecraft.world.World; -public interface IEnchantmentGlyph +public interface IEnchantmentGlyph extends IStabilityGlyph { - public int getSubtractedStabilityForFaceCount(World world, int x, int y, int z, int meta, int faceCount); public int getEnchantability(World world, int x, int y, int z, int meta); + public int getEnchantmentLevel(World world, int x, int y, int z, int meta); } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/omega/IStabilityGlyph.java b/src/main/java/WayofTime/alchemicalWizardry/common/omega/IStabilityGlyph.java new file mode 100644 index 00000000..50252a94 --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/common/omega/IStabilityGlyph.java @@ -0,0 +1,8 @@ +package WayofTime.alchemicalWizardry.common.omega; + +import net.minecraft.world.World; + +public interface IStabilityGlyph +{ + public int getAdditionalStabilityForFaceCount(World world, int x, int y, int z, int meta, int faceCount); +} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigm.java b/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigm.java index ee86b10e..c60b30d2 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigm.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigm.java @@ -35,10 +35,10 @@ public class OmegaParadigm this.leggings.setReagent(reagent); this.boots.setReagent(reagent); - this.config = new ReagentRegenConfiguration(20, 10, 1); + this.config = new ReagentRegenConfiguration(100, 1, 10); } - public boolean convertPlayerArmour(EntityPlayer player, int x, int y, int z, int stability, int affinity, int enchantability) + public boolean convertPlayerArmour(EntityPlayer player, int x, int y, int z, int stability, int affinity, int enchantability, int enchantmentLevel) { ItemStack[] armours = player.inventory.armorInventory; @@ -48,13 +48,13 @@ public class OmegaParadigm ItemStack bootsStack = armours[0]; if(helmetStack != null && helmetStack.getItem() == ModItems.boundHelmet && chestStack != null && chestStack.getItem() == ModItems.boundPlate && leggingsStack != null && leggingsStack.getItem() == ModItems.boundLeggings && bootsStack != null && bootsStack.getItem() == ModItems.boundBoots) - { + { long worldSeed = player.worldObj.getSeed(); - Random rand = new Random(worldSeed + stability * (affinity + 7) * 94 + 84321*x - 17423*y + 76*z - 1623451*enchantability); - ItemStack omegaHelmetStack = helmet.getSubstituteStack(helmetStack, stability, affinity, enchantability, rand); - ItemStack omegaChestStack = chestPiece.getSubstituteStack(chestStack, stability, affinity, enchantability, rand); - ItemStack omegaLeggingsStack = leggings.getSubstituteStack(leggingsStack, stability, affinity, enchantability, rand); - ItemStack omegaBootsStack = boots.getSubstituteStack(bootsStack, stability, affinity, enchantability, rand); + Random rand = new Random(worldSeed + stability * (affinity + 7) * 94 + 84321*x - 17423*y + 76*z - 1623451*enchantability + 2 * enchantmentLevel); + ItemStack omegaHelmetStack = helmet.getSubstituteStack(helmetStack, stability, affinity, enchantability, enchantmentLevel, rand); + ItemStack omegaChestStack = chestPiece.getSubstituteStack(chestStack, stability, affinity, enchantability, enchantmentLevel, rand); + ItemStack omegaLeggingsStack = leggings.getSubstituteStack(leggingsStack, stability, affinity, enchantability, enchantmentLevel, rand); + ItemStack omegaBootsStack = boots.getSubstituteStack(bootsStack, stability, affinity, enchantability, enchantmentLevel, rand); armours[3] = omegaHelmetStack; armours[2] = omegaChestStack; @@ -74,7 +74,7 @@ public class OmegaParadigm public int getMaxAdditionalHealth() { - return 50; + return 20; } public boolean setOmegaStalling(EntityPlayer player, int duration) diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigmEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigmEarth.java index e722bd91..65283945 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigmEarth.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigmEarth.java @@ -1,5 +1,13 @@ package WayofTime.alchemicalWizardry.common.omega; +import net.minecraft.block.material.Material; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.world.World; +import WayofTime.alchemicalWizardry.AlchemicalWizardry; import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; import WayofTime.alchemicalWizardry.common.items.armour.OmegaArmour; @@ -7,18 +15,45 @@ public class OmegaParadigmEarth extends OmegaParadigm { public OmegaParadigmEarth(OmegaArmour helmet, OmegaArmour chestPiece, OmegaArmour leggings, OmegaArmour boots) { - super(ReagentRegistry.terraeReagent, helmet, chestPiece, leggings, boots, new ReagentRegenConfiguration(50, 10, 100)); + super(ReagentRegistry.terraeReagent, helmet, chestPiece, leggings, boots, new ReagentRegenConfiguration(50, 1, 10)); } -// @Override -// public float getCostPerTickOfUse(EntityPlayer player) -// { -// if(player.isInWater()) + @Override + public float getCostPerTickOfUse(EntityPlayer player) + { +// if(player.isBurning()) // { // return 0.5f; -// }else -// { -// return 1; // } -// } + return 1; + } + + @Override + public void onUpdate(World world, EntityPlayer player, ItemStack stack) + { + if(world.getWorldTime() % 100 == 0 && !world.isRemote) + { + if(player.posY < 50 && player.getHealth() < player.getMaxHealth()) + { + player.addPotionEffect(new PotionEffect(Potion.regeneration.id, 200, 0, true)); + } + } + + if(player.posY > 100) + { + player.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionHeavyHeart.id, 200, 0, true)); + } + } + + @Override + public boolean getBlockEffectWhileInside(Entity entity, int x, int y, int z) + { + return true; + } + + @Override + public void onOmegaKeyPressed(EntityPlayer player, ItemStack stack) + { + + } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigmFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigmFire.java index b1efe91d..4802841f 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigmFire.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigmFire.java @@ -1,8 +1,11 @@ package WayofTime.alchemicalWizardry.common.omega; +import net.minecraft.block.material.Material; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; import net.minecraft.world.World; import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; import WayofTime.alchemicalWizardry.common.items.armour.OmegaArmour; @@ -11,19 +14,47 @@ public class OmegaParadigmFire extends OmegaParadigm { public OmegaParadigmFire(OmegaArmour helmet, OmegaArmour chestPiece, OmegaArmour leggings, OmegaArmour boots) { - super(ReagentRegistry.incendiumReagent, helmet, chestPiece, leggings, boots, new ReagentRegenConfiguration(50, 10, 100)); + super(ReagentRegistry.incendiumReagent, helmet, chestPiece, leggings, boots, new ReagentRegenConfiguration(50, 1, 10)); } @Override public float getCostPerTickOfUse(EntityPlayer player) { + if(player.isBurning()) + { + return 0.5f; + } return 1; } @Override public void onUpdate(World world, EntityPlayer player, ItemStack stack) { - + if(world.getWorldTime() % 100 == 0 && !world.isRemote) + { + boolean isInLava = player.isInsideOfMaterial(Material.lava); + if(player.isBurning() && player.getHealth() < player.getMaxHealth()) + { + player.addPotionEffect(new PotionEffect(Potion.regeneration.id, 200, isInLava ? 1 : 0, true)); + } + + if(player.isBurning()) + { + player.addPotionEffect(new PotionEffect(Potion.damageBoost.id, isInLava ? 400 : 200, isInLava ? 1 : 0, true)); + } + + if(player.isInWater()) + { + player.addPotionEffect(new PotionEffect(Potion.digSlowdown.id, 200, 2, true)); + player.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 200, 2, true)); + player.addPotionEffect(new PotionEffect(Potion.weakness.id, 200, 1, true)); + } + } + + if(player.isBurning()) + { + player.addPotionEffect(new PotionEffect(Potion.fireResistance.id, 200, 0, true)); + } } @Override diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigmWater.java b/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigmWater.java index 60e0a26c..941f82cd 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigmWater.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigmWater.java @@ -17,7 +17,7 @@ public class OmegaParadigmWater extends OmegaParadigm { public OmegaParadigmWater(OmegaArmour helmet, OmegaArmour chestPiece, OmegaArmour leggings, OmegaArmour boots) { - super(ReagentRegistry.aquasalusReagent, helmet, chestPiece, leggings, boots, new ReagentRegenConfiguration(50, 10, 100)); + super(ReagentRegistry.aquasalusReagent, helmet, chestPiece, leggings, boots, new ReagentRegenConfiguration(50, 1, 10)); } @Override @@ -37,6 +37,14 @@ public class OmegaParadigmWater extends OmegaParadigm { player.addPotionEffect(new PotionEffect(Potion.waterBreathing.id, 3, 0, true)); player.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionAmphibian.id, 3, 0, true)); + + if(world.getWorldTime() % 100 == 0 && !world.isRemote) + { + if(player.isInWater() && player.getHealth() < player.getMaxHealth()) + { + player.addPotionEffect(new PotionEffect(Potion.regeneration.id, 200, 0, true)); + } + } } @Override diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigmWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigmWind.java index f994b549..1276863c 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigmWind.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaParadigmWind.java @@ -3,6 +3,8 @@ package WayofTime.alchemicalWizardry.common.omega; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; import net.minecraft.world.World; import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; import WayofTime.alchemicalWizardry.common.items.armour.OmegaArmour; @@ -11,7 +13,7 @@ public class OmegaParadigmWind extends OmegaParadigm { public OmegaParadigmWind(OmegaArmour helmet, OmegaArmour chestPiece, OmegaArmour leggings, OmegaArmour boots) { - super(ReagentRegistry.aetherReagent, helmet, chestPiece, leggings, boots, new ReagentRegenConfiguration(50, 10, 100)); + super(ReagentRegistry.aetherReagent, helmet, chestPiece, leggings, boots, new ReagentRegenConfiguration(50, 1, 10)); } @Override @@ -29,7 +31,12 @@ public class OmegaParadigmWind extends OmegaParadigm @Override public void onUpdate(World world, EntityPlayer player, ItemStack stack) { - + if(world.getWorldTime() % 100 == 0 && !world.isRemote && player.posY > 128 && player.getHealth() < player.getMaxHealth()) + { + player.addPotionEffect(new PotionEffect(Potion.regeneration.id, 200, player.posY > 128 + 64 ? 1 : 0, true)); + } + + player.fallDistance = 0; } @Override diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaStructureHandler.java b/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaStructureHandler.java index 7aa32d6b..7289c491 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaStructureHandler.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaStructureHandler.java @@ -7,7 +7,7 @@ import WayofTime.alchemicalWizardry.api.Int3; public class OmegaStructureHandler { - public static final OmegaStructureParameters emptyParam = new OmegaStructureParameters(0, 0); + public static final OmegaStructureParameters emptyParam = new OmegaStructureParameters(0, 0, 0); public static boolean isStructureIntact(World world, int x, int y, int z) { @@ -155,6 +155,7 @@ public class OmegaStructureHandler int tally = 0; int enchantability = 0; + int enchantmentLevel = 0; for (int i = 0; i < 2 * range + 1; i++) { @@ -198,23 +199,27 @@ public class OmegaStructureHandler { indTally++; } - + Block block = world.getBlock(x - range + i, y - range + j, z - range + k); - int meta = 0; + int meta = world.getBlockMetadata(x - range + i, y - range + j, z - range + k); + if(block instanceof IEnchantmentGlyph) { - tally -= ((IEnchantmentGlyph)block).getSubtractedStabilityForFaceCount(world, x-range+i, y-range+j, z-range+k, meta, indTally); + tally += ((IEnchantmentGlyph)block).getAdditionalStabilityForFaceCount(world, x-range+i, y-range+j, z-range+k, meta, indTally); enchantability += ((IEnchantmentGlyph)block).getEnchantability(world, x-range+i, y-range+j, z-range+k, meta); + enchantmentLevel += ((IEnchantmentGlyph)block).getEnchantmentLevel(world, x-range+i, y-range+j, z-range+k, meta); + }else if(block instanceof IStabilityGlyph) + { + tally += ((IStabilityGlyph)block).getAdditionalStabilityForFaceCount(world, x-range+i, y-range+j, z-range+k, meta, indTally); }else { tally += indTally; - } + } } } } - - return new OmegaStructureParameters(tally, enchantability); + return new OmegaStructureParameters(tally, enchantability, enchantmentLevel); } public static OmegaStructureParameters getStructureStabilityFactor(World world, int x, int y, int z, int expLim) diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaStructureParameters.java b/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaStructureParameters.java index 2b42bd47..2ecd32c4 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaStructureParameters.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/omega/OmegaStructureParameters.java @@ -4,10 +4,12 @@ public class OmegaStructureParameters { public final int stability; public final int enchantability; + public final int enchantmentLevel; - public OmegaStructureParameters(int stability, int enchantability) + public OmegaStructureParameters(int stability, int enchantability, int enchantmentLevel) { this.stability = stability; this.enchantability = enchantability; + this.enchantmentLevel = enchantmentLevel; } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderWritingTable.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderWritingTable.java index 69920b1a..dec51680 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderWritingTable.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderWritingTable.java @@ -3,6 +3,7 @@ package WayofTime.alchemicalWizardry.common.renderer.block; import WayofTime.alchemicalWizardry.common.renderer.model.ModelWritingTable; import WayofTime.alchemicalWizardry.common.tileEntity.TEWritingTable; import cpw.mods.fml.client.FMLClientHandler; +import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; @@ -13,6 +14,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.util.ForgeDirection; + import org.lwjgl.opengl.GL11; public class RenderWritingTable extends TileEntitySpecialRenderer @@ -57,7 +59,7 @@ public class RenderWritingTable extends TileEntitySpecialRenderer if (tileAltar.getStackInSlot(i) != null) { float scaleFactor = getGhostItemScaleFactor(tileAltar.getStackInSlot(i)); - float rotationAngle = (float) (720.0 * (System.currentTimeMillis() & 0x3FFFL) / 0x3FFFL); + float rotationAngle = Minecraft.getMinecraft().gameSettings.fancyGraphics ? (float) (720.0 * (System.currentTimeMillis() & 0x3FFFL) / 0x3FFFL) : 0; EntityItem ghostEntityItem = new EntityItem(tileAltar.getWorldObj()); ghostEntityItem.hoverStart = 0.0F; ghostEntityItem.setEntityItemStack(tileAltar.getStackInSlot(i)); diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/TEAltarRenderer.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/TEAltarRenderer.java index 1a0dfc88..054e1201 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/TEAltarRenderer.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/block/TEAltarRenderer.java @@ -1,7 +1,6 @@ package WayofTime.alchemicalWizardry.common.renderer.block; -import WayofTime.alchemicalWizardry.common.renderer.model.ModelBloodAltar; -import WayofTime.alchemicalWizardry.common.tileEntity.TEAltar; +import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; @@ -10,8 +9,12 @@ import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; + import org.lwjgl.opengl.GL11; +import WayofTime.alchemicalWizardry.common.renderer.model.ModelBloodAltar; +import WayofTime.alchemicalWizardry.common.tileEntity.TEAltar; + public class TEAltarRenderer extends TileEntitySpecialRenderer { private ModelBloodAltar modelBloodAltar = new ModelBloodAltar(); @@ -44,7 +47,7 @@ public class TEAltarRenderer extends TileEntitySpecialRenderer if (tileAltar.getStackInSlot(0) != null) { float scaleFactor = getGhostItemScaleFactor(tileAltar.getStackInSlot(0)); - float rotationAngle = (float) (720.0 * (System.currentTimeMillis() & 0x3FFFL) / 0x3FFFL); + float rotationAngle = Minecraft.getMinecraft().gameSettings.fancyGraphics ? (float) (720.0 * (System.currentTimeMillis() & 0x3FFFL) / 0x3FFFL) : 0; EntityItem ghostEntityItem = new EntityItem(tileAltar.getWorldObj()); ghostEntityItem.hoverStart = 0.0F; ghostEntityItem.setEntityItemStack(tileAltar.getStackInSlot(0)); diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectAutoAlchemy.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectAutoAlchemy.java index 3c2a187a..9cfae056 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectAutoAlchemy.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectAutoAlchemy.java @@ -44,13 +44,13 @@ public class RitualEffectAutoAlchemy extends RitualEffect int flag = 0; TileEntity topEntity = world.getTileEntity(x, y + 1, z); - if (!(topEntity instanceof IBloodAltar)) + if (!(topEntity instanceof IBloodAltar) || !(topEntity instanceof IBloodAltar)) { return; } IBloodAltar altar = (IBloodAltar) topEntity; - ItemStack targetStack = altar.getStackInSlot(0); + ItemStack targetStack = ((IInventory)altar).getStackInSlot(0); if (targetStack == null) { return; diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectCrafting.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectCrafting.java new file mode 100644 index 00000000..4e86f944 --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectCrafting.java @@ -0,0 +1,448 @@ +package WayofTime.alchemicalWizardry.common.rituals; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.oredict.OreDictionary; +import WayofTime.alchemicalWizardry.api.Int3; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; +import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; +import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; +import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; +import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; + +public class RitualEffectCrafting extends RitualEffect +{ + public static final boolean isTesting = false; + public static final boolean limitToSingleStack = true; + public static final int potentiaDrain = 2; + public static final int virtusDrain = 2; + + @Override + public void performEffect(IMasterRitualStone ritualStone) + { +// long startTime = System.nanoTime(); + + String owner = ritualStone.getOwner(); + + int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); + World world = ritualStone.getWorld(); + int x = ritualStone.getXCoord(); + int y = ritualStone.getYCoord(); + int z = ritualStone.getZCoord(); + + boolean hasPotentia = this.canDrainReagent(ritualStone, ReagentRegistry.potentiaReagent, potentiaDrain, false); + + if(world.getWorldTime() % (hasPotentia ? 1 : 4) != 0) + { + return; + } + + if (currentEssence < this.getCostPerRefresh()) + { + SoulNetworkHandler.causeNauseaToPlayer(owner); + } else + { + NBTTagCompound tag = ritualStone.getCustomRitualTag(); + + if(tag == null) + { + ritualStone.setCustomRitualTag(new NBTTagCompound()); + tag = ritualStone.getCustomRitualTag(); + } + + boolean lastFailed = tag.getBoolean("didLastCraftFail"); + + int slotDesignation = tag.getInteger("slotDesignation"); + if(lastFailed) + { + slotDesignation++; + tag.setInteger("slotDesignation", slotDesignation); + tag.setBoolean("didLastCraftFail", false); + } + int direction = ritualStone.getDirection(); + + boolean canContinue = false; + + ItemStack[] recipe = new ItemStack[9]; + InventoryCrafting inventory = new InventoryCrafting(new Container() + { + public boolean canInteractWith(EntityPlayer player) + { + return false; + } + }, 3, 3); + + for(int i=-1; i<=1; i++) + { + for(int j=-1; j<=1; j++) + { + int gridSpace = (i+1)*3 + (j+1); + + Int3 pos = this.getSlotPositionForDirection(gridSpace, direction); + TileEntity inv = world.getTileEntity(x + pos.xCoord, y + pos.yCoord, z + pos.zCoord); + if(inv instanceof IInventory) + { + if(((IInventory) inv).getSizeInventory() <= slotDesignation || !((IInventory) inv).isItemValidForSlot(slotDesignation, ((IInventory) inv).getStackInSlot(slotDesignation))) + { + continue; + }else + { + ItemStack invStack = ((IInventory) inv).getStackInSlot(slotDesignation); + if(invStack != null) + { + inventory.setInventorySlotContents(gridSpace, invStack); + recipe[gridSpace] = invStack; + canContinue = true; + } + } + } + } + } + + if(!canContinue) + { + tag.setInteger("slotDesignation", 0); + return; + } + + ItemStack returnStack = CraftingManager.getInstance().findMatchingRecipe(inventory, world); + + if (returnStack == null) + { + tag.setBoolean("didLastCraftFail", true); + return; + }else + { + boolean hasVirtus = this.canDrainReagent(ritualStone, ReagentRegistry.virtusReagent, virtusDrain, false); + boolean addOutputToInputs = hasVirtus; + + IInventory outputInv = null; + + List invList = new ArrayList(); + + TileEntity northEntity = world.getTileEntity(x, y-1, z - 2); + TileEntity southEntity = world.getTileEntity(x, y-1, z + 2); + TileEntity eastEntity = world.getTileEntity(x + 2, y-1, z); + TileEntity westEntity = world.getTileEntity(x - 2, y-1, z); + + switch(direction) + { + case 1: + if(southEntity instanceof IInventory) + { + outputInv = (IInventory)southEntity; + }else + { + return; + } + + if(northEntity instanceof IInventory) + { + invList.add((IInventory)northEntity); + } + if(eastEntity instanceof IInventory) + { + invList.add((IInventory)eastEntity); + } + if(westEntity instanceof IInventory) + { + invList.add((IInventory)westEntity); + } + + break; + + case 2: + if(westEntity instanceof IInventory) + { + outputInv = (IInventory)westEntity; + }else + { + return; + } + + if(northEntity instanceof IInventory) + { + invList.add((IInventory)northEntity); + } + if(eastEntity instanceof IInventory) + { + invList.add((IInventory)eastEntity); + } + if(southEntity instanceof IInventory) + { + invList.add((IInventory)southEntity); + } + + break; + + case 3: + if(northEntity instanceof IInventory) + { + outputInv = (IInventory)northEntity; + }else + { + return; + } + + if(eastEntity instanceof IInventory) + { + invList.add((IInventory)eastEntity); + } + if(southEntity instanceof IInventory) + { + invList.add((IInventory)southEntity); + } + if(westEntity instanceof IInventory) + { + invList.add((IInventory)westEntity); + } + + break; + + case 4: + if(eastEntity instanceof IInventory) + { + outputInv = (IInventory)eastEntity; + }else + { + return; + } + + if(northEntity instanceof IInventory) + { + invList.add((IInventory)northEntity); + } + if(southEntity instanceof IInventory) + { + invList.add((IInventory)southEntity); + } + if(westEntity instanceof IInventory) + { + invList.add((IInventory)westEntity); + } + + break; + } + + if (outputInv != null) + { + if(!(!limitToSingleStack ? SpellHelper.canInsertStackFullyIntoInventory(returnStack, outputInv, ForgeDirection.DOWN) : SpellHelper.canInsertStackFullyIntoInventory(returnStack, outputInv, ForgeDirection.DOWN, true, returnStack.getMaxStackSize()))) + { + tag.setBoolean("didLastCraftFail", true); + return; + } + + if(addOutputToInputs) + { + invList.add(outputInv); + } + + Map> syphonMap = new HashMap(); //Inventory, Slot, how much claimed + + for(int n = 0; n < recipe.length; n++) //Look for the correct items + { + ItemStack recipeStack = recipe[n]; + if(recipeStack == null) + { + continue; + } + + boolean isItemTaken = false; + + for(int i = 0; i < invList.size(); i++) + { + if(isItemTaken) + { + break; + } + IInventory inputInv = invList.get(i); + if(inputInv == null) + { + continue; + } + + for(int j = 0; j < inputInv.getSizeInventory(); j++) + { + if(!inputInv.isItemValidForSlot(j, recipeStack)) + { + continue; + } + + ItemStack invItem = inputInv.getStackInSlot(j); + if(invItem == null) + { + continue; + } + + if(this.areItemsEqualForCrafting(recipeStack, invItem)) + { + //TODO + inventory.setInventorySlotContents(n, invItem); +// ItemStack returnedStack = CraftingManager.getInstance().findMatchingRecipe(inventory, world); +// if(returnedStack == null || returnedStack.getItem() == null || returnedStack.getItem() != returnStack.getItem()) +// { +// continue; +// } + Map slotMap = syphonMap.get(i); + if(slotMap == null) + { + slotMap = new HashMap(); + syphonMap.put(i, slotMap); + } + + if(slotMap.containsKey(j)) + { + int syphoned = slotMap.get(j); + if(invItem.stackSize - syphoned > 0) + { + slotMap.put(j, syphoned + 1); + isItemTaken = true; + break; + } + }else + { + slotMap.put(j, 1); + isItemTaken = true; + break; + } + } + } + } + + if(!isItemTaken) + { + tag.setBoolean("didLastCraftFail", true); + return; + } + } + + /* The recipe is valid and the items have been found */ + + SpellHelper.insertStackIntoInventory(CraftingManager.getInstance().findMatchingRecipe(inventory, world), outputInv, ForgeDirection.DOWN); + + for(Entry> entry1 : syphonMap.entrySet()) + { + IInventory inputInv = invList.get(entry1.getKey()); + for(Entry entry2 : entry1.getValue().entrySet()) + { + ItemStack drainedStack = inputInv.getStackInSlot(entry2.getKey()); + Item item = drainedStack.getItem(); + if(item.hasContainerItem(drainedStack)) + { + inputInv.setInventorySlotContents(entry2.getKey(), item.getContainerItem(drainedStack)); + }else + { + drainedStack.stackSize -= entry2.getValue(); + if(drainedStack.stackSize <= 0) + { + inputInv.setInventorySlotContents(entry2.getKey(), null); + } + } + } + } + + if(addOutputToInputs && syphonMap.containsKey(invList.size())) + { + this.canDrainReagent(ritualStone, ReagentRegistry.virtusReagent, virtusDrain, true); + } + + SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh()); + + if(hasPotentia) + { + this.canDrainReagent(ritualStone, ReagentRegistry.potentiaReagent, potentiaDrain, true); + } + + world.markBlockForUpdate(x, y-1, z + 2); + world.markBlockForUpdate(x, y-1, z - 2); + world.markBlockForUpdate(x + 2, y-1, z); + world.markBlockForUpdate(x - 2, y-1, z); + +// long endTime = System.nanoTime(); +// +// long duration = (endTime - startTime); //divide by 1000000 to get milliseconds. +// System.out.println("(Total) method time in ms: " + (float)(duration)/1000000.0); + } + } + } + } + + @Override + public int getCostPerRefresh() + { + return 10; + } + + @Override + public List getRitualComponentList() + { + ArrayList autoCraftingRitual = new ArrayList(); + + this.addCornerRunes(autoCraftingRitual, 1, 1, RitualComponent.EARTH); + this.addParallelRunes(autoCraftingRitual, 1, 1, RitualComponent.EARTH); + autoCraftingRitual.add(new RitualComponent(0, 1, 0, RitualComponent.AIR)); + this.addOffsetRunes(autoCraftingRitual, 1, 2, -1, RitualComponent.FIRE); + this.addCornerRunes(autoCraftingRitual, 1, -1, RitualComponent.FIRE); + autoCraftingRitual.add(new RitualComponent(-1, -1, 0, RitualComponent.EARTH)); + autoCraftingRitual.add(new RitualComponent(1, -1, 0, RitualComponent.EARTH)); + autoCraftingRitual.add(new RitualComponent(0, -1, -1, RitualComponent.EARTH)); + autoCraftingRitual.add(new RitualComponent(0, -1, 0, RitualComponent.FIRE)); + autoCraftingRitual.add(new RitualComponent(0, -1, 1, RitualComponent.WATER)); + + return autoCraftingRitual; + } + + public boolean areItemsEqualForCrafting(ItemStack stack1, ItemStack stack2) + { + if (stack1 == null || stack2 == null) + { + return false; + } +// +// if (stack1.isItemStackDamageable() ^ stack2.isItemStackDamageable()) +// { +// return false; +// } + + return stack1.getItem() == stack2.getItem() && (stack1.getItem().getHasSubtypes() ? stack1.getItemDamage() == stack2.getItemDamage() : true); + } + + public boolean areItemStacksEqualWithWildcard(ItemStack recipeStack, ItemStack comparedStack) + { + return recipeStack.isItemEqual(comparedStack) || (recipeStack.getItemDamage() == OreDictionary.WILDCARD_VALUE && recipeStack.getItem() == comparedStack.getItem()); + } + + public Int3 getSlotPositionForDirection(int slot, int direction) + { + int x = slot % 3 - 1; + int z = slot / 3 - 1; + switch(direction) + { + case 1: //NORTH-facing + return new Int3(x, 2, z); + case 2: //EAST-facing + return new Int3(z, 2, -x); + case 3: //SOUTH-facing + return new Int3(-x, 2, -z); + case 4: //WEST-facing + return new Int3(-z, 2, x); + } + return new Int3(0,0,0); + } +} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLifeConduit.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLifeConduit.java index cedfd89e..23f39955 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLifeConduit.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLifeConduit.java @@ -1,19 +1,20 @@ package WayofTime.alchemicalWizardry.common.rituals; +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidHandler; import WayofTime.alchemicalWizardry.AlchemicalWizardry; import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; import WayofTime.alchemicalWizardry.api.tile.IBloodAltar; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import java.util.ArrayList; -import java.util.List; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; public class RitualEffectLifeConduit extends RitualEffect { @@ -50,6 +51,12 @@ public class RitualEffectLifeConduit extends RitualEffect { return; } + + if(!(tileAltar instanceof IFluidHandler)) + { + return; + } + int d0 = 15; int vertRange = 20; @@ -69,10 +76,10 @@ public class RitualEffectLifeConduit extends RitualEffect return; } - int fillAmount = Math.min(currentEssence / 2, tileAltar.fill(ForgeDirection.UP, new FluidStack(AlchemicalWizardry.lifeEssenceFluid, 10000), false)); + int fillAmount = Math.min(currentEssence / 2, ((IFluidHandler)tileAltar).fill(ForgeDirection.UP, new FluidStack(AlchemicalWizardry.lifeEssenceFluid, 10000), false)); { - tileAltar.fill(ForgeDirection.UP, new FluidStack(AlchemicalWizardry.lifeEssenceFluid, fillAmount), true); + ((IFluidHandler)tileAltar).fill(ForgeDirection.UP, new FluidStack(AlchemicalWizardry.lifeEssenceFluid, fillAmount), true); if (entityOwner.getHealth() > 2.0f && fillAmount != 0) { entityOwner.setHealth(2.0f); diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectOmegaStalling.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectOmegaStalling.java index ff97dc0c..15abe3e3 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectOmegaStalling.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectOmegaStalling.java @@ -54,8 +54,9 @@ public class RitualEffectOmegaStalling extends RitualEffect OmegaParadigm parad = OmegaRegistry.getParadigmForReagent(reagent); if(parad != null) { + float costOffset = parad.getCostPerTickOfUse(player); parad.setOmegaStalling(player, 100); - SoulNetworkHandler.syphonFromNetwork(owner, getCostPerRefresh()); + SoulNetworkHandler.syphonFromNetwork(owner, (int)(getCostPerRefresh() * Math.min(costOffset, 1))); } } } @@ -86,7 +87,7 @@ public class RitualEffectOmegaStalling extends RitualEffect this.addParallelRunes(omegaRitual, 4, 4, RitualComponent.WATER); this.addParallelRunes(omegaRitual, 3, 5, RitualComponent.BLANK); this.addParallelRunes(omegaRitual, 2, 5, RitualComponent.FIRE); - this.addParallelRunes(omegaRitual, 1, 5, RitualComponent.DUSK); + this.addParallelRunes(omegaRitual, 1, 5, RitualComponent.DAWN); this.addOffsetRunes(omegaRitual, 5, 3, 1, RitualComponent.WATER); this.addOffsetRunes(omegaRitual, 6, 3, 1, RitualComponent.DUSK); this.addOffsetRunes(omegaRitual, 6, 4, 1, RitualComponent.FIRE); diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectOmegaTest.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectOmegaTest.java index 2dc7129a..2fe3fd4f 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectOmegaTest.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectOmegaTest.java @@ -1,14 +1,22 @@ package WayofTime.alchemicalWizardry.common.rituals; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import net.minecraft.entity.effect.EntityLightningBolt; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; import WayofTime.alchemicalWizardry.api.Int3; +import WayofTime.alchemicalWizardry.api.alchemy.energy.IReagentHandler; import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent; -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentContainerInfo; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentStack; import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; @@ -23,7 +31,9 @@ import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; public class RitualEffectOmegaTest extends RitualEffect { - public static final int tickDuration = 1 * 60 * 20; + public static final boolean isTesting = false; + public static final int drainTotal = 32 * 1000; + @Override public void performEffect(IMasterRitualStone ritualStone) { @@ -43,27 +53,112 @@ public class RitualEffectOmegaTest extends RitualEffect OmegaStructureParameters param = OmegaStructureHandler.getStructureStabilityFactor(world, x, y, z, 5, new Int3(0,1,0)); int stab = param.stability; int enchantability = param.enchantability; + int enchantmentLevel = param.enchantmentLevel; - System.out.println("Stability: " + stab); + if(stab <= 0) + { + return; + } + +// System.out.println("Stability: " + stab + ", Enchantability: " + enchantability + ", Enchantment Level: " + enchantmentLevel); double range = 0.5; List playerList = SpellHelper.getPlayersInRange(world, x + 0.5, y + 1.5, z + 0.5, range, range); + Reagent reagent = null; + + Map reagentMap = new HashMap(); + for(int i=0; i<4; i++) + { + Int3 jarLoc = this.getJarLocation(i); + TileEntity tile = world.getTileEntity(x + jarLoc.xCoord, y + jarLoc.yCoord, z + jarLoc.zCoord); + if(tile instanceof IReagentHandler) + { + IReagentHandler container = (IReagentHandler)tile; + ReagentContainerInfo[] containerInfoArray = container.getContainerInfo(ForgeDirection.UP); + if(containerInfoArray == null) + { + continue; + } + + for(ReagentContainerInfo containerInfo : containerInfoArray) + { + ReagentStack containedReagent = containerInfo.reagent; + if(containedReagent == null) + { + continue; + } + Reagent rea = containedReagent.reagent; + int amt = containedReagent.amount; + if(reagentMap.containsKey(rea)) + { + reagentMap.put(rea, reagentMap.get(rea) + amt); + }else + { + reagentMap.put(rea, amt); + } + } + } + } + + for(Entry entry : reagentMap.entrySet()) + { + if(entry.getValue() >= drainTotal) + { + reagent = entry.getKey(); + break; + } + } + + if(reagent == null) + { + return; + } + + int tickDuration = isTesting ? 20 * 30 : 15 * 20 * 60 + (int)((15 * 20 * 60) * Math.sqrt(stab / 700)); + + int affinity = 0; + for(EntityPlayer player : playerList) { - Reagent reagent = ReagentRegistry.aetherReagent; - - int affinity = 0; - OmegaParadigm waterParadigm = OmegaRegistry.getParadigmForReagent(reagent); - if(waterParadigm != null && waterParadigm.convertPlayerArmour(player, x, y, z, stab, affinity, enchantability)) + if(waterParadigm != null && waterParadigm.convertPlayerArmour(player, x, y, z, stab, affinity, enchantability, enchantmentLevel)) { APISpellHelper.setPlayerCurrentReagentAmount(player, tickDuration); APISpellHelper.setPlayerMaxReagentAmount(player, tickDuration); APISpellHelper.setPlayerReagentType(player, reagent); APISpellHelper.setCurrentAdditionalMaxHP(player, waterParadigm.getMaxAdditionalHealth()); NewPacketHandler.INSTANCE.sendTo(NewPacketHandler.getReagentBarPacket(reagent, APISpellHelper.getPlayerCurrentReagentAmount(player), APISpellHelper.getPlayerMaxReagentAmount(player)), (EntityPlayerMP)player); + + if(!isTesting) + { + int drainLeft = this.drainTotal; + for(int i = 0; i < 4; i++) + { + if(drainLeft <= 0) + { + break; + } + Int3 jarLoc = this.getJarLocation(i); + TileEntity tile = world.getTileEntity(x + jarLoc.xCoord, y + jarLoc.yCoord, z + jarLoc.zCoord); + if(tile instanceof IReagentHandler) + { + IReagentHandler container = (IReagentHandler)tile; + ReagentStack drained = container.drain(ForgeDirection.UP, new ReagentStack(reagent, drainLeft), true); + if(drained != null) + { + drainLeft -= drained.amount; + world.markBlockForUpdate(x + jarLoc.xCoord, y + jarLoc.yCoord, z + jarLoc.zCoord); + world.addWeatherEffect(new EntityLightningBolt(world, x + jarLoc.xCoord, y + jarLoc.yCoord, z + jarLoc.zCoord)); + } + } + } + + ritualStone.setActive(false); + } + + break; } } } @@ -77,24 +172,70 @@ public class RitualEffectOmegaTest extends RitualEffect @Override public List getRitualComponentList() { - ArrayList animalGrowthRitual = new ArrayList(); - animalGrowthRitual.add(new RitualComponent(0, 0, 2, RitualComponent.WATER)); - animalGrowthRitual.add(new RitualComponent(2, 0, 0, RitualComponent.WATER)); - animalGrowthRitual.add(new RitualComponent(0, 0, -2, RitualComponent.WATER)); - animalGrowthRitual.add(new RitualComponent(-2, 0, 0, RitualComponent.WATER)); - animalGrowthRitual.add(new RitualComponent(0, 0, 1, RitualComponent.WATER)); - animalGrowthRitual.add(new RitualComponent(1, 0, 0, RitualComponent.WATER)); - animalGrowthRitual.add(new RitualComponent(0, 0, -1, RitualComponent.WATER)); - animalGrowthRitual.add(new RitualComponent(-1, 0, 0, RitualComponent.WATER)); - animalGrowthRitual.add(new RitualComponent(1, 0, 2, RitualComponent.WATER)); - animalGrowthRitual.add(new RitualComponent(-1, 0, 2, RitualComponent.WATER)); - animalGrowthRitual.add(new RitualComponent(1, 0, -2, RitualComponent.WATER)); - animalGrowthRitual.add(new RitualComponent(-1, 0, -2, RitualComponent.WATER)); - animalGrowthRitual.add(new RitualComponent(2, 0, 1, RitualComponent.AIR)); - animalGrowthRitual.add(new RitualComponent(2, 0, -1, RitualComponent.AIR)); - animalGrowthRitual.add(new RitualComponent(-2, 0, 1, RitualComponent.AIR)); - animalGrowthRitual.add(new RitualComponent(-2, 0, -1, RitualComponent.AIR)); - return animalGrowthRitual; + ArrayList omegaRitual = new ArrayList(); + this.addCornerRunes(omegaRitual, 1, 0, RitualComponent.DUSK); + this.addCornerRunes(omegaRitual, 2, 0, RitualComponent.DUSK); + this.addCornerRunes(omegaRitual, 3, 0, RitualComponent.BLANK); + this.addCornerRunes(omegaRitual, 4, 0, RitualComponent.DUSK); + this.addCornerRunes(omegaRitual, 5, 0, RitualComponent.BLANK); + this.addParallelRunes(omegaRitual, 1, 0, RitualComponent.DAWN); + this.addParallelRunes(omegaRitual, 2, 0, RitualComponent.BLANK); + this.addParallelRunes(omegaRitual, 4, 0, RitualComponent.BLANK); + this.addParallelRunes(omegaRitual, 5, 0, RitualComponent.DAWN); + this.addOffsetRunes(omegaRitual, 1, 3, 0, RitualComponent.DUSK); + this.addOffsetRunes(omegaRitual, 1, 5, 0, RitualComponent.DUSK); + + for(int i=2; i<=4; i++) + { + omegaRitual.add(new RitualComponent(-5, 0, i, RitualComponent.WATER)); + omegaRitual.add(new RitualComponent(-5, 0, -i, RitualComponent.WATER)); + omegaRitual.add(new RitualComponent(5, 0, i, RitualComponent.FIRE)); + omegaRitual.add(new RitualComponent(5, 0, -i, RitualComponent.FIRE)); + omegaRitual.add(new RitualComponent(i, 0, -5, RitualComponent.EARTH)); + omegaRitual.add(new RitualComponent(-i, 0, -5, RitualComponent.EARTH)); + omegaRitual.add(new RitualComponent(i, 0, 5, RitualComponent.AIR)); + omegaRitual.add(new RitualComponent(-i, 0, 5, RitualComponent.AIR)); + } + + for(int i=2; i<=3; i++) + { + omegaRitual.add(new RitualComponent(4, 0, i, RitualComponent.WATER)); + omegaRitual.add(new RitualComponent(4, 0, -i, RitualComponent.WATER)); + omegaRitual.add(new RitualComponent(-4, 0, i, RitualComponent.FIRE)); + omegaRitual.add(new RitualComponent(-4, 0, -i, RitualComponent.FIRE)); + omegaRitual.add(new RitualComponent(i, 0, 4, RitualComponent.EARTH)); + omegaRitual.add(new RitualComponent(-i, 0, 4, RitualComponent.EARTH)); + omegaRitual.add(new RitualComponent(i, 0, -4, RitualComponent.AIR)); + omegaRitual.add(new RitualComponent(-i, 0, -4, RitualComponent.AIR)); + } + + omegaRitual.add(new RitualComponent(-2, 0, 1, RitualComponent.AIR)); + omegaRitual.add(new RitualComponent(-2, 0, -1, RitualComponent.AIR)); + omegaRitual.add(new RitualComponent(-4, 0, 1, RitualComponent.AIR)); + omegaRitual.add(new RitualComponent(-4, 0, -1, RitualComponent.AIR)); + omegaRitual.add(new RitualComponent(2, 0, 1, RitualComponent.EARTH)); + omegaRitual.add(new RitualComponent(2, 0, -1, RitualComponent.EARTH)); + omegaRitual.add(new RitualComponent(4, 0, 1, RitualComponent.EARTH)); + omegaRitual.add(new RitualComponent(4, 0, -1, RitualComponent.EARTH)); + omegaRitual.add(new RitualComponent(1, 0, 2, RitualComponent.FIRE)); + omegaRitual.add(new RitualComponent(-1, 0, 2, RitualComponent.FIRE)); + omegaRitual.add(new RitualComponent(1, 0, 4, RitualComponent.FIRE)); + omegaRitual.add(new RitualComponent(-1, 0, 4, RitualComponent.FIRE)); + omegaRitual.add(new RitualComponent(1, 0, -2, RitualComponent.WATER)); + omegaRitual.add(new RitualComponent(-1, 0, -2, RitualComponent.WATER)); + omegaRitual.add(new RitualComponent(1, 0, -4, RitualComponent.WATER)); + omegaRitual.add(new RitualComponent(-1, 0, -4, RitualComponent.WATER)); + + omegaRitual.add(new RitualComponent(-3, 0, 2, RitualComponent.FIRE)); + omegaRitual.add(new RitualComponent(-3, 0, -2, RitualComponent.FIRE)); + omegaRitual.add(new RitualComponent(3, 0, 2, RitualComponent.WATER)); + omegaRitual.add(new RitualComponent(3, 0, -2, RitualComponent.WATER)); + omegaRitual.add(new RitualComponent(-2, 0, -3, RitualComponent.AIR)); + omegaRitual.add(new RitualComponent(2, 0, -3, RitualComponent.AIR)); + omegaRitual.add(new RitualComponent(-2, 0, 3, RitualComponent.EARTH)); + omegaRitual.add(new RitualComponent(2, 0, 3, RitualComponent.EARTH)); + + return omegaRitual; } public Int3 getJarLocation(int i) @@ -102,13 +243,13 @@ public class RitualEffectOmegaTest extends RitualEffect switch(i) { case 0: - return new Int3(-3,1,0); + return new Int3(-3,0,0); case 1: - return new Int3(3,1,0); + return new Int3(3,0,0); case 2: - return new Int3(0,1,-3); + return new Int3(0,0,-3); case 3: - return new Int3(0,1,3); + return new Int3(0,0,3); default: return new Int3(0,0,0); } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSoulBound.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSoulBound.java index 820b9d69..2b407074 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSoulBound.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSoulBound.java @@ -66,9 +66,13 @@ public class RitualEffectSoulBound extends RitualEffect if (BindingRegistry.isRequiredItemValid(itemStack)) { ritualStone.setVar1(BindingRegistry.getIndexForItem(itemStack) + 1); + itemStack.stackSize--; world.addWeatherEffect(new EntityLightningBolt(world, x, y + 1, z)); ritualStone.setCooldown(ritualStone.getCooldown() - 1); - item.setDead(); + if(itemStack.stackSize <= 0) + { + item.setDead(); + } break; } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectWellOfSuffering.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectWellOfSuffering.java index e2176079..f7ef0e5b 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectWellOfSuffering.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectWellOfSuffering.java @@ -1,6 +1,7 @@ package WayofTime.alchemicalWizardry.common.rituals; import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; @@ -19,6 +20,10 @@ public class RitualEffectWellOfSuffering extends RitualEffect { public static final int timeDelay = 25; public static final int amount = 10; + + private static final int tennebraeDrain = 5; + private static final int potentiaDrain = 10; + private static final int offensaDrain = 3; @Override public void performEffect(IMasterRitualStone ritualStone) @@ -58,13 +63,17 @@ public class RitualEffectWellOfSuffering extends RitualEffect { return; } + + boolean hasPotentia = this.canDrainReagent(ritualStone, ReagentRegistry.potentiaReagent, potentiaDrain, false); int d0 = 10; - int vertRange = 10; + int vertRange = hasPotentia ? 20 : 10; AxisAlignedBB axisalignedbb = AxisAlignedBB.getBoundingBox((double) x, (double) y, (double) z, (double) (x + 1), (double) (y + 1), (double) (z + 1)).expand(d0, vertRange, d0); List list = world.getEntitiesWithinAABB(EntityLivingBase.class, axisalignedbb); int entityCount = 0; + boolean hasTennebrae = this.canDrainReagent(ritualStone, ReagentRegistry.tenebraeReagent, tennebraeDrain, false); + boolean hasOffensa = this.canDrainReagent(ritualStone, ReagentRegistry.offensaReagent, offensaDrain, false); if (currentEssence < this.getCostPerRefresh() * list.size()) { @@ -78,14 +87,24 @@ public class RitualEffectWellOfSuffering extends RitualEffect continue; } - if (livingEntity.attackEntityFrom(DamageSource.outOfWorld, 1)) + hasOffensa = hasOffensa && this.canDrainReagent(ritualStone, ReagentRegistry.offensaReagent, offensaDrain, true); + + if (livingEntity.attackEntityFrom(DamageSource.outOfWorld, hasOffensa ? 2 : 1)) { + hasTennebrae = hasTennebrae && this.canDrainReagent(ritualStone, ReagentRegistry.tenebraeReagent, tennebraeDrain, true); + + entityCount++; - tileAltar.sacrificialDaggerCall(this.amount, true); + tileAltar.sacrificialDaggerCall(this.amount * (hasTennebrae ? 2 : 1) * (hasOffensa ? 2 : 1), true); } } SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh() * entityCount); + + if(hasPotentia) + { + this.canDrainReagent(ritualStone, ReagentRegistry.potentiaReagent, potentiaDrain, true); + } } } 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 45db03ff..cb221efb 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 @@ -466,9 +466,7 @@ public class SpellHelper return false; } - boolean tagsEqual = ItemStack.areItemStackTagsEqual(stack1, stack2); - - return stack1.getItem() == stack2.getItem() && tagsEqual && stack1.getItemDamage() == stack2.getItemDamage(); + return stack1.getItem() == stack2.getItem() && stack1.getItemDamage() == stack2.getItemDamage() && ItemStack.areItemStackTagsEqual(stack1, stack2); } /** @@ -547,13 +545,13 @@ public class SpellHelper int[] array = ((ISidedInventory)inventory).getAccessibleSlotsFromSide(dir.ordinal()); for(int in : array) { - canBeInserted[in] = ((ISidedInventory)inventory).canInsertItem(in, stack, dir.ordinal()); + canBeInserted[in] = inventory.isItemValidForSlot(in, stack) && ((ISidedInventory)inventory).canInsertItem(in, stack, dir.ordinal()); } }else { for(int i=0; i getInventoryStackLimit()) - stack.stackSize = getInventoryStackLimit(); - } + @Override + public ItemStack getStackInSlotOnClosing(int slot) + { + ItemStack stack = getStackInSlot(slot); + if (stack != null) + setInventorySlotContents(slot, null); + return stack; + } - @Override - public abstract String getInventoryName(); + @Override + public void setInventorySlotContents(int slot, ItemStack stack) + { + inv[slot] = stack; + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + if (stack != null && stack.stackSize > getInventoryStackLimit()) + stack.stackSize = getInventoryStackLimit(); + } - @Override - public boolean hasCustomInventoryName() - { - return false; - } + @Override + public abstract String getInventoryName(); - @Override - public int getInventoryStackLimit() - { - return 64; - } + @Override + public boolean hasCustomInventoryName() + { + return false; + } - @Override - public boolean isUseableByPlayer(EntityPlayer player) - { - return worldObj.getTileEntity(xCoord, yCoord, zCoord) == this - && player.getDistanceSq(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5) < 64; - } + @Override + public int getInventoryStackLimit() + { + return 64; + } - @Override - public void openInventory() - { - } + @Override + public boolean isUseableByPlayer(EntityPlayer player) + { + return worldObj.getTileEntity(xCoord, yCoord, zCoord) == this + && player.getDistanceSq(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5) < 64; + } - @Override - public void closeInventory() - { - } + @Override + public void openInventory() + { + } - @Override - public boolean isItemValidForSlot(int slot, ItemStack stack) - { - return true; - } + @Override + public void closeInventory() + { + } - @Override - public void writeToNBT(NBTTagCompound tag) - { - super.writeToNBT(tag); - NBTTagList invList = new NBTTagList(); - for (int i = 0; i < inv.length; i++) - { - if (inv[i] != null) - { - NBTTagCompound stackTag = new NBTTagCompound(); - stackTag.setByte("Slot", (byte) i); - inv[i].writeToNBT(stackTag); - invList.appendTag(stackTag); - } - } + @Override + public boolean isItemValidForSlot(int slot, ItemStack stack) + { + return true; + } - tag.setTag("Inventory", invList); - } - - @Override - public void readFromNBT(NBTTagCompound tag) - { - super.readFromNBT(tag); - NBTTagList invList = tag.getTagList("Inventory", Constants.NBT.TAG_COMPOUND); - for(int i = 0; i < invList.tagCount(); i++) + @Override + public void writeToNBT(NBTTagCompound tag) + { + super.writeToNBT(tag); + NBTTagList invList = new NBTTagList(); + for (int i = 0; i < inv.length; i++) + { + if (inv[i] != null) + { + NBTTagCompound stackTag = new NBTTagCompound(); + stackTag.setByte("Slot", (byte) i); + inv[i].writeToNBT(stackTag); + invList.appendTag(stackTag); + } + } + + tag.setTag("Inventory", invList); + } + + @Override + public void readFromNBT(NBTTagCompound tag) + { + super.readFromNBT(tag); + NBTTagList invList = tag.getTagList("Inventory", + Constants.NBT.TAG_COMPOUND); + for (int i = 0; i < invList.tagCount(); i++) { NBTTagCompound stackTag = invList.getCompoundTagAt(i); int slot = stackTag.getByte("Slot"); - - if(slot >= 0 && slot < inv.length) + + if (slot >= 0 && slot < inv.length) inv[slot] = ItemStack.loadItemStackFromNBT(stackTag); } - } - - public void clear() - { + } + + public void clear() + { inv = new ItemStack[inv.length]; } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEPedestal.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEPedestal.java index dcb522f3..6d0a7b0a 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEPedestal.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEPedestal.java @@ -1,17 +1,12 @@ package WayofTime.alchemicalWizardry.common.tileEntity; -import WayofTime.alchemicalWizardry.common.NewPacketHandler; -import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; import net.minecraft.entity.effect.EntityLightningBolt; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; import net.minecraft.network.Packet; -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.util.Constants; +import WayofTime.alchemicalWizardry.common.NewPacketHandler; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; public class TEPedestal extends TEInventory { diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEPlinth.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEPlinth.java index 138e12db..af245293 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEPlinth.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEPlinth.java @@ -1,14 +1,9 @@ package WayofTime.alchemicalWizardry.common.tileEntity; -import WayofTime.alchemicalWizardry.api.summoningRegistry.SummoningRegistry; -import WayofTime.alchemicalWizardry.api.summoningRegistry.SummoningRegistryComponent; -import WayofTime.alchemicalWizardry.common.IDemon; -import WayofTime.alchemicalWizardry.common.NewPacketHandler; -import WayofTime.alchemicalWizardry.common.PlinthComponent; -import WayofTime.alchemicalWizardry.common.items.EnergyBattery; +import java.util.ArrayList; +import java.util.List; + import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; @@ -18,9 +13,12 @@ import net.minecraft.network.Packet; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.Constants; import net.minecraftforge.oredict.OreDictionary; - -import java.util.ArrayList; -import java.util.List; +import WayofTime.alchemicalWizardry.api.summoningRegistry.SummoningRegistry; +import WayofTime.alchemicalWizardry.api.summoningRegistry.SummoningRegistryComponent; +import WayofTime.alchemicalWizardry.common.IDemon; +import WayofTime.alchemicalWizardry.common.NewPacketHandler; +import WayofTime.alchemicalWizardry.common.PlinthComponent; +import WayofTime.alchemicalWizardry.common.items.EnergyBattery; public class TEPlinth extends TEInventory { diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESocket.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESocket.java index b4047d94..ef3cf992 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESocket.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TESocket.java @@ -1,16 +1,11 @@ package WayofTime.alchemicalWizardry.common.tileEntity; -import WayofTime.alchemicalWizardry.api.items.interfaces.ArmourUpgrade; -import WayofTime.alchemicalWizardry.common.NewPacketHandler; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; import net.minecraft.network.Packet; -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.util.Constants; +import WayofTime.alchemicalWizardry.api.items.interfaces.ArmourUpgrade; +import WayofTime.alchemicalWizardry.common.NewPacketHandler; public class TESocket extends TEInventory { diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TETeleposer.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TETeleposer.java index 7be849ae..8043a587 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TETeleposer.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TETeleposer.java @@ -1,24 +1,19 @@ package WayofTime.alchemicalWizardry.common.tileEntity; +import java.util.Iterator; +import java.util.List; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.Packet; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; import WayofTime.alchemicalWizardry.common.NewPacketHandler; import WayofTime.alchemicalWizardry.common.block.BlockTeleposer; import WayofTime.alchemicalWizardry.common.items.EnergyItems; import WayofTime.alchemicalWizardry.common.items.TelepositionFocus; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.network.Packet; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.world.World; -import net.minecraftforge.common.util.Constants; - -import java.util.Iterator; -import java.util.List; public class TETeleposer extends TEInventory { diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEWritingTable.java b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEWritingTable.java index 628d8171..5bed0af1 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEWritingTable.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEWritingTable.java @@ -1,15 +1,10 @@ package WayofTime.alchemicalWizardry.common.tileEntity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.util.Constants; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.oredict.OreDictionary; import WayofTime.alchemicalWizardry.ModItems; diff --git a/src/main/resources/assets/alchemicalwizardry/lang/en_US.lang b/src/main/resources/assets/alchemicalwizardry/lang/en_US.lang index 672226d3..77374fa9 100644 --- a/src/main/resources/assets/alchemicalwizardry/lang/en_US.lang +++ b/src/main/resources/assets/alchemicalwizardry/lang/en_US.lang @@ -59,6 +59,14 @@ tile.crystalBlock.fullCrystal.name=Crystal Cluster tile.crystalBlock.crystalBrick.name=Crystal Cluster Brick tile.demonPortal.name=Demon Portal tile.demonChest.name=Demon's Chest +tile.enchantmentGlyph.enchantability.name=Glyph of the Adept Enchanter +tile.enchantmentGlyph.enchantmentLevel.name=Glyph of Arcane Potential +tile.stabilityGlyph.stability1.name=Glyph of Rigid Stability +tile.schematicSaver.name=Schematic Saver +tile.blockMimic.name=Mimic Block +tile.blockSpectralContainer.name=Spectral Container +tile.blockBloodLightSource.name=Blood Light +tile.spectralBlock.name=Spectral Block #Item Localization item.weakBloodOrb.name=Weak Blood Orb @@ -203,6 +211,7 @@ item.itemAssassinSigil.name=Sigil of the Assassin item.transcendentBloodOrb.name=Transcendent Blood Orb item.itemMailCatalogue.name=Mail Order Catalogue item.inputRoutingFocus.name=Input Routing Focus +item.bloodMagicBaseItem.EnderShard.name=Ender Shard item.outputRoutingFocus.default.name=Default Output Routing Focus item.outputRoutingFocus.modItem.name=Output Routing Focus (ModItem) item.outputRoutingFocus.ignMeta.name=Output Routing Focus (Ignore Meta) @@ -360,6 +369,7 @@ tooltip.ritualdiviner.airstones=Air Stones: tooltip.ritualdiviner.blankstones=Blank Stones: tooltip.ritualdiviner.cannotplace=Can not place Dusk runes tooltip.ritualdiviner.canplace=Can place Dusk runes +tooltip.ritualdiviner.canplacedawn=Can place Dusk and Dawn runes tooltip.ritualdiviner.desc=Used to explore new types of rituals tooltip.ritualdiviner.duskstones=Dusk Stones: tooltip.ritualdiviner.earthstones=Earth Stones: @@ -368,6 +378,7 @@ tooltip.ritualdiviner.moreinfo=Press shift for extended information tooltip.ritualdiviner.ritualtunedto=Ritual tuned to face: tooltip.ritualdiviner.waterstones=Water Stones: tooltip.ritualdiviner.dawnstones=Dawn Stones: +tooltip.ritualdiviner.totalStones=Total Stones: tooltip.sacrificialdagger.desc1=A slight draining feeling tickles your fingers tooltip.sacrificialdagger.desc2=Just a prick of the tooltip.sacrificialdagger.desc3=finger will suffice... @@ -440,4 +451,5 @@ message.tanksegmenter.tankssetto=tank(s) set to: message.routerfocus.limit=Focus' Item Limit set to: #Achievements -achievement.firstPrick=Your first prick! +achievement.alchemicalwizardy:firstPrick=Your first prick! +achievement.alchemicalwizardy:firstPrick.desc=The first drop of life into the Altar... diff --git a/src/main/resources/assets/alchemicalwizardry/lang/fr_FR.lang b/src/main/resources/assets/alchemicalwizardry/lang/fr_FR.lang index 1073ef3d..5a957bdf 100644 --- a/src/main/resources/assets/alchemicalwizardry/lang/fr_FR.lang +++ b/src/main/resources/assets/alchemicalwizardry/lang/fr_FR.lang @@ -4,6 +4,8 @@ tile.bloodRune.blank.name=Rune de Sang tile.bloodRune.fill.name=Rune de Capacité Augmentée tile.bloodRune.empty.name=Rune de Dislocation tile.bloodRune.test.name=Rune de l’Orbe +tile.bloodRune.betterCapacity.name=Rune de la Capacité Supérieure +tile.bloodRune.acceleration.name=Rune d'Accélération tile.speedRune.name=Rune de Vitesse tile.efficiencyRune.name=Rune d’Efficacité tile.runeOfSacrifice.name=Rune du Sacrifice @@ -17,60 +19,68 @@ tile.emptySocket.name=Poche Vide tile.bloodStoneBrick.name=Brique de Roche-Sang tile.largeBloodStoneBrick.name=Brique Large de Roche-Sang tile.blockWritingTable.name=Matériel d’Alchimie -tile.blockHomHeart.name=Table à Sortilège +tile.blockHomHeart.name=Table des Maléfices tile.bloodPedestal.name=Piédéstal Arcanique tile.bloodPlinth.name=Socle Arcanique tile.bloodTeleposer.name=Téléposeur -tile.blockConduit.name=Conduit à Sortilège +tile.blockConduit.name=Conduit des Maléfices tile.blockSpellParadigm.projectile.name=Générateur de Particule tile.blockSpellParadigm.self.name=Auto-Augmenteur -tile.blockSpellParadigm.melee.name=Assembleur à Mêlée -tile.blockSpellEnhancement.power1.name=Renforcement Instable à Sortilège -tile.blockSpellEnhancement.power2.name=Renforcement Standard à Sortilège -tile.blockSpellEnhancement.power3.name=Renforcement Renforcé à Sortilège -tile.blockSpellEnhancement.power4.name=Renforcement Imprégné à Sortilège -tile.blockSpellEnhancement.power5.name=Renforcement Démoniaque à Sortilège -tile.blockSpellEnhancement.cost1.name=Atténuation Instable à Sortilège -tile.blockSpellEnhancement.cost2.name=Atténuation Standard à Sortilège -tile.blockSpellEnhancement.cost3.name=Atténuation Renforcée à Sortilège -tile.blockSpellEnhancement.cost4.name=Atténuation Imprégnée à Sortilège -tile.blockSpellEnhancement.cost5.name=Atténuation Démoniaque à Sortilège -tile.blockSpellEnhancement.potency1.name=Amélioration Instable à Sortilège -tile.blockSpellEnhancement.potency2.name=Amélioration Standard à Sortilège -tile.blockSpellEnhancement.potency3.name=Amélioration Renforcée à Sortilège -tile.blockSpellEnhancement.potency4.name=Amélioration Imprégnée à Sortilège -tile.blockSpellEnhancement.potency5.name=Amélioration Démoniaque à Sortilège -tile.blockSpellModifier.default.name=Modification Basique à Sortilège -tile.blockSpellModifier.offensive.name= Modification Offensive à Sortilège -tile.blockSpellModifier.defensive.name= Modification Défensive à Sortilège -tile.blockSpellModifier.environmental.name=Modification Environnementale à Sortilège +tile.blockSpellParadigm.melee.name=Agrégation à la Mêlée +tile.blockSpellParadigm.tool.name=Forgeron Outilleur +tile.blockSpellEnhancement.power1.name=Renforcement Instable des Maléfices +tile.blockSpellEnhancement.power2.name=Renforcement Standard des Maléfices +tile.blockSpellEnhancement.power3.name=Renforcement Renforcé des Maléfices +tile.blockSpellEnhancement.power4.name=Renforcement Imprégné des Maléfices +tile.blockSpellEnhancement.power5.name=Renforcement Diabolo des Maléfices +tile.blockSpellEnhancement.cost1.name=Ristourne Instable des Maléfices +tile.blockSpellEnhancement.cost2.name=Ristourne Standard des Maléfices +tile.blockSpellEnhancement.cost3.name=Ristourne Renforcée des Maléfices +tile.blockSpellEnhancement.cost4.name=Ristourne Imprégnée des Maléfices +tile.blockSpellEnhancement.cost5.name=Ristourne Démoniaque des Maléfices +tile.blockSpellEnhancement.potency1.name=Amélioration Instable des Maléfices +tile.blockSpellEnhancement.potency2.name=Amélioration Standard des Maléfices +tile.blockSpellEnhancement.potency3.name=Amélioration Renforcée des Maléfices +tile.blockSpellEnhancement.potency4.name=Amélioration Imprégnée des Maléfices +tile.blockSpellEnhancement.potency5.name=Amélioration Diabolo des Maléfices +tile.blockSpellModifier.default.name=Modification Basique des Maléfices +tile.blockSpellModifier.offensive.name= Modification Offensive des Maléfices +tile.blockSpellModifier.defensive.name= Modification Défensive des Maléfices +tile.blockSpellModifier.environmental.name=Modification Environnementale des Maléfices tile.blockSpellEffect.fire.name=Creuset des Flammes -tile.blockSpellEffect.ice.name=Source des Glaces +tile.blockSpellEffect.ice.name=Geyser de Glace tile.blockSpellEffect.wind.name=Jaillissement des Vents tile.blockSpellEffect.earth.name=Assembleur des Terres +tile.alchemicCalcinator.name=Calcinateur Alchimique +tile.crystalBelljar.name=Cloche de Cristal +tile.blockReagentConduit.name=Relais Alchimique +tile.lifeEssenceFluidBlock.name=Extrait de Vitalité +tile.crystalBlock.fullCrystal.name=Fragments de Cristaux +tile.crystalBlock.crystalBrick.name=Briques de Fragments de Cristaux +tile.demonPortal.name=Portail Diabolo #Item Localization item.weakBloodOrb.name=Orbe Sanguinaire Affaiblie item.apprenticeBloodOrb.name=Orbe Sanguinaire de l’Apprenti item.magicianBloodOrb.name=Orbe Sanguinaire du Magicien item.masterBloodOrb.name=Orbe Sanguinaire du Maître -item.archmageBloodOrb.name=Orbe Sanguinaire de l’Archmage +item.archmageBloodOrb.name=Orbe Sanguinaire de l'Enchanteur item.energyBlast.name=Blaster à Energie -item.energySword.name=Lame Liée +item.energySword.name=Lame Sacrificielle item.lavaCrystal.name=Cristal de Lave -item.waterSigil.name=Symbole de l’Eau -item.lavaSigil.name=Symbole de la Lave -item.voidSigil.name=Symbole du Vide +item.waterSigil.name=Emblème de l’Eau +item.lavaSigil.name=Emblème de la Lave +item.voidSigil.name=Emblème du Vide item.blankSlate.name=Tablette Vierge item.reinforcedSlate.name=Tablette Renforcée item.sacrificialDagger.name=Couteau Sacrificiel item.daggerOfSacrifice.name=Dague des Sacrifices -item.airSigil.name=Symbole de l’Air -item.sigilOfTheFastMiner.name=Symbole du Mineur Prompt -item.sigilOfElementalAffinity.name=Symbole d’Affinité Elémentaire -item.sigilOfHaste.name=Symbole de Célérité -item.sigilOfHolding.name=Symbole de l’Emprise -item.divinationSigil.name=Symbole de Divination +item.airSigil.name=Emblème Stratos +item.sigilOfTheFastMiner.name=Emblème Spelunk +item.sigilOfElementalAffinity.name=Emblème d’Affinité Elémentaire +item.sigilOfHaste.name=Emblème de Célérité +item.sigilOfHolding.name=Emblème Possessif +item.divinationSigil.name=Emblème des Pythies item.waterScribeTool.name=Craie d’Inscription Elémentaire: Eau item.fireScribeTool.name=Craie d’Inscription Elémentaire: Feu item.earthScribeTool.name=Craie d’Inscription Elémentaire: Terre @@ -78,24 +88,25 @@ item.airScribeTool.name=Craie d’Inscription Elémentaire: Air item.duskScribeTool.name=Craie d’Inscription Elémentaire: Crépuscule item.activationCrystalWeak.name=Cristal d’Activation Affaibli item.activationCrystalAwakened.name=Cristal d’Activation Eveillé -item.boundPickaxe.name=Pioche Liée -item.boundAxe.name=Hâche Liée -item.boundShovel.name=Pelle Liée -item.boundHelmet.name=Casque Lié -item.boundPlate.name=Plastron Lié -item.boundLeggings.name=Jambières Liées -item.boundBoots.name=Bottes Liées +item.activationCrystalCreative.name=Cristal d'Activation Créatif +item.boundPickaxe.name=Pioche Sacrificielle +item.boundAxe.name=Hâche Sacrificielle +item.boundShovel.name=Pelle Sacrificielle +item.boundHelmet.name=Casque Sacrificiel +item.boundPlate.name=Plastron Sacrificiel +item.boundLeggings.name=Jambières Sacrificielles +item.boundBoots.name=Bottes Sacrificielles item.weakBloodShard.name=Eclat Sanguinaire Affaibli -item.growthSigil.name=Symbole du Bosquet Vert +item.growthSigil.name=Emblème du item.blankSpell.name=Cristal Délié item.alchemyFlask.name=Fiole à Potion -item.standardBindingAgent.name=Agent de Liaison Standard +item.standardBindingAgent.name=Agent Sacrificiel Standard item.mundanePowerCatalyst.name=Cristal de Puissance Commun item.averagePowerCatalyst.name=Cristal de Puissance Moyen item.greaterPowerCatalyst.name=Cristal de Puissance Supérieur -item.mundaneLengtheningCatalyst.name=Catalyseur d’Allongement Commun -item.averageLengtheningCatalyst.name=Catalyseur d’Allongement Moyen -item.greaterLengtheningCatalyst.name=Catalyseur d’Allongement Supérieur +item.mundaneLengtheningCatalyst.name=Catalyseur d'Extension Commun +item.averageLengtheningCatalyst.name=Catalyseur d’Extension Moyen +item.greaterLengtheningCatalyst.name=Catalyseur d’Extension Supérieur item.incendium.name=Incendium item.magicales.name=Magicales item.sanctus.name=Sanctus @@ -106,41 +117,44 @@ item.crystallos.name=Crystallos item.terrae.name=Terrae item.aquasalus.name=Aquasalus item.tennebrae.name=Tenebrae -item.demonBloodShard.name=Eclat Sanguinaire du Démon -item.sigilOfWind.name=Symbole du Tourbillon +item.demonBloodShard.name=Eclat Sanguinaire Diabolo +item.sigilOfWind.name=Emblème Mistral item.telepositionFocus.name=Focus de Téléposition item.enhancedTelepositionFocus.name= Focus de Téléposition Amélioré item.reinforcedTelepositionFocus.name=Focus de Téléposition Renforcé -item.demonicTelepositionFocus.name= Focus de Téléposition Démoniaque +item.demonicTelepositionFocus.name= Focus de Téléposition Diabolo item.imbuedSlate.name=Tablette Imprégnée -item.demonicSlate.name=Tablette Démoniaque -item.sigilOfTheBridge.name=Symbole du Pont Fantôme +item.demonicSlate.name=Tablette Diabolo +item.sigilOfTheBridge.name=Emblème du Pont Fantôme item.armourInhibitor.name=Neutralisarmure item.cheatyItem.name=Orbe de Test item.weakFillingAgent.name=Agent de Remplissage Affaibli item.standardFillingAgent.name=Agent de Remplissage Standard item.enhancedFillingAgent.name=Agent de Remplissage Amélioré -item.weakBindingAgent.name=Agent de Liaison Affaibli +item.weakBindingAgent.name=Agent de Sacrifice Affaibli item.ritualDiviner.name=Sourcier à Rituel -item.sigilOfMagnetism.name=Symbole de Magnétisme -item.itemDiabloKey.name=Clé de Liaison +item.sigilOfMagnetism.name=Emblème Magnétique +item.itemDiabloKey.name=Clé Diabolo item.energyBazooka.name=Bazooka à Energie -item.bloodLightSigil.name=Symbole de la Lampe de Sang -item.itemComplexSpellCrystal.name=Cristal de Sortilège Complexe -item.bucketLive.name=Seau de Vie +item.bloodLightSigil.name=Emblème de la Lampe de Sang +item.itemComplexSpellCrystal.name=Cristal de Maléfice Complexe +item.itemSigilOfSupression.name=Emblème de Délétion +item.itemSigilOfEnderSeverance.name=Emblème of Ender Severance +item.bucketLive.name=Seau d'Extrait Vital item.bloodMagicBaseItem.quartzRod.name=Bâton de Quartz item.bloodMagicBaseItem.EmptyCore.name=Cœur Creux item.bloodMagicBaseItem.MagicalesCable.name=Câble de Magicales item.bloodMagicBaseItem.WoodBrace.name=Attelle de Bois item.bloodMagicBaseItem.StoneBrace.name=Attelle de Pierre item.bloodMagicBaseItem.ProjectileCore.name=Cœur de Projectile -item.bloodMagicBaseItem.SelfCore.name=Auto-Cœur +item.bloodMagicBaseItem.SelfCore.name=Cœur des Egotistes item.bloodMagicBaseItem.MeleeCore.name=Cœur de Mêlée +item.bloodMagicBaseItem.ToolCore.name=Cœur d'Outillage item.bloodMagicBaseItem.ParadigmBackPlate.name=Tablette du Paradigme -item.bloodMagicBaseItem.OutputCable.name=Câble de Sortie de Sortilège -item.bloodMagicBaseItem.InputCable.name=Câble d’Entrée de Sortilège -item.bloodMagicBaseItem.FlameCore.name=Cœur Ardent -item.bloodMagicBaseItem.IcyCore.name=Cœur Gêlé +item.bloodMagicBaseItem.OutputCable.name=Sortie Maléfique +item.bloodMagicBaseItem.InputCable.name=Entrée Maléfique +item.bloodMagicBaseItem.FlameCore.name=Cœur Incandescent +item.bloodMagicBaseItem.IcyCore.name=Cœur Figé item.bloodMagicBaseItem.GustCore.name=Cœur des Bourrasques item.bloodMagicBaseItem.EarthenCore.name=Cœur Téllurique item.bloodMagicBaseItem.CrackedRunicPlate.name=Tablette Runique Craquelée @@ -154,6 +168,11 @@ item.bloodMagicBaseItem.PowerCore.name=Cœur de Force item.bloodMagicBaseItem.CostCore.name=Cœur de Réduction item.bloodMagicBaseItem.PotencyCore.name=Cœur de Puissance item.bloodMagicBaseItem.ObsidianBrace.name=Attelle d’Obsidienne +item.bloodMagicBaseItem.EtherealSlate.name=Tablette Ethérale +item.bloodMagicBaseItem.LifeShard.name=Eclat de Vie +item.bloodMagicBaseItem.SoulShard.name=Eclat d'Esprit +item.bloodMagicBaseItem.LifeBrace.name=Attelle de Vie +item.bloodMagicBaseItem.SoulRunicPlate.name=Plaque Runique Spirituelle item.bloodMagicAlchemyItem.Offensa.name=Offensa item.bloodMagicAlchemyItem.Praesidium.name=Praesidium item.bloodMagicAlchemyItem.OrbisTerrae.name=Orbis Terrae @@ -163,12 +182,55 @@ item.bloodMagicAlchemyItem.FracturedBone.name=Os Fracturé item.bloodMagicAlchemyItem.Virtus.name=Virtus item.bloodMagicAlchemyItem.Reductus.name=Reductus item.bloodMagicAlchemyItem.Potentia.name=Potentia - - +item.sanguineHelmet.name=Casque Sanglant +item.itemSeerSigil.name=Emblème de la Vision +item.itemFluidSigil.name=Emblème Fluide +item.multiTool.name=Dynamasse +item.itemCombinationalCatalyst.name=Catalyseur Combinatoire +item.sanguineRobe.name=Robe Sanglante +item.sanguinePants.name=Jambières Sanglantes +item.sanguineBoots.name=Bottes Sanglantes +item.itemAttunedCrystal.name=Routeur Alchimique +item.itemTankSegmenter.name=Segment Alchimique +item.destinationClearer.name=Détergent Alchimique +item.demonPlacer.name=Cristal Diabolo +item.creativeDagger.name=Couteau Sacrificiel Créatif +item.itemBloodPack.name=Pack de la Lettre de Sang +item.itemHarvestSigil.name=Emblême Déméter +item.itemCompressionSigil.name=Emblême Compresseur +item.transcendentBloodOrb.name=Orbe Sanguinaire Transcendante #Creative Tab itemGroup.tabBloodMagic=Blood Magic #Extra Strings bm.string.consume=Exaction bm.string.drain=Ponction Veineuse -bm.string.tier=Tiers \ No newline at end of file +bm.string.tier=Tiers +bm.string.crafting.orb.shaped=Fabrication Orbée Formée +bm.string.crafting.orb.shapeless=Fabrication Orbée Déformée + +#Entities +entity.AWWayofTime.EarthElemental.name=Elémenterrestre +entity.AWWayofTime.FireElemental.name=Elémentaire de Feu +entity.AWWayofTime.HolyElemental.name=Elémentaire Sacré +entity.AWWayofTime.ShadeElemental.name=Elémentaire Nocturne +entity.AWWayofTime.WaterElemental.name=Elémentaire d'Eau +entity.AWWayofTime.AirElemental.name=Elémentaire d'Air +entity.AWWayofTime.Shade.name=Ombre +entity.AWWayofTime.BoulderFist.name=Poing de Pierre +entity.AWWayofTime.IceDemon.name=Diable Glacial +entity.AWWayofTime.SmallEarthGolem.name=Petit Golem de Terre +entity.AWWayofTime.WingedFireDemon.name=Démon de Feu Ailé +entity.AWWayofTime.BileDemon.name=Diabile +entity.AWWayofTime.LowerGuardian.name=Gardien Inférieur +entity.AWWayofTime.FallenAngel.name=Ange Déchu +entity.AWWayofTime.MinorDemonGruntGuardian.name=Gardien Démon +entity.AWWayofTime.MinorDemonGruntGuardianWind.name=Gardien Démon Aérien +entity.AWWayofTime.MinorDemonGruntGuardianFire.name=Gardien Démon de Feu +entity.AWWayofTime.MinorDemonGruntGuardianIce.name=Gardien Démon de Glace +entity.AWWayofTime.MinorDemonGruntGuardianEarth.name=Gardien Démon de Terre +entity.AWWayofTime.MinorDemonGruntWind.name=Soldat Démont Aérien +entity.AWWayofTime.MinorDemonGruntFire.name=Soldat Démon de Feu +entity.AWWayofTime.MinorDemonGruntIce.name=Soldat Démon de Glace +entity.AWWayofTime.MinorDemonGruntEarth.name=Soldat Démon de Terre +entity.AWWayofTime.MinorDemonGrunt.name=Soldat Démon diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/GlyphEnchantability.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/GlyphEnchantability.png new file mode 100644 index 00000000..9b7a925c Binary files /dev/null and b/src/main/resources/assets/alchemicalwizardry/textures/blocks/GlyphEnchantability.png differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/GlyphEnchantmentLevel.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/GlyphEnchantmentLevel.png new file mode 100644 index 00000000..873fb3d4 Binary files /dev/null and b/src/main/resources/assets/alchemicalwizardry/textures/blocks/GlyphEnchantmentLevel.png differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/blocks/GlyphStability1.png b/src/main/resources/assets/alchemicalwizardry/textures/blocks/GlyphStability1.png new file mode 100644 index 00000000..4d3a8245 Binary files /dev/null and b/src/main/resources/assets/alchemicalwizardry/textures/blocks/GlyphStability1.png differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/gui/HPBar1.png b/src/main/resources/assets/alchemicalwizardry/textures/gui/HPBar1.png index ac9881c1..e2619401 100644 Binary files a/src/main/resources/assets/alchemicalwizardry/textures/gui/HPBar1.png and b/src/main/resources/assets/alchemicalwizardry/textures/gui/HPBar1.png differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/guide.png b/src/main/resources/assets/alchemicalwizardry/textures/items/guide.png new file mode 100644 index 00000000..75a93c14 Binary files /dev/null and b/src/main/resources/assets/alchemicalwizardry/textures/items/guide.png differ diff --git a/src/main/resources/assets/alchemicalwizardry/textures/items/ritual_dismantler.png b/src/main/resources/assets/alchemicalwizardry/textures/items/ritual_dismantler.png new file mode 100644 index 00000000..2f68300f Binary files /dev/null and b/src/main/resources/assets/alchemicalwizardry/textures/items/ritual_dismantler.png differ