From a5a17f6b041b97e99fb8155df83e640252e2648a Mon Sep 17 00:00:00 2001 From: WayofTime Date: Wed, 14 Dec 2016 14:48:39 -0500 Subject: [PATCH 01/82] Added Fluid routing to the routing nodes - this is done by using the Fluid Filter and placing a fluid container as the filter. --- .settings/org.eclipse.jdt.core.prefs | 6 +- changelog.txt | 5 + .../WayofTime/bloodmagic/api/Constants.java | 1 + .../item/routing/IFluidFilterProvider.java | 13 ++ .../item/routing/IItemFilterProvider.java | 2 +- .../item/routing/IRoutingFilterProvider.java | 15 ++ .../item/routing/ItemFluidRouterFilter.java | 151 +++++++++++++ .../item/routing/ItemRouterFilter.java | 9 + .../bloodmagic/registry/ModItems.java | 3 + .../bloodmagic/routing/IFluidFilter.java | 36 +++ .../bloodmagic/routing/IFluidRoutingNode.java | 10 + .../routing/IInputFluidRoutingNode.java | 10 + .../bloodmagic/routing/IItemFilter.java | 2 +- .../routing/IOutputFluidRoutingNode.java | 10 + .../bloodmagic/routing/IRoutingFilter.java | 6 + .../routing/RoutingFluidFilter.java | 212 ++++++++++++++++++ .../bloodmagic/routing/TestItemFilter.java | 1 + .../container/ContainerItemRoutingNode.java | 17 +- .../tile/routing/TileInputRoutingNode.java | 43 +++- .../tile/routing/TileMasterRoutingNode.java | 156 ++++++++++--- .../tile/routing/TileOutputRoutingNode.java | 43 +++- .../item/ItemFluidRouterFilter.json | 16 ++ .../assets/bloodmagic/lang/en_US.lang | 3 + .../textures/items/FluidRouterFilterExact.png | Bin 0 -> 681 bytes 24 files changed, 719 insertions(+), 51 deletions(-) create mode 100644 src/main/java/WayofTime/bloodmagic/item/routing/IFluidFilterProvider.java create mode 100644 src/main/java/WayofTime/bloodmagic/item/routing/IRoutingFilterProvider.java create mode 100644 src/main/java/WayofTime/bloodmagic/item/routing/ItemFluidRouterFilter.java create mode 100644 src/main/java/WayofTime/bloodmagic/routing/IFluidFilter.java create mode 100644 src/main/java/WayofTime/bloodmagic/routing/IFluidRoutingNode.java create mode 100644 src/main/java/WayofTime/bloodmagic/routing/IInputFluidRoutingNode.java create mode 100644 src/main/java/WayofTime/bloodmagic/routing/IOutputFluidRoutingNode.java create mode 100644 src/main/java/WayofTime/bloodmagic/routing/IRoutingFilter.java create mode 100644 src/main/java/WayofTime/bloodmagic/routing/RoutingFluidFilter.java create mode 100644 src/main/resources/assets/bloodmagic/blockstates/item/ItemFluidRouterFilter.json create mode 100644 src/main/resources/assets/bloodmagic/textures/items/FluidRouterFilterExact.png diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index 4e2ae6b4..74e1c18e 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -1,5 +1,5 @@ # -#Sat Apr 02 15:31:00 EDT 2016 +#Tue Dec 13 20:41:11 EST 2016 org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert org.eclipse.jdt.core.formatter.brace_position_for_block=next_line org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert @@ -288,10 +288,10 @@ org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=next_line eclipse.preferences.version=1 -org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on +org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=next_line org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on org.eclipse.jdt.core.compiler.compliance=1.6 org.eclipse.jdt.core.formatter.blank_lines_after_package=1 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 diff --git a/changelog.txt b/changelog.txt index 29eca95e..ef5c9955 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,8 @@ +------------------------------------------------------ +Version 2.1.1-70 +------------------------------------------------------ +- Added Fluid routing to the routing nodes - this is done by using the Fluid Filter and placing a fluid container as the filter. + ------------------------------------------------------ Version 2.1.0-69 ------------------------------------------------------ diff --git a/src/main/java/WayofTime/bloodmagic/api/Constants.java b/src/main/java/WayofTime/bloodmagic/api/Constants.java index c9abbbfd..14462946 100644 --- a/src/main/java/WayofTime/bloodmagic/api/Constants.java +++ b/src/main/java/WayofTime/bloodmagic/api/Constants.java @@ -207,6 +207,7 @@ public class Constants NODE_ROUTER("ItemNodeRouter"), RITUAL_DIVINER("ItemRitualDiviner"), ROUTER_FILTER("ItemRouterFilter"), + FLUID_ROUTER_FILTER("ItemFluidRouterFilter"), SACRIFICIAL_DAGGER("ItemSacrificialDagger"), SACRIFICE_PACK("ItemPackSacrifice"), SELF_SACRIFICE_PACK("ItemPackSelfSacrifice"), diff --git a/src/main/java/WayofTime/bloodmagic/item/routing/IFluidFilterProvider.java b/src/main/java/WayofTime/bloodmagic/item/routing/IFluidFilterProvider.java new file mode 100644 index 00000000..7f107ba3 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/routing/IFluidFilterProvider.java @@ -0,0 +1,13 @@ +package WayofTime.bloodmagic.item.routing; + +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.fluids.capability.IFluidHandler; +import WayofTime.bloodmagic.routing.IFluidFilter; + +public interface IFluidFilterProvider extends IRoutingFilterProvider +{ + IFluidFilter getInputFluidFilter(ItemStack stack, TileEntity tile, IFluidHandler handler); + + IFluidFilter getOutputFluidFilter(ItemStack stack, TileEntity tile, IFluidHandler handler); +} diff --git a/src/main/java/WayofTime/bloodmagic/item/routing/IItemFilterProvider.java b/src/main/java/WayofTime/bloodmagic/item/routing/IItemFilterProvider.java index 57e1c19e..9fc55d4b 100644 --- a/src/main/java/WayofTime/bloodmagic/item/routing/IItemFilterProvider.java +++ b/src/main/java/WayofTime/bloodmagic/item/routing/IItemFilterProvider.java @@ -5,7 +5,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraftforge.items.IItemHandler; import WayofTime.bloodmagic.routing.IItemFilter; -public interface IItemFilterProvider +public interface IItemFilterProvider extends IRoutingFilterProvider { IItemFilter getInputItemFilter(ItemStack stack, TileEntity tile, IItemHandler handler); diff --git a/src/main/java/WayofTime/bloodmagic/item/routing/IRoutingFilterProvider.java b/src/main/java/WayofTime/bloodmagic/item/routing/IRoutingFilterProvider.java new file mode 100644 index 00000000..05093ff1 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/routing/IRoutingFilterProvider.java @@ -0,0 +1,15 @@ +package WayofTime.bloodmagic.item.routing; + +import net.minecraft.item.ItemStack; + +public interface IRoutingFilterProvider +{ + /** + * Translates the inputed keyStack into the proper filtered key + * + * @param filterStack + * @param keyStack + * @return A new ItemStack which modifies the keyStack + */ + ItemStack getContainedStackForItem(ItemStack filterStack, ItemStack keyStack); +} diff --git a/src/main/java/WayofTime/bloodmagic/item/routing/ItemFluidRouterFilter.java b/src/main/java/WayofTime/bloodmagic/item/routing/ItemFluidRouterFilter.java new file mode 100644 index 00000000..0ecdbb24 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/routing/ItemFluidRouterFilter.java @@ -0,0 +1,151 @@ +package WayofTime.bloodmagic.item.routing; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import org.apache.commons.lang3.tuple.ImmutablePair; +import org.apache.commons.lang3.tuple.Pair; + +import WayofTime.bloodmagic.BloodMagic; +import WayofTime.bloodmagic.api.Constants; +import WayofTime.bloodmagic.client.IVariantProvider; +import WayofTime.bloodmagic.item.inventory.ItemInventory; +import WayofTime.bloodmagic.routing.IFluidFilter; +import WayofTime.bloodmagic.routing.RoutingFluidFilter; +import WayofTime.bloodmagic.util.GhostItemHelper; +import WayofTime.bloodmagic.util.helper.TextHelper; + +public class ItemFluidRouterFilter extends Item implements IFluidFilterProvider, IVariantProvider +{ + public static String[] names = { "exact" }; + + public ItemFluidRouterFilter() + { + super(); + + setUnlocalizedName(Constants.Mod.MODID + ".fluidFilter."); + setHasSubtypes(true); + setCreativeTab(BloodMagic.tabBloodMagic); + } + + @Override + public String getUnlocalizedName(ItemStack stack) + { + return super.getUnlocalizedName(stack) + names[stack.getItemDamage()]; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item id, CreativeTabs creativeTab, List list) + { + for (int i = 0; i < names.length; i++) + list.add(new ItemStack(id, 1, i)); + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List tooltip, boolean advanced) + { + tooltip.add(TextHelper.localize("tooltip.BloodMagic.fluidFilter." + names[stack.getItemDamage()])); + + super.addInformation(stack, player, tooltip, advanced); + } + + @Override + public IFluidFilter getInputFluidFilter(ItemStack filterStack, TileEntity tile, IFluidHandler handler) + { + IFluidFilter testFilter = new RoutingFluidFilter(); + + switch (filterStack.getMetadata()) + { + case 0: + testFilter = new RoutingFluidFilter(); + break; + + default: + testFilter = new RoutingFluidFilter(); + } + + List filteredList = new ArrayList(); + ItemInventory inv = new ItemInventory(filterStack, 9, ""); + for (int i = 0; i < inv.getSizeInventory(); i++) + { + ItemStack stack = inv.getStackInSlot(i); + if (stack == null) + { + continue; + } + + ItemStack ghostStack = GhostItemHelper.getStackFromGhost(stack); + + filteredList.add(ghostStack); + } + + testFilter.initializeFilter(filteredList, tile, handler, false); + return testFilter; + } + + @Override + public IFluidFilter getOutputFluidFilter(ItemStack filterStack, TileEntity tile, IFluidHandler handler) + { + IFluidFilter testFilter = new RoutingFluidFilter(); + + switch (filterStack.getMetadata()) + { + case 0: + testFilter = new RoutingFluidFilter(); + break; + + default: + testFilter = new RoutingFluidFilter(); + } + + List filteredList = new ArrayList(); + ItemInventory inv = new ItemInventory(filterStack, 9, ""); //TODO: Change to grab the filter from the Item later. + for (int i = 0; i < inv.getSizeInventory(); i++) + { + ItemStack stack = inv.getStackInSlot(i); + if (stack == null) + { + continue; + } + + ItemStack ghostStack = GhostItemHelper.getStackFromGhost(stack); + if (ghostStack.stackSize == 0) + { + ghostStack.stackSize = Integer.MAX_VALUE; + } + + filteredList.add(ghostStack); + } + + testFilter.initializeFilter(filteredList, tile, handler, true); + return testFilter; + } + + @Override + public List> getVariants() + { + List> ret = new ArrayList>(); + ret.add(new ImmutablePair(0, "type=exact")); + return ret; + } + + @Override + public ItemStack getContainedStackForItem(ItemStack filterStack, ItemStack keyStack) + { + ItemStack copyStack = keyStack.copy(); + GhostItemHelper.setItemGhostAmount(copyStack, 0); + copyStack.stackSize = 1; + return copyStack; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/routing/ItemRouterFilter.java b/src/main/java/WayofTime/bloodmagic/item/routing/ItemRouterFilter.java index 3ff83caa..c27a9853 100644 --- a/src/main/java/WayofTime/bloodmagic/item/routing/ItemRouterFilter.java +++ b/src/main/java/WayofTime/bloodmagic/item/routing/ItemRouterFilter.java @@ -164,4 +164,13 @@ public class ItemRouterFilter extends Item implements IItemFilterProvider, IVari ret.add(new ImmutablePair(3, "type=oredict")); return ret; } + + @Override + public ItemStack getContainedStackForItem(ItemStack filterStack, ItemStack keyStack) + { + ItemStack copyStack = keyStack.copy(); + GhostItemHelper.setItemGhostAmount(copyStack, 0); + copyStack.stackSize = 1; + return copyStack; + } } diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModItems.java b/src/main/java/WayofTime/bloodmagic/registry/ModItems.java index 6973a278..49a54030 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModItems.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModItems.java @@ -47,6 +47,7 @@ import WayofTime.bloodmagic.item.armour.ItemLivingArmour; import WayofTime.bloodmagic.item.armour.ItemSentientArmour; import WayofTime.bloodmagic.item.gear.ItemPackSacrifice; import WayofTime.bloodmagic.item.gear.ItemPackSelfSacrifice; +import WayofTime.bloodmagic.item.routing.ItemFluidRouterFilter; import WayofTime.bloodmagic.item.routing.ItemNodeRouter; import WayofTime.bloodmagic.item.routing.ItemRouterFilter; import WayofTime.bloodmagic.item.sigil.ItemSigilAir; @@ -159,6 +160,7 @@ public class ModItems public static final Item SENTIENT_SHOVEL; public static final Item NODE_ROUTER; public static final Item BASE_ITEM_FILTER; + public static final Item BASE_FLUID_FILTER; public static final Item CUTTING_FLUID; public static final Item SANGUINE_BOOK; public static final Item ITEM_POINTS_UPGRADE; @@ -258,6 +260,7 @@ public class ModItems NODE_ROUTER = registerItem(new ItemNodeRouter(), Constants.BloodMagicItem.NODE_ROUTER.getRegName()); BASE_ITEM_FILTER = registerItem(new ItemRouterFilter(), Constants.BloodMagicItem.ROUTER_FILTER.getRegName()); + BASE_FLUID_FILTER = registerItem(new ItemFluidRouterFilter(), Constants.BloodMagicItem.FLUID_ROUTER_FILTER.getRegName()); CUTTING_FLUID = registerItem(new ItemCuttingFluid(), Constants.BloodMagicItem.CUTTING_FLUID.getRegName()); diff --git a/src/main/java/WayofTime/bloodmagic/routing/IFluidFilter.java b/src/main/java/WayofTime/bloodmagic/routing/IFluidFilter.java new file mode 100644 index 00000000..8d5f138b --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/routing/IFluidFilter.java @@ -0,0 +1,36 @@ +package WayofTime.bloodmagic.routing; + +import java.util.List; + +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.IFluidHandler; + +public interface IFluidFilter extends IRoutingFilter +{ + void initializeFilter(List filteredList, TileEntity tile, IFluidHandler fluidHandler, boolean isFilterOutput); + + /** + * This method is only called when the output tank this filter is managing + * receives an ItemStack. Should only really be called by the Input filter + * via it's transfer method. + * + * @param fluidStack + * - The stack to filter + * + * @return - The remainder of the stack after it has been absorbed into the + * tank. + */ + FluidStack transferStackThroughOutputFilter(FluidStack fluidStack); + + /** + * This method is only called on an input filter to transfer FluidStacks + * from the input tank to the output tank. + */ + int transferThroughInputFilter(IFluidFilter outputFilter, int maxTransfer); + + boolean doesStackMatchFilter(FluidStack testStack); + + boolean doStacksMatch(FluidStack filterStack, FluidStack testStack); +} diff --git a/src/main/java/WayofTime/bloodmagic/routing/IFluidRoutingNode.java b/src/main/java/WayofTime/bloodmagic/routing/IFluidRoutingNode.java new file mode 100644 index 00000000..4b109eac --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/routing/IFluidRoutingNode.java @@ -0,0 +1,10 @@ +package WayofTime.bloodmagic.routing; + +import net.minecraft.util.EnumFacing; + +public interface IFluidRoutingNode extends IRoutingNode +{ + boolean isTankConnectedToSide(EnumFacing side); + + int getPriority(EnumFacing side); +} diff --git a/src/main/java/WayofTime/bloodmagic/routing/IInputFluidRoutingNode.java b/src/main/java/WayofTime/bloodmagic/routing/IInputFluidRoutingNode.java new file mode 100644 index 00000000..bd01f34f --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/routing/IInputFluidRoutingNode.java @@ -0,0 +1,10 @@ +package WayofTime.bloodmagic.routing; + +import net.minecraft.util.EnumFacing; + +public interface IInputFluidRoutingNode extends IFluidRoutingNode +{ + boolean isFluidInput(EnumFacing side); + + IFluidFilter getInputFluidFilterForSide(EnumFacing side); +} diff --git a/src/main/java/WayofTime/bloodmagic/routing/IItemFilter.java b/src/main/java/WayofTime/bloodmagic/routing/IItemFilter.java index 872057ab..da01785c 100644 --- a/src/main/java/WayofTime/bloodmagic/routing/IItemFilter.java +++ b/src/main/java/WayofTime/bloodmagic/routing/IItemFilter.java @@ -6,7 +6,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.items.IItemHandler; -public interface IItemFilter +public interface IItemFilter extends IRoutingFilter { void initializeFilter(List filteredList, TileEntity tile, IItemHandler itemHandler, boolean isFilterOutput); diff --git a/src/main/java/WayofTime/bloodmagic/routing/IOutputFluidRoutingNode.java b/src/main/java/WayofTime/bloodmagic/routing/IOutputFluidRoutingNode.java new file mode 100644 index 00000000..85f49736 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/routing/IOutputFluidRoutingNode.java @@ -0,0 +1,10 @@ +package WayofTime.bloodmagic.routing; + +import net.minecraft.util.EnumFacing; + +public interface IOutputFluidRoutingNode extends IFluidRoutingNode +{ + boolean isFluidOutput(EnumFacing side); + + IFluidFilter getOutputFluidFilterForSide(EnumFacing side); +} diff --git a/src/main/java/WayofTime/bloodmagic/routing/IRoutingFilter.java b/src/main/java/WayofTime/bloodmagic/routing/IRoutingFilter.java new file mode 100644 index 00000000..4de55c21 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/routing/IRoutingFilter.java @@ -0,0 +1,6 @@ +package WayofTime.bloodmagic.routing; + +public interface IRoutingFilter +{ + +} diff --git a/src/main/java/WayofTime/bloodmagic/routing/RoutingFluidFilter.java b/src/main/java/WayofTime/bloodmagic/routing/RoutingFluidFilter.java new file mode 100644 index 00000000..0486e29d --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/routing/RoutingFluidFilter.java @@ -0,0 +1,212 @@ +package WayofTime.bloodmagic.routing; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidUtil; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidTankProperties; + +public class RoutingFluidFilter implements IFluidFilter +{ + protected List requestList; + protected TileEntity accessedTile; + protected IFluidHandler fluidHandler; + + @Override + public void initializeFilter(List filteredList, TileEntity tile, IFluidHandler fluidHandler, boolean isFilterOutput) + { + this.accessedTile = tile; + this.fluidHandler = fluidHandler; + if (isFilterOutput) + { + //The requestList contains a list of how much can be extracted. + requestList = new ArrayList(); + for (ItemStack filterStack : filteredList) + { + FluidStack fluidFilterStack = getFluidStackFromItemStack(filterStack); + if (fluidFilterStack != null) + { + requestList.add(fluidFilterStack); + } + } + + IFluidTankProperties[] properties = fluidHandler.getTankProperties(); + + for (IFluidTankProperties property : properties) + { + FluidStack containedStack = property.getContents(); + if (containedStack != null) + { + for (FluidStack fluidFilterStack : requestList) + { + if (doStacksMatch(fluidFilterStack, containedStack)) + { + fluidFilterStack.amount = Math.max(fluidFilterStack.amount - containedStack.amount, 0); + } + } + } + } + } else + { + requestList = new ArrayList(); + for (ItemStack filterStack : filteredList) + { + FluidStack fluidFilterStack = getFluidStackFromItemStack(filterStack); + if (fluidFilterStack != null) + { + fluidFilterStack.amount *= -1; + requestList.add(fluidFilterStack); + } + } + + IFluidTankProperties[] properties = fluidHandler.getTankProperties(); + + for (IFluidTankProperties property : properties) + { + FluidStack containedStack = property.getContents(); + if (containedStack != null) + { + for (FluidStack fluidFilterStack : requestList) + { + if (doStacksMatch(fluidFilterStack, containedStack)) + { + fluidFilterStack.amount += containedStack.amount; + } + } + } + } + } + } + + public static FluidStack getFluidStackFromItemStack(ItemStack inputStack) + { + FluidStack fluidStack = FluidUtil.getFluidContained(inputStack); + fluidStack.amount = inputStack.stackSize; + return fluidStack; + } + + /** + * Gives the remainder~ + */ + @Override + public FluidStack transferStackThroughOutputFilter(FluidStack fluidStack) + { + int allowedAmount = 0; + for (FluidStack filterStack : requestList) + { + if (doStacksMatch(filterStack, fluidStack)) + { + allowedAmount = Math.min(filterStack.amount, fluidStack.amount); + break; + } + } + + if (allowedAmount <= 0) + { + return fluidStack; + } + + FluidStack copyStack = fluidStack.copy(); + int filledAmount = fluidHandler.fill(fluidStack, true); + copyStack.amount = fluidStack.amount - filledAmount; + + Iterator itr = requestList.iterator(); + while (itr.hasNext()) + { + FluidStack filterStack = itr.next(); + if (doStacksMatch(filterStack, copyStack)) + { + filterStack.amount -= filledAmount; + if (filterStack.amount <= 0) + { + itr.remove(); + } + } + } + + World world = accessedTile.getWorld(); + BlockPos pos = accessedTile.getPos(); + world.notifyBlockUpdate(pos, world.getBlockState(pos), world.getBlockState(pos), 3); + + return copyStack.amount <= 0 ? null : copyStack; + } + + @Override + public int transferThroughInputFilter(IFluidFilter outputFilter, int maxTransfer) + { + for (FluidStack filterFluidStack : requestList) + { + int allowedAmount = Math.min(filterFluidStack.amount, maxTransfer); + if (allowedAmount <= 0) + { + continue; + } + + FluidStack copyStack = filterFluidStack.copy(); + copyStack.amount = allowedAmount; + FluidStack drainStack = fluidHandler.drain(copyStack, false); + if (drainStack != null) //Can't pull this liquid out for some reason if it fails this check + { + FluidStack remainderStack = outputFilter.transferStackThroughOutputFilter(drainStack); + int drained = remainderStack == null ? copyStack.amount : (copyStack.amount - remainderStack.amount); + + if (drained > 0) + { + drainStack.amount = drained; + + fluidHandler.drain(drainStack, true); + maxTransfer -= drained; + } + + Iterator itr = requestList.iterator(); + while (itr.hasNext()) + { + FluidStack filterStack = itr.next(); + if (doStacksMatch(filterStack, copyStack)) + { + filterStack.amount -= drained; + if (filterStack.amount <= 0) + { + itr.remove(); + } + } + } + + World world = accessedTile.getWorld(); + BlockPos pos = accessedTile.getPos(); + world.notifyBlockUpdate(pos, world.getBlockState(pos), world.getBlockState(pos), 3); + + return maxTransfer; + } + } + + return 0; + } + + @Override + public boolean doesStackMatchFilter(FluidStack testStack) + { + for (FluidStack filterStack : requestList) + { + if (doStacksMatch(filterStack, testStack)) + { + return true; + } + } + + return false; + } + + @Override + public boolean doStacksMatch(FluidStack filterStack, FluidStack testStack) + { + return testStack != null && filterStack.getFluid() == testStack.getFluid(); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/routing/TestItemFilter.java b/src/main/java/WayofTime/bloodmagic/routing/TestItemFilter.java index f0905745..a132da0d 100644 --- a/src/main/java/WayofTime/bloodmagic/routing/TestItemFilter.java +++ b/src/main/java/WayofTime/bloodmagic/routing/TestItemFilter.java @@ -8,6 +8,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.items.IItemHandler; +import WayofTime.bloodmagic.util.GhostItemHelper; import WayofTime.bloodmagic.util.Utils; /** diff --git a/src/main/java/WayofTime/bloodmagic/tile/container/ContainerItemRoutingNode.java b/src/main/java/WayofTime/bloodmagic/tile/container/ContainerItemRoutingNode.java index c422d24c..84135207 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/container/ContainerItemRoutingNode.java +++ b/src/main/java/WayofTime/bloodmagic/tile/container/ContainerItemRoutingNode.java @@ -10,9 +10,8 @@ import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import WayofTime.bloodmagic.item.inventory.ItemInventory; -import WayofTime.bloodmagic.item.routing.IItemFilterProvider; +import WayofTime.bloodmagic.item.routing.IRoutingFilterProvider; import WayofTime.bloodmagic.tile.routing.TileFilteredRoutingNode; -import WayofTime.bloodmagic.util.GhostItemHelper; public class ContainerItemRoutingNode extends Container { @@ -96,10 +95,12 @@ public class ContainerItemRoutingNode extends Container return super.slotClick(slotId, dragType, clickTypeIn, player); } - ItemStack copyStack = heldStack.copy(); - GhostItemHelper.setItemGhostAmount(copyStack, 0); - copyStack.stackSize = 1; - slot.putStack(copyStack); + ItemStack filterStack = this.inventorySlots.get(0).getStack(); + if (filterStack != null && filterStack.getItem() instanceof IRoutingFilterProvider) + { + ItemStack copyStack = ((IRoutingFilterProvider) filterStack.getItem()).getContainedStackForItem(filterStack, heldStack); + slot.putStack(copyStack); + } } } } else @@ -143,7 +144,7 @@ public class ContainerItemRoutingNode extends Container } else if (index > 0) { // return null; - if (itemstack1.getItem() instanceof IItemFilterProvider) // Change to check item is a filter + if (itemstack1.getItem() instanceof IRoutingFilterProvider) // Change to check item is a filter { if (!this.mergeItemStack(itemstack1, 0, 1, false)) { @@ -195,7 +196,7 @@ public class ContainerItemRoutingNode extends Container @Override public boolean isItemValid(ItemStack itemStack) { - return itemStack.getItem() instanceof IItemFilterProvider; //TODO: Create a new Item that holds the filter. + return itemStack.getItem() instanceof IRoutingFilterProvider; //TODO: Create a new Item that holds the filter. } @Override diff --git a/src/main/java/WayofTime/bloodmagic/tile/routing/TileInputRoutingNode.java b/src/main/java/WayofTime/bloodmagic/tile/routing/TileInputRoutingNode.java index 3ac56f0b..69897264 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/routing/TileInputRoutingNode.java +++ b/src/main/java/WayofTime/bloodmagic/tile/routing/TileInputRoutingNode.java @@ -3,14 +3,19 @@ package WayofTime.bloodmagic.tile.routing; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.items.IItemHandler; +import WayofTime.bloodmagic.item.routing.IFluidFilterProvider; import WayofTime.bloodmagic.item.routing.IItemFilterProvider; import WayofTime.bloodmagic.routing.DefaultItemFilter; +import WayofTime.bloodmagic.routing.IFluidFilter; +import WayofTime.bloodmagic.routing.IInputFluidRoutingNode; import WayofTime.bloodmagic.routing.IInputItemRoutingNode; import WayofTime.bloodmagic.routing.IItemFilter; import WayofTime.bloodmagic.util.Utils; -public class TileInputRoutingNode extends TileFilteredRoutingNode implements IInputItemRoutingNode +public class TileInputRoutingNode extends TileFilteredRoutingNode implements IInputItemRoutingNode, IInputFluidRoutingNode { public TileInputRoutingNode() { @@ -34,11 +39,14 @@ public class TileInputRoutingNode extends TileFilteredRoutingNode implements IIn { ItemStack filterStack = this.getFilterStack(side); - if (filterStack == null || !(filterStack.getItem() instanceof IItemFilterProvider)) + if (filterStack == null) { IItemFilter filter = new DefaultItemFilter(); filter.initializeFilter(null, tile, handler, false); return filter; + } else if (!(filterStack.getItem() instanceof IItemFilterProvider)) + { + return null; } IItemFilterProvider filter = (IItemFilterProvider) filterStack.getItem(); @@ -48,4 +56,35 @@ public class TileInputRoutingNode extends TileFilteredRoutingNode implements IIn return null; } + + @Override + public boolean isFluidInput(EnumFacing side) + { + return true; + } + + @Override + public IFluidFilter getInputFluidFilterForSide(EnumFacing side) + { + TileEntity tile = worldObj.getTileEntity(pos.offset(side)); + if (tile != null && tile.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side)) + { + IFluidHandler handler = tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side); + ItemStack filterStack = this.getFilterStack(side); + if (filterStack == null || !(filterStack.getItem() instanceof IFluidFilterProvider)) + { + return null; + } + + return ((IFluidFilterProvider) filterStack.getItem()).getInputFluidFilter(filterStack, tile, handler); + } + + return null; + } + + @Override + public boolean isTankConnectedToSide(EnumFacing side) + { + return true; + } } diff --git a/src/main/java/WayofTime/bloodmagic/tile/routing/TileMasterRoutingNode.java b/src/main/java/WayofTime/bloodmagic/tile/routing/TileMasterRoutingNode.java index 0bebb147..944987c4 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/routing/TileMasterRoutingNode.java +++ b/src/main/java/WayofTime/bloodmagic/tile/routing/TileMasterRoutingNode.java @@ -17,9 +17,12 @@ import net.minecraft.world.World; import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.soul.EnumDemonWillType; import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler; +import WayofTime.bloodmagic.routing.IFluidFilter; +import WayofTime.bloodmagic.routing.IInputFluidRoutingNode; import WayofTime.bloodmagic.routing.IInputItemRoutingNode; import WayofTime.bloodmagic.routing.IItemFilter; import WayofTime.bloodmagic.routing.IMasterRoutingNode; +import WayofTime.bloodmagic.routing.IOutputFluidRoutingNode; import WayofTime.bloodmagic.routing.IOutputItemRoutingNode; import WayofTime.bloodmagic.routing.IRoutingNode; import WayofTime.bloodmagic.routing.NodeHelper; @@ -59,33 +62,65 @@ public class TileMasterRoutingNode extends TileInventory implements IMasterRouti } Map> outputMap = new TreeMap>(); + Map> outputFluidMap = new TreeMap>(); for (BlockPos outputPos : outputNodeList) { TileEntity outputTile = worldObj.getTileEntity(outputPos); - if (outputTile instanceof IOutputItemRoutingNode && this.isConnected(new LinkedList(), outputPos)) + if (this.isConnected(new LinkedList(), outputPos)) { - IOutputItemRoutingNode outputNode = (IOutputItemRoutingNode) outputTile; - - for (EnumFacing facing : EnumFacing.VALUES) + if (outputTile instanceof IOutputItemRoutingNode) { - if (!outputNode.isInventoryConnectedToSide(facing) || !outputNode.isOutput(facing)) - { - continue; - } + IOutputItemRoutingNode outputNode = (IOutputItemRoutingNode) outputTile; - IItemFilter filter = outputNode.getOutputFilterForSide(facing); - if (filter != null) + for (EnumFacing facing : EnumFacing.VALUES) { - int priority = outputNode.getPriority(facing); - if (outputMap.containsKey(priority)) + if (!outputNode.isInventoryConnectedToSide(facing) || !outputNode.isOutput(facing)) { - outputMap.get(priority).add(filter); - } else + continue; + } + + IItemFilter filter = outputNode.getOutputFilterForSide(facing); + if (filter != null) { - List filterList = new LinkedList(); - filterList.add(filter); - outputMap.put(priority, filterList); + int priority = outputNode.getPriority(facing); + if (outputMap.containsKey(priority)) + { + outputMap.get(priority).add(filter); + } else + { + List filterList = new LinkedList(); + filterList.add(filter); + outputMap.put(priority, filterList); + } + } + } + } + + if (outputTile instanceof IOutputFluidRoutingNode) + { + IOutputFluidRoutingNode outputNode = (IOutputFluidRoutingNode) outputTile; + + for (EnumFacing facing : EnumFacing.VALUES) + { + if (!outputNode.isTankConnectedToSide(facing) || !outputNode.isFluidOutput(facing)) + { + continue; + } + + IFluidFilter filter = outputNode.getOutputFluidFilterForSide(facing); + if (filter != null) + { + int priority = outputNode.getPriority(facing); + if (outputMap.containsKey(priority)) + { + outputFluidMap.get(priority).add(filter); + } else + { + List filterList = new LinkedList(); + filterList.add(filter); + outputFluidMap.put(priority, filterList); + } } } } @@ -93,33 +128,65 @@ public class TileMasterRoutingNode extends TileInventory implements IMasterRouti } Map> inputMap = new TreeMap>(); + Map> inputFluidMap = new TreeMap>(); for (BlockPos inputPos : inputNodeList) { TileEntity inputTile = worldObj.getTileEntity(inputPos); - if (inputTile instanceof IInputItemRoutingNode && this.isConnected(new LinkedList(), inputPos)) + if (this.isConnected(new LinkedList(), inputPos)) { - IInputItemRoutingNode inputNode = (IInputItemRoutingNode) inputTile; - - for (EnumFacing facing : EnumFacing.VALUES) + if (inputTile instanceof IInputItemRoutingNode) { - if (!inputNode.isInventoryConnectedToSide(facing) || !inputNode.isInput(facing)) - { - continue; - } + IInputItemRoutingNode inputNode = (IInputItemRoutingNode) inputTile; - IItemFilter filter = inputNode.getInputFilterForSide(facing); - if (filter != null) + for (EnumFacing facing : EnumFacing.VALUES) { - int priority = inputNode.getPriority(facing); - if (inputMap.containsKey(priority)) + if (!inputNode.isInventoryConnectedToSide(facing) || !inputNode.isInput(facing)) { - inputMap.get(priority).add(filter); - } else + continue; + } + + IItemFilter filter = inputNode.getInputFilterForSide(facing); + if (filter != null) { - List filterList = new LinkedList(); - filterList.add(filter); - inputMap.put(priority, filterList); + int priority = inputNode.getPriority(facing); + if (inputMap.containsKey(priority)) + { + inputMap.get(priority).add(filter); + } else + { + List filterList = new LinkedList(); + filterList.add(filter); + inputMap.put(priority, filterList); + } + } + } + } + + if (inputTile instanceof IInputFluidRoutingNode) + { + IInputFluidRoutingNode inputNode = (IInputFluidRoutingNode) inputTile; + + for (EnumFacing facing : EnumFacing.VALUES) + { + if (!inputNode.isTankConnectedToSide(facing) || !inputNode.isFluidInput(facing)) + { + continue; + } + + IFluidFilter filter = inputNode.getInputFluidFilterForSide(facing); + if (filter != null) + { + int priority = inputNode.getPriority(facing); + if (inputMap.containsKey(priority)) + { + inputFluidMap.get(priority).add(filter); + } else + { + List filterList = new LinkedList(); + filterList.add(filter); + inputFluidMap.put(priority, filterList); + } } } } @@ -127,6 +194,7 @@ public class TileMasterRoutingNode extends TileInventory implements IMasterRouti } int maxTransfer = this.getMaxTransferForDemonWill(WorldDemonWillHandler.getCurrentWill(worldObj, pos, EnumDemonWillType.DEFAULT)); + int maxFluidTransfer = 1000; for (Entry> outputEntry : outputMap.entrySet()) { @@ -147,6 +215,26 @@ public class TileMasterRoutingNode extends TileInventory implements IMasterRouti } } } + + for (Entry> outputEntry : outputFluidMap.entrySet()) + { + List outputList = outputEntry.getValue(); + for (IFluidFilter outputFilter : outputList) + { + for (Entry> inputEntry : inputFluidMap.entrySet()) + { + List inputList = inputEntry.getValue(); + for (IFluidFilter inputFilter : inputList) + { + maxFluidTransfer -= inputFilter.transferThroughInputFilter(outputFilter, maxFluidTransfer); + if (maxFluidTransfer <= 0) + { + return; + } + } + } + } + } } public int getMaxTransferForDemonWill(double will) diff --git a/src/main/java/WayofTime/bloodmagic/tile/routing/TileOutputRoutingNode.java b/src/main/java/WayofTime/bloodmagic/tile/routing/TileOutputRoutingNode.java index a538eebb..051041ff 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/routing/TileOutputRoutingNode.java +++ b/src/main/java/WayofTime/bloodmagic/tile/routing/TileOutputRoutingNode.java @@ -3,14 +3,19 @@ package WayofTime.bloodmagic.tile.routing; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.items.IItemHandler; +import WayofTime.bloodmagic.item.routing.IFluidFilterProvider; import WayofTime.bloodmagic.item.routing.IItemFilterProvider; import WayofTime.bloodmagic.routing.DefaultItemFilter; +import WayofTime.bloodmagic.routing.IFluidFilter; import WayofTime.bloodmagic.routing.IItemFilter; +import WayofTime.bloodmagic.routing.IOutputFluidRoutingNode; import WayofTime.bloodmagic.routing.IOutputItemRoutingNode; import WayofTime.bloodmagic.util.Utils; -public class TileOutputRoutingNode extends TileFilteredRoutingNode implements IOutputItemRoutingNode +public class TileOutputRoutingNode extends TileFilteredRoutingNode implements IOutputItemRoutingNode, IOutputFluidRoutingNode { public TileOutputRoutingNode() { @@ -34,11 +39,14 @@ public class TileOutputRoutingNode extends TileFilteredRoutingNode implements IO { ItemStack filterStack = this.getFilterStack(side); - if (filterStack == null || !(filterStack.getItem() instanceof IItemFilterProvider)) + if (filterStack == null) { IItemFilter filter = new DefaultItemFilter(); filter.initializeFilter(null, tile, handler, true); return filter; + } else if (!(filterStack.getItem() instanceof IItemFilterProvider)) + { + return null; } IItemFilterProvider filter = (IItemFilterProvider) filterStack.getItem(); @@ -48,4 +56,35 @@ public class TileOutputRoutingNode extends TileFilteredRoutingNode implements IO return null; } + + @Override + public boolean isFluidOutput(EnumFacing side) + { + return true; + } + + @Override + public IFluidFilter getOutputFluidFilterForSide(EnumFacing side) + { + TileEntity tile = worldObj.getTileEntity(pos.offset(side)); + if (tile != null && tile.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side)) + { + IFluidHandler handler = tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side); + ItemStack filterStack = this.getFilterStack(side); + if (filterStack == null || !(filterStack.getItem() instanceof IFluidFilterProvider)) + { + return null; + } + + return ((IFluidFilterProvider) filterStack.getItem()).getOutputFluidFilter(filterStack, tile, handler); + } + + return null; + } + + @Override + public boolean isTankConnectedToSide(EnumFacing side) + { + return true; + } } diff --git a/src/main/resources/assets/bloodmagic/blockstates/item/ItemFluidRouterFilter.json b/src/main/resources/assets/bloodmagic/blockstates/item/ItemFluidRouterFilter.json new file mode 100644 index 00000000..430e8f47 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/item/ItemFluidRouterFilter.json @@ -0,0 +1,16 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "builtin/generated", + "transform": "forge:default-item" + }, + "variants": { + "type": { + "exact": { + "textures": { + "layer0": "bloodmagic:items/FluidRouterFilterExact" + } + } + } + } +} diff --git a/src/main/resources/assets/bloodmagic/lang/en_US.lang b/src/main/resources/assets/bloodmagic/lang/en_US.lang index b44a5716..3f4412d1 100644 --- a/src/main/resources/assets/bloodmagic/lang/en_US.lang +++ b/src/main/resources/assets/bloodmagic/lang/en_US.lang @@ -182,6 +182,7 @@ item.BloodMagic.itemFilter.exact.name=Precise Item Filter item.BloodMagic.itemFilter.ignoreNBT.name=NBT Item Filter item.BloodMagic.itemFilter.modItems.name=Mod Item Filter item.BloodMagic.itemFilter.oreDict.name=Ore Dictionary Item Filter +item.BloodMagic.fluidFilter.exact.name=Fluid Filter item.BloodMagic.experienceTome.name=Tome of Peritia item.BloodMagic.sanguineBook.name=Inspectoris Scandalum @@ -532,6 +533,8 @@ tooltip.BloodMagic.itemFilter.ignoreNBT=Ignores the NBT of the filter tooltip.BloodMagic.itemFilter.modItems=Matches all items from the same mod tooltip.BloodMagic.itemFilter.oreDict=Used to filter through the Ore Dictionary +tooltip.BloodMagic.itemFilter.exact=Filters the fluid input/output + tooltip.BloodMagic.fluid.type=Fluid Contained tooltip.BloodMagic.fluid.amount=Amount tooltip.BloodMagic.fluid.capacity=Capacity diff --git a/src/main/resources/assets/bloodmagic/textures/items/FluidRouterFilterExact.png b/src/main/resources/assets/bloodmagic/textures/items/FluidRouterFilterExact.png new file mode 100644 index 0000000000000000000000000000000000000000..5de1391d03e220b1402b6f963cfaeafbda02d0e8 GIT binary patch literal 681 zcmV;a0#^NrP)WFU8GbZ8()Nlj2>E@cM*00Iq3L_t(I%cYawOOtUF z#y@AgvR7=*ww5e0gGEpp3Q0PQs3c6(ya*z3PWl)63%co|3p1!Ff)EA~1VRwqb=QS? z5u~~7B9Sz0nZJh4z1w=<(}iqpGAQc6_vUb(hv#|D`HHIYKjkXd6p_E`0T|^5FArT; z5s|Zf{i+CWUcQhsJ$))7vRARO7u-ECq>+G+>_9}@nop6*W-uxY?R0)Z84_19I2H!e zZ8CH45V?#+Z6JVYn%K6@ls|}NS;WGnc8p?hbOO2?cIfZwrsa4OcOKuzLGbVQQS0;b zG5((DTM8tqx~o7{iB3S*wLx`&FAIx2d>Z5R$ZhV`2S_BASz7sy;dXPPtzDxNyO@#; zdLzSnuC0UWswy7Dp783{P2y=7^8|Tx6o#kb)YUhzwzf)RdsqP}AxQ6}*x1}8xt&79 zMf~mvW1b-6uVt#sBibFK= zA?8U&(OJ1A|9_7+qMha$}1?`L4FezZa3lWbyCSqc2e8qvKHA) zmJ3b}+qO%<1z_<5XzjeH0HNjLJYR3fnExW-f P00000NkvXXu0mjf>b@?t literal 0 HcmV?d00001 From ae2ff03547809698c61b104b924ea634adbcf22b Mon Sep 17 00:00:00 2001 From: tartaric_acid <568248266@qq.com> Date: Fri, 16 Dec 2016 13:53:36 +0800 Subject: [PATCH 02/82] Update zh_CN file (#1003) * Update zh_CN file * Fix some mistakes (WIP) * Finish all fix * Fix some mistakes --- .../assets/bloodmagic/lang/zh_CN.lang | 308 +++++++++++------- 1 file changed, 196 insertions(+), 112 deletions(-) diff --git a/src/main/resources/assets/bloodmagic/lang/zh_CN.lang b/src/main/resources/assets/bloodmagic/lang/zh_CN.lang index 5de0fea6..d77a4201 100644 --- a/src/main/resources/assets/bloodmagic/lang/zh_CN.lang +++ b/src/main/resources/assets/bloodmagic/lang/zh_CN.lang @@ -84,6 +84,9 @@ item.BloodMagic.baseComponent.reagentBridge.name=影桥试剂 item.BloodMagic.baseComponent.reagentCompression.name=压挤试剂 item.BloodMagic.baseComponent.reagentSeverance.name=隔绝试剂 item.BloodMagic.baseComponent.reagentHolding.name=集持试剂 +item.BloodMagic.baseComponent.reagentClaw.name=爪之试剂 +item.BloodMagic.baseComponent.reagentBounce.name=弹性试剂 +item.BloodMagic.baseComponent.reagentFrost.name=霜之试剂 item.BloodMagic.baseComponent.reagentTeleposition.name=传送试剂 item.BloodMagic.baseComponent.reagentTransposition.name=移位试剂 @@ -110,7 +113,11 @@ item.BloodMagic.demonCrystal.crystalDestructive.name=破坏意志晶体 item.BloodMagic.demonCrystal.crystalVengeful.name=复仇意志晶体 item.BloodMagic.demonCrystal.crystalSteadfast.name=坚定意志晶体 -item.BloodMagic.monsterSoul.base.name=恶魔意志 +item.BloodMagic.monsterSoul.base.name=[原生]恶魔意志 +item.BloodMagic.monsterSoul.corrosive.name=[腐蚀]恶魔意志 +item.BloodMagic.monsterSoul.destructive.name=[破坏]恶魔意志 +item.BloodMagic.monsterSoul.vengeful.name=[复仇]恶魔意志 +item.BloodMagic.monsterSoul.steadfast.name=[坚定]恶魔意志 item.BloodMagic.sigil.air.name=风之印记 item.BloodMagic.sigil.bloodLight.name=血光印记 @@ -130,9 +137,11 @@ item.BloodMagic.sigil.phantomBridge.name=影桥印记 item.BloodMagic.sigil.whirlwind.name=旋风印记 item.BloodMagic.sigil.enderSeverance.name=绝影印记 item.BloodMagic.sigil.holding.name=集持印记 - item.BloodMagic.sigil.teleposition.name=传送印记 item.BloodMagic.sigil.transposition.name=移位印记 +item.BloodMagic.sigil.claw.name=爪之印记 +item.BloodMagic.sigil.bounce.name=弹性印记 +item.BloodMagic.sigil.frost.name=冰霜印记 item.BloodMagic.livingArmour.helmet.name=束灵头盔 item.BloodMagic.livingArmour.chest.name=束灵胸甲 @@ -178,7 +187,7 @@ item.BloodMagic.sanguineBook.name=指示之书 item.BloodMagic.livingPointUpgrade.draftAngelus.name=祷告之始 -item.BloodMagic.willGauge.name=恶魔意志灵域测量器 +item.BloodMagic.willGauge.name=灵域测量器 item.BloodMagic.potionFlask.name=药剂瓶 # Blocks @@ -244,103 +253,120 @@ tile.BloodMagic.path.obsidiantile.name=黑曜石瓦路面 tile.BloodMagic.dimensionalPortal.name=空间传送门 tile.BloodMagic.bloodTank.name=血液槽 -tile.BloodMagic.demonCrystal.default.name=恶魔意志晶簇 -tile.BloodMagic.demonCrystal.corrosive.name=腐蚀意志晶簇 -tile.BloodMagic.demonCrystal.destructive.name=破坏意志晶簇 -tile.BloodMagic.demonCrystal.vengeful.name=复仇意志晶簇 -tile.BloodMagic.demonCrystal.steadfast.name=坚定意志晶簇 +tile.BloodMagic.demonCrystal.default.name=[原生]意志晶簇 +tile.BloodMagic.demonCrystal.corrosive.name=[腐蚀]意志晶簇 +tile.BloodMagic.demonCrystal.destructive.name=[破坏]意志晶簇 +tile.BloodMagic.demonCrystal.vengeful.name=[复仇]意志晶簇 +tile.BloodMagic.demonCrystal.steadfast.name=[坚定]意志晶簇 -tile.BloodMagic.mimic.nohitbox.name=悬幽不透明的拟态方块 -tile.BloodMagic.mimic.solidopaque.name=不透明的拟态方块 -tile.BloodMagic.mimic.solidclear.name=清透的拟态方块 -tile.BloodMagic.mimic.solidlight.name=发光的拟态方块 -tile.BloodMagic.mimic.sentient.name=感知拟态方块 +tile.BloodMagic.mimic.nohitbox.name=[悬幽]拟态方块 +tile.BloodMagic.mimic.solidopaque.name=拟态方块 +tile.BloodMagic.mimic.solidclear.name=[清透]拟态方块 +tile.BloodMagic.mimic.solidlight.name=[光亮]拟态方块 +tile.BloodMagic.mimic.sentient.name=[感知]拟态方块 tile.BloodMagic.bricks1.brick1_raw.name=原生石砖 -tile.BloodMagic.bricks1.brick1_corrosive.name=腐蚀性石砖 -tile.BloodMagic.bricks1.brick1_destructive.name=破坏性石砖 -tile.BloodMagic.bricks1.brick1_vengeful.name=复仇性石砖 -tile.BloodMagic.bricks1.brick1_steadfast.name=坚定性石砖 +tile.BloodMagic.bricks1.brick1_corrosive.name=腐蚀石砖 +tile.BloodMagic.bricks1.brick1_destructive.name=破坏石砖 +tile.BloodMagic.bricks1.brick1_vengeful.name=复仇石砖 +tile.BloodMagic.bricks1.brick1_steadfast.name=坚定石砖 tile.BloodMagic.bricks2.smallbrick_raw.name=小原生石砖 -tile.BloodMagic.bricks2.smallbrick_corrosive.name=小腐蚀性石砖 -tile.BloodMagic.bricks2.smallbrick_destructive.name=小破坏性石砖 -tile.BloodMagic.bricks2.smallbrick_vengeful.name=小复仇性石砖 -tile.BloodMagic.bricks2.smallbrick_steadfast.name=小坚定性石砖 +tile.BloodMagic.bricks2.smallbrick_corrosive.name=小腐蚀石砖 +tile.BloodMagic.bricks2.smallbrick_destructive.name=小破坏石砖 +tile.BloodMagic.bricks2.smallbrick_vengeful.name=小复仇石砖 +tile.BloodMagic.bricks2.smallbrick_steadfast.name=小坚定石砖 tile.BloodMagic.bricks2.tile_raw.name=原生石瓦 -tile.BloodMagic.bricks2.tile_corrosive.name=腐蚀性石瓦 -tile.BloodMagic.bricks2.tile_destructive.name=破坏性石瓦 -tile.BloodMagic.bricks2.tile_vengeful.name=复仇性石瓦 -tile.BloodMagic.bricks2.tile_steadfast.name=坚定性石瓦 -tile.BloodMagic.bricks2.tilespecial_raw.name=Accented 原生石瓦 -tile.BloodMagic.bricks2.tilespecial_corrosive.name=Accented 腐蚀性石瓦 -tile.BloodMagic.bricks2.tilespecial_destructive.name=Accented 破坏性石瓦 -tile.BloodMagic.bricks2.tilespecial_vengeful.name=Accented 复仇性石瓦 -tile.BloodMagic.bricks2.tilespecial_steadfast.name=Accented 坚定性石瓦 +tile.BloodMagic.bricks2.tile_corrosive.name=腐蚀石瓦 +tile.BloodMagic.bricks2.tile_destructive.name=破坏石瓦 +tile.BloodMagic.bricks2.tile_vengeful.name=复仇石瓦 +tile.BloodMagic.bricks2.tile_steadfast.name=坚定石瓦 +tile.BloodMagic.bricks2.tilespecial_raw.name=二重原生石瓦 +tile.BloodMagic.bricks2.tilespecial_corrosive.name=二重腐蚀石瓦 +tile.BloodMagic.bricks2.tilespecial_destructive.name=二重破坏石瓦 +tile.BloodMagic.bricks2.tilespecial_vengeful.name=二重复仇石瓦 +tile.BloodMagic.bricks2.tilespecial_steadfast.name=二重坚定石瓦 -tile.BloodMagic.demonlight.raw.name=原生恶魔之眼 -tile.BloodMagic.demonlight.corrosive.name=腐蚀性恶魔之眼 -tile.BloodMagic.demonlight.destructive.name=破坏性恶魔之眼 -tile.BloodMagic.demonlight.vengeful.name=复仇性恶魔之眼 -tile.BloodMagic.demonlight.steadfast.name=坚定性恶魔之眼 +tile.BloodMagic.inversionpillar.raw.name=[原生]反转柱 +tile.BloodMagic.inversionpillar.corrosive.name=[腐蚀]反转柱 +tile.BloodMagic.inversionpillar.destructive.name=[破坏]反转柱 +tile.BloodMagic.inversionpillar.vengeful.name=[复仇]反转柱 +tile.BloodMagic.inversionpillar.steadfast.name=[坚定]反转柱 + +tile.BloodMagic.inversionpillarend.raw_bottom.name=[原生]反转柱基 +tile.BloodMagic.inversionpillarend.corrosive_bottom.name=[腐蚀]反转柱基 +tile.BloodMagic.inversionpillarend.destructive_bottom.name=[破坏]反转柱基 +tile.BloodMagic.inversionpillarend.vengeful_bottom.name=[复仇]反转柱基 +tile.BloodMagic.inversionpillarend.steadfast_bottom.name=[坚定]反转柱基 +tile.BloodMagic.inversionpillarend.raw_top.name=[原生]反转柱顶盖 +tile.BloodMagic.inversionpillarend.corrosive_top.name=[腐蚀]反转柱顶盖 +tile.BloodMagic.inversionpillarend.destructive_top.name=[破坏]反转柱顶盖 +tile.BloodMagic.inversionpillarend.vengeful_top.name=[复仇]反转柱顶盖 +tile.BloodMagic.inversionpillarend.steadfast_top.name=[坚定]反转柱顶盖 + +tile.BloodMagic.demonlight.raw.name=[原生]意志之瞳 +tile.BloodMagic.demonlight.corrosive.name=[腐蚀]意志之瞳 +tile.BloodMagic.demonlight.destructive.name=[破坏]意志之瞳 +tile.BloodMagic.demonlight.vengeful.name=[复仇]意志之瞳 +tile.BloodMagic.demonlight.steadfast.name=[坚定]意志之瞳 tile.BloodMagic.extras.stone_raw.name=原生石头 -tile.BloodMagic.extras.stone_corrosive.name=腐蚀性石头 -tile.BloodMagic.extras.stone_destructive.name=破坏性石头 -tile.BloodMagic.extras.stone_vengeful.name=复仇性石头 -tile.BloodMagic.extras.stone_steadfast.name=坚定性石头 +tile.BloodMagic.extras.stone_corrosive.name=腐蚀石头 +tile.BloodMagic.extras.stone_destructive.name=破坏石头 +tile.BloodMagic.extras.stone_vengeful.name=复仇石头 +tile.BloodMagic.extras.stone_steadfast.name=坚定石头 -tile.BloodMagic.extras.polished_raw.name=磨制原生石头 -tile.BloodMagic.extras.polished_corrosive.name=磨制腐蚀性石头 -tile.BloodMagic.extras.polished_destructive.name=磨制破坏性石头 -tile.BloodMagic.extras.polished_vengeful.name=磨制复仇性石头 -tile.BloodMagic.extras.polished_steadfast.name=磨制坚定性石头 +tile.BloodMagic.extras.polished_raw.name=磨制原生石 +tile.BloodMagic.extras.polished_corrosive.name=磨制腐蚀石 +tile.BloodMagic.extras.polished_destructive.name=磨制破坏石 +tile.BloodMagic.extras.polished_vengeful.name=磨制复仇石 +tile.BloodMagic.extras.polished_steadfast.name=磨制坚定石 -tile.BloodMagic.extras.metal_raw.name=原生恶魔合金 -tile.BloodMagic.extras.metal_corrosive.name=腐蚀性恶魔合金 -tile.BloodMagic.extras.metal_destructive.name=破坏性恶魔合金 -tile.BloodMagic.extras.metal_vengeful.name=复仇性恶魔合金 -tile.BloodMagic.extras.metal_steadfast.name=坚定性恶魔合金 +tile.BloodMagic.extras.metal_raw.name=原生意志合金 +tile.BloodMagic.extras.metal_corrosive.name=腐蚀意志合金 +tile.BloodMagic.extras.metal_destructive.name=破坏意志合金 +tile.BloodMagic.extras.metal_vengeful.name=复仇意志合金 +tile.BloodMagic.extras.metal_steadfast.name=坚定意志合金 tile.BloodMagic.pillar1.raw.name=原生石柱 -tile.BloodMagic.pillar1.corrosive.name=腐蚀性石柱 -tile.BloodMagic.pillar1.destructive.name=破坏性石柱 -tile.BloodMagic.pillar1.vengeful.name=复仇性石柱 -tile.BloodMagic.pillar1.steadfast.name=坚定性石柱 +tile.BloodMagic.pillar1.corrosive.name=腐蚀石柱 +tile.BloodMagic.pillar1.destructive.name=破坏石柱 +tile.BloodMagic.pillar1.vengeful.name=复仇石柱 +tile.BloodMagic.pillar1.steadfast.name=坚定石柱 -tile.BloodMagic.pillar2.raw.name=Accented 原生石柱 -tile.BloodMagic.pillar2.corrosive.name=Accented 腐蚀性石柱 -tile.BloodMagic.pillar2.destructive.name=Accented 破坏性石柱 -tile.BloodMagic.pillar2.vengeful.name=Accented 复仇性石柱 -tile.BloodMagic.pillar2.steadfast.name=Accented 坚定性石柱 +tile.BloodMagic.pillar2.raw.name=二重原生石柱 +tile.BloodMagic.pillar2.corrosive.name=二重腐蚀石柱 +tile.BloodMagic.pillar2.destructive.name=二重破坏石柱 +tile.BloodMagic.pillar2.vengeful.name=二重复仇石柱 +tile.BloodMagic.pillar2.steadfast.name=二重坚定石柱 -tile.BloodMagic.pillarCap1.raw.name=原生石柱顶 -tile.BloodMagic.pillarCap1.corrosive.name=腐蚀性石柱顶 -tile.BloodMagic.pillarCap2.destructive.name=破坏性石柱顶 -tile.BloodMagic.pillarCap2.vengeful.name=复仇性石柱顶 -tile.BloodMagic.pillarCap3.steadfast.name=坚定性石柱顶 +tile.BloodMagic.pillarCap1.raw.name=原生顶柱 +tile.BloodMagic.pillarCap1.corrosive.name=腐蚀顶柱 +tile.BloodMagic.pillarCap2.destructive.name=破坏顶柱 +tile.BloodMagic.pillarCap2.vengeful.name=复仇顶柱 +tile.BloodMagic.pillarCap3.steadfast.name=坚定顶柱 tile.BloodMagic.wall1.brick_raw.name=原生石砖墙 -tile.BloodMagic.wall1.brick_corrosive.name=腐蚀性石砖墙 -tile.BloodMagic.wall1.brick_destructive.name=破坏性石砖墙 -tile.BloodMagic.wall1.brick_vengeful.name=复仇性石砖墙 -tile.BloodMagic.wall1.brick_steadfast.name=坚定性石砖墙 -tile.BloodMagic.wall1.smallbrick_raw.name=原生小石砖墙 -tile.BloodMagic.wall1.smallbrick_corrosive.name=腐蚀性小石砖墙 -tile.BloodMagic.wall1.smallbrick_destructive.name=破坏性小石砖墙 -tile.BloodMagic.wall1.smallbrick_vengeful.name=复仇性小石砖墙 -tile.BloodMagic.wall1.smallbrick_steadfast.name=坚定性小石砖墙 +tile.BloodMagic.wall1.brick_corrosive.name=腐蚀石砖墙 +tile.BloodMagic.wall1.brick_destructive.name=破坏石砖墙 +tile.BloodMagic.wall1.brick_vengeful.name=复仇石砖墙 +tile.BloodMagic.wall1.brick_steadfast.name=坚定石砖墙 +tile.BloodMagic.wall1.smallbrick_raw.name=小原生石砖墙 +tile.BloodMagic.wall1.smallbrick_corrosive.name=小腐蚀石砖墙 +tile.BloodMagic.wall1.smallbrick_destructive.name=小破坏石砖墙 +tile.BloodMagic.wall1.smallbrick_vengeful.name=小复仇石砖墙 +tile.BloodMagic.wall1.smallbrick_steadfast.name=小坚定石砖墙 tile.BloodMagic.wall1.large_raw.name=原生石墙 -tile.BloodMagic.wall1.large_corrosive.name=腐蚀性石墙 -tile.BloodMagic.wall1.large_destructive.name=破坏性石墙 -tile.BloodMagic.wall1.large_vengeful.name=复仇性石墙 -tile.BloodMagic.wall1.large_steadfast.name=坚定性石墙 +tile.BloodMagic.wall1.large_corrosive.name=腐蚀石墙 +tile.BloodMagic.wall1.large_destructive.name=破坏石墙 +tile.BloodMagic.wall1.large_vengeful.name=复仇石墙 +tile.BloodMagic.wall1.large_steadfast.name=坚定石墙 tile.BloodMagic.stairs1.raw.name=原生石楼梯 -tile.BloodMagic.stairs1.corrosive.name=腐蚀性石楼梯 -tile.BloodMagic.stairs2.destructive.name=破坏性石楼梯 -tile.BloodMagic.stairs2.vengeful.name=复仇性石楼梯 -tile.BloodMagic.stairs3.steadfast.name=坚定性石楼梯 +tile.BloodMagic.stairs1.corrosive.name=腐蚀石楼梯 +tile.BloodMagic.stairs2.destructive.name=破坏石楼梯 +tile.BloodMagic.stairs2.vengeful.name=复仇石楼梯 +tile.BloodMagic.stairs3.steadfast.name=坚定石楼梯 # Fluids fluid.lifeEssence=生命源质 @@ -353,6 +379,7 @@ tooltip.BloodMagic.orb.owner=来源: %s tooltip.BloodMagic.currentOwner=当前所有者: %s tooltip.BloodMagic.currentTier=当前层级: %d tooltip.BloodMagic.config.disabled=于配置信息中禁用 +tooltip.BloodMagic.tier=层级 %d tooltip.BloodMagic.activated=激活 tooltip.BloodMagic.deactivated=停用 @@ -366,6 +393,7 @@ tooltip.BloodMagic.sigil.divination.currentAltarTier=当前层级: %d tooltip.BloodMagic.sigil.divination.currentEssence=当前源质: %d LP tooltip.BloodMagic.sigil.divination.currentAltarCapacity=当前容量: %d LP tooltip.BloodMagic.sigil.divination.currentTranquility=当前静谧: %d +tooltip.BloodMagic.sigil.divination.currentInversion=当前反转: %d tooltip.BloodMagic.sigil.divination.currentBonus=当前效益: +%d%% tooltip.BloodMagic.sigil.water.desc=&o无限水源? tooltip.BloodMagic.sigil.lava.desc=&o噢好烫! 不要吃 @@ -373,7 +401,7 @@ tooltip.BloodMagic.sigil.void.desc=&o胜过速易洁®! tooltip.BloodMagic.sigil.greenGrove.desc=&o绿色环保无污染 tooltip.BloodMagic.sigil.magnetism.desc=&o我现在非常具有吸引力 tooltip.BloodMagic.sigil.suppression.desc=&o比念力移动更好... -tooltip.BloodMagic.sigil.haste.desc=&o42剂咖啡因后... +tooltip.BloodMagic.sigil.haste.desc=&o42继咖啡因后... tooltip.BloodMagic.sigil.fastMiner.desc=&o继续挖, 继续挖... tooltip.BloodMagic.sigil.elementalAffinity.desc=&o落入焰中的鱼儿! tooltip.BloodMagic.sigil.seer.desc=&o当看到的一切还不足够 @@ -383,7 +411,7 @@ tooltip.BloodMagic.sigil.seer.currentAltarConsumptionRate=消耗率: %d LP tooltip.BloodMagic.sigil.seer.currentAltarTier=当前层级: %d tooltip.BloodMagic.sigil.seer.currentEssence=当前源质: %d LP tooltip.BloodMagic.sigil.seer.currentAltarCapacity=当前容量: %d LP -tooltip.BloodMagic.sigil.seer.currentCharge=当前耗能: %d +tooltip.BloodMagic.sigil.seer.currentCharge=当前储能: %d tooltip.BloodMagic.sigil.seer.currentTranquility=当前静谧: %d tooltip.BloodMagic.sigil.seer.currentBonus=当前效益: +%d%% tooltip.BloodMagic.sigil.phantomBridge.desc=&o御气于青空之上... @@ -408,7 +436,7 @@ tooltip.BloodMagic.slate.desc=在祭坛中将石头转化 tooltip.BloodMagic.inscriber.desc=在墙面上的文字... tooltip.BloodMagic.pack.selfSacrifice.desc=相当不舒适的背包... - +tooltip.BloodMagic.pack.sacrifice.desc=描述 tooltip.BloodMagic.pack.stored=储存: %d LP tooltip.BloodMagic.activationCrystal.weak=激活低等仪式 @@ -468,22 +496,29 @@ tooltip.BloodMagic.livingArmour.upgrade.sprintAttack=冲撞击打 tooltip.BloodMagic.livingArmour.upgrade.criticalStrike=精准击打 tooltip.BloodMagic.livingArmour.upgrade.elytra=鞘翅 tooltip.BloodMagic.livingArmour.upgrade.nightSight=夜行猛技 +tooltip.BloodMagic.livingArmour.upgrade.repair=修复 tooltip.BloodMagic.livingArmour.upgrade.slowness=疲瘸之腿 tooltip.BloodMagic.livingArmour.upgrade.crippledArm=残废手臂 +tooltip.BloodMagic.livingArmour.upgrade.slippery=如履寒冰 +tooltip.BloodMagic.livingArmour.upgrade.battleHunger=饿殍遍野 +tooltip.BloodMagic.livingArmour.upgrade.quenched=淬火 +tooltip.BloodMagic.livingArmour.upgrade.meleeDecrease=钝拙之刃 +tooltip.BloodMagic.livingArmour.upgrade.digSlowdown=弱化挖掘 +tooltip.BloodMagic.livingArmour.upgrade.stormTrooper=风暴骑兵 +tooltip.BloodMagic.livingArmour.upgrade.slowHeal=愈合延缓 tooltip.BloodMagic.livingArmour.upgrade.level=%s (等级 %d) - tooltip.BloodMagic.livingArmour.upgrade.points=&6强化点数: %s / %s tooltip.BloodMagic.livingArmour.extraExtraInfo=&9-按住 shift + M 查看进展信息- tooltip.BloodMagic.will=意志质量: %1$,.2f tooltip.BloodMagic.sentientSword.desc=以恶魔意志唤起其最大潜能. -tooltip.BloodMagic.soulGem.petty=用于存储微量意志的晶石 tooltip.BloodMagic.sentientAxe.desc=以恶魔意志唤起其最大潜能. tooltip.BloodMagic.sentientPickaxe.desc=以恶魔意志唤起其最大潜能. tooltip.BloodMagic.sentientShovel.desc=以恶魔意志唤起其最大潜能. +tooltip.BloodMagic.soulGem.petty=用于存储微量意志的晶石 tooltip.BloodMagic.soulGem.lesser=用于存储少量意志的晶石 tooltip.BloodMagic.soulGem.common=用于存储更多意志的晶石 tooltip.BloodMagic.soulGem.greater=用于存储大量意志的晶石 @@ -570,24 +605,51 @@ ritual.BloodMagic.fellingRitual=伐林仪式 ritual.BloodMagic.pumpRitual=虹吸圣曲 ritual.BloodMagic.altarBuilderRitual=祭坛集结号 ritual.BloodMagic.portalRitual=折域之门 +ritual.BloodMagic.downgradeRitual=沉重灵魂的忏悔 +ritual.BloodMagic.waterRitual.info=通过主仪式石生成一个水源方块 +ritual.BloodMagic.lavaRitual.info=通过主仪式石生成一个岩浆源方块 +ritual.BloodMagic.lavaRitual.default.info=(原生) 降低生成岩浆的LP消耗,并将岩浆导入连接的容器内 +ritual.BloodMagic.lavaRitual.corrosive.info=(腐蚀) 范围内免疫火焰伤害的实体将受到伤害 +ritual.BloodMagic.lavaRitual.destructive.info=(破坏) 岩浆的放置范围根据意志的总量增加 +ritual.BloodMagic.lavaRitual.vengeful.info=(复仇) 给予范围内实体缓燃引线效果(上天) +ritual.BloodMagic.lavaRitual.steadfast.info=(坚定) 给予范围内的玩家防火效果 -ritual.BloodMagic.waterRitual.info=通过主仪式石生成一个水源方块. -ritual.BloodMagic.lavaRitual.info=通过主仪式石生成一个熔岩源方块. -ritual.BloodMagic.greenGroveRitual.info=在其范围内种植农作物. -ritual.BloodMagic.jumpRitual.info=使实体跃向高空. -ritual.BloodMagic.wellOfSufferingRitual.info=攻击其伤害范围内的生物, 并将所获LP储入邻近的血之祭坛. -ritual.BloodMagic.featheredKnifeRitual.info=扣除其范围内的玩家生命值, 并将所获LP储入邻近的血之祭坛. -ritual.BloodMagic.regenerationRitual.info=治疗其范围内失去生命值的实体. -ritual.BloodMagic.harvestRitual.info=收割其范围内的植物, 产物掉落于地上. -ritual.BloodMagic.magneticRitual.info=将地底的矿石传送至其放置区域. -ritual.BloodMagic.crushingRitual.info=破坏其挖掘范围内的方块, 并将掉落物放置于所连接的箱子. -ritual.BloodMagic.crushingRitual.destructive.info=(破坏性) 强力的破坏方块: 所有方块破坏受 时运III 影响. -ritual.BloodMagic.crushingRitual.steadfast.info=(坚定性) 以 精准采集 获取被破坏方块. 适用情况下覆盖时运. -ritual.BloodMagic.crushingRitual.corrosive.info=(腐蚀性) 所有被破坏方块将以基础切削油的形式处理. 适用情况下覆盖精准采集. -ritual.BloodMagic.greenGroveRitual.corrosive.info=(腐蚀性) 范围内的实体将被附近的植物攻击, 吸食他们的生命. -ritual.BloodMagic.greenGroveRitual.default.info=(原生) 加快所有的仪式运作速度, 取决于灵域中全部意志. -ritual.BloodMagic.greenGroveRitual.steadfast.info=(坚定性) 在水合范围内, 种子会被再次种植且方块会被润湿. +ritual.BloodMagic.greenGroveRitual.info=在其范围内种植农作物 +ritual.BloodMagic.jumpRitual.info=使实体跃向高空 +ritual.BloodMagic.wellOfSufferingRitual.info=攻击其伤害范围内的生物, 并将所获LP储入邻近的血之祭坛 +ritual.BloodMagic.featheredKnifeRitual.info=扣除其范围内的玩家生命值, 并将所获LP储入邻近的血之祭坛 +ritual.BloodMagic.regenerationRitual.info=治疗其范围内失去生命值的实体 +ritual.BloodMagic.regenerationRitual.default.info=(原生) +ritual.BloodMagic.regenerationRitual.corrosive.info=(腐蚀) 从非玩家的实体身上汲取鲜血以治疗玩家 +ritual.BloodMagic.regenerationRitual.destructive.info=(破坏) +ritual.BloodMagic.regenerationRitual.vengeful.info=(复仇) +ritual.BloodMagic.regenerationRitual.steadfast.info=(坚定) +ritual.BloodMagic.harvestRitual.info=收割其范围内的植物, 产物掉落于地上 +ritual.BloodMagic.magneticRitual.info=将地底的矿石传送至其放置区域 +ritual.BloodMagic.crushingRitual.info=破坏其挖掘范围内的方块, 并将掉落物放置于所连接的箱子 +ritual.BloodMagic.crushingRitual.destructive.info=(破坏) 强力的破坏方块: 所有方块破坏受 时运III 影响 +ritual.BloodMagic.crushingRitual.steadfast.info=(坚定) 以 精准采集 获取被破坏方块. 适用情况下覆盖时运 +ritual.BloodMagic.crushingRitual.corrosive.info=(腐蚀) 所有被破坏方块将以基础切削油的形式处理. 适用情况下覆盖精准采集 +ritual.BloodMagic.crushingRitual.vengeful.info=(复仇) 压缩库存内的物品(如将煤炭压缩成煤炭块),目前每次操作仅执行一次压缩 +ritual.BloodMagic.crushingRitual.default.info=(原生) 根据意志总量增加仪式的运行速度 +ritual.BloodMagic.greenGroveRitual.corrosive.info=(腐蚀) 范围内的实体将被附近的植物攻击, 蚕食掉他们的生命 +ritual.BloodMagic.greenGroveRitual.default.info=(原生) 根据灵域内意志的总量加快所有的仪式运作速度 +ritual.BloodMagic.greenGroveRitual.vengeful.info=(复仇) 增加生长刻成功的速率 +ritual.BloodMagic.greenGroveRitual.steadfast.info=(坚定) 在水合范围内, 种子会被再次种植且方块会被润湿 +ritual.BloodMagic.greenGroveRitual.destructive.info=(破坏) 促进作物生长的范围根据意志的总量增加 +ritual.BloodMagic.featheredKnifeRitual.default.info=(原生) 根据灵域内意志的总量增加仪式的运行速度 +ritual.BloodMagic.featheredKnifeRitual.destructive.info=(破坏) 根据意志总量增加仪式的产出的LP +ritual.BloodMagic.featheredKnifeRitual.vengeful.info=(复仇) 将牺牲的最小生命值设为10%%.覆盖(坚定)的效果 +ritual.BloodMagic.featheredKnifeRitual.corrosive.info=(腐蚀) 使用玩家的“熏香”来提高收益 +ritual.BloodMagic.featheredKnifeRitual.steadfast.info=(坚定) 将牺牲的最小生命值设为30%%到70%% +ritual.BloodMagic.speedRitual.default.info=(原生) 根据意志总量增加仪式产生的移动速度 +ritual.BloodMagic.speedRitual.vengeful.info=(复仇) 防止玩家与成年动物被运输,如果与(破坏)配合,则运输玩家 +ritual.BloodMagic.speedRitual.destructive.info=(破坏) 防止玩家与幼年动物被运输,如果与(复仇)配合,则运输玩家 +ritual.BloodMagic.animalGrowthRitual.vengeful.info=(复仇) 减少成年动物繁殖的间隔时间 +ritual.BloodMagic.animalGrowthRitual.steadfast.info=(坚定) 使用箱子内的物品饲养区域内的动物 +ritual.BloodMagic.animalGrowthRitual.default.info=(原生) 根据灵域内意志的总量增加仪式的运行速度 +ritual.BloodMagic.animalGrowthRitual.destructive.info=(破坏)让最近没有繁殖后代的成年动物冲向怪物自爆 ritual.BloodMagic.fullStomachRitual.info=从连接的箱子中获取食物, 来补充玩家的饥饿值. ritual.BloodMagic.interdictionRitual.info=使其范围内的所有生物推离于主仪式石. @@ -596,8 +658,6 @@ ritual.BloodMagic.speedRitual.info=将其范围内的玩家以仪式方向抛射 ritual.BloodMagic.suppressionRitual.info=抑制其范围内的液体 - 停用仪式时恢复. ritual.BloodMagic.expulsionRitual.info=驱逐其范围内, 非激活者或主仪式石上方箱子中无绑定血宝珠的玩家, 离开该区域. ritual.BloodMagic.zephyrRitual.info=拾取其范围内的掉落物, 并放入所连接的箱子. - - ritual.BloodMagic.animalGrowthRitual.info=加快其范围内的幼年动物的生长速度. ritual.BloodMagic.forsakenSoulRitual.info=对其伤害范围内的生物造成伤害, 当生物死亡时, 其晶体范围内的恶魔晶簇将生长. ritual.BloodMagic.crystalHarvestRitual.info=破坏范围内的恶魔意志晶簇, 掉落物丢于晶簇顶部. @@ -609,17 +669,21 @@ ritual.BloodMagic.portalRitual.info=创建一个传送门网络, 以激活者及 ritual.BloodMagic.meteorRitual.info=消耗其物品范围内的一个物品, 从天空中召唤一个充满资源的流星, 直接坠向仪式. ritual.BloodMagic.waterRitual.waterRange.info=(水源) 仪式放置水源方块的区域. -ritual.BloodMagic.lavaRitual.lavaRange.info=(熔岩) 仪式放置熔岩方块的区域. -ritual.BloodMagic.lavaRitual.fireFuse.info=(复仇性) 在这个区域内的实体将遭受缓燃引线效果. +ritual.BloodMagic.lavaRitual.lavaRange.info=(岩浆) 仪式放置岩浆方块的区域. +ritual.BloodMagic.lavaRitual.lavaTank.info=(原生) 仪式将岩浆导入其中的储罐 +ritual.BloodMagic.lavaRitual.fireFuse.info=(复仇) 在这个区域内的实体将遭受缓燃引线效果 +ritual.BloodMagic.lavaRitual.fireResist.info=(坚定) 玩家在此区域内可获得防火buff +ritual.BloodMagic.lavaRitual.fireDamage.info=(腐蚀) 该区域内免疫火焰伤害的实体将受到伤害,伤害量与意志的量相关 ritual.BloodMagic.greenGroveRitual.growing.info=(生长) 仪式加快植物生长的区域. -ritual.BloodMagic.greenGroveRitual.leech.info=(腐蚀性) 区域内实体的生命将流失于滋养附近的农作物. -ritual.BloodMagic.greenGroveRitual.hydrate.info=(坚定性) 区域内的方块将被润湿为耕地, 且区域内的种子将被就近种植. +ritual.BloodMagic.greenGroveRitual.leech.info=(腐蚀) 区域内实体的生命将流失于滋养附近的农作物. +ritual.BloodMagic.greenGroveRitual.hydrate.info=(坚定) 区域内的方块将被润湿为耕地, 且区域内的种子将被就近种植. ritual.BloodMagic.jumpRitual.jumpRange.info=(跳跃) 在这个区域内的实体将跃向高空. ritual.BloodMagic.wellOfSufferingRitual.altar.info=(祭坛) 规定仪式检测血之祭坛的区域. 该项修改为添加或撤销一个坐标. ritual.BloodMagic.wellOfSufferingRitual.damage.info=(伤害) 规定仪式伤害生物的区域. 该区域内所有生物(除了玩家)将持续受到伤害. ritual.BloodMagic.featheredKnifeRitual.altar.info=(祭坛) 规定仪式检测血之祭坛的区域. 该项修改为添加或撤销一个坐标. ritual.BloodMagic.featheredKnifeRitual.damage.info=(伤害) 规定仪式伤害玩家的区域. 该区域内的玩家将持续受到伤害直至设定的生命值下限. ritual.BloodMagic.regenerationRitual.heal.info=(治愈) 该区域内的生物将获得 生命恢复buff. +ritual.BloodMagic.regenerationRitual.vampire.info=(血蛭) 汲取区域内怪物的生命来治愈玩家 ritual.BloodMagic.harvestRitual.harvestRange.info=(收割) 该区域内的植物将被收割. ritual.BloodMagic.magneticRitual.placementRange.info=(放置) 仪式将把获取的矿石放置于该区域内. ritual.BloodMagic.crushingRitual.crushingRange.info=(挖掘) 该区域的方块将被破坏. @@ -634,6 +698,7 @@ ritual.BloodMagic.expulsionRitual.expulsionRange.info=(驱逐) ritual.BloodMagic.zephyrRitual.zephyrRange.info=(拾取) 该区域内的物品将被拾取储入所连接箱子. ritual.BloodMagic.zephyrRitual.chest.info=(箱子) 箱子位置, 仪式将把拾取的物品放入其中. ritual.BloodMagic.animalGrowthRitual.growing.info=(成长) 该区域内的动物将成长得更快. +ritual.BloodMagic.animalGrowthRitual.chest.info=(箱子) 用于存放喂养动物物品的箱子 ritual.BloodMagic.forsakenSoulRitual.crystal.info=(晶体) 当有生物因仪式死亡时, 该区域内的晶簇生长速度将加快. ritual.BloodMagic.forsakenSoulRitual.damage.info=(伤害) 该区域内的生物将缓慢的收到伤害, 当死亡时晶簇将生长. ritual.BloodMagic.crystalHarvestRitual.crystal.info=(晶体) 晶簇将被破坏成仅留单晶的晶簇, 被破坏的晶体将掉落于世界. @@ -644,6 +709,24 @@ ritual.BloodMagic.fellingRitual.fellingRange.info=(砍伐) 仪式将搜寻原木 ritual.BloodMagic.fellingRitual.chest.info=(箱子) 箱子位置, 仪式将把掉落物放入其中. ritual.BloodMagic.pumpRitual.pumpRange.info=(引水) 仪式于世界中获取液体的区域. +ritual.BloodMagic.downgradeRitual.dialogue.bow.1=那么,少年,你渴望力量么...? +ritual.BloodMagic.downgradeRitual.dialogue.bow.100=当然了,没有不需要代价的交易...我也不会轻易地给予你力量,而不求任何回报 +ritual.BloodMagic.downgradeRitual.dialogue.bow.300=那么就献祭自身,抛弃自我,放弃那百步穿杨的精准。记住,箭矢将不再是你获胜的凭依 +ritual.BloodMagic.downgradeRitual.dialogue.bow.500=我会帮你解开盔甲的封印以作回报,这样它们就能进一步地强化下去...而你所要做的就是在这仪式前叩拜 +ritual.BloodMagic.downgradeRitual.dialogue.quenched.1=嚯嚯嚯...你好,凡人,从你眼神中我看到了渴望,对力量的渴望 +ritual.BloodMagic.downgradeRitual.dialogue.quenched.100=谨记!当杯子装满时,想要装下更多就必须先将她倒空 +ritual.BloodMagic.downgradeRitual.dialogue.quenched.300=那么,我们做个交易吧:忘却那杜康的美味,我将给予你变得更有潜力的机会。相信我,你完全不需要考虑这么做是否值得... +ritual.BloodMagic.downgradeRitual.dialogue.quenched.500=跪下吧!凡人。饮下这杯酒。这或许会是你此生最后一次 +ritual.BloodMagic.downgradeRitual.dialogue.dulledBlade.1=嗯...你究竟想要得到什么? +ritual.BloodMagic.downgradeRitual.dialogue.dulledBlade.100=想要超脱凡人的力量?我无法满足你的要求——不过,我这里有另外一项交易... +ritual.BloodMagic.downgradeRitual.dialogue.dulledBlade.300=我可以帮你改良你的盔甲,使它可以获得更多的强化机会。但是,作为交换,你将失去自身战斗的能力 +ritual.BloodMagic.downgradeRitual.dialogue.dulledBlade.500=如果愿意,就别再挥动手中的剑刃,它将永远失去昨日的荣耀 +ritual.BloodMagic.downgradeRitual.dialogue.dulledBlade.700=那么,你的选择是什么,是跪在仪式前,还是继续挥动手中的剑刃? +ritual.BloodMagic.downgradeRitual.dialogue.slowHeal.1=当心你脚下的大地,凡人! +ritual.BloodMagic.downgradeRitual.dialogue.slowHeal.100=和我的伙伴不同,我只有残酷的交易。如果你想成为魔法师,那么就用你的身体来交换 +ritual.BloodMagic.downgradeRitual.dialogue.slowHeal.300=伤口总会愈合。如果答应了我的条件,那么你身上的伤口将更难愈合,直到战斗的烙印或作无形的瘟疫 +ritual.BloodMagic.downgradeRitual.dialogue.slowHeal.500=好了,赶紧考虑吧。你或许会后悔,因为哪怕你的杯子空了,它也很难在被填满... + # Chat chat.BloodMagic.altarMaker.setTier=层级设置: %d chat.BloodMagic.altarMaker.building=铺设一个 %d 层祭坛 @@ -677,7 +760,7 @@ chat.BloodMagic.altar.comp.notair=一个实心方块 chat.BloodMagic.altar.nextTier=下一层级的血之祭坛缺失 %s 在 %s. chat.BloodMagic.mimic.potionSet=药剂陷阱已设置. -chat.BloodMagic.mimic.potionRemove=药剂陷阱已无效. +chat.BloodMagic.mimic.potionRemove=药剂陷阱已移除. chat.BloodMagic.mimic.potionInterval.up=药剂时间间隔已增加至: %d 刻. chat.BloodMagic.mimic.potionInterval.down=药剂时间间隔已减少至: %d 刻. chat.BloodMagic.mimic.detectRadius.up=玩家检测半径已增加至: %d 格方块. @@ -691,8 +774,8 @@ entity.BloodMagic.Mimic.name=拟态 # sekrit - - +secret.BloodMagic.bread.bloody=&r&c血腥面包 +secret.BloodMagic.bread.bloody.desc=唯有 &o可怕 &r&7紧急情况 # Commands commands.error.arg.invalid=无效参数 @@ -724,9 +807,9 @@ commands.network.fill.success=成功填充 %s 的灵魂网络. commands.network.cap.help=填充指定玩家的灵魂网络至其所持有的最高阶气血宝珠容量的最大值. commands.network.cap.success=成功填满 %s 的灵魂网络. -commands.bind.usage=/bloodmagic bind [是(true)|否(false)] [玩家] +commands.bind.usage=/bind <玩家> commands.bind.help=用于设置/解除对手持物品的绑定情况. -commands.bind.success=绑定成功 +commands.bind.success=物品成功绑定! commands.bind.remove.success=解除绑定成功 commands.orb.usage=/bloodmagic orb [设置(set)|查看(get)] <玩家> [等级] @@ -767,6 +850,7 @@ jei.BloodMagic.recipe.binding=炼金矩阵 (绑定) jei.BloodMagic.recipe.alchemyArrayCrafting=炼金矩阵 jei.BloodMagic.recipe.soulForge=狱火熔炉 jei.BloodMagic.recipe.alchemyTable=炼金术桌 +jei.BloodMagic.recipe.armourDowngrade=祭品 (仪式:沉重灵魂的忏悔) jei.BloodMagic.recipe.requiredLP=LP: %d jei.BloodMagic.recipe.requiredTier=层级: %d jei.BloodMagic.recipe.consumptionRate=消耗率: %d LP/t From 082d2b8f4d5ad1635f22ec4af143e3333e285b13 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Mon, 19 Dec 2016 17:32:03 -0800 Subject: [PATCH 03/82] Sigils should draw LP from the bound network, not the user --- .../WayofTime/bloodmagic/api/impl/ItemSigilToggleable.java | 4 ++-- .../WayofTime/bloodmagic/api/util/helper/NetworkHelper.java | 2 ++ .../WayofTime/bloodmagic/command/sub/SubCommandNetwork.java | 2 +- .../java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java | 2 +- .../java/WayofTime/bloodmagic/item/sigil/ItemSigilBase.java | 1 - .../WayofTime/bloodmagic/item/sigil/ItemSigilBloodLight.java | 4 ++-- .../bloodmagic/item/sigil/ItemSigilCompression.java | 1 - .../bloodmagic/item/sigil/ItemSigilEnderSeverance.java | 1 - .../WayofTime/bloodmagic/item/sigil/ItemSigilGreenGrove.java | 2 -- .../java/WayofTime/bloodmagic/item/sigil/ItemSigilHaste.java | 1 - .../java/WayofTime/bloodmagic/item/sigil/ItemSigilLava.java | 5 ++--- .../java/WayofTime/bloodmagic/item/sigil/ItemSigilSeer.java | 1 - .../bloodmagic/item/sigil/ItemSigilTransposition.java | 2 +- .../java/WayofTime/bloodmagic/item/sigil/ItemSigilVoid.java | 5 ++--- .../java/WayofTime/bloodmagic/item/sigil/ItemSigilWater.java | 2 +- .../WayofTime/bloodmagic/item/sigil/ItemSigilWhirlwind.java | 3 --- 16 files changed, 14 insertions(+), 24 deletions(-) diff --git a/src/main/java/WayofTime/bloodmagic/api/impl/ItemSigilToggleable.java b/src/main/java/WayofTime/bloodmagic/api/impl/ItemSigilToggleable.java index a577b9f4..c1c73dba 100644 --- a/src/main/java/WayofTime/bloodmagic/api/impl/ItemSigilToggleable.java +++ b/src/main/java/WayofTime/bloodmagic/api/impl/ItemSigilToggleable.java @@ -64,7 +64,7 @@ public class ItemSigilToggleable extends ItemSigil implements IActivatable @Override public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { - return (NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, getLpUsed()) && onSigilUse(stack, player, world, pos, side, hitX, hitY, hitZ)) ? EnumActionResult.SUCCESS : EnumActionResult.FAIL; + return (NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage(player, getLpUsed()) && onSigilUse(stack, player, world, pos, side, hitX, hitY, hitZ)) ? EnumActionResult.SUCCESS : EnumActionResult.FAIL; } public boolean onSigilUse(ItemStack itemStack, EntityPlayer player, World world, BlockPos blockPos, EnumFacing side, float hitX, float hitY, float hitZ) @@ -79,7 +79,7 @@ public class ItemSigilToggleable extends ItemSigil implements IActivatable { if (entityIn.ticksExisted % 100 == 0) { - if (!NetworkHelper.getSoulNetwork((EntityPlayerMP) entityIn).syphonAndDamage((EntityPlayer) entityIn, getLpUsed())) + if (!NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage((EntityPlayer) entityIn, getLpUsed())) { setActivatedState(stack, false); } diff --git a/src/main/java/WayofTime/bloodmagic/api/util/helper/NetworkHelper.java b/src/main/java/WayofTime/bloodmagic/api/util/helper/NetworkHelper.java index 8a8540b5..d2841ae3 100644 --- a/src/main/java/WayofTime/bloodmagic/api/util/helper/NetworkHelper.java +++ b/src/main/java/WayofTime/bloodmagic/api/util/helper/NetworkHelper.java @@ -110,7 +110,9 @@ public class NetworkHelper * - Amount of LP to syphon * * @return - Whether the action should be performed. + * @deprecated Use {@link #getSoulNetwork(EntityPlayer)} and {@link SoulNetwork#syphonAndDamage(EntityPlayer, int)} */ + @Deprecated public static boolean syphonAndDamage(SoulNetwork soulNetwork, EntityPlayer user, int toSyphon) { diff --git a/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandNetwork.java b/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandNetwork.java index 0cee7b82..579309b9 100644 --- a/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandNetwork.java +++ b/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandNetwork.java @@ -86,7 +86,7 @@ public class SubCommandNetwork extends SubCommandBase if (Utils.isInteger(args[2])) { int amount = Integer.parseInt(args[2]); - NetworkHelper.syphonAndDamage(NetworkHelper.getSoulNetwork(player), player, amount); + NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, amount); displaySuccessString(sender, "commands.network.syphon.success", amount, player.getDisplayName().getFormattedText()); } else { diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java index 7908a6b8..e4f9d1e8 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java @@ -53,7 +53,7 @@ public class ItemSigilAir extends ItemSigilBase implements ISentientSwordEffectP if (!world.isRemote) { if (!player.capabilities.isCreativeMode) - this.setUnusable(stack, !NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, getLpUsed())); + this.setUnusable(stack, !NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage(player, getLpUsed())); if (!unusable) player.fallDistance = 0; diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBase.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBase.java index 99c4ea50..d99159ec 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBase.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBase.java @@ -6,7 +6,6 @@ import java.util.List; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.impl.ItemSigil; -import WayofTime.bloodmagic.api.util.helper.NBTHelper; import WayofTime.bloodmagic.api.util.helper.PlayerHelper; import com.google.common.base.Strings; import lombok.Getter; diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBloodLight.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBloodLight.java index fcfe44dd..bd271c71 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBloodLight.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBloodLight.java @@ -49,7 +49,7 @@ public class ItemSigilBloodLight extends ItemSigilBase { world.setBlockState(blockPos, ModBlocks.BLOOD_LIGHT.getDefaultState()); if (!world.isRemote) - NetworkHelper.syphonAndDamage(NetworkHelper.getSoulNetwork(player), player, getLpUsed()); + NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage(player, getLpUsed()); resetCooldown(stack); player.swingArm(hand); return super.onItemRightClick(stack, world, player, hand); @@ -59,7 +59,7 @@ public class ItemSigilBloodLight extends ItemSigilBase if (!world.isRemote) { world.spawnEntityInWorld(new EntityBloodLight(world, player)); - NetworkHelper.syphonAndDamage(NetworkHelper.getSoulNetwork(player), player, getLpUsed()); + NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage(player, getLpUsed()); } resetCooldown(stack); } diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilCompression.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilCompression.java index 6cc0eeb8..8da86084 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilCompression.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilCompression.java @@ -1,6 +1,5 @@ package WayofTime.bloodmagic.item.sigil; -import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.compress.CompressionRegistry; import WayofTime.bloodmagic.api.util.helper.PlayerHelper; import net.minecraft.entity.item.EntityItem; diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilEnderSeverance.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilEnderSeverance.java index 20a869f2..cad5d7f9 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilEnderSeverance.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilEnderSeverance.java @@ -9,7 +9,6 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.potion.PotionEffect; import net.minecraft.world.World; -import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.registry.ModPotions; public class ItemSigilEnderSeverance extends ItemSigilToggleableBase diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilGreenGrove.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilGreenGrove.java index 38631787..a42dd360 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilGreenGrove.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilGreenGrove.java @@ -6,8 +6,6 @@ import net.minecraft.block.IGrowable; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHaste.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHaste.java index 3eaf082a..4ad3fb96 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHaste.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHaste.java @@ -1,6 +1,5 @@ package WayofTime.bloodmagic.item.sigil; -import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.util.helper.PlayerHelper; import WayofTime.bloodmagic.registry.ModPotions; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilLava.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilLava.java index 51846c0f..bc7d5084 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilLava.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilLava.java @@ -18,7 +18,6 @@ import net.minecraftforge.event.ForgeEventFactory; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidHandler; -import WayofTime.bloodmagic.api.Constants; public class ItemSigilLava extends ItemSigilBase { @@ -64,7 +63,7 @@ public class ItemSigilLava extends ItemSigilBase return super.onItemRightClick(stack, world, player, hand); } - if (this.canPlaceLava(world, blockpos1) && NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, getLpUsed()) && this.tryPlaceLava(world, blockpos1)) + if (this.canPlaceLava(world, blockpos1) && NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage(player, getLpUsed()) && this.tryPlaceLava(world, blockpos1)) { return super.onItemRightClick(stack, world, player, hand); } @@ -93,7 +92,7 @@ public class ItemSigilLava extends ItemSigilBase FluidStack fluid = new FluidStack(FluidRegistry.LAVA, 1000); int amount = ((IFluidHandler) tile).fill(side, fluid, false); - if (amount > 0 && NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, getLpUsed())) + if (amount > 0 && NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage(player, getLpUsed())) { ((IFluidHandler) tile).fill(side, fluid, true); return EnumActionResult.SUCCESS; diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilSeer.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilSeer.java index 818a440b..3646a8eb 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilSeer.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilSeer.java @@ -15,7 +15,6 @@ import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.world.World; -import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.altar.IBloodAltar; import WayofTime.bloodmagic.api.iface.IAltarReader; import WayofTime.bloodmagic.api.util.helper.NetworkHelper; diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTransposition.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTransposition.java index 04ae9a4b..0d04d1a1 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTransposition.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTransposition.java @@ -105,7 +105,7 @@ public class ItemSigilTransposition extends ItemSigilBase stack.getTagCompound().setByte(Constants.NBT.CONTAINED_BLOCK_META, metadata); stack.getTagCompound().setTag(Constants.NBT.CONTAINED_TILE_ENTITY, tileNBTTag); - NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, cost); + NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage(player, cost); world.removeTileEntity(blockPos); world.setBlockToAir(blockPos); diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilVoid.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilVoid.java index 80d18508..41f74c63 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilVoid.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilVoid.java @@ -16,7 +16,6 @@ import net.minecraftforge.event.ForgeEventFactory; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidBlock; import net.minecraftforge.fluids.IFluidHandler; -import WayofTime.bloodmagic.api.Constants; public class ItemSigilVoid extends ItemSigilBase { @@ -99,7 +98,7 @@ public class ItemSigilVoid extends ItemSigilBase { FluidStack amount = ((IFluidHandler) tile).drain(side, 1000, false); - if (amount != null && amount.amount > 0 && NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, getLpUsed())) + if (amount != null && amount.amount > 0 && NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage(player, getLpUsed())) { ((IFluidHandler) tile).drain(side, 1000, true); return EnumActionResult.SUCCESS; @@ -115,7 +114,7 @@ public class ItemSigilVoid extends ItemSigilBase return EnumActionResult.FAIL; } - if (world.getBlockState(newPos).getBlock() instanceof IFluidBlock && NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, getLpUsed())) + if (world.getBlockState(newPos).getBlock() instanceof IFluidBlock && NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage(player, getLpUsed())) { world.setBlockToAir(newPos); return EnumActionResult.SUCCESS; diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWater.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWater.java index 9a0bb270..a31b58ed 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWater.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWater.java @@ -61,7 +61,7 @@ public class ItemSigilWater extends ItemSigilBase if (!player.canPlayerEdit(blockpos1, rayTrace.sideHit, stack)) return super.onItemRightClick(stack, world, player, hand); - if (this.canPlaceWater(world, blockpos1) && NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, getLpUsed()) && this.tryPlaceWater(world, blockpos1)) + if (this.canPlaceWater(world, blockpos1) && NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage(player, getLpUsed()) && this.tryPlaceWater(world, blockpos1)) return super.onItemRightClick(stack, world, player, hand); } } diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWhirlwind.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWhirlwind.java index ea2b230b..9b051e70 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWhirlwind.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWhirlwind.java @@ -1,13 +1,10 @@ package WayofTime.bloodmagic.item.sigil; -import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.util.helper.PlayerHelper; import WayofTime.bloodmagic.registry.ModPotions; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.potion.PotionEffect; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumActionResult; import net.minecraft.world.World; public class ItemSigilWhirlwind extends ItemSigilToggleableBase From afa3d1ef91518a61f91c79e6e9f6161d9318a5ae Mon Sep 17 00:00:00 2001 From: WayofTime Date: Tue, 20 Dec 2016 19:28:16 -0500 Subject: [PATCH 04/82] Made it so the book does not give the filling recipe when the Blood Orb recipe is queried. --- changelog.txt | 1 + .../java/WayofTime/bloodmagic/util/helper/RecipeHelper.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/changelog.txt b/changelog.txt index ef5c9955..eb4846c7 100644 --- a/changelog.txt +++ b/changelog.txt @@ -2,6 +2,7 @@ Version 2.1.1-70 ------------------------------------------------------ - Added Fluid routing to the routing nodes - this is done by using the Fluid Filter and placing a fluid container as the filter. +- Made it so the book does not give the filling recipe when the Blood Orb recipe is queried. ------------------------------------------------------ Version 2.1.0-69 diff --git a/src/main/java/WayofTime/bloodmagic/util/helper/RecipeHelper.java b/src/main/java/WayofTime/bloodmagic/util/helper/RecipeHelper.java index 6f8d121c..11a0c56b 100644 --- a/src/main/java/WayofTime/bloodmagic/util/helper/RecipeHelper.java +++ b/src/main/java/WayofTime/bloodmagic/util/helper/RecipeHelper.java @@ -33,7 +33,7 @@ public class RecipeHelper { for (AltarRecipeRegistry.AltarRecipe recipe : AltarRecipeRegistry.getRecipes().values()) { - if (recipe != null) + if (recipe != null && !recipe.isFillable()) { ItemStack resultStack = recipe.getOutput(); if (resultStack != null && resultStack.getItem() != null) From f08307180cc1f91490bc3c13bea10cc477af9125 Mon Sep 17 00:00:00 2001 From: WayofTime Date: Tue, 20 Dec 2016 19:42:39 -0500 Subject: [PATCH 05/82] Added a null check for the Will getter for the Aura incase the WillChunk somehow does not generate. (#1011) --- changelog.txt | 1 + .../bloodmagic/demonAura/WorldDemonWillHandler.java | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/changelog.txt b/changelog.txt index eb4846c7..20db1aa4 100644 --- a/changelog.txt +++ b/changelog.txt @@ -3,6 +3,7 @@ Version 2.1.1-70 ------------------------------------------------------ - Added Fluid routing to the routing nodes - this is done by using the Fluid Filter and placing a fluid container as the filter. - Made it so the book does not give the filling recipe when the Blood Orb recipe is queried. +- Added a null check for the Will getter for the Aura incase the WillChunk somehow does not generate. ------------------------------------------------------ Version 2.1.0-69 diff --git a/src/main/java/WayofTime/bloodmagic/demonAura/WorldDemonWillHandler.java b/src/main/java/WayofTime/bloodmagic/demonAura/WorldDemonWillHandler.java index b5a1a6bf..2195f2a1 100644 --- a/src/main/java/WayofTime/bloodmagic/demonAura/WorldDemonWillHandler.java +++ b/src/main/java/WayofTime/bloodmagic/demonAura/WorldDemonWillHandler.java @@ -174,6 +174,11 @@ public class WorldDemonWillHandler { WillChunk willChunk = getWillChunk(world, pos); + if (willChunk == null) + { + return 0; + } + DemonWillHolder currentWill = willChunk.getCurrentWill(); return currentWill.getWill(type); } From a5449d3abc28b898d867bfdfe321641a9a591e5a Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Fri, 30 Dec 2016 16:37:19 -0800 Subject: [PATCH 06/82] Blacklist sentient spectres from WoS and Sacrifice (#1015) A config refresh is required for this to take effect. Needs mentioning in changelog. --- src/main/java/WayofTime/bloodmagic/ConfigHandler.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/WayofTime/bloodmagic/ConfigHandler.java b/src/main/java/WayofTime/bloodmagic/ConfigHandler.java index 810ddcae..373f6a31 100644 --- a/src/main/java/WayofTime/bloodmagic/ConfigHandler.java +++ b/src/main/java/WayofTime/bloodmagic/ConfigHandler.java @@ -198,11 +198,11 @@ public class ConfigHandler category = "Well of Suffering Blacklist"; config.addCustomCategoryComment(category, "Entity blacklisting from WoS"); - wellOfSufferingBlacklist = Arrays.asList(config.getStringList("wellOfSufferingBlacklist", category, new String[] { "EntityArmorStand" }, "Use the class name of the Entity to blacklist it from usage.\nIE: EntityWolf, EntityWitch, etc")); + wellOfSufferingBlacklist = Arrays.asList(config.getStringList("wellOfSufferingBlacklist", category, new String[] { "EntityArmorStand", "EntitySentientSpecter" }, "Use the class name of the Entity to blacklist it from usage.\nIE: EntityWolf, EntityWitch, etc")); category = "Blood Altar Sacrificial Values"; config.addCustomCategoryComment(category, "Entity Sacrificial Value Settings"); - entitySacrificeValuesList = config.getStringList("entitySacrificeLP:HPValues", category, new String[] { "EntityVillager;100", "EntitySlime;15", "EntityEnderman;10", "EntityCow;100", "EntityChicken;100", "EntityHorse;100", "EntitySheep;100", "EntityWolf;100", "EntityOcelot;100", "EntityPig;100", "EntityRabbit;100", "EntityArmorStand;0" }, "Used to edit the amount of LP gained per HP sacrificed for the given entity.\nSetting an entity to 0 effectively blacklists it.\nIf a mod modifies an entity via the API, it will take precedence over this config.\nSyntax: EntityClassName;LPPerHP"); + entitySacrificeValuesList = config.getStringList("entitySacrificeLP:HPValues", category, new String[] { "EntityVillager;100", "EntitySlime;15", "EntityEnderman;10", "EntityCow;100", "EntityChicken;100", "EntityHorse;100", "EntitySheep;100", "EntityWolf;100", "EntityOcelot;100", "EntityPig;100", "EntityRabbit;100", "EntityArmorStand;0", "EntitySentientSpecter;0" }, "Used to edit the amount of LP gained per HP sacrificed for the given entity.\nSetting an entity to 0 effectively blacklists it.\nIf a mod modifies an entity via the API, it will take precedence over this config.\nSyntax: EntityClassName;LPPerHP"); buildEntitySacrificeValues(); category = "Potions"; From 5c1b8b17bd81263cb55cec5a2a304a3166679abb Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Fri, 30 Dec 2016 17:10:36 -0800 Subject: [PATCH 07/82] Fix meteor config not generating new defaults --- .../meteor/MeteorConfigHandler.java | 58 +++++++++++++------ 1 file changed, 40 insertions(+), 18 deletions(-) diff --git a/src/main/java/WayofTime/bloodmagic/meteor/MeteorConfigHandler.java b/src/main/java/WayofTime/bloodmagic/meteor/MeteorConfigHandler.java index 0ef06ef9..31166dfa 100644 --- a/src/main/java/WayofTime/bloodmagic/meteor/MeteorConfigHandler.java +++ b/src/main/java/WayofTime/bloodmagic/meteor/MeteorConfigHandler.java @@ -2,6 +2,9 @@ package WayofTime.bloodmagic.meteor; import WayofTime.bloodmagic.ConfigHandler; import WayofTime.bloodmagic.gson.Serializers; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import org.apache.commons.io.FilenameUtils; @@ -9,14 +12,13 @@ import org.apache.commons.io.filefilter.FileFilterUtils; import org.apache.commons.lang3.tuple.Pair; import java.io.*; -import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; public class MeteorConfigHandler { - private static final Map DEFAULT_METEORS = new HashMap(); + private static final Map DEFAULT_METEORS = Maps.newHashMap(); private static File meteorDir; @@ -51,7 +53,7 @@ public class MeteorConfigHandler if (meteorFiles == null) return; - List> meteors = new ArrayList>(); + List> meteors = Lists.newArrayList(); // Filter names so we can compare to defaults for (File meteorFile : meteorFiles) @@ -62,22 +64,29 @@ public class MeteorConfigHandler if (checkNewVersion && ConfigHandler.getConfig().getBoolean("resyncOnVersionChange", "Meteors", true, "Should the default meteors be regenerated if the mod has updated them")) { - // Check defaults for new version + Set discoveredDefaults = Sets.newHashSet(); + + // Check existing defaults for new version for (Pair meteor : meteors) { Meteor defaultMeteor = DEFAULT_METEORS.get(meteor.getLeft()); - if (defaultMeteor != null && defaultMeteor.version > meteor.getRight().version) + if (defaultMeteor != null) { - String json = Serializers.GSON.toJson(defaultMeteor); - File meteorFile = new File(meteorDir, meteor.getLeft() + ".json"); - new PrintWriter(meteorFile).close(); // Clear the file - FileWriter fileWriter = new FileWriter(meteorFile); - fileWriter.write(json); // Write the new contents - fileWriter.close(); - - meteors.set(meteors.indexOf(meteor), Pair.of(meteor.getLeft(), defaultMeteor)); + discoveredDefaults.add(meteor.getLeft()); + if (defaultMeteor.version > meteor.getRight().version) { + writeMeteor(meteor.getLeft(), defaultMeteor); + meteors.set(meteors.indexOf(meteor), Pair.of(meteor.getLeft(), defaultMeteor)); + } } } + + // Generate new defaults + for (Map.Entry entry : DEFAULT_METEORS.entrySet()) { + if (discoveredDefaults.contains(entry.getKey())) + continue; + + writeMeteor(entry.getKey(), entry.getValue()); + } } // Finally, register all of our meteors @@ -93,10 +102,10 @@ public class MeteorConfigHandler private static List> getDefaultMeteors() { - List> holders = new ArrayList>(); + List> holders = Lists.newArrayList(); // Iron - List ironMeteorList = new ArrayList(); + List ironMeteorList = Lists.newArrayList(); ironMeteorList.add(new MeteorComponent(400, "oreIron")); ironMeteorList.add(new MeteorComponent(200, "oreCopper")); ironMeteorList.add(new MeteorComponent(140, "oreTin")); @@ -108,7 +117,7 @@ public class MeteorConfigHandler Meteor ironMeteor = new Meteor(new ItemStack(Blocks.IRON_BLOCK), ironMeteorList, 15, 5, 1000); ironMeteor.setVersion(2); // Gold - List goldMeteorList = new ArrayList(); + List goldMeteorList = Lists.newArrayList(); goldMeteorList.add(new MeteorComponent(200, "oreIron")); goldMeteorList.add(new MeteorComponent(100, "oreCopper")); goldMeteorList.add(new MeteorComponent(60, "oreTin")); @@ -121,7 +130,7 @@ public class MeteorConfigHandler Meteor goldMeteor = new Meteor(new ItemStack(Blocks.GOLD_BLOCK), goldMeteorList, 18, 6, 1000); goldMeteor.setVersion(3); - List diamondMeteorList = new ArrayList(); + List diamondMeteorList = Lists.newArrayList(); diamondMeteorList.add(new MeteorComponent(50, "oreIron")); diamondMeteorList.add(new MeteorComponent(100, "oreGold")); diamondMeteorList.add(new MeteorComponent(10, "oreLapis")); @@ -143,4 +152,17 @@ public class MeteorConfigHandler DEFAULT_METEORS.put("DiamondMeteor", diamondMeteor); return holders; } + + private static void writeMeteor(String name, Meteor meteor) { + try { + String json = Serializers.GSON.toJson(meteor); + File meteorFile = new File(meteorDir, name + ".json"); + new PrintWriter(meteorFile).close(); // Clear the file + FileWriter fileWriter = new FileWriter(meteorFile); + fileWriter.write(json); // Write the new contents + fileWriter.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } } From fffed0e34c4acd59af2b21fd3488a1f56aa2a19b Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Fri, 30 Dec 2016 17:11:00 -0800 Subject: [PATCH 08/82] Gold meteor only needs it's version set once --- .../java/WayofTime/bloodmagic/meteor/MeteorConfigHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/WayofTime/bloodmagic/meteor/MeteorConfigHandler.java b/src/main/java/WayofTime/bloodmagic/meteor/MeteorConfigHandler.java index 31166dfa..487df85f 100644 --- a/src/main/java/WayofTime/bloodmagic/meteor/MeteorConfigHandler.java +++ b/src/main/java/WayofTime/bloodmagic/meteor/MeteorConfigHandler.java @@ -140,7 +140,7 @@ public class MeteorConfigHandler diamondMeteorList.add(new MeteorComponent(400, "minecraft:diamond_block")); Meteor diamondMeteor = new Meteor(new ItemStack(Blocks.DIAMOND_BLOCK), diamondMeteorList, 10, 3, 1000); - goldMeteor.setVersion(3); + diamondMeteor.setVersion(3); holders.add(Pair.of("IronMeteor", ironMeteor)); DEFAULT_METEORS.put("IronMeteor", ironMeteor); From 09007c58b22314e648d177b5146ee817a78b7300 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Fri, 30 Dec 2016 17:12:38 -0800 Subject: [PATCH 09/82] Change meteor config NPE with EnderCore to a useful error message --- .../WayofTime/bloodmagic/meteor/MeteorConfigHandler.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/WayofTime/bloodmagic/meteor/MeteorConfigHandler.java b/src/main/java/WayofTime/bloodmagic/meteor/MeteorConfigHandler.java index 487df85f..dbe77473 100644 --- a/src/main/java/WayofTime/bloodmagic/meteor/MeteorConfigHandler.java +++ b/src/main/java/WayofTime/bloodmagic/meteor/MeteorConfigHandler.java @@ -1,5 +1,6 @@ package WayofTime.bloodmagic.meteor; +import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.ConfigHandler; import WayofTime.bloodmagic.gson.Serializers; import com.google.common.collect.Lists; @@ -30,6 +31,11 @@ public class MeteorConfigHandler public static void handleMeteors(boolean checkNewVersion) { + if (meteorDir == null) { + BloodMagic.instance.getLogger().error("Attempted to handle meteor config but the folder has not been initialized. Was this run too early?"); + return; + } + // Clear the meteors so that reloading in-game can be done MeteorRegistry.meteorMap.clear(); List> defaultMeteors = getDefaultMeteors(); From c7f2b7d29c0982bfea68a967af8ed1c97233c0f2 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Fri, 30 Dec 2016 17:34:43 -0800 Subject: [PATCH 10/82] Add current charge to Waila tooltip (#1013) --- .../compat/waila/provider/DataProviderBloodAltar.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderBloodAltar.java b/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderBloodAltar.java index 2638641b..867d648a 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderBloodAltar.java +++ b/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderBloodAltar.java @@ -88,12 +88,14 @@ public class DataProviderBloodAltar implements IWailaDataProvider if (hasSeer) { + int charge = accessor.getNBTData().getCompoundTag("bloodAltar").getInteger(Constants.NBT.ALTAR_TOTAL_CHARGE); int progress = accessor.getNBTData().getCompoundTag("bloodAltar").getInteger(Constants.NBT.ALTAR_PROGRESS); int liquidRequired = accessor.getNBTData().getCompoundTag("bloodAltar").getInteger(Constants.NBT.ALTAR_LIQUID_REQ); int craftAmount = 1; if (accessor.getNBTData().getTagList("Items", 10).get(0).getId() == 10) craftAmount = ((NBTTagCompound)accessor.getNBTData().getTagList("Items", 10).get(0)).getByte("Count"); currenttip.add(TextHelper.localizeEffect("tooltip.BloodMagic.sigil.seer.currentAltarProgress.percent", (int) (((double) progress / (double) liquidRequired * 100) / craftAmount) + "%")); + currenttip.add(TextHelper.localizeEffect("tooltip.BloodMagic.sigil.seer.currentCharge", charge)); } } } else From b6eae2fc67759f98c20e7cace4a0ce791408e222 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Fri, 30 Dec 2016 17:43:02 -0800 Subject: [PATCH 11/82] Fix Expulsion whitelist (#1010) --- src/main/java/WayofTime/bloodmagic/ritual/RitualExpulsion.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualExpulsion.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualExpulsion.java index 694cc40a..4cfdece0 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualExpulsion.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualExpulsion.java @@ -76,7 +76,7 @@ public class RitualExpulsion extends Ritual { IBindable bindable = (IBindable) itemStack.getItem(); if (!Strings.isNullOrEmpty(bindable.getOwnerName(itemStack)) && !allowedNames.contains(bindable.getOwnerName(itemStack))) - allowedNames.add(bindable.getOwnerName(itemStack)); + allowedNames.add(bindable.getOwnerUUID(itemStack)); } } } From 4c614df15e2f386781669a304736f34f6453c2b6 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Fri, 30 Dec 2016 18:27:16 -0800 Subject: [PATCH 12/82] Empty flasks can now be refilled (#976) Right click a water source (any block that uses Material.WATER, same as vanilla potions) to refill it. This removes all potion effects. The model will display without the fluid inside as a visual indicator. --- .../{potion => }/item/ItemPotionFlask.java | 77 +++++++++++++++---- .../bloodmagic/proxy/ClientProxy.java | 3 + .../bloodmagic/registry/ModItems.java | 2 +- .../blockstates/item/ItemPotionFlask.json | 9 ++- 4 files changed, 75 insertions(+), 16 deletions(-) rename src/main/java/WayofTime/bloodmagic/{potion => }/item/ItemPotionFlask.java (53%) diff --git a/src/main/java/WayofTime/bloodmagic/potion/item/ItemPotionFlask.java b/src/main/java/WayofTime/bloodmagic/item/ItemPotionFlask.java similarity index 53% rename from src/main/java/WayofTime/bloodmagic/potion/item/ItemPotionFlask.java rename to src/main/java/WayofTime/bloodmagic/item/ItemPotionFlask.java index d96ae079..d0bf609b 100644 --- a/src/main/java/WayofTime/bloodmagic/potion/item/ItemPotionFlask.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemPotionFlask.java @@ -1,31 +1,36 @@ -package WayofTime.bloodmagic.potion.item; +package WayofTime.bloodmagic.item; import java.util.ArrayList; import java.util.List; +import WayofTime.bloodmagic.api.util.helper.NBTHelper; +import WayofTime.bloodmagic.client.IMeshProvider; import WayofTime.bloodmagic.util.helper.TextHelper; +import com.google.common.collect.Lists; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.ItemMeshDefinition; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; import net.minecraft.item.EnumAction; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.potion.PotionEffect; import net.minecraft.potion.PotionUtils; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumHand; +import net.minecraft.util.*; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import org.apache.commons.lang3.tuple.ImmutablePair; -import org.apache.commons.lang3.tuple.Pair; - import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.client.IVariantProvider; -public class ItemPotionFlask extends Item implements IVariantProvider +import javax.annotation.Nullable; + +public class ItemPotionFlask extends Item implements IMeshProvider { public ItemPotionFlask() { @@ -44,6 +49,8 @@ public class ItemPotionFlask extends Item implements IVariantProvider int remainingUses = stack.getMaxDamage() - stack.getItemDamage(); if (remainingUses <= 0) { + NBTHelper.checkNBT(stack); + stack.getTagCompound().setBoolean("empty", true); return stack; } @@ -75,12 +82,33 @@ public class ItemPotionFlask extends Item implements IVariantProvider return EnumAction.DRINK; } + @Override + public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + int remainingUses = stack.getMaxDamage() - stack.getItemDamage(); + if (remainingUses > 0 || !stack.hasTagCompound() || !stack.getTagCompound().hasKey("empty")) + return EnumActionResult.PASS; + + RayTraceResult trace = rayTrace(world, player, true); + + if (trace.typeOfHit == RayTraceResult.Type.BLOCK && world.getBlockState(trace.getBlockPos()).getMaterial() == Material.WATER) + { + world.playSound(player, player.posX, player.posY, player.posZ, SoundEvents.ITEM_BOTTLE_FILL, SoundCategory.NEUTRAL, 1.0F, 1.0F); + player.setHeldItem(hand, new ItemStack(this)); + return EnumActionResult.SUCCESS; + } + + return super.onItemUse(stack, player, world, pos, hand, facing, hitX, hitY, hitZ); + } + @Override public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand) { int remainingUses = stack.getMaxDamage() - stack.getItemDamage(); if (remainingUses <= 0) { + NBTHelper.checkNBT(stack); + stack.getTagCompound().setBoolean("empty", true); return new ActionResult(EnumActionResult.PASS, stack); } player.setActiveHand(hand); @@ -106,11 +134,34 @@ public class ItemPotionFlask extends Item implements IVariantProvider // } // } + + @SideOnly(Side.CLIENT) @Override - public List> getVariants() + public ItemMeshDefinition getMeshDefinition() { - List> ret = new ArrayList>(); - ret.add(new ImmutablePair(0, "type=normal")); - return ret; + return new ItemMeshDefinition() + { + @Override + public ModelResourceLocation getModelLocation(ItemStack stack) + { + boolean full = true; + if (stack.hasTagCompound() && stack.getTagCompound().hasKey("empty")) + full = false; + return new ModelResourceLocation(new ResourceLocation(Constants.Mod.MODID, "item/" + getRegistryName().getResourcePath()), "full=" + (full ? "true" : "false")); + } + }; + } + + @Nullable + @Override + public ResourceLocation getCustomLocation() + { + return null; + } + + @Override + public List getVariants() + { + return Lists.newArrayList("full=true", "full=false"); } } \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/proxy/ClientProxy.java b/src/main/java/WayofTime/bloodmagic/proxy/ClientProxy.java index 9c0954d4..a160d70a 100644 --- a/src/main/java/WayofTime/bloodmagic/proxy/ClientProxy.java +++ b/src/main/java/WayofTime/bloodmagic/proxy/ClientProxy.java @@ -163,6 +163,9 @@ public class ClientProxy extends CommonProxy if (tintIndex != 0 && tintIndex != 2) return -1; + if (stack.hasTagCompound() && stack.getTagCompound().hasKey("empty")) + return -1; + return PotionUtils.getPotionColorFromEffectList(PotionUtils.getEffectsFromStack(stack)); } }, ModItems.POTION_FLASK); diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModItems.java b/src/main/java/WayofTime/bloodmagic/registry/ModItems.java index 49a54030..6a624790 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModItems.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModItems.java @@ -82,7 +82,7 @@ import WayofTime.bloodmagic.item.soul.ItemSentientShovel; import WayofTime.bloodmagic.item.soul.ItemSentientSword; import WayofTime.bloodmagic.item.soul.ItemSoulGem; import WayofTime.bloodmagic.item.soul.ItemSoulSnare; -import WayofTime.bloodmagic.potion.item.ItemPotionFlask; +import WayofTime.bloodmagic.item.ItemPotionFlask; import WayofTime.bloodmagic.util.helper.InventoryRenderHelper; public class ModItems diff --git a/src/main/resources/assets/bloodmagic/blockstates/item/ItemPotionFlask.json b/src/main/resources/assets/bloodmagic/blockstates/item/ItemPotionFlask.json index 4af6432c..3102ac66 100644 --- a/src/main/resources/assets/bloodmagic/blockstates/item/ItemPotionFlask.json +++ b/src/main/resources/assets/bloodmagic/blockstates/item/ItemPotionFlask.json @@ -5,13 +5,18 @@ "transform": "forge:default-item" }, "variants": { - "type": { - "normal": { + "full": { + "true": { "textures": { "layer0": "bloodmagic:items/PotionFlask_underlay", "layer1": "bloodmagic:items/PotionFlask_outline", "layer2": "bloodmagic:items/PotionFlask_overlay" } + }, + "false": { + "textures": { + "layer0": "bloodmagic:items/PotionFlask_outline" + } } } } From 6ff12aa0fe3c840967f333d84ba562aa289f441c Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Wed, 18 Jan 2017 19:39:08 -0800 Subject: [PATCH 13/82] Update Blood Tank model and texture Thanks @InsomniaKitten Need to rewrite inventory model handler because you *cannot* use GL there. --- .../models/block/BlockBloodTank.json | 204 ++++++++++++------ .../bloodmagic/textures/blocks/BloodTank.png | Bin 911 -> 1064 bytes 2 files changed, 140 insertions(+), 64 deletions(-) diff --git a/src/main/resources/assets/bloodmagic/models/block/BlockBloodTank.json b/src/main/resources/assets/bloodmagic/models/block/BlockBloodTank.json index 679b2ac7..3553778f 100644 --- a/src/main/resources/assets/bloodmagic/models/block/BlockBloodTank.json +++ b/src/main/resources/assets/bloodmagic/models/block/BlockBloodTank.json @@ -1,10 +1,12 @@ { - "__comment": "Copyright © InsomniaKitten 2016", + "__comment": "Copyright © InsomniaKitten 2017", "textures": { + "particle": "bloodmagic:blocks/BlankRune", "texture": "bloodmagic:blocks/BloodTank" }, "elements": [ { + "__comment": "Voxels-80FF00", "from": [ 3, 0, 3 ], "to": [ 13, 1, 13 ], "faces": { @@ -17,25 +19,30 @@ } }, { + "__comment": "Voxels-FF00FF", "from": [ 3, 1, 3 ], "to": [ 4, 14, 4 ], "faces": { "up": { "uv": [ 4.5, 11.5, 5, 12 ], "texture": "#texture" }, "north": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" }, - "west": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" } + "south": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" } } }, { + "__comment": "Voxels-FF0000", "from": [ 3, 1, 4 ], - "to": [ 4, 14, 5 ], + "to": [ 4, 12, 5 ], "faces": { "up": { "uv": [ 4.5, 11, 5, 11.5 ], "texture": "#texture" }, - "south": { "uv": [ 4, 0, 4.5, 6.5 ], "texture": "#texture" }, - "west": { "uv": [ 0.5, 0, 1, 6.5 ], "texture": "#texture" }, - "east": { "uv": [ 4, 0, 4.5, 6.5 ], "texture": "#texture" } + "south": { "uv": [ 4, 1, 4.5, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 0.5, 1, 1, 6.5 ], "texture": "#texture" }, + "east": { "uv": [ 4, 1, 4.5, 6.5 ], "texture": "#texture" } } }, { + "__comment": "Voxels-71FFFF", "from": [ 3, 1, 5 ], "to": [ 4, 2, 11 ], "faces": { @@ -45,65 +52,73 @@ } }, { + "__comment": "Voxels-FF0000", "from": [ 3, 1, 11 ], - "to": [ 4, 14, 12 ], + "to": [ 4, 12, 12 ], "faces": { "up": { "uv": [ 4.5, 7.5, 5, 8 ], "texture": "#texture" }, - "north": { "uv": [ 0.5, 0, 1, 6.5 ], "texture": "#texture" }, - "west": { "uv": [ 0.5, 0, 1, 6.5 ], "texture": "#texture" }, - "east": { "uv": [ 4, 0, 4.5, 6.5 ], "texture": "#texture" } + "north": { "uv": [ 0.5, 1, 1, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 0.5, 1, 1, 6.5 ], "texture": "#texture" }, + "east": { "uv": [ 4, 1, 4.5, 6.5 ], "texture": "#texture" } } }, { + "__comment": "Voxels-FF00FF", "from": [ 3, 1, 12 ], "to": [ 4, 14, 13 ], "faces": { "up": { "uv": [ 4.5, 7, 5, 7.5 ], "texture": "#texture" }, - "south": { "uv": [ 0, 0, 0.5, 7 ], "texture": "#texture" }, - "west": { "uv": [ 0, 0, 0.5, 7 ], "texture": "#texture" } + "north": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" } } }, { + "__comment": "Voxels-FFFF00", "from": [ 3, 10, 5 ], "to": [ 4, 12, 11 ], "faces": { - "down": { "uv": [ 4.5, 8, 5, 11 ], "texture": "#texture" }, "up": { "uv": [ 4.5, 8, 5, 11.5 ], "texture": "#texture" }, "west": { "uv": [ 1, 1, 4, 2 ], "texture": "#texture" }, "east": { "uv": [ 1, 1, 4, 2 ], "texture": "#texture" } } }, { - "from": [ 3, 13, 5 ], - "to": [ 4, 14, 11 ], + "__comment": "Voxels-FF8000", + "from": [ 3, 13, 4 ], + "to": [ 4, 14, 12 ], "faces": { - "down": { "uv": [ 1, 11.5, 4, 12 ], "texture": "#texture" }, - "up": { "uv": [ 1, 7, 4, 7.5 ], "texture": "#texture" }, - "west": { "uv": [ 1, 0, 4, 0.5 ], "texture": "#texture" }, - "east": { "uv": [ 1, 0, 4, 0.5 ], "texture": "#texture" } + "down": { "uv": [ 0, 7.5, 0.5, 11.5 ], "texture": "#texture" }, + "up": { "uv": [ 4.5, 7.5, 5, 11.5 ], "texture": "#texture" }, + "west": { "uv": [ 0.5, 0, 4.5, 0.5 ], "texture": "#texture" }, + "east": { "uv": [ 0.5, 0, 4.5, 0.5 ], "texture": "#texture" } } }, { + "__comment": "Voxels-FF0000", "from": [ 4, 1, 3 ], - "to": [ 5, 14, 4 ], + "to": [ 5, 12, 4 ], "faces": { "up": { "uv": [ 4, 11.5, 4.5, 12 ], "texture": "#texture" }, - "north": { "uv": [ 0.5, 0, 1, 6.5 ], "texture": "#texture" }, - "south": { "uv": [ 4, 0, 4.5, 6.5 ], "texture": "#texture" }, - "east": { "uv": [ 4, 0, 4.5, 6.5 ], "texture": "#texture" } + "north": { "uv": [ 0.5, 1, 1, 6.5 ], "texture": "#texture" }, + "south": { "uv": [ 4, 1, 4.5, 6.5 ], "texture": "#texture" }, + "east": { "uv": [ 0.5, 1, 1, 6.5 ], "texture": "#texture" } } }, { + "__comment": "Voxels-FF0000", "from": [ 4, 1, 12 ], - "to": [ 5, 14, 13 ], + "to": [ 5, 12, 13 ], "faces": { "up": { "uv": [ 4, 7, 4.5, 7.5 ], "texture": "#texture" }, - "north": { "uv": [ 0.5, 0, 1, 6.5 ], "texture": "#texture" }, - "south": { "uv": [ 4, 0, 4.5, 6.5 ], "texture": "#texture" }, - "east": { "uv": [ 4, 0, 4.5, 6.5 ], "texture": "#texture" } + "north": { "uv": [ 0.5, 1, 1, 6.5 ], "texture": "#texture" }, + "south": { "uv": [ 4, 1, 4.5, 6.5 ], "texture": "#texture" }, + "east": { "uv": [ 4, 1, 4.5, 6.5 ], "texture": "#texture" } } }, { + "__comment": "Voxels-3AC6FF", "from": [ 4, 11, 4 ], "to": [ 12, 12, 12 ], "faces": { @@ -116,6 +131,7 @@ } }, { + "__comment": "Voxels-71FFFF", "from": [ 5, 1, 3 ], "to": [ 11, 2, 4 ], "faces": { @@ -125,6 +141,7 @@ } }, { + "__comment": "Voxels-71FFFF", "from": [ 5, 1, 12 ], "to": [ 11, 2, 13 ], "faces": { @@ -134,6 +151,7 @@ } }, { + "__comment": "Voxels-FFFF00", "from": [ 5, 10, 3 ], "to": [ 11, 12, 4 ], "faces": { @@ -144,6 +162,7 @@ } }, { + "__comment": "Voxels-FFFF00", "from": [ 5, 10, 12 ], "to": [ 11, 12, 13 ], "faces": { @@ -154,6 +173,7 @@ } }, { + "__comment": "Voxels-FF9571", "from": [ 5, 12, 5 ], "to": [ 11, 13, 11 ], "faces": { @@ -165,16 +185,18 @@ } }, { - "from": [ 5, 13, 3 ], - "to": [ 11, 14, 4 ], + "__comment": "Voxels-FF8000", + "from": [ 4, 13, 3 ], + "to": [ 12, 14, 4 ], "faces": { - "down": { "uv": [ 1, 11.5, 4, 12 ], "texture": "#texture" }, - "up": { "uv": [ 1, 7, 4, 7.5 ], "texture": "#texture" }, - "north": { "uv": [ 1, 0, 4, 0.5 ], "texture": "#texture" }, - "south": { "uv": [ 1, 0, 4, 0.5 ], "texture": "#texture" } + "down": { "uv": [ 0.5, 11.5, 4.5, 12 ], "texture": "#texture" }, + "up": { "uv": [ 0.5, 7, 4.5, 7.5 ], "texture": "#texture" }, + "north": { "uv": [ 0.5, 0, 4.5, 0.5 ], "texture": "#texture" }, + "south": { "uv": [ 0.5, 0, 4.5, 0.5 ], "texture": "#texture" } } }, { + "__comment": "Voxels-EBAAFF", "from": [ 5, 13, 6 ], "to": [ 6, 14, 10 ], "faces": { @@ -185,16 +207,18 @@ } }, { - "from": [ 5, 13, 12 ], - "to": [ 11, 14, 13 ], + "__comment": "Voxels-FF8000", + "from": [ 4, 13, 12 ], + "to": [ 12, 14, 13 ], "faces": { - "down": { "uv": [ 1, 11.5, 4, 12 ], "texture": "#texture" }, - "up": { "uv": [ 1, 7, 4, 7.5 ], "texture": "#texture" }, - "north": { "uv": [ 1, 0, 4, 0.5 ], "texture": "#texture" }, - "south": { "uv": [ 1, 0, 4, 0.5 ], "texture": "#texture" } + "down": { "uv": [ 0.5, 11.5, 4.5, 12 ], "texture": "#texture" }, + "up": { "uv": [ 0.5, 7, 4.5, 7.5 ], "texture": "#texture" }, + "north": { "uv": [ 0.5, 0, 4.5, 0.5 ], "texture": "#texture" }, + "south": { "uv": [ 0.5, 0, 4.5, 0.5 ], "texture": "#texture" } } }, { + "__comment": "Voxels-EBAAFF", "from": [ 6, 13, 5 ], "to": [ 10, 14, 6 ], "faces": { @@ -205,6 +229,7 @@ } }, { + "__comment": "Voxels-5595FF", "from": [ 6, 13, 6 ], "to": [ 10, 14, 10 ], "faces": { @@ -212,6 +237,7 @@ } }, { + "__comment": "Voxels-EBAAFF", "from": [ 6, 13, 10 ], "to": [ 10, 14, 11 ], "faces": { @@ -222,6 +248,7 @@ } }, { + "__comment": "Voxels-EBAAFF", "from": [ 10, 13, 6 ], "to": [ 11, 14, 10 ], "faces": { @@ -232,45 +259,52 @@ } }, { + "__comment": "Voxels-FF0000", "from": [ 11, 1, 3 ], - "to": [ 12, 14, 4 ], + "to": [ 12, 12, 4 ], "faces": { "up": { "uv": [ 0.5, 11.5, 1, 12 ], "texture": "#texture" }, - "north": { "uv": [ 0.5, 0, 1, 6.5 ], "texture": "#texture" }, - "south": { "uv": [ 4, 0, 4.5, 6.5 ], "texture": "#texture" }, - "west": { "uv": [ 0.5, 0, 1, 6.5 ], "texture": "#texture" } + "north": { "uv": [ 0.5, 1, 1, 6.499999 ], "texture": "#texture" }, + "south": { "uv": [ 4, 1, 4.5, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 0.5, 1, 1, 6.5 ], "texture": "#texture" } } }, { + "__comment": "Voxels-FF0000", "from": [ 11, 1, 12 ], - "to": [ 12, 14, 13 ], + "to": [ 12, 12, 13 ], "faces": { "up": { "uv": [ 0.5, 7, 1, 7.5 ], "texture": "#texture" }, - "north": { "uv": [ 0.5, 0, 1, 6.5 ], "texture": "#texture" }, - "south": { "uv": [ 4, 0, 4.5, 6.5 ], "texture": "#texture" }, - "west": { "uv": [ 0.5, 0, 1, 6.5 ], "texture": "#texture" } + "north": { "uv": [ 0.5, 1, 1, 6.5 ], "texture": "#texture" }, + "south": { "uv": [ 4, 1, 4.5, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 0.5, 1, 1, 6.5 ], "texture": "#texture" } } }, { + "__comment": "Voxels-FF00FF", "from": [ 12, 1, 3 ], "to": [ 13, 14, 4 ], "faces": { "up": { "uv": [ 0, 11.5, 0.5, 12 ], "texture": "#texture" }, "north": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" }, "east": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" } } }, { + "__comment": "Voxels-FF0000", "from": [ 12, 1, 4 ], - "to": [ 13, 14, 5 ], + "to": [ 13, 12, 5 ], "faces": { "up": { "uv": [ 0, 11, 0.5, 11.5 ], "texture": "#texture" }, - "south": { "uv": [ 4, 0, 4.5, 6.5 ], "texture": "#texture" }, - "west": { "uv": [ 0.5, 0, 1, 6.5 ], "texture": "#texture" }, - "east": { "uv": [ 4, 0, 4.5, 6.5 ], "texture": "#texture" } + "south": { "uv": [ 4, 1, 4.5, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 0.5, 1, 1, 6.5 ], "texture": "#texture" }, + "east": { "uv": [ 4, 1, 4.5, 6.5 ], "texture": "#texture" } } }, { + "__comment": "Voxels-71FFFF", "from": [ 12, 1, 5 ], "to": [ 13, 2, 11 ], "faces": { @@ -280,25 +314,30 @@ } }, { + "__comment": "Voxels-FF0000", "from": [ 12, 1, 11 ], - "to": [ 13, 14, 12 ], + "to": [ 13, 12, 12 ], "faces": { "up": { "uv": [ 0, 7.5, 0.5, 8 ], "texture": "#texture" }, - "north": { "uv": [ 0.5, 0, 1, 6.5 ], "texture": "#texture" }, - "west": { "uv": [ 0.5, 0, 1, 6.5 ], "texture": "#texture" }, - "east": { "uv": [ 4, 0, 4.5, 6.5 ], "texture": "#texture" } + "north": { "uv": [ 0.5, 1, 1, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 0.5, 1, 1, 6.5 ], "texture": "#texture" }, + "east": { "uv": [ 4, 1, 4.5, 6.5 ], "texture": "#texture" } } }, { + "__comment": "Voxels-FF00FF", "from": [ 12, 1, 12 ], "to": [ 13, 14, 13 ], "faces": { "up": { "uv": [ 0, 7, 0.5, 7.5 ], "texture": "#texture" }, - "south": { "uv": [ 0, 0, 0.5, 7 ], "texture": "#texture" }, - "east": { "uv": [ 0, 0, 0.5, 7 ], "texture": "#texture" } + "north": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" } } }, { + "__comment": "Voxels-FFFF00", "from": [ 12, 10, 5 ], "to": [ 13, 12, 11 ], "faces": { @@ -309,13 +348,50 @@ } }, { - "from": [ 12, 13, 5 ], - "to": [ 13, 14, 11 ], + "__comment": "Voxels-FF8000", + "from": [ 12, 13, 4 ], + "to": [ 13, 14, 12 ], "faces": { - "down": { "uv": [ 1, 11.5, 4, 12 ], "texture": "#texture" }, - "up": { "uv": [ 1, 7, 4, 7.5 ], "texture": "#texture" }, - "west": { "uv": [ 1, 0, 4, 0.5 ], "texture": "#texture" }, - "east": { "uv": [ 1, 0, 4, 0.5 ], "texture": "#texture" } + "down": { "uv": [ 4.5, 7.5, 5, 11.5 ], "texture": "#texture" }, + "up": { "uv": [ 0, 7.5, 0.5, 11.5 ], "texture": "#texture" }, + "west": { "uv": [ 0.5, 0, 4.5, 0.5 ], "texture": "#texture" }, + "east": { "uv": [ 0.5, 0, 4.5, 0.5 ], "texture": "#texture" } + } + }, + { + "__comment": "Cube33", + "from": [ 5, 2, 3 ], + "to": [ 11, 10, 4 ], + "faces": { + "north": { "uv": [ 1, 2, 4, 6 ], "texture": "#texture" }, + "south": { "uv": [ 1, 2, 4, 6 ], "texture": "#texture" } + } + }, + { + "__comment": "Cube33", + "from": [ 3, 2, 5 ], + "to": [ 4, 10, 11 ], + "faces": { + "west": { "uv": [ 1, 2, 4, 6 ], "texture": "#texture" }, + "east": { "uv": [ 1, 2, 4, 6 ], "texture": "#texture" } + } + }, + { + "__comment": "Cube33", + "from": [ 12, 2, 5 ], + "to": [ 13, 10, 11 ], + "faces": { + "west": { "uv": [ 1, 2, 4, 6 ], "texture": "#texture" }, + "east": { "uv": [ 1, 2, 4, 6 ], "texture": "#texture" } + } + }, + { + "__comment": "Cube33", + "from": [ 5, 2, 12 ], + "to": [ 11, 10, 13 ], + "faces": { + "north": { "uv": [ 1, 2, 4, 6 ], "texture": "#texture" }, + "south": { "uv": [ 1, 2, 4, 6 ], "texture": "#texture" } } } ], @@ -354,4 +430,4 @@ "scale": [ 0.5, 0.5, 0.5 ] } } -} \ No newline at end of file +} diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/BloodTank.png b/src/main/resources/assets/bloodmagic/textures/blocks/BloodTank.png index 7c0348df62e99a88804c7510cee39157e10b3901..053e8280aa457c0f4fc20c1c963f995dc526ff01 100644 GIT binary patch delta 1043 zcmV+u1nm2d2dD^;B!BNoL_t(oh3%HRjvQ4GhQD*`%k0iB*ek;l7>S4g*`agGa$rY< zBs_oY{GkxFJd@ishU+dlr<^t6#;_r_Tr>V2nXTsOuW%9H*zJG=EKl_a194M@L8RoL#_d zN|6{NT5Beg3EpR#re;2$le3@{7-NYs()T?%XRNi%=X12yXszkG4iRB8nQRjK48YZ^ zpRR6&7!%GpmdhnoRk63X&tfrWcXyZL<71RkSZhfsVT>WAgw`4n!5G6jlNSb%bLQpC z=V)y)M&q0##(&7k$!p%cc|+g#93Fl`+qQV`M~QOIIOj$%IcG#`d6--y?*8h!A5W z=SR843d<*li@3&zCF~3*e0U_26|~tG&G`vI5vN4FHqLgiDt$vA@61bUI}^opNw+ zK;QQp1Anlkv`WDB-~b^6y!U+3&$wJUcBVD+6lvp<=Y!|B7bhcQBC_#0&?U2V>eug$ zu_&duTse$VEK;IUiXg&=?!4w(H6rgl%Vo#)>(?a&PhHnkt|H}3-*+q)3&Kjq%!-9o1t_Hy#+Y%A zY-_rz&bn6!k;P)k+qZw=eZaYjoHL8XlD;2EBJ8Z1R>{81fKmwx(;Iu zMk$^SfnQ&~=9d>I9CtmMchm3av(MFf&6j}d3~VJqIrTngoPsQZRtl{YUIg#`ICkNT z_A-jgdbSPqBY?6@09>gYUw(X;LB z51d5-ry*jkWj33g`=|sfR{^$_1SutAjNJR-=dlT`Z#p?=c6WCPA#m%~Egn63G|Ew! zEB#;_Q#Wtkl&<$X$t$B!RhD7|f1cyI6Rz5T!KZw9+b`(T~`@(cg~ N002ovPDHLkV1hiP|3Lr% delta 888 zcmV-;1Bd*m2#*JlB!5;(L_t(oh3%G2P9#SVg};c*>=q+++XfHv9WWLWS3pRH&Ftq0 zv$2H4Az1qYBjyNRvSiDT#0}UW4IYFLKhsr}8D7wlF7Q~Q+g|ddma6|UUc7h_k+QnF zY5*bvfSHkV#>@~ALI{*nxVgE(%urPTa?ZpU5fMr$s4Art&VSF(9}jvVB0$qLsH*tk zF-Dx!!^4C5=XZB^lv0Q>(sdoGimFz^8}_gIp?a3 zs}@3-Iruc$$ap+vGMS*N^&k&oW?Wrep{ke}rIadrO6duiN6s@6D5cPK9k;i)a(sMj zr4(6PTLWM)7=N(1xM)DlHpW;<K`xNEKryBm zSQY5Hj#5fB9#EBWk~0zLF|Y1DJUldi??K&kULyB`ca1ADE8;h5XX2Xj*dbwK}`&y85iD z+}_^u%YWz3d}&)geEi68IP{VsB5ZDMx^gpYBZQHi~&JFB?YGwiedwY8|bKnUH5n*R%ha|$? zv}L!qx9b7@i8zl3qNDqCAy|LXdAMsf6g zzMK--j6bK+FAoO9sS-f_?s=B~S%I$W2qB;%oKGekTwPJj_;qQCp9TYBjKmn(zqt6v z>Cz)OHv!)TZ7C!XiWw?`iqM$RG|iJG<5#u*ePJHyD*?aD0W7D)ySH!Y%=j)w!Z$MV zEOGm;_Y28f%gEdCOV?3=A5-G{7!lxRI*^{jgY`@Byc{n@^zHWH)2AoP#iyE=Xk%jo zfP;gBYP$dBPADSm?(Wv$Ap|Cq3B%#A27lgaE`R?< Date: Sat, 4 Feb 2017 21:43:01 -0800 Subject: [PATCH 14/82] Remove cross-version proxy 1.9.4 support has been dropped. Extremely little gain for major drawbacks. --- build.gradle | 19 ++------- gradle.properties | 14 +++---- .../java/WayofTime/bloodmagic/BloodMagic.java | 28 +------------ .../block/base/BlockEnumStairs.java | 3 +- .../minecraft/CrossVersionProxy110.java | 39 ------------------- .../compat/minecraft/CrossVersionProxy19.java | 31 --------------- .../compat/minecraft/ICrossVersionProxy.java | 17 -------- .../java/WayofTime/bloodmagic/util/Utils.java | 4 +- 8 files changed, 14 insertions(+), 141 deletions(-) delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/minecraft/CrossVersionProxy110.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/minecraft/CrossVersionProxy19.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/minecraft/ICrossVersionProxy.java diff --git a/build.gradle b/build.gradle index fafe77aa..4ab8cbfd 100644 --- a/build.gradle +++ b/build.gradle @@ -45,27 +45,14 @@ if (new File(projectDir, '.git').exists()) repositories { maven { url "http://dvs1.progwml6.com/files/maven" } - maven { url "http://mobiusstrip.eu/maven" } maven { url "http://tehnut.info/maven" } - - ivy { - name "Thaumcraft" - artifactPattern "https://dl.dropboxusercontent.com/u/47135879/[module]-[revision]-deobf.[ext]" - } - ivy { - name "Baubles" - artifactPattern "https://dl.dropboxusercontent.com/u/47135879/[module]-1.8.9-[revision]-deobf.[ext]" - } } dependencies { deobfCompile "mezz.jei:jei_${mc_version}:${jei_version}" - deobfCompile "mcp.mobius.waila:Waila:${waila_version}_${mc_version}:dev" + deobfCompile "mcp.mobius.waila:Hwyla:${waila_version}_${mc_version}" deobfCompile "info.amerifrance.guideapi:Guide-API:${mc_version}-${guideapi_version}" deobfCompile "info.tehnut.buttons:Buttons:${buttons_version}:api" - -// compile name: "Thaumcraft", version: "${mc_version}-${thaumcraft_version}", ext: "jar" -// compile name: 'Baubles', version: "${baubles_version}", ext: 'jar' } minecraft { @@ -205,6 +192,8 @@ String getChangelogText() { def curseRelations = { optionalLibrary 'just-enough-items-jei' optionalLibrary 'waila' + optionalLibrary 'hwyla' + optionalLibrary 'buttonz' requiredLibrary 'guide-api' } @@ -218,8 +207,6 @@ curseforge { releaseType = 'beta' relations curseRelations - addGameVersion '1.10' - addGameVersion '1.10.2' addArtifact javadocJar addArtifact sourceJar diff --git a/gradle.properties b/gradle.properties index 2fd30a99..cf4b78a2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,15 +1,13 @@ mod_name=BloodMagic package_group=com.wayoftime.bloodmagic mod_version=2.1.0 -mc_version=1.9.4 -forge_version=12.17.0.1957 +mc_version=1.10.2 +forge_version=12.18.3.2221 curse_id=224791 -mappings_version=snapshot_20160518 +mappings_version=stable_29 -jei_version=3.6.8.225 -waila_version=1.7.0-B3 -thaumcraft_version=5.1.5 -baubles_version=1.1.3.0 -guideapi_version=2.0.0-37 +jei_version=3.14.4.404 +waila_version=1.8.9-B23 +guideapi_version=2.0.2-45 buttons_version=1.10.2-0.0.3-3 \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/BloodMagic.java b/src/main/java/WayofTime/bloodmagic/BloodMagic.java index 776ab881..7e0dbe25 100644 --- a/src/main/java/WayofTime/bloodmagic/BloodMagic.java +++ b/src/main/java/WayofTime/bloodmagic/BloodMagic.java @@ -1,7 +1,6 @@ package WayofTime.bloodmagic; import java.io.File; -import java.util.Map; import WayofTime.bloodmagic.meteor.MeteorConfigHandler; import lombok.Getter; @@ -9,7 +8,6 @@ import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.launchwrapper.Launch; import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fml.common.Loader; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.SidedProxy; import net.minecraftforge.fml.common.event.FMLInitializationEvent; @@ -25,7 +23,6 @@ import WayofTime.bloodmagic.api.util.helper.LogHelper; import WayofTime.bloodmagic.client.gui.GuiHandler; import WayofTime.bloodmagic.command.CommandBloodMagic; import WayofTime.bloodmagic.compat.ICompatibility; -import WayofTime.bloodmagic.compat.minecraft.ICrossVersionProxy; import WayofTime.bloodmagic.network.BloodMagicPacketHandler; import WayofTime.bloodmagic.proxy.CommonProxy; import WayofTime.bloodmagic.registry.ModArmourTrackers; @@ -42,8 +39,6 @@ import WayofTime.bloodmagic.structures.ModDungeons; import WayofTime.bloodmagic.util.Utils; import WayofTime.bloodmagic.util.handler.IMCHandler; -import com.google.common.collect.ImmutableMap; - @Mod(modid = Constants.Mod.MODID, name = Constants.Mod.NAME, version = Constants.Mod.VERSION, dependencies = Constants.Mod.DEPEND, guiFactory = "WayofTime.bloodmagic.client.gui.config.ConfigGuiFactory") @Getter public class BloodMagic @@ -76,34 +71,13 @@ public class BloodMagic { return true; } - }; + }.setNoTitle().setBackgroundImageName("upgrade_tomes.png"); @Getter private static boolean isDev = (Boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment"); - @Getter - private static ICrossVersionProxy crossVersionProxy; - private static final Map PROXY_MAP = ImmutableMap.of("1.9.4", "WayofTime.bloodmagic.compat.minecraft.CrossVersionProxy19", "1.10", "WayofTime.bloodmagic.compat.minecraft.CrossVersionProxy110", "1.10.2", "WayofTime.bloodmagic.compat.minecraft.CrossVersionProxy110"); - static { - try - { - String mcVersion = (String) Loader.class.getDeclaredField("MC_VERSION").get(null); - - if (!PROXY_MAP.containsKey(mcVersion)) - throw new IllegalStateException("Blood Magic couldn't find a cross version proxy!"); - - Class proxyClass = Class.forName(PROXY_MAP.get(mcVersion)); - crossVersionProxy = (ICrossVersionProxy) proxyClass.newInstance(); - } - catch (Exception e) - { - throw new IllegalArgumentException("Blood Magic could not find a cross version proxy!", e); - } - - tabUpgradeTome.setNoTitle().setBackgroundImageName("upgrade_tomes.png"); - FluidRegistry.enableUniversalBucket(); } diff --git a/src/main/java/WayofTime/bloodmagic/block/base/BlockEnumStairs.java b/src/main/java/WayofTime/bloodmagic/block/base/BlockEnumStairs.java index a1d62f6a..77a857e2 100644 --- a/src/main/java/WayofTime/bloodmagic/block/base/BlockEnumStairs.java +++ b/src/main/java/WayofTime/bloodmagic/block/base/BlockEnumStairs.java @@ -27,6 +27,7 @@ import net.minecraft.util.math.Vec3d; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import net.minecraftforge.common.ForgeModContainer; import org.apache.commons.lang3.ArrayUtils; import WayofTime.bloodmagic.BloodMagic; @@ -368,7 +369,7 @@ public class BlockEnumStairs & IStringSerializable> extends Bl @Override public boolean doesSideBlockRendering(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing face) { - if (BloodMagic.getCrossVersionProxy().disableStairSlabCulling()) + if (ForgeModContainer.disableStairSlabCulling) return super.doesSideBlockRendering(state, world, pos, face); if (state.isOpaqueCube()) diff --git a/src/main/java/WayofTime/bloodmagic/compat/minecraft/CrossVersionProxy110.java b/src/main/java/WayofTime/bloodmagic/compat/minecraft/CrossVersionProxy110.java deleted file mode 100644 index 937fbcde..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/minecraft/CrossVersionProxy110.java +++ /dev/null @@ -1,39 +0,0 @@ -package WayofTime.bloodmagic.compat.minecraft; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.common.ForgeModContainer; -import net.minecraftforge.fml.relauncher.ReflectionHelper; - -import java.lang.reflect.Field; -import java.lang.reflect.Method; - -public class CrossVersionProxy110 implements ICrossVersionProxy { - - @Override - public TileEntity createTileFromData(World world, NBTTagCompound tagCompound) - { - Method m = ReflectionHelper.findMethod(TileEntity.class, null, new String[] { "create", "func_190200_a", "a" }, World.class, NBTTagCompound.class); - try - { - return (TileEntity) m.invoke(null, world, tagCompound); - } catch (Exception e) - { - return null; - } - } - - @Override - public boolean disableStairSlabCulling() - { - Field disableStairSlabCulling = ReflectionHelper.findField(ForgeModContainer.class, "disableStairSlabCulling"); - try - { - return (Boolean) disableStairSlabCulling.get(null); - } catch (Exception e) - { - return false; - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/minecraft/CrossVersionProxy19.java b/src/main/java/WayofTime/bloodmagic/compat/minecraft/CrossVersionProxy19.java deleted file mode 100644 index 8c1253bb..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/minecraft/CrossVersionProxy19.java +++ /dev/null @@ -1,31 +0,0 @@ -package WayofTime.bloodmagic.compat.minecraft; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.ReflectionHelper; - -import java.lang.reflect.Method; - -public class CrossVersionProxy19 implements ICrossVersionProxy -{ - - @Override - public TileEntity createTileFromData(World world, NBTTagCompound tagCompound) - { - Method m = ReflectionHelper.findMethod(TileEntity.class, null, new String[] { "create", "func_189514_c", "c" }, NBTTagCompound.class); - try - { - return (TileEntity) m.invoke(null, tagCompound); - } catch (Exception e) - { - return null; - } - } - - @Override - public boolean disableStairSlabCulling() - { - return false; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/minecraft/ICrossVersionProxy.java b/src/main/java/WayofTime/bloodmagic/compat/minecraft/ICrossVersionProxy.java deleted file mode 100644 index f8bd12de..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/minecraft/ICrossVersionProxy.java +++ /dev/null @@ -1,17 +0,0 @@ -package WayofTime.bloodmagic.compat.minecraft; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; - -/** - * Allows for Blood Magic to support multiple MC versions that have only slight changes. - * - * Implementation copied from Botania. - */ -public interface ICrossVersionProxy -{ - TileEntity createTileFromData(World world, NBTTagCompound tagCompound); - - boolean disableStairSlabCulling(); -} diff --git a/src/main/java/WayofTime/bloodmagic/util/Utils.java b/src/main/java/WayofTime/bloodmagic/util/Utils.java index 5d3e89d6..57154001 100644 --- a/src/main/java/WayofTime/bloodmagic/util/Utils.java +++ b/src/main/java/WayofTime/bloodmagic/util/Utils.java @@ -1094,7 +1094,7 @@ public class Utils if (initialTile != null) { - TileEntity newTileInitial = BloodMagic.getCrossVersionProxy().createTileFromData(finalWorld, initialTag); + TileEntity newTileInitial = TileEntity.create(finalWorld, initialTag); finalWorld.setTileEntity(finalPos, newTileInitial); newTileInitial.setPos(finalPos); @@ -1105,7 +1105,7 @@ public class Utils if (finalTile != null) { - TileEntity newTileFinal = BloodMagic.getCrossVersionProxy().createTileFromData(initialWorld, finalTag); + TileEntity newTileFinal = TileEntity.create(initialWorld, finalTag); initialWorld.setTileEntity(initialPos, newTileFinal); newTileFinal.setPos(initialPos); From 85a8a12a6f91650103217821be2fa8982abba1f9 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Sat, 4 Feb 2017 22:43:18 -0800 Subject: [PATCH 15/82] Update mappings --- .../AlchemyArrayEffectAttractor.java | 28 ++++---- .../AlchemyArrayEffectBinding.java | 4 +- .../AlchemyArrayEffectSkeletonTurret.java | 2 +- .../AlchemyArrayEffectCrafting.java | 2 +- .../bloodmagic/api/network/SoulNetwork.java | 8 +-- .../bloodmagic/api/saving/SoulNetwork.java | 2 +- .../api/teleport/TeleporterBloodMagic.java | 2 +- .../api/util/helper/PlayerHelper.java | 2 +- .../bloodmagic/block/BlockAlchemyArray.java | 2 +- .../bloodmagic/block/BlockAlchemyTable.java | 4 +- .../bloodmagic/block/BlockAltar.java | 2 +- .../bloodmagic/block/BlockBloodLight.java | 4 +- .../bloodmagic/block/BlockDemonCrucible.java | 2 +- .../bloodmagic/block/BlockDemonCrystal.java | 2 +- .../block/BlockDemonCrystallizer.java | 2 +- .../bloodmagic/block/BlockDemonPylon.java | 2 +- .../block/BlockDimensionalPortal.java | 2 +- .../bloodmagic/block/BlockIncenseAltar.java | 2 +- .../block/BlockInversionPillar.java | 2 +- .../block/BlockInversionPillarEnd.java | 2 +- .../bloodmagic/block/BlockMimic.java | 2 +- .../bloodmagic/block/BlockPhantom.java | 2 +- .../bloodmagic/block/BlockRoutingNode.java | 2 +- .../bloodmagic/block/BlockSoulForge.java | 2 +- .../bloodmagic/block/BlockSpectral.java | 2 +- .../block/base/BlockEnumPillar.java | 6 +- .../block/base/BlockEnumPillarCap.java | 6 +- .../block/base/BlockEnumStairs.java | 6 +- .../bloodmagic/block/base/BlockEnumWall.java | 2 +- .../client/gui/GuiAlchemyTable.java | 2 +- .../client/hud/HUDElementDemonWillAura.java | 2 +- .../client/hud/HUDElementHolding.java | 6 +- .../bloodmagic/client/key/KeyBindings.java | 6 +- .../client/render/block/RenderAltar.java | 4 +- .../render/block/RenderItemRoutingNode.java | 6 +- .../render/entity/RenderCorruptedZombie.java | 4 +- .../bloodmagic/command/CommandBloodMagic.java | 61 ++++------------ .../bloodmagic/command/ISubCommand.java | 19 ----- .../bloodmagic/command/SubCommandBase.java | 70 ------------------ .../bloodmagic/command/package-info.java | 7 -- .../command/sub/SubCommandBind.java | 34 +++------ .../command/sub/SubCommandHelp.java | 43 ----------- .../command/sub/SubCommandNetwork.java | 71 ++++++++----------- .../bloodmagic/command/sub/SubCommandOrb.java | 46 +++++------- .../bloodmagic/command/sub/package-info.java | 7 -- .../guideapi/CompatibilityGuideAPI.java | 4 +- .../compat/guideapi/GuideBloodMagic.java | 11 +-- .../compat/jei/BloodMagicPlugin.java | 25 ++++--- .../jei/CompatibilityJustEnoughItems.java | 24 ------- .../AlchemyArrayCraftingCategory.java | 29 +++++--- .../AlchemyArrayCraftingRecipeHandler.java | 15 ++-- .../AlchemyArrayCraftingRecipeJEI.java | 19 ++--- .../compat/jei/alchemyArray/package-info.java | 7 -- .../AlchemyTableRecipeCategory.java | 34 +++++---- .../AlchemyTableRecipeHandler.java | 15 ++-- .../alchemyTable/AlchemyTableRecipeJEI.java | 37 +++------- .../compat/jei/alchemyTable/package-info.java | 7 -- .../compat/jei/altar/AltarRecipeCategory.java | 28 +++++--- .../compat/jei/altar/AltarRecipeHandler.java | 15 ++-- .../compat/jei/altar/AltarRecipeJEI.java | 26 +++---- .../compat/jei/altar/package-info.java | 7 -- .../ArmourDowngradeRecipeCategory.java | 33 +++++---- .../ArmourDowngradeRecipeHandler.java | 15 ++-- .../ArmourDowngradeRecipeJEI.java | 49 +++---------- .../jei/armourDowngrade/package-info.java | 7 -- .../jei/binding/BindingRecipeCategory.java | 31 +++++--- .../jei/binding/BindingRecipeHandler.java | 15 ++-- .../compat/jei/binding/BindingRecipeJEI.java | 21 ++---- .../compat/jei/binding/package-info.java | 7 -- .../forge/TartaricForgeRecipeCategory.java | 34 ++++++--- .../jei/forge/TartaricForgeRecipeHandler.java | 15 ++-- .../jei/forge/TartaricForgeRecipeJEI.java | 28 +++----- .../compat/jei/forge/package-info.java | 7 -- .../jei/orb/ShapedOrbRecipeHandler.java | 13 ++-- .../compat/jei/orb/ShapedOrbRecipeJEI.java | 59 +++------------ .../jei/orb/ShapelessOrbRecipeHandler.java | 13 ++-- .../compat/jei/orb/ShapelessOrbRecipeJEI.java | 53 +++----------- .../compat/jei/orb/package-info.java | 7 -- .../bloodmagic/compat/jei/package-info.java | 7 -- .../entity/ai/EntityAIAttackStealthMelee.java | 2 +- .../entity/ai/EntityAIEatAndCorruptBlock.java | 2 +- .../entity/ai/EntityAIFollowOwner.java | 8 +-- .../ai/EntityAIGrabEffectsFromOwner.java | 8 +-- .../entity/ai/EntityAIPickUpAlly.java | 4 +- .../entity/ai/EntityAIProtectAlly.java | 2 +- .../entity/ai/EntityAIRetreatToHeal.java | 2 +- .../entity/ai/EntityAIStealthRetreat.java | 2 +- .../ai/EntityAIStealthTowardsTarget.java | 2 +- .../entity/mob/EntityAspectedDemonBase.java | 6 +- .../entity/mob/EntityCorruptedChicken.java | 4 +- .../entity/mob/EntityCorruptedSheep.java | 6 +- .../entity/mob/EntityCorruptedSpider.java | 6 +- .../entity/mob/EntityCorruptedZombie.java | 12 ++-- .../entity/mob/EntityDemonBase.java | 26 +++---- .../bloodmagic/entity/mob/EntityMimic.java | 26 +++---- .../entity/mob/EntitySentientSpecter.java | 32 ++++----- .../entity/projectile/EntityBloodLight.java | 12 ++-- .../entity/projectile/EntityMeteor.java | 2 +- .../projectile/EntitySentientArrow.java | 2 +- .../entity/projectile/EntitySoulSnare.java | 6 +- .../fakePlayer/FakeNetHandlerPlayServer.java | 4 +- .../bloodmagic/item/ItemAltarMaker.java | 2 +- .../bloodmagic/item/ItemBoundAxe.java | 6 +- .../bloodmagic/item/ItemBoundPickaxe.java | 4 +- .../bloodmagic/item/ItemBoundShovel.java | 4 +- .../bloodmagic/item/ItemBoundSword.java | 4 +- .../bloodmagic/item/ItemBoundTool.java | 4 +- .../item/ItemDaggerOfSacrifice.java | 6 +- .../bloodmagic/item/ItemDemonCrystal.java | 2 +- .../bloodmagic/item/ItemExperienceBook.java | 2 +- .../bloodmagic/item/ItemRitualDiviner.java | 2 +- .../item/ItemSacrificialDagger.java | 2 +- .../item/armour/ItemLivingArmour.java | 4 +- .../item/armour/ItemSentientArmour.java | 10 +-- .../item/block/base/ItemBlockEnum.java | 2 +- .../item/block/base/ItemBlockString.java | 2 +- .../item/inventory/ContainerHolding.java | 4 +- .../item/inventory/ItemInventory.java | 2 +- .../item/sigil/ItemSigilBloodLight.java | 2 +- .../item/sigil/ItemSigilCompression.java | 2 +- .../item/sigil/ItemSigilHolding.java | 4 +- .../item/sigil/ItemSigilMagnetism.java | 4 +- .../bloodmagic/item/soul/ItemSentientAxe.java | 22 +++--- .../bloodmagic/item/soul/ItemSentientBow.java | 10 +-- .../item/soul/ItemSentientPickaxe.java | 22 +++--- .../item/soul/ItemSentientShovel.java | 22 +++--- .../item/soul/ItemSentientSword.java | 24 +++---- .../bloodmagic/item/soul/ItemSoulSnare.java | 2 +- .../LivingArmourUpgradeMeleeDecrease.java | 2 +- .../LivingArmourUpgradeSlowness.java | 2 +- .../LivingArmourUpgradeHealthboost.java | 2 +- .../LivingArmourUpgradeKnockbackResist.java | 4 +- .../LivingArmourUpgradeMeleeDamage.java | 2 +- .../LivingArmourUpgradeSolarPowered.java | 2 +- .../upgrade/LivingArmourUpgradeSpeed.java | 2 +- .../PlayerVelocityPacketProcessor.java | 2 +- .../bloodmagic/potion/BMPotionUtils.java | 2 +- .../potion/PotionEventHandlers.java | 2 +- .../bloodmagic/registry/ModBlocks.java | 2 - .../bloodmagic/registry/ModCompatibility.java | 2 - .../bloodmagic/ritual/RitualArmourEvolve.java | 2 +- .../bloodmagic/ritual/RitualExpulsion.java | 28 ++++---- .../bloodmagic/ritual/RitualFelling.java | 2 +- .../ritual/RitualLivingArmourDowngrade.java | 2 +- .../bloodmagic/ritual/RitualMeteor.java | 2 +- .../ritual/RitualUpgradeRemove.java | 4 +- .../harvest/HarvestHandlerPlantable.java | 2 +- .../ritual/harvest/HarvestHandlerStem.java | 2 +- .../ritual/harvest/HarvestHandlerTall.java | 2 +- .../imperfect/ImperfectRitualZombie.java | 2 +- .../bloodmagic/ritual/portal/Teleports.java | 32 ++++----- .../bloodmagic/tile/TileAlchemyArray.java | 4 +- .../bloodmagic/tile/TileAlchemyTable.java | 18 ++--- .../bloodmagic/tile/TileDemonCrucible.java | 14 ++-- .../bloodmagic/tile/TileDemonCrystal.java | 34 ++++----- .../tile/TileDemonCrystallizer.java | 20 +++--- .../bloodmagic/tile/TileDemonPylon.java | 10 +-- .../bloodmagic/tile/TileIncenseAltar.java | 18 ++--- .../bloodmagic/tile/TileInventory.java | 2 +- .../bloodmagic/tile/TileInversionPillar.java | 52 +++++++------- .../tile/TileMasterRitualStone.java | 2 +- .../WayofTime/bloodmagic/tile/TileMimic.java | 40 +++++------ .../bloodmagic/tile/TilePhantomBlock.java | 4 +- .../WayofTime/bloodmagic/tile/TilePlinth.java | 9 --- .../tile/TilePurificationAltar.java | 6 +- .../bloodmagic/tile/TileSoulForge.java | 14 ++-- .../bloodmagic/tile/TileSpectralBlock.java | 4 +- .../bloodmagic/tile/TileTeleposer.java | 18 ++--- .../tile/container/ContainerAlchemyTable.java | 2 +- .../container/ContainerItemRoutingNode.java | 2 +- .../container/ContainerMasterRoutingNode.java | 2 +- .../tile/container/ContainerSoulForge.java | 2 +- .../tile/container/ContainerTeleposer.java | 2 +- .../tile/routing/TileFilteredRoutingNode.java | 8 +-- .../tile/routing/TileInputRoutingNode.java | 4 +- .../tile/routing/TileMasterRoutingNode.java | 20 +++--- .../tile/routing/TileOutputRoutingNode.java | 4 +- .../tile/routing/TileRoutingNode.java | 10 +-- .../WayofTime/bloodmagic/util/ChatUtil.java | 2 +- .../java/WayofTime/bloodmagic/util/Utils.java | 48 +++---------- .../util/handler/event/ClientHandler.java | 16 ++--- .../util/handler/event/GenericHandler.java | 20 +++--- .../handler/event/LivingArmourHandler.java | 4 +- .../handler/event/StatTrackerHandler.java | 4 +- .../util/handler/event/WillHandler.java | 8 +-- 185 files changed, 825 insertions(+), 1273 deletions(-) delete mode 100644 src/main/java/WayofTime/bloodmagic/command/ISubCommand.java delete mode 100644 src/main/java/WayofTime/bloodmagic/command/SubCommandBase.java delete mode 100644 src/main/java/WayofTime/bloodmagic/command/package-info.java delete mode 100644 src/main/java/WayofTime/bloodmagic/command/sub/SubCommandHelp.java delete mode 100644 src/main/java/WayofTime/bloodmagic/command/sub/package-info.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/jei/CompatibilityJustEnoughItems.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/jei/alchemyArray/package-info.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/package-info.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/jei/altar/package-info.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/package-info.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/jei/binding/package-info.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/jei/forge/package-info.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/jei/orb/package-info.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/jei/package-info.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/TilePlinth.java diff --git a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectAttractor.java b/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectAttractor.java index 2196231a..b80a5119 100644 --- a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectAttractor.java +++ b/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectAttractor.java @@ -189,7 +189,7 @@ public class AlchemyArrayEffectAttractor extends AlchemyArrayEffect { if (ent instanceof EntitySlime) { - ent.faceEntity(getTarget(ent.worldObj, pos), 10.0F, 20.0F); + ent.faceEntity(getTarget(ent.getEntityWorld(), pos), 10.0F, 20.0F); } else if (ent instanceof EntitySilverfish) { if (counter < 10) @@ -197,7 +197,7 @@ public class AlchemyArrayEffectAttractor extends AlchemyArrayEffect return; } EntitySilverfish sf = (EntitySilverfish) ent; - Path pathentity = getPathEntityToEntity(ent, getTarget(ent.worldObj, pos), getRange()); + Path pathentity = getPathEntityToEntity(ent, getTarget(ent.getEntityWorld(), pos), getRange()); sf.getNavigator().setPath(pathentity, sf.getAIMoveSpeed()); } else if (ent instanceof EntityBlaze) { @@ -221,7 +221,7 @@ public class AlchemyArrayEffectAttractor extends AlchemyArrayEffect // ent.setAttackTarget(target); } else if (ent instanceof EntityEnderman) { - ((EntityEnderman) ent).setAttackTarget(getTarget(ent.worldObj, pos)); + ((EntityEnderman) ent).setAttackTarget(getTarget(ent.getEntityWorld(), pos)); } } @@ -234,7 +234,7 @@ public class AlchemyArrayEffectAttractor extends AlchemyArrayEffect if (distance > 2) { EntityMob mod = (EntityMob) ent; - mod.faceEntity(getTarget(ent.worldObj, pos), 180, 0); + mod.faceEntity(getTarget(ent.getEntityWorld(), pos), 180, 0); mod.moveEntityWithHeading(0, 0.3f); if (mod.posY < pos.getY()) { @@ -248,12 +248,12 @@ public class AlchemyArrayEffectAttractor extends AlchemyArrayEffect public Path getPathEntityToEntity(Entity entity, Entity targetEntity, float range) { - int targX = MathHelper.floor_double(targetEntity.posX); - int targY = MathHelper.floor_double(targetEntity.posY + 1.0D); - int targZ = MathHelper.floor_double(targetEntity.posZ); + int targX = MathHelper.floor(targetEntity.posX); + int targY = MathHelper.floor(targetEntity.posY + 1.0D); + int targZ = MathHelper.floor(targetEntity.posZ); PathFinder pf = new PathFinder(new WalkNodeProcessor()); - return pf.findPath(targetEntity.worldObj, (EntityLiving) entity, new BlockPos(targX, targY, targZ), range); + return pf.findPath(targetEntity.getEntityWorld(), (EntityLiving) entity, new BlockPos(targX, targY, targZ), range); } private boolean trackMob(BlockPos pos, EntityLiving ent) @@ -261,7 +261,7 @@ public class AlchemyArrayEffectAttractor extends AlchemyArrayEffect //TODO: Figure out if this crud is needed if (useSetTarget(ent)) { - ((EntityMob) ent).setAttackTarget(getTarget(ent.worldObj, pos)); + ((EntityMob) ent).setAttackTarget(getTarget(ent.getEntityWorld(), pos)); return true; } else if (useSpecialCase(ent)) { @@ -328,7 +328,7 @@ public class AlchemyArrayEffectAttractor extends AlchemyArrayEffect } cancelCurrentTasks(ent); - ent.tasks.addTask(0, new AttractTask(ent, getTarget(ent.worldObj, pos), pos)); + ent.tasks.addTask(0, new AttractTask(ent, getTarget(ent.getEntityWorld(), pos), pos)); return true; } @@ -364,13 +364,13 @@ public class AlchemyArrayEffectAttractor extends AlchemyArrayEffect { if (ent instanceof EntitySlime) { - ent.faceEntity(getTarget(ent.worldObj, pos), 10.0F, 20.0F); -// ent.setAttackTarget(getTarget(ent.worldObj, pos)); + ent.faceEntity(getTarget(ent.getEntityWorld(), pos), 10.0F, 20.0F); +// ent.setAttackTarget(getTarget(ent.getEntityWorld(), pos)); return true; } else if (ent instanceof EntitySilverfish) { EntitySilverfish es = (EntitySilverfish) ent; - Path pathentity = getPathEntityToEntity(ent, getTarget(ent.worldObj, pos), getRange()); + Path pathentity = getPathEntityToEntity(ent, getTarget(ent.getEntityWorld(), pos), getRange()); es.getNavigator().setPath(pathentity, es.getAIMoveSpeed()); return true; } else if (ent instanceof EntityBlaze) @@ -439,7 +439,7 @@ public class AlchemyArrayEffectAttractor extends AlchemyArrayEffect { boolean res = false; //TODO: - TileEntity te = mob.worldObj.getTileEntity(coord); + TileEntity te = mob.getEntityWorld().getTileEntity(coord); if (te instanceof TileAlchemyArray) { res = true; diff --git a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectBinding.java b/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectBinding.java index 8ba2057a..0f25ede0 100644 --- a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectBinding.java +++ b/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectBinding.java @@ -40,7 +40,7 @@ public class AlchemyArrayEffectBinding extends AlchemyArrayEffectCrafting ItemStack output = outputStack.copy(); EntityItem outputEntity = new EntityItem(tile.getWorld(), pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, output); - tile.getWorld().spawnEntityInWorld(outputEntity); + tile.getWorld().spawnEntity(outputEntity); return true; } @@ -60,7 +60,7 @@ public class AlchemyArrayEffectBinding extends AlchemyArrayEffectCrafting double dispZ = -distance * Math.cos(angle); EntityLightningBolt lightning = new EntityLightningBolt(world, pos.getX() + dispX, pos.getY(), pos.getZ() + dispZ, true); - world.spawnEntityInWorld(lightning); + world.spawnEntity(lightning); } } diff --git a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectSkeletonTurret.java b/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectSkeletonTurret.java index 00b695df..3577178b 100644 --- a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectSkeletonTurret.java +++ b/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectSkeletonTurret.java @@ -170,7 +170,7 @@ public class AlchemyArrayEffectSkeletonTurret extends AlchemyArrayEffect { boolean res = false; //TODO: - TileEntity te = mob.worldObj.getTileEntity(coord); + TileEntity te = mob.getEntityWorld().getTileEntity(coord); if (te instanceof TileAlchemyArray) { res = true; diff --git a/src/main/java/WayofTime/bloodmagic/api/alchemyCrafting/AlchemyArrayEffectCrafting.java b/src/main/java/WayofTime/bloodmagic/api/alchemyCrafting/AlchemyArrayEffectCrafting.java index 41935408..56badd4f 100644 --- a/src/main/java/WayofTime/bloodmagic/api/alchemyCrafting/AlchemyArrayEffectCrafting.java +++ b/src/main/java/WayofTime/bloodmagic/api/alchemyCrafting/AlchemyArrayEffectCrafting.java @@ -47,7 +47,7 @@ public class AlchemyArrayEffectCrafting extends AlchemyArrayEffect EntityItem outputEntity = new EntityItem(tile.getWorld(), pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, output); - tile.getWorld().spawnEntityInWorld(outputEntity); + tile.getWorld().spawnEntity(outputEntity); return true; } diff --git a/src/main/java/WayofTime/bloodmagic/api/network/SoulNetwork.java b/src/main/java/WayofTime/bloodmagic/api/network/SoulNetwork.java index a1a97ebf..f50500ce 100644 --- a/src/main/java/WayofTime/bloodmagic/api/network/SoulNetwork.java +++ b/src/main/java/WayofTime/bloodmagic/api/network/SoulNetwork.java @@ -70,13 +70,13 @@ public class SoulNetwork extends WorldSavedData if (FMLCommonHandler.instance().getMinecraftServerInstance() == null) return 0; - World world = FMLCommonHandler.instance().getMinecraftServerInstance().worldServers[0]; - SoulNetwork data = (SoulNetwork) world.loadItemData(SoulNetwork.class, event.ownerNetwork); + World world = FMLCommonHandler.instance().getMinecraftServerInstance().worlds[0]; + SoulNetwork data = (SoulNetwork) world.loadData(SoulNetwork.class, event.ownerNetwork); if (data == null) { data = new SoulNetwork(event.ownerNetwork); - world.setItemData(event.ownerNetwork, data); + world.setData(event.ownerNetwork, data); } int currEss = data.getCurrentEssence(); @@ -129,7 +129,7 @@ public class SoulNetwork extends WorldSavedData { if (user != null) { - if (user.worldObj.isRemote) + if (user.getEntityWorld().isRemote) return false; if (!Strings.isNullOrEmpty(mapName)) diff --git a/src/main/java/WayofTime/bloodmagic/api/saving/SoulNetwork.java b/src/main/java/WayofTime/bloodmagic/api/saving/SoulNetwork.java index 20433b88..53324cf0 100644 --- a/src/main/java/WayofTime/bloodmagic/api/saving/SoulNetwork.java +++ b/src/main/java/WayofTime/bloodmagic/api/saving/SoulNetwork.java @@ -78,7 +78,7 @@ public class SoulNetwork implements INBTSerializable { if (user != null) { - if (user.worldObj.isRemote) + if (user.getEntityWorld().isRemote) return false; if (!Strings.isNullOrEmpty(playerId.toString())) diff --git a/src/main/java/WayofTime/bloodmagic/api/teleport/TeleporterBloodMagic.java b/src/main/java/WayofTime/bloodmagic/api/teleport/TeleporterBloodMagic.java index 2c164ee8..e24c0da2 100644 --- a/src/main/java/WayofTime/bloodmagic/api/teleport/TeleporterBloodMagic.java +++ b/src/main/java/WayofTime/bloodmagic/api/teleport/TeleporterBloodMagic.java @@ -33,6 +33,6 @@ public class TeleporterBloodMagic extends Teleporter @Override public void placeInPortal(Entity entity, float rotationYaw) { - entity.setLocationAndAngles(MathHelper.floor_double(entity.posX), MathHelper.floor_double(entity.posY) + 2, MathHelper.floor_double(entity.posZ), entity.rotationYaw, entity.rotationPitch); + entity.setLocationAndAngles(MathHelper.floor(entity.posX), MathHelper.floor(entity.posY) + 2, MathHelper.floor(entity.posZ), entity.rotationYaw, entity.rotationPitch); } } diff --git a/src/main/java/WayofTime/bloodmagic/api/util/helper/PlayerHelper.java b/src/main/java/WayofTime/bloodmagic/api/util/helper/PlayerHelper.java index 0b4a1163..634f33f0 100644 --- a/src/main/java/WayofTime/bloodmagic/api/util/helper/PlayerHelper.java +++ b/src/main/java/WayofTime/bloodmagic/api/util/helper/PlayerHelper.java @@ -26,7 +26,7 @@ public class PlayerHelper public static String getUsernameFromPlayer(EntityPlayer player) { - return player.worldObj.isRemote ? "" : UsernameCache.getLastKnownUsername(getUUIDFromPlayer(player)); + return player.getEntityWorld().isRemote ? "" : UsernameCache.getLastKnownUsername(getUUIDFromPlayer(player)); } public static EntityPlayer getPlayerFromUsername(String username) diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockAlchemyArray.java b/src/main/java/WayofTime/bloodmagic/block/BlockAlchemyArray.java index 29a03a07..87478f40 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockAlchemyArray.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockAlchemyArray.java @@ -81,7 +81,7 @@ public class BlockAlchemyArray extends BlockContainer } @Override - public boolean isVisuallyOpaque() + public boolean causesSuffocation() { return false; } diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockAlchemyTable.java b/src/main/java/WayofTime/bloodmagic/block/BlockAlchemyTable.java index 2674b21b..f8ba45ff 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockAlchemyTable.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockAlchemyTable.java @@ -60,7 +60,7 @@ public class BlockAlchemyTable extends BlockContainer } @Override - public boolean isVisuallyOpaque() + public boolean causesSuffocation() { return false; } @@ -107,7 +107,7 @@ public class BlockAlchemyTable extends BlockContainer @Override protected BlockStateContainer createBlockState() { - return new BlockStateContainer(this, new IProperty[] { DIRECTION, INVISIBLE }); + return new BlockStateContainer(this, DIRECTION, INVISIBLE); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockAltar.java b/src/main/java/WayofTime/bloodmagic/block/BlockAltar.java index 2e01b83c..72b64187 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockAltar.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockAltar.java @@ -119,7 +119,7 @@ public class BlockAltar extends BlockContainer implements IVariantProvider, IDoc } @Override - public boolean isVisuallyOpaque() + public boolean causesSuffocation() { return false; } diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockBloodLight.java b/src/main/java/WayofTime/bloodmagic/block/BlockBloodLight.java index cbca3d2e..4852e384 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockBloodLight.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockBloodLight.java @@ -70,7 +70,7 @@ public class BlockBloodLight extends Block } @Override - public boolean isVisuallyOpaque() + public boolean causesSuffocation() { return false; } @@ -97,7 +97,7 @@ public class BlockBloodLight extends Block @SideOnly(Side.CLIENT) public void randomDisplayTick(IBlockState state, World world, BlockPos pos, Random rand) { - EntityPlayerSP playerSP = Minecraft.getMinecraft().thePlayer; + EntityPlayerSP playerSP = Minecraft.getMinecraft().player; if (rand.nextInt(3) != 0) { diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrucible.java b/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrucible.java index ef3faa04..ac41661c 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrucible.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrucible.java @@ -55,7 +55,7 @@ public class BlockDemonCrucible extends BlockContainer implements IVariantProvid } @Override - public boolean isVisuallyOpaque() + public boolean causesSuffocation() { return false; } diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystal.java b/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystal.java index 44e5b325..eb5914b9 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystal.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystal.java @@ -112,7 +112,7 @@ public class BlockDemonCrystal extends BlockContainer } @Override - public boolean isVisuallyOpaque() + public boolean causesSuffocation() { return false; } diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystallizer.java b/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystallizer.java index f10a2fde..0130a66c 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystallizer.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystallizer.java @@ -61,7 +61,7 @@ public class BlockDemonCrystallizer extends BlockContainer implements IVariantPr } @Override - public boolean isVisuallyOpaque() + public boolean causesSuffocation() { return false; } diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockDemonPylon.java b/src/main/java/WayofTime/bloodmagic/block/BlockDemonPylon.java index c0ff3c2e..4849087a 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockDemonPylon.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockDemonPylon.java @@ -54,7 +54,7 @@ public class BlockDemonPylon extends BlockContainer implements IVariantProvider } @Override - public boolean isVisuallyOpaque() + public boolean causesSuffocation() { return false; } diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockDimensionalPortal.java b/src/main/java/WayofTime/bloodmagic/block/BlockDimensionalPortal.java index ccf6dcbb..2e304975 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockDimensionalPortal.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockDimensionalPortal.java @@ -58,7 +58,7 @@ public class BlockDimensionalPortal extends BlockIntegerContainer } @Override - public boolean isVisuallyOpaque() + public boolean causesSuffocation() { return false; } diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockIncenseAltar.java b/src/main/java/WayofTime/bloodmagic/block/BlockIncenseAltar.java index 9e9b5772..5f2aa776 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockIncenseAltar.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockIncenseAltar.java @@ -61,7 +61,7 @@ public class BlockIncenseAltar extends BlockContainer implements IVariantProvide } @Override - public boolean isVisuallyOpaque() + public boolean causesSuffocation() { return false; } diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockInversionPillar.java b/src/main/java/WayofTime/bloodmagic/block/BlockInversionPillar.java index 0e430ba3..8bd914fc 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockInversionPillar.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockInversionPillar.java @@ -77,7 +77,7 @@ public class BlockInversionPillar extends BlockEnumContainer im } @Override - public boolean isVisuallyOpaque() + public boolean causesSuffocation() { return false; } diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockInversionPillarEnd.java b/src/main/java/WayofTime/bloodmagic/block/BlockInversionPillarEnd.java index 5df6bfc9..66bef798 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockInversionPillarEnd.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockInversionPillarEnd.java @@ -52,7 +52,7 @@ public class BlockInversionPillarEnd extends BlockEnum impleme } @Override - public boolean isVisuallyOpaque() + public boolean causesSuffocation() { return false; } diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockMimic.java b/src/main/java/WayofTime/bloodmagic/block/BlockMimic.java index 18121f5c..1b85cb3c 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockMimic.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockMimic.java @@ -196,7 +196,7 @@ public class BlockMimic extends BlockEnumContainer implements IVarian } @Override - public boolean isVisuallyOpaque() + public boolean causesSuffocation() { return false; } diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockPhantom.java b/src/main/java/WayofTime/bloodmagic/block/BlockPhantom.java index 3dde1786..8f5c3819 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockPhantom.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockPhantom.java @@ -54,7 +54,7 @@ public class BlockPhantom extends BlockContainer implements IVariantProvider } @Override - public boolean isVisuallyOpaque() + public boolean causesSuffocation() { return false; } diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockRoutingNode.java b/src/main/java/WayofTime/bloodmagic/block/BlockRoutingNode.java index ef4ac201..0f85c1c8 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockRoutingNode.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockRoutingNode.java @@ -72,7 +72,7 @@ public abstract class BlockRoutingNode extends BlockContainer } @Override - public boolean isVisuallyOpaque() + public boolean causesSuffocation() { return false; } diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockSoulForge.java b/src/main/java/WayofTime/bloodmagic/block/BlockSoulForge.java index 0750c130..554c1f02 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockSoulForge.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockSoulForge.java @@ -67,7 +67,7 @@ public class BlockSoulForge extends BlockContainer implements IVariantProvider } @Override - public boolean isVisuallyOpaque() + public boolean causesSuffocation() { return false; } diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockSpectral.java b/src/main/java/WayofTime/bloodmagic/block/BlockSpectral.java index 357c1a99..5b3e97cb 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockSpectral.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockSpectral.java @@ -63,7 +63,7 @@ public class BlockSpectral extends BlockContainer implements IVariantProvider } @Override - public boolean isVisuallyOpaque() + public boolean causesSuffocation() { return false; } diff --git a/src/main/java/WayofTime/bloodmagic/block/base/BlockEnumPillar.java b/src/main/java/WayofTime/bloodmagic/block/base/BlockEnumPillar.java index 70772f8a..a99ba545 100644 --- a/src/main/java/WayofTime/bloodmagic/block/base/BlockEnumPillar.java +++ b/src/main/java/WayofTime/bloodmagic/block/base/BlockEnumPillar.java @@ -122,15 +122,15 @@ public class BlockEnumPillar & IStringSerializable> extends Bl } @Override - protected ItemStack createStackedBlock(IBlockState state) + protected ItemStack getSilkTouchDrop(IBlockState state) { return new ItemStack(this, 1, damageDropped(state)); } @Override - public IBlockState onBlockPlaced(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, ItemStack stack) { - return super.onBlockPlaced(worldIn, pos, facing, hitX, hitY, hitZ, meta, placer).withProperty(BlockRotatedPillar.AXIS, facing.getAxis()); + return super.getStateForPlacement(worldIn, pos, facing, hitX, hitY, hitZ, meta, placer, stack).withProperty(BlockRotatedPillar.AXIS, facing.getAxis()); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/block/base/BlockEnumPillarCap.java b/src/main/java/WayofTime/bloodmagic/block/base/BlockEnumPillarCap.java index e4f3df8d..f38ef5bb 100644 --- a/src/main/java/WayofTime/bloodmagic/block/base/BlockEnumPillarCap.java +++ b/src/main/java/WayofTime/bloodmagic/block/base/BlockEnumPillarCap.java @@ -70,15 +70,15 @@ public class BlockEnumPillarCap & IStringSerializable> extends } @Override - protected ItemStack createStackedBlock(IBlockState state) + protected ItemStack getSilkTouchDrop(IBlockState state) { return new ItemStack(this, 1, damageDropped(state)); } @Override - public IBlockState onBlockPlaced(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, ItemStack stack) { - return super.onBlockPlaced(worldIn, pos, facing, hitX, hitY, hitZ, meta, placer).withProperty(FACING, facing); + return super.getStateForPlacement(worldIn, pos, facing, hitX, hitY, hitZ, meta, placer, stack).withProperty(FACING, facing); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/block/base/BlockEnumStairs.java b/src/main/java/WayofTime/bloodmagic/block/base/BlockEnumStairs.java index 77a857e2..4d013d69 100644 --- a/src/main/java/WayofTime/bloodmagic/block/base/BlockEnumStairs.java +++ b/src/main/java/WayofTime/bloodmagic/block/base/BlockEnumStairs.java @@ -172,9 +172,9 @@ public class BlockEnumStairs & IStringSerializable> extends Bl } @Override - public IBlockState onBlockPlaced(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, ItemStack stack) { - IBlockState state = super.onBlockPlaced(worldIn, pos, facing, hitX, hitY, hitZ, meta, placer); + IBlockState state = super.getStateForPlacement(world, pos, facing, hitX, hitY, hitZ, meta, placer, stack); state = state.withProperty(FACING, placer.getHorizontalFacing()).withProperty(BlockStairs.SHAPE, BlockStairs.EnumShape.STRAIGHT); return facing != EnumFacing.DOWN && (facing == EnumFacing.UP || (double) hitY <= 0.5D) ? state.withProperty(BlockStairs.HALF, BlockStairs.EnumHalf.BOTTOM) : state.withProperty(BlockStairs.HALF, BlockStairs.EnumHalf.TOP); } @@ -349,7 +349,7 @@ public class BlockEnumStairs & IStringSerializable> extends Bl } @Override - protected ItemStack createStackedBlock(IBlockState state) + protected ItemStack getSilkTouchDrop(IBlockState state) { return new ItemStack(this, 1, damageDropped(state)); } diff --git a/src/main/java/WayofTime/bloodmagic/block/base/BlockEnumWall.java b/src/main/java/WayofTime/bloodmagic/block/base/BlockEnumWall.java index a4a06261..6ec14701 100644 --- a/src/main/java/WayofTime/bloodmagic/block/base/BlockEnumWall.java +++ b/src/main/java/WayofTime/bloodmagic/block/base/BlockEnumWall.java @@ -129,7 +129,7 @@ public class BlockEnumWall & IStringSerializable> extends Bloc } @Override - protected ItemStack createStackedBlock(IBlockState state) + protected ItemStack getSilkTouchDrop(IBlockState state) { return new ItemStack(this, 1, damageDropped(state)); } diff --git a/src/main/java/WayofTime/bloodmagic/client/gui/GuiAlchemyTable.java b/src/main/java/WayofTime/bloodmagic/client/gui/GuiAlchemyTable.java index 9e85c77f..a35248e2 100644 --- a/src/main/java/WayofTime/bloodmagic/client/gui/GuiAlchemyTable.java +++ b/src/main/java/WayofTime/bloodmagic/client/gui/GuiAlchemyTable.java @@ -52,7 +52,7 @@ public class GuiAlchemyTable extends GuiContainer { Slot slot = this.inventorySlots.getSlot(slotId); - this.drawTexturedModalRect(i + slot.xDisplayPosition, j + slot.yDisplayPosition, 195, 1, 16, 16); + this.drawTexturedModalRect(i + slot.xPos, j + slot.yPos, 195, 1, 16, 16); } } } diff --git a/src/main/java/WayofTime/bloodmagic/client/hud/HUDElementDemonWillAura.java b/src/main/java/WayofTime/bloodmagic/client/hud/HUDElementDemonWillAura.java index f8fba873..4226c787 100644 --- a/src/main/java/WayofTime/bloodmagic/client/hud/HUDElementDemonWillAura.java +++ b/src/main/java/WayofTime/bloodmagic/client/hud/HUDElementDemonWillAura.java @@ -34,7 +34,7 @@ public class HUDElementDemonWillAura extends HUDElement @Override public void render(Minecraft minecraft, ScaledResolution resolution, float partialTicks) { - EntityPlayer player = minecraft.thePlayer; + EntityPlayer player = minecraft.player; if (!Utils.canPlayerSeeDemonWill(player)) { diff --git a/src/main/java/WayofTime/bloodmagic/client/hud/HUDElementHolding.java b/src/main/java/WayofTime/bloodmagic/client/hud/HUDElementHolding.java index 113a7a60..5cd0b9c1 100644 --- a/src/main/java/WayofTime/bloodmagic/client/hud/HUDElementHolding.java +++ b/src/main/java/WayofTime/bloodmagic/client/hud/HUDElementHolding.java @@ -26,13 +26,13 @@ public class HUDElementHolding extends HUDElement @Override public void render(Minecraft minecraft, ScaledResolution resolution, float partialTicks) { - ItemStack sigilHolding = minecraft.thePlayer.getHeldItemMainhand(); + ItemStack sigilHolding = minecraft.player.getHeldItemMainhand(); // TODO - Clean this mess // Check mainhand for Sigil of Holding if (sigilHolding == null) return; if (!(sigilHolding.getItem() == ModItems.SIGIL_HOLDING)) - sigilHolding = minecraft.thePlayer.getHeldItemOffhand(); + sigilHolding = minecraft.player.getHeldItemOffhand(); // Check offhand for Sigil of Holding if (sigilHolding == null) return; @@ -54,7 +54,7 @@ public class HUDElementHolding extends HUDElement { for (ItemStack sigil : holdingInv) { - renderHotbarItem(resolution.getScaledWidth() / 2 + 103 + xOffset + getXOffset(), resolution.getScaledHeight() - 18 + getYOffset(), partialTicks, minecraft.thePlayer, sigil); + renderHotbarItem(resolution.getScaledWidth() / 2 + 103 + xOffset + getXOffset(), resolution.getScaledHeight() - 18 + getYOffset(), partialTicks, minecraft.player, sigil); xOffset += 20; } } diff --git a/src/main/java/WayofTime/bloodmagic/client/key/KeyBindings.java b/src/main/java/WayofTime/bloodmagic/client/key/KeyBindings.java index 3b4d12d2..d7a5c160 100644 --- a/src/main/java/WayofTime/bloodmagic/client/key/KeyBindings.java +++ b/src/main/java/WayofTime/bloodmagic/client/key/KeyBindings.java @@ -27,7 +27,7 @@ public enum KeyBindings @Override public void handleKeybind() { - ItemStack itemStack = ClientHandler.minecraft.thePlayer.getHeldItemMainhand(); + ItemStack itemStack = ClientHandler.minecraft.player.getHeldItemMainhand(); if (itemStack != null && itemStack.getItem() instanceof IKeybindable) BloodMagicPacketHandler.INSTANCE.sendToServer(new KeyProcessor(this, false)); } @@ -38,7 +38,7 @@ public enum KeyBindings @Override public void handleKeybind() { - EntityPlayerSP player = Minecraft.getMinecraft().thePlayer; + EntityPlayerSP player = Minecraft.getMinecraft().player; if (player.getHeldItemMainhand() != null && player.getHeldItemMainhand().getItem() instanceof ItemSigilHolding) ClientHandler.cycleSigil(player.getHeldItemMainhand(), player, -1); } @@ -49,7 +49,7 @@ public enum KeyBindings @Override public void handleKeybind() { - EntityPlayerSP player = Minecraft.getMinecraft().thePlayer; + EntityPlayerSP player = Minecraft.getMinecraft().player; if (player.getHeldItemMainhand() != null && player.getHeldItemMainhand().getItem() instanceof ItemSigilHolding) ClientHandler.cycleSigil(player.getHeldItemMainhand(), player, 1); } diff --git a/src/main/java/WayofTime/bloodmagic/client/render/block/RenderAltar.java b/src/main/java/WayofTime/bloodmagic/client/render/block/RenderAltar.java index 4fdf0161..6de70192 100644 --- a/src/main/java/WayofTime/bloodmagic/client/render/block/RenderAltar.java +++ b/src/main/java/WayofTime/bloodmagic/client/render/block/RenderAltar.java @@ -124,8 +124,8 @@ public class RenderAltar extends TileEntitySpecialRenderer private void renderHologram(TileAltar altar, EnumAltarTier tier, float partialTicks) { - EntityPlayerSP player = mc.thePlayer; - World world = player.worldObj; + EntityPlayerSP player = mc.player; + World world = player.world; if (tier == EnumAltarTier.ONE) return; diff --git a/src/main/java/WayofTime/bloodmagic/client/render/block/RenderItemRoutingNode.java b/src/main/java/WayofTime/bloodmagic/client/render/block/RenderItemRoutingNode.java index 2aab5c5c..da8b193a 100644 --- a/src/main/java/WayofTime/bloodmagic/client/render/block/RenderItemRoutingNode.java +++ b/src/main/java/WayofTime/bloodmagic/client/render/block/RenderItemRoutingNode.java @@ -28,7 +28,7 @@ public class RenderItemRoutingNode extends TileEntitySpecialRenderer connectionList = tileNode.getConnected(); for (BlockPos wantedPos : connectionList) @@ -41,7 +41,7 @@ public class RenderItemRoutingNode extends TileEntitySpecialRenderer return ZOMBIE_TEXTURES; } - protected void rotateCorpse(EntityCorruptedZombie entityLiving, float p_77043_2_, float p_77043_3_, float partialTicks) + protected void applyRotations(EntityCorruptedZombie entityLiving, float p_77043_2_, float p_77043_3_, float partialTicks) { - super.rotateCorpse(entityLiving, p_77043_2_, p_77043_3_, partialTicks); + super.applyRotations(entityLiving, p_77043_2_, p_77043_3_, partialTicks); } } \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/command/CommandBloodMagic.java b/src/main/java/WayofTime/bloodmagic/command/CommandBloodMagic.java index a8e5b6a5..625166fa 100644 --- a/src/main/java/WayofTime/bloodmagic/command/CommandBloodMagic.java +++ b/src/main/java/WayofTime/bloodmagic/command/CommandBloodMagic.java @@ -1,77 +1,46 @@ package WayofTime.bloodmagic.command; import WayofTime.bloodmagic.command.sub.SubCommandBind; -import WayofTime.bloodmagic.command.sub.SubCommandHelp; import WayofTime.bloodmagic.command.sub.SubCommandNetwork; import WayofTime.bloodmagic.command.sub.SubCommandOrb; import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.command.CommandBase; import net.minecraft.command.ICommandSender; -import net.minecraft.server.MinecraftServer; import net.minecraft.util.text.TextComponentString; +import net.minecraftforge.server.command.CommandTreeBase; -import java.util.*; - -public class CommandBloodMagic extends CommandBase +public class CommandBloodMagic extends CommandTreeBase { - // TODO - Move this and sub commands to CommandTreeBase in 1.11. Much cleaner impl - private final List aliases = new ArrayList(); - private final Map subCommands = new HashMap(); - public CommandBloodMagic() { - aliases.add("BloodMagic"); - aliases.add("bloodmagic"); - aliases.add("bloodMagic"); - aliases.add("bm"); - - subCommands.put("help", new SubCommandHelp(this)); - subCommands.put("network", new SubCommandNetwork(this)); - subCommands.put("bind", new SubCommandBind(this)); - subCommands.put("orb", new SubCommandOrb(this)); + addSubcommand(new SubCommandBind()); + addSubcommand(new SubCommandNetwork()); + addSubcommand(new SubCommandOrb()); } @Override - public String getCommandName() + public String getName() { - return "/bloodmagic"; + return "bloodmagic"; } @Override - public int getRequiredPermissionLevel() + public String getUsage(ICommandSender sender) { - return 2; + return "/bloodmagic help"; } - @Override - public String getCommandUsage(ICommandSender commandSender) + public static void displayHelpString(ICommandSender commandSender, String display, Object... info) { - return getCommandName() + " help"; + commandSender.sendMessage(new TextComponentString(TextHelper.localizeEffect(display, info))); } - @Override - public List getCommandAliases() + public static void displayErrorString(ICommandSender commandSender, String display, Object... info) { - return aliases; + commandSender.sendMessage(new TextComponentString(TextHelper.localizeEffect(display, info))); } - @Override - public void execute(MinecraftServer server, ICommandSender commandSender, String[] args) + public static void displaySuccessString(ICommandSender commandSender, String display, Object... info) { - if (args.length > 0 && subCommands.containsKey(args[0])) - { - - ISubCommand subCommand = subCommands.get(args[0]); - String[] subArgs = Arrays.copyOfRange(args, 1, args.length); - subCommand.processSubCommand(server, commandSender, subArgs); - } else - { - commandSender.addChatMessage(new TextComponentString(TextHelper.localizeEffect("commands.error.unknown"))); - } - } - - public Map getSubCommands() - { - return subCommands; + commandSender.sendMessage(new TextComponentString(TextHelper.localizeEffect(display, info))); } } diff --git a/src/main/java/WayofTime/bloodmagic/command/ISubCommand.java b/src/main/java/WayofTime/bloodmagic/command/ISubCommand.java deleted file mode 100644 index e8d95798..00000000 --- a/src/main/java/WayofTime/bloodmagic/command/ISubCommand.java +++ /dev/null @@ -1,19 +0,0 @@ -package WayofTime.bloodmagic.command; - -import net.minecraft.command.ICommand; -import net.minecraft.command.ICommandSender; -import net.minecraft.server.MinecraftServer; - -public interface ISubCommand -{ - - String getSubCommandName(); - - ICommand getParentCommand(); - - String getArgUsage(ICommandSender commandSender); - - String getHelpText(); - - void processSubCommand(MinecraftServer server, ICommandSender commandSender, String[] args); -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/command/SubCommandBase.java b/src/main/java/WayofTime/bloodmagic/command/SubCommandBase.java deleted file mode 100644 index 0130f955..00000000 --- a/src/main/java/WayofTime/bloodmagic/command/SubCommandBase.java +++ /dev/null @@ -1,70 +0,0 @@ -package WayofTime.bloodmagic.command; - -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.command.ICommand; -import net.minecraft.command.ICommandSender; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.text.TextComponentString; - -import java.util.Locale; - -public abstract class SubCommandBase implements ISubCommand -{ - - private ICommand parent; - private String name; - - public SubCommandBase(ICommand parent, String name) - { - this.parent = parent; - this.name = name; - } - - @Override - public String getSubCommandName() - { - return name; - } - - @Override - public ICommand getParentCommand() - { - return parent; - } - - @Override - public void processSubCommand(MinecraftServer server, ICommandSender commandSender, String[] args) - { - - if (args.length == 0 && !getSubCommandName().equals("help")) - displayErrorString(commandSender, String.format(TextHelper.localizeEffect("commands.format.error"), capitalizeFirstLetter(getSubCommandName()), getArgUsage(commandSender))); - - if (isBounded(0, 2, args.length) && args[0].equals("help")) - displayHelpString(commandSender, String.format(TextHelper.localizeEffect("commands.format.help"), capitalizeFirstLetter(getSubCommandName()), getHelpText())); - } - - protected String capitalizeFirstLetter(String toCapital) - { - return String.valueOf(toCapital.charAt(0)).toUpperCase(Locale.ENGLISH) + toCapital.substring(1); - } - - protected boolean isBounded(int low, int high, int given) - { - return given > low && given < high; - } - - public static void displayHelpString(ICommandSender commandSender, String display, Object... info) - { - commandSender.addChatMessage(new TextComponentString(TextHelper.localizeEffect(display, info))); - } - - public static void displayErrorString(ICommandSender commandSender, String display, Object... info) - { - commandSender.addChatMessage(new TextComponentString(TextHelper.localizeEffect(display, info))); - } - - public static void displaySuccessString(ICommandSender commandSender, String display, Object... info) - { - commandSender.addChatMessage(new TextComponentString(TextHelper.localizeEffect(display, info))); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/command/package-info.java b/src/main/java/WayofTime/bloodmagic/command/package-info.java deleted file mode 100644 index bdfb59bd..00000000 --- a/src/main/java/WayofTime/bloodmagic/command/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault -package WayofTime.bloodmagic.command; - -import mcp.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandBind.java b/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandBind.java index 755bea76..ae6489d9 100644 --- a/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandBind.java +++ b/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandBind.java @@ -4,43 +4,31 @@ import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.iface.IBindable; import WayofTime.bloodmagic.api.util.helper.BindableHelper; import WayofTime.bloodmagic.api.util.helper.PlayerHelper; -import WayofTime.bloodmagic.command.SubCommandBase; import WayofTime.bloodmagic.util.helper.TextHelper; import com.google.common.base.Strings; -import net.minecraft.command.CommandBase; -import net.minecraft.command.ICommand; -import net.minecraft.command.ICommandSender; -import net.minecraft.command.PlayerNotFoundException; +import net.minecraft.command.*; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.server.MinecraftServer; import net.minecraft.util.text.TextComponentTranslation; -public class SubCommandBind extends SubCommandBase +public class SubCommandBind extends CommandBase { - - public SubCommandBind(ICommand parent) + @Override + public String getName() { - super(parent, "bind"); + return "bind"; } @Override - public String getArgUsage(ICommandSender commandSender) + public String getUsage(ICommandSender commandSender) { return TextHelper.localizeEffect("commands.bind.usage"); } @Override - public String getHelpText() + public void execute(MinecraftServer server, ICommandSender commandSender, String[] args) throws CommandException { - return TextHelper.localizeEffect("commands.bind.help"); - } - - @Override - public void processSubCommand(MinecraftServer server, ICommandSender commandSender, String[] args) - { - super.processSubCommand(server, commandSender, args); - if (commandSender.getEntityWorld().isRemote) return; @@ -52,7 +40,7 @@ public class SubCommandBind extends SubCommandBase ItemStack held = player.getHeldItemMainhand(); boolean bind = true; - if (held != null && held.getItem() instanceof IBindable) + if (held.getItem() instanceof IBindable) { if (args.length > 0) { @@ -77,20 +65,20 @@ public class SubCommandBind extends SubCommandBase { BindableHelper.setItemOwnerName(held, playerName); BindableHelper.setItemOwnerUUID(held, uuid); - commandSender.addChatMessage(new TextComponentTranslation("commands.bind.success")); + commandSender.sendMessage(new TextComponentTranslation("commands.bind.success")); } else { if (!Strings.isNullOrEmpty(((IBindable) held.getItem()).getOwnerUUID(held))) { held.getTagCompound().removeTag(Constants.NBT.OWNER_UUID); held.getTagCompound().removeTag(Constants.NBT.OWNER_NAME); - commandSender.addChatMessage(new TextComponentTranslation("commands.bind.remove.success")); + commandSender.sendMessage(new TextComponentTranslation("commands.bind.remove.success")); } } } } catch (PlayerNotFoundException e) { - commandSender.addChatMessage(new TextComponentTranslation(TextHelper.localizeEffect("commands.error.404"))); + commandSender.sendMessage(new TextComponentTranslation(TextHelper.localizeEffect("commands.error.404"))); } } diff --git a/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandHelp.java b/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandHelp.java deleted file mode 100644 index 22dfd1d6..00000000 --- a/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandHelp.java +++ /dev/null @@ -1,43 +0,0 @@ -package WayofTime.bloodmagic.command.sub; - -import WayofTime.bloodmagic.command.CommandBloodMagic; -import WayofTime.bloodmagic.command.ISubCommand; -import WayofTime.bloodmagic.command.SubCommandBase; -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.command.ICommand; -import net.minecraft.command.ICommandSender; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.text.TextComponentString; - -public class SubCommandHelp extends SubCommandBase -{ - - public SubCommandHelp(ICommand parent) - { - super(parent, "help"); - } - - @Override - public String getArgUsage(ICommandSender commandSender) - { - return TextHelper.localize("commands.help.usage"); - } - - @Override - public String getHelpText() - { - return TextHelper.localizeEffect("commands.help.help"); - } - - @Override - public void processSubCommand(MinecraftServer server, ICommandSender commandSender, String[] args) - { - super.processSubCommand(server, commandSender, args); - - if (args.length > 0) - return; - - for (ISubCommand subCommand : ((CommandBloodMagic) getParentCommand()).getSubCommands().values()) - commandSender.addChatMessage(new TextComponentString(TextHelper.localizeEffect("commands.format.help", capitalizeFirstLetter(subCommand.getSubCommandName()), subCommand.getArgUsage(commandSender)))); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandNetwork.java b/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandNetwork.java index 579309b9..f54f501d 100644 --- a/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandNetwork.java +++ b/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandNetwork.java @@ -2,45 +2,32 @@ package WayofTime.bloodmagic.command.sub; import WayofTime.bloodmagic.api.saving.SoulNetwork; import WayofTime.bloodmagic.api.util.helper.NetworkHelper; -import WayofTime.bloodmagic.command.SubCommandBase; +import WayofTime.bloodmagic.command.CommandBloodMagic; import WayofTime.bloodmagic.util.Utils; import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.command.CommandBase; -import net.minecraft.command.ICommand; -import net.minecraft.command.ICommandSender; -import net.minecraft.command.PlayerNotFoundException; +import net.minecraft.command.*; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.server.MinecraftServer; import net.minecraft.util.text.TextComponentString; import java.util.Locale; -public class SubCommandNetwork extends SubCommandBase +public class SubCommandNetwork extends CommandBase { - - public SubCommandNetwork(ICommand parent) - { - super(parent, "network"); + @Override + public String getName() { + return "network"; } @Override - public String getArgUsage(ICommandSender commandSender) + public String getUsage(ICommandSender commandSender) { return TextHelper.localizeEffect("commands.network.usage"); } @Override - public String getHelpText() + public void execute(MinecraftServer server, ICommandSender commandSender, String[] args) throws CommandException { - return TextHelper.localizeEffect("commands.network.help"); - } - - @Override - public void processSubCommand(MinecraftServer server, ICommandSender commandSender, String[] args) - { - super.processSubCommand(server, commandSender, args); - if (args.length > 1) { if (args[0].equalsIgnoreCase("help")) @@ -53,18 +40,18 @@ public class SubCommandNetwork extends SubCommandBase try { ValidCommands command = ValidCommands.valueOf(args[0].toUpperCase(Locale.ENGLISH)); - command.run(player, commandSender, isBounded(0, 2, args.length), args); + command.run(player, commandSender, args.length > 0 && args.length < 2, args); } catch (IllegalArgumentException e) { } } catch (PlayerNotFoundException e) { - displayErrorString(commandSender, e.getLocalizedMessage()); + CommandBloodMagic.displayErrorString(commandSender, e.getLocalizedMessage()); } } else { - displayErrorString(commandSender, "commands.error.arg.missing"); + CommandBloodMagic.displayErrorString(commandSender, "commands.error.arg.missing"); } } @@ -77,7 +64,7 @@ public class SubCommandNetwork extends SubCommandBase { if (displayHelp) { - displayHelpString(sender, this.help); + CommandBloodMagic.displayHelpString(sender, this.help); return; } @@ -87,14 +74,14 @@ public class SubCommandNetwork extends SubCommandBase { int amount = Integer.parseInt(args[2]); NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, amount); - displaySuccessString(sender, "commands.network.syphon.success", amount, player.getDisplayName().getFormattedText()); + CommandBloodMagic.displaySuccessString(sender, "commands.network.syphon.success", amount, player.getDisplayName().getFormattedText()); } else { - displayErrorString(sender, "commands.error.arg.invalid"); + CommandBloodMagic.displayErrorString(sender, "commands.error.arg.invalid"); } } else { - displayErrorString(sender, "commands.error.arg.missing"); + CommandBloodMagic.displayErrorString(sender, "commands.error.arg.missing"); } } }, @@ -105,7 +92,7 @@ public class SubCommandNetwork extends SubCommandBase { if (displayHelp) { - displayHelpString(sender, this.help); + CommandBloodMagic.displayHelpString(sender, this.help); return; } @@ -117,14 +104,14 @@ public class SubCommandNetwork extends SubCommandBase { int amount = Integer.parseInt(args[2]); int maxOrb = NetworkHelper.getMaximumForTier(network.getOrbTier()); - displaySuccessString(sender, "commands.network.add.success", network.add(amount, maxOrb), player.getDisplayName().getFormattedText()); + CommandBloodMagic.displaySuccessString(sender, "commands.network.add.success", network.add(amount, maxOrb), player.getDisplayName().getFormattedText()); } else { - displayErrorString(sender, "commands.error.arg.invalid"); + CommandBloodMagic.displayErrorString(sender, "commands.error.arg.invalid"); } } else { - displayErrorString(sender, "commands.error.arg.missing"); + CommandBloodMagic.displayErrorString(sender, "commands.error.arg.missing"); } } }, @@ -135,7 +122,7 @@ public class SubCommandNetwork extends SubCommandBase { if (displayHelp) { - displayHelpString(sender, this.help); + CommandBloodMagic.displayHelpString(sender, this.help); return; } @@ -147,14 +134,14 @@ public class SubCommandNetwork extends SubCommandBase { int amount = Integer.parseInt(args[2]); network.setCurrentEssence(amount); - displaySuccessString(sender, "commands.network.set.success", player.getDisplayName().getFormattedText(), amount); + CommandBloodMagic.displaySuccessString(sender, "commands.network.set.success", player.getDisplayName().getFormattedText(), amount); } else { - displayErrorString(sender, "commands.error.arg.invalid"); + CommandBloodMagic.displayErrorString(sender, "commands.error.arg.invalid"); } } else { - displayErrorString(sender, "commands.error.arg.missing"); + CommandBloodMagic.displayErrorString(sender, "commands.error.arg.missing"); } } }, @@ -165,14 +152,14 @@ public class SubCommandNetwork extends SubCommandBase { if (displayHelp) { - displayHelpString(sender, this.help); + CommandBloodMagic.displayHelpString(sender, this.help); return; } SoulNetwork network = NetworkHelper.getSoulNetwork(player); if (args.length > 1) - sender.addChatMessage(new TextComponentString(TextHelper.localizeEffect("tooltip.BloodMagic.sigil.divination.currentEssence", network.getCurrentEssence()))); + sender.sendMessage(new TextComponentString(TextHelper.localizeEffect("tooltip.bloodmagic.sigil.divination.currentEssence", network.getCurrentEssence()))); } }, @@ -183,7 +170,7 @@ public class SubCommandNetwork extends SubCommandBase { if (displayHelp) { - displayHelpString(sender, this.help, Integer.MAX_VALUE); + CommandBloodMagic.displayHelpString(sender, this.help, Integer.MAX_VALUE); return; } @@ -192,7 +179,7 @@ public class SubCommandNetwork extends SubCommandBase if (args.length > 1) { network.setCurrentEssence(Integer.MAX_VALUE); - displaySuccessString(sender, "commands.network.fill.success", player.getDisplayName().getFormattedText()); + CommandBloodMagic.displaySuccessString(sender, "commands.network.fill.success", player.getDisplayName().getFormattedText()); } } }, @@ -203,7 +190,7 @@ public class SubCommandNetwork extends SubCommandBase { if (displayHelp) { - displayHelpString(sender, this.help); + CommandBloodMagic.displayHelpString(sender, this.help); return; } @@ -213,7 +200,7 @@ public class SubCommandNetwork extends SubCommandBase { int maxOrb = NetworkHelper.getMaximumForTier(network.getOrbTier()); network.setCurrentEssence(maxOrb); - displaySuccessString(sender, "commands.network.cap.success", player.getDisplayName().getFormattedText()); + CommandBloodMagic.displaySuccessString(sender, "commands.network.cap.success", player.getDisplayName().getFormattedText()); } } }, diff --git a/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandOrb.java b/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandOrb.java index e66fbdb7..d982059b 100644 --- a/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandOrb.java +++ b/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandOrb.java @@ -3,44 +3,32 @@ package WayofTime.bloodmagic.command.sub; import WayofTime.bloodmagic.api.saving.SoulNetwork; import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.api.util.helper.PlayerHelper; -import WayofTime.bloodmagic.command.SubCommandBase; +import WayofTime.bloodmagic.command.CommandBloodMagic; import WayofTime.bloodmagic.util.Utils; import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.command.CommandBase; -import net.minecraft.command.ICommand; -import net.minecraft.command.ICommandSender; -import net.minecraft.command.PlayerNotFoundException; +import net.minecraft.command.*; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.server.MinecraftServer; import net.minecraft.util.text.TextComponentString; import java.util.Locale; -public class SubCommandOrb extends SubCommandBase +public class SubCommandOrb extends CommandBase { - - public SubCommandOrb(ICommand parent) - { - super(parent, "orb"); + @Override + public String getName() { + return "orb"; } @Override - public String getArgUsage(ICommandSender commandSender) + public String getUsage(ICommandSender commandSender) { return TextHelper.localizeEffect("commands.orb.usage"); } @Override - public String getHelpText() + public void execute(MinecraftServer server, ICommandSender commandSender, String[] args) throws CommandException { - return TextHelper.localizeEffect("commands.orb.help"); - } - - @Override - public void processSubCommand(MinecraftServer server, ICommandSender commandSender, String[] args) - { - super.processSubCommand(server, commandSender, args); - if (args.length > 0) { @@ -58,7 +46,7 @@ public class SubCommandOrb extends SubCommandBase String uuid = PlayerHelper.getUUIDFromPlayer(player).toString(); SoulNetwork network = NetworkHelper.getSoulNetwork(uuid); - boolean displayHelp = isBounded(0, 2, args.length); + boolean displayHelp = args.length > 0 && args.length < 2; try { @@ -68,7 +56,7 @@ public class SubCommandOrb extends SubCommandBase { if (displayHelp) { - displayHelpString(commandSender, ValidCommands.SET.help); + CommandBloodMagic.displayHelpString(commandSender, ValidCommands.SET.help); break; } @@ -78,14 +66,14 @@ public class SubCommandOrb extends SubCommandBase { int amount = Integer.parseInt(args[2]); network.setOrbTier(amount); - displaySuccessString(commandSender, "commands.success"); + CommandBloodMagic.displaySuccessString(commandSender, "commands.success"); } else { - displayErrorString(commandSender, "commands.error.arg.invalid"); + CommandBloodMagic.displayErrorString(commandSender, "commands.error.arg.invalid"); } } else { - displayErrorString(commandSender, "commands.error.arg.missing"); + CommandBloodMagic.displayErrorString(commandSender, "commands.error.arg.missing"); } break; @@ -94,23 +82,23 @@ public class SubCommandOrb extends SubCommandBase { if (displayHelp) { - displayHelpString(commandSender, ValidCommands.GET.help); + CommandBloodMagic.displayHelpString(commandSender, ValidCommands.GET.help); break; } if (args.length > 1) - commandSender.addChatMessage(new TextComponentString(TextHelper.localizeEffect("message.orb.currenttier", network.getOrbTier()))); + commandSender.sendMessage(new TextComponentString(TextHelper.localizeEffect("message.orb.currenttier", network.getOrbTier()))); break; } } } catch (IllegalArgumentException e) { - displayErrorString(commandSender, "commands.error.404"); + CommandBloodMagic.displayErrorString(commandSender, "commands.error.404"); } } catch (PlayerNotFoundException e) { - displayErrorString(commandSender, "commands.error.404"); + CommandBloodMagic.displayErrorString(commandSender, "commands.error.404"); } } } diff --git a/src/main/java/WayofTime/bloodmagic/command/sub/package-info.java b/src/main/java/WayofTime/bloodmagic/command/sub/package-info.java deleted file mode 100644 index 04788ab8..00000000 --- a/src/main/java/WayofTime/bloodmagic/command/sub/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault -package WayofTime.bloodmagic.command.sub; - -import mcp.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/compat/guideapi/CompatibilityGuideAPI.java b/src/main/java/WayofTime/bloodmagic/compat/guideapi/CompatibilityGuideAPI.java index 138544cf..877d967a 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/guideapi/CompatibilityGuideAPI.java +++ b/src/main/java/WayofTime/bloodmagic/compat/guideapi/CompatibilityGuideAPI.java @@ -14,7 +14,7 @@ import net.minecraftforge.oredict.ShapelessOreRecipe; public class CompatibilityGuideAPI implements ICompatibility { - private static IRecipe guideRecipe = null; + static IRecipe guideRecipe = null; private static boolean worldFlag; @Override @@ -46,9 +46,11 @@ public class CompatibilityGuideAPI implements ICompatibility { if (!worldFlag) { GameRegistry.addRecipe(guideRecipe); + GuideBloodMagic.handleBookRecipe(true); worldFlag = true; } else { CraftingManager.getInstance().getRecipeList().remove(guideRecipe); + GuideBloodMagic.handleBookRecipe(false); worldFlag = false; } break; diff --git a/src/main/java/WayofTime/bloodmagic/compat/guideapi/GuideBloodMagic.java b/src/main/java/WayofTime/bloodmagic/compat/guideapi/GuideBloodMagic.java index dc06383b..a0f65082 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/guideapi/GuideBloodMagic.java +++ b/src/main/java/WayofTime/bloodmagic/compat/guideapi/GuideBloodMagic.java @@ -6,7 +6,6 @@ import WayofTime.bloodmagic.registry.ModBlocks; import WayofTime.bloodmagic.registry.ModItems; import amerifrance.guideapi.api.GuideAPI; import amerifrance.guideapi.api.impl.Book; -import amerifrance.guideapi.api.util.NBTBookTags; import amerifrance.guideapi.category.CategoryItemStack; import net.minecraft.item.ItemStack; import net.minecraftforge.fml.common.FMLCommonHandler; @@ -42,9 +41,13 @@ public class GuideBloodMagic // guideBook.addCategory(new CategoryItemStack(CategorySpell.buildCategory(), "guide.BloodMagic.category.spell", new ItemStack(ModItems.ritualDiviner))); } - public static void initJEIBlacklist() + public static void handleBookRecipe(boolean add) { - if (Loader.isModLoaded("JEI")) - BloodMagicPlugin.jeiHelper.getNbtIgnoreList().ignoreNbtTagNames(GuideAPI.guideBook, NBTBookTags.BOOK_TAG, NBTBookTags.CATEGORY_PAGE_TAG, NBTBookTags.CATEGORY_TAG, NBTBookTags.ENTRY_PAGE_TAG, NBTBookTags.ENTRY_TAG, NBTBookTags.KEY_TAG, NBTBookTags.PAGE_TAG); + if (Loader.isModLoaded("JEI")) { + if (add) + BloodMagicPlugin.jeiRuntime.getRecipeRegistry().addRecipe(CompatibilityGuideAPI.guideRecipe); + else + BloodMagicPlugin.jeiRuntime.getRecipeRegistry().removeRecipe(CompatibilityGuideAPI.guideRecipe); + } } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/BloodMagicPlugin.java b/src/main/java/WayofTime/bloodmagic/compat/jei/BloodMagicPlugin.java index 9399aee5..21cfd340 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/BloodMagicPlugin.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/BloodMagicPlugin.java @@ -39,6 +39,7 @@ import WayofTime.bloodmagic.registry.ModItems; public class BloodMagicPlugin extends BlankModPlugin { public static IJeiHelpers jeiHelper; + public static IJeiRuntime jeiRuntime; @Override public void register(@Nonnull IModRegistry registry) @@ -56,8 +57,8 @@ public class BloodMagicPlugin extends BlankModPlugin registry.addRecipes(AlchemyTableRecipeMaker.getRecipes()); registry.addRecipes(ArmourDowngradeRecipeMaker.getRecipes()); - registry.addDescription(new ItemStack(ModItems.ALTAR_MAKER), "jei.BloodMagic.desc.altarBuilder"); - registry.addDescription(new ItemStack(ModItems.MONSTER_SOUL), "jei.BloodMagic.desc.demonicWill"); + registry.addDescription(new ItemStack(ModItems.ALTAR_MAKER), "jei.bloodmagic.desc.altarBuilder"); + registry.addDescription(new ItemStack(ModItems.MONSTER_SOUL), "jei.bloodmagic.desc.demonicWill"); jeiHelper.getItemBlacklist().addItemToBlacklist(new ItemStack(ModBlocks.BLOOD_LIGHT)); jeiHelper.getItemBlacklist().addItemToBlacklist(new ItemStack(ModBlocks.SPECTRAL_BLOCK)); @@ -78,8 +79,6 @@ public class BloodMagicPlugin extends BlankModPlugin } } - jeiHelper.getSubtypeRegistry().useNbtForSubtypes(Item.getItemFromBlock(ModBlocks.BLOOD_TANK)); - registry.addRecipeClickArea(GuiSoulForge.class, 115, 15, 16, 88, Constants.Compat.JEI_CATEGORY_SOULFORGE); registry.addRecipeCategoryCraftingItem(new ItemStack(ModBlocks.ALTAR), Constants.Compat.JEI_CATEGORY_ALTAR); @@ -88,15 +87,15 @@ public class BloodMagicPlugin extends BlankModPlugin registry.addRecipeCategoryCraftingItem(new ItemStack(ModItems.ARCANE_ASHES), Constants.Compat.JEI_CATEGORY_BINDING); registry.addRecipeCategoryCraftingItem(new ItemStack(ModBlocks.ALCHEMY_TABLE), Constants.Compat.JEI_CATEGORY_ALCHEMYTABLE); registry.addRecipeCategoryCraftingItem(new ItemStack(ModBlocks.RITUAL_CONTROLLER), Constants.Compat.JEI_CATEGORY_ARMOURDOWNGRADE); + } - jeiHelper.getNbtIgnoreList().ignoreNbtTagNames(Constants.NBT.OWNER_UUID); - jeiHelper.getNbtIgnoreList().ignoreNbtTagNames(Constants.NBT.OWNER_NAME); - jeiHelper.getNbtIgnoreList().ignoreNbtTagNames(Constants.NBT.USES); - jeiHelper.getNbtIgnoreList().ignoreNbtTagNames(Constants.NBT.SOULS); - jeiHelper.getNbtIgnoreList().ignoreNbtTagNames(Constants.NBT.X_COORD); - jeiHelper.getNbtIgnoreList().ignoreNbtTagNames(Constants.NBT.Y_COORD); - jeiHelper.getNbtIgnoreList().ignoreNbtTagNames(Constants.NBT.Z_COORD); - jeiHelper.getNbtIgnoreList().ignoreNbtTagNames(Constants.NBT.DIMENSION_ID); - jeiHelper.getNbtIgnoreList().ignoreNbtTagNames(Constants.NBT.ITEM_INVENTORY); + @Override + public void registerItemSubtypes(ISubtypeRegistry subtypeRegistry) { + subtypeRegistry.useNbtForSubtypes(Item.getItemFromBlock(ModBlocks.BLOOD_TANK)); + } + + @Override + public void onRuntimeAvailable(IJeiRuntime runtime) { + jeiRuntime = runtime; } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/CompatibilityJustEnoughItems.java b/src/main/java/WayofTime/bloodmagic/compat/jei/CompatibilityJustEnoughItems.java deleted file mode 100644 index dc95a10d..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/CompatibilityJustEnoughItems.java +++ /dev/null @@ -1,24 +0,0 @@ -package WayofTime.bloodmagic.compat.jei; - -import WayofTime.bloodmagic.compat.ICompatibility; - -public class CompatibilityJustEnoughItems implements ICompatibility -{ - @Override - public void loadCompatibility(InitializationPhase phase) - { - - } - - @Override - public String getModId() - { - return "JEI"; - } - - @Override - public boolean enableCompat() - { - return true; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyArray/AlchemyArrayCraftingCategory.java b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyArray/AlchemyArrayCraftingCategory.java index 72653f5f..c2ffb1b1 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyArray/AlchemyArrayCraftingCategory.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyArray/AlchemyArrayCraftingCategory.java @@ -1,12 +1,15 @@ package WayofTime.bloodmagic.compat.jei.alchemyArray; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import mezz.jei.api.gui.IDrawable; import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.ingredients.IIngredients; import mezz.jei.api.recipe.IRecipeCategory; import mezz.jei.api.recipe.IRecipeWrapper; import net.minecraft.client.Minecraft; +import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.compat.jei.BloodMagicPlugin; @@ -21,7 +24,7 @@ public class AlchemyArrayCraftingCategory implements IRecipeCategory @Nonnull private final IDrawable background = BloodMagicPlugin.jeiHelper.getGuiHelper().createDrawable(new ResourceLocation(Constants.Mod.DOMAIN + "gui/jei/binding.png"), 0, 0, 100, 30); @Nonnull - private final String localizedName = TextHelper.localize("jei.BloodMagic.recipe.alchemyArrayCrafting"); + private final String localizedName = TextHelper.localize("jei.bloodmagic.recipe.alchemyArrayCrafting"); @Nonnull @Override @@ -50,14 +53,15 @@ public class AlchemyArrayCraftingCategory implements IRecipeCategory } + @Nullable @Override - public void drawAnimations(Minecraft minecraft) + public IDrawable getIcon() { - + return null; } @Override - public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull IRecipeWrapper recipeWrapper) + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) { recipeLayout.getItemStacks().init(INPUT_SLOT, true, 0, 5); recipeLayout.getItemStacks().init(CATALYST_SLOT, true, 29, 3); @@ -65,10 +69,19 @@ public class AlchemyArrayCraftingCategory implements IRecipeCategory if (recipeWrapper instanceof AlchemyArrayCraftingRecipeJEI) { - AlchemyArrayCraftingRecipeJEI alchemyArrayWrapper = (AlchemyArrayCraftingRecipeJEI) recipeWrapper; - recipeLayout.getItemStacks().set(INPUT_SLOT, alchemyArrayWrapper.getInputs()); - recipeLayout.getItemStacks().set(CATALYST_SLOT, alchemyArrayWrapper.getCatalyst()); - recipeLayout.getItemStacks().set(OUTPUT_SLOT, alchemyArrayWrapper.getOutputs()); + recipeLayout.getItemStacks().set(INPUT_SLOT, ingredients.getInputs(ItemStack.class).get(0)); + recipeLayout.getItemStacks().set(CATALYST_SLOT, ingredients.getInputs(ItemStack.class).get(ingredients.getInputs(ItemStack.class).size() - 1)); + recipeLayout.getItemStacks().set(OUTPUT_SLOT, ingredients.getOutputs(ItemStack.class).get(0)); } } + + @Override + public void drawAnimations(Minecraft minecraft) { + + } + + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper) { + + } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyArray/AlchemyArrayCraftingRecipeHandler.java b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyArray/AlchemyArrayCraftingRecipeHandler.java index 0d6f2acb..efcd0344 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyArray/AlchemyArrayCraftingRecipeHandler.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyArray/AlchemyArrayCraftingRecipeHandler.java @@ -15,14 +15,6 @@ public class AlchemyArrayCraftingRecipeHandler implements IRecipeHandler 0 && recipe.getOutputs().size() > 0; + return true; + } + + @Override + public String getRecipeCategoryUid() { + return null; } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyArray/AlchemyArrayCraftingRecipeJEI.java b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyArray/AlchemyArrayCraftingRecipeJEI.java index fa74d805..1dbb5f98 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyArray/AlchemyArrayCraftingRecipeJEI.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyArray/AlchemyArrayCraftingRecipeJEI.java @@ -1,11 +1,12 @@ package WayofTime.bloodmagic.compat.jei.alchemyArray; -import java.util.Collections; import java.util.List; import javax.annotation.Nonnull; import javax.annotation.Nullable; +import com.google.common.collect.Lists; +import mezz.jei.api.ingredients.IIngredients; import mezz.jei.api.recipe.BlankRecipeWrapper; import net.minecraft.item.ItemStack; @@ -13,10 +14,8 @@ public class AlchemyArrayCraftingRecipeJEI extends BlankRecipeWrapper { @Nonnull private final List inputs; - @Nullable private final ItemStack catalyst; - @Nonnull private final ItemStack output; @@ -27,22 +26,14 @@ public class AlchemyArrayCraftingRecipeJEI extends BlankRecipeWrapper this.output = output; } - @Override - @Nonnull - public List getInputs() - { - return inputs; - } - public ItemStack getCatalyst() { return catalyst; } @Override - @Nonnull - public List getOutputs() - { - return Collections.singletonList(output); + public void getIngredients(IIngredients ingredients) { + ingredients.setInputLists(ItemStack.class, Lists.newArrayList(inputs, Lists.newArrayList(catalyst))); + ingredients.setOutput(ItemStack.class, output); } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyArray/package-info.java b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyArray/package-info.java deleted file mode 100644 index b9a88570..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyArray/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault -package WayofTime.bloodmagic.compat.jei.alchemyArray; - -import mcp.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeCategory.java b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeCategory.java index 7f4c84d7..5cbaaf8a 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeCategory.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeCategory.java @@ -1,14 +1,14 @@ package WayofTime.bloodmagic.compat.jei.alchemyTable; -import java.util.ArrayList; -import java.util.List; - import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import com.google.common.collect.Lists; import mezz.jei.api.gui.ICraftingGridHelper; import mezz.jei.api.gui.IDrawable; import mezz.jei.api.gui.IGuiItemStackGroup; import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.ingredients.IIngredients; import mezz.jei.api.recipe.IRecipeCategory; import mezz.jei.api.recipe.IRecipeWrapper; import net.minecraft.client.Minecraft; @@ -27,7 +27,7 @@ public class AlchemyTableRecipeCategory implements IRecipeCategory @Nonnull private final IDrawable background = BloodMagicPlugin.jeiHelper.getGuiHelper().createDrawable(new ResourceLocation(Constants.Mod.DOMAIN + "gui/jei/alchemyTable.png"), 0, 0, 118, 40); @Nonnull - private final String localizedName = TextHelper.localize("jei.BloodMagic.recipe.alchemyTable"); + private final String localizedName = TextHelper.localize("jei.bloodmagic.recipe.alchemyTable"); @Nonnull private final ICraftingGridHelper craftingGridHelper; @@ -63,15 +63,16 @@ public class AlchemyTableRecipeCategory implements IRecipeCategory } + @Nullable @Override - public void drawAnimations(Minecraft minecraft) + public IDrawable getIcon() { - + return null; } - @Override @SuppressWarnings("unchecked") - public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull IRecipeWrapper recipeWrapper) + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) { IGuiItemStackGroup guiItemStacks = recipeLayout.getItemStacks(); @@ -89,10 +90,19 @@ public class AlchemyTableRecipeCategory implements IRecipeCategory if (recipeWrapper instanceof AlchemyTableRecipeJEI) { - AlchemyTableRecipeJEI recipe = (AlchemyTableRecipeJEI) recipeWrapper; - guiItemStacks.set(ORB_SLOT, (ArrayList) recipe.getInputs().get(1)); - craftingGridHelper.setOutput(guiItemStacks, recipe.getOutputs()); - craftingGridHelper.setInput(guiItemStacks, (List) recipe.getInputs().get(0), 3, 2); + guiItemStacks.set(ORB_SLOT, ingredients.getInputs(ItemStack.class).get(1)); + craftingGridHelper.setOutput(guiItemStacks, Lists.newArrayList(ingredients.getOutputs(ItemStack.class).get(0))); + craftingGridHelper.setInputStacks(guiItemStacks, ingredients.getInputs(ItemStack.class), 3, 2); } } + + @Override + public void drawAnimations(Minecraft minecraft) { + + } + + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper) { + + } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeHandler.java b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeHandler.java index 91755902..a6886aa0 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeHandler.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeHandler.java @@ -15,14 +15,6 @@ public class AlchemyTableRecipeHandler implements IRecipeHandler 0 && recipe.getOutputs().size() > 0; + return true; + } + + @Override + public String getRecipeCategoryUid() { + return null; } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeJEI.java b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeJEI.java index e0a00fc9..9c258297 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeJEI.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeJEI.java @@ -1,18 +1,14 @@ package WayofTime.bloodmagic.compat.jei.alchemyTable; import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; import java.util.List; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - +import WayofTime.bloodmagic.compat.jei.BloodMagicPlugin; import lombok.Getter; +import mezz.jei.api.ingredients.IIngredients; import mezz.jei.api.recipe.BlankRecipeWrapper; import net.minecraft.item.ItemStack; import WayofTime.bloodmagic.api.recipe.AlchemyTableRecipe; -import WayofTime.bloodmagic.api.registry.OrbRegistry; import WayofTime.bloodmagic.util.helper.TextHelper; public class AlchemyTableRecipeJEI extends BlankRecipeWrapper @@ -20,42 +16,27 @@ public class AlchemyTableRecipeJEI extends BlankRecipeWrapper @Getter private AlchemyTableRecipe recipe; -// @Getter -// private ArrayList validGems = new ArrayList(); - public AlchemyTableRecipeJEI(AlchemyTableRecipe recipe) { this.recipe = recipe; } @Override - @Nonnull - public List getInputs() - { - ArrayList ret = new ArrayList(); - ret.add(recipe.getInput()); - ret.add(OrbRegistry.getOrbsDownToTier(recipe.getTierRequired())); - return ret; + public void getIngredients(IIngredients ingredients) { + List> expanded = BloodMagicPlugin.jeiHelper.getStackHelper().expandRecipeItemStackInputs(recipe.getInput()); + ingredients.setInputLists(ItemStack.class, expanded); + ingredients.setOutput(ItemStack.class, recipe.getRecipeOutput(new ArrayList())); } - @Override - @Nonnull - public List getOutputs() - { - return Collections.singletonList(recipe.getRecipeOutput(new ArrayList())); - } - - @Nullable @Override public List getTooltipStrings(int mouseX, int mouseY) { ArrayList ret = new ArrayList(); if (mouseX >= 58 && mouseX <= 78 && mouseY >= 21 && mouseY <= 34) { - ret.add(TextHelper.localize("jei.BloodMagic.recipe.lpDrained", recipe.getLpDrained())); - ret.add(TextHelper.localize("jei.BloodMagic.recipe.ticksRequired", recipe.getTicksRequired())); - return ret; + ret.add(TextHelper.localize("jei.bloodmagic.recipe.lpDrained", recipe.getLpDrained())); + ret.add(TextHelper.localize("jei.bloodmagic.recipe.ticksRequired", recipe.getTicksRequired())); } - return null; + return ret; } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/package-info.java b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/package-info.java deleted file mode 100644 index c7a5c86b..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault -package WayofTime.bloodmagic.compat.jei.alchemyTable; - -import mcp.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeCategory.java b/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeCategory.java index a4a7fc70..7bf9597b 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeCategory.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeCategory.java @@ -1,11 +1,13 @@ package WayofTime.bloodmagic.compat.jei.altar; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import java.util.List; import mezz.jei.api.gui.IDrawable; import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.ingredients.IIngredients; import mezz.jei.api.recipe.IRecipeCategory; import mezz.jei.api.recipe.IRecipeWrapper; import net.minecraft.client.Minecraft; @@ -23,7 +25,7 @@ public class AltarRecipeCategory implements IRecipeCategory @Nonnull private final IDrawable background = BloodMagicPlugin.jeiHelper.getGuiHelper().createDrawable(new ResourceLocation(Constants.Mod.DOMAIN + "gui/jei/altar.png"), 3, 4, 155, 65); @Nonnull - private final String localizedName = TextHelper.localize("jei.BloodMagic.recipe.altar"); + private final String localizedName = TextHelper.localize("jei.bloodmagic.recipe.altar"); @Nonnull @Override @@ -52,24 +54,32 @@ public class AltarRecipeCategory implements IRecipeCategory } + @Nullable @Override - public void drawAnimations(Minecraft minecraft) - { - + public IDrawable getIcon() { + return null; } @Override - public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull IRecipeWrapper recipeWrapper) + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) { recipeLayout.getItemStacks().init(INPUT_SLOT, true, 31, 0); recipeLayout.getItemStacks().init(OUTPUT_SLOT, false, 125, 30); if (recipeWrapper instanceof AltarRecipeJEI) { - AltarRecipeJEI altarRecipeWrapper = (AltarRecipeJEI) recipeWrapper; - List> inputs = altarRecipeWrapper.getInputs(); - recipeLayout.getItemStacks().set(INPUT_SLOT, inputs.get(0)); - recipeLayout.getItemStacks().set(OUTPUT_SLOT, altarRecipeWrapper.getOutputs()); + recipeLayout.getItemStacks().set(INPUT_SLOT, ingredients.getInputs(ItemStack.class).get(0)); + recipeLayout.getItemStacks().set(OUTPUT_SLOT, ingredients.getOutputs(ItemStack.class).get(0)); } } + + @Override + public void drawAnimations(Minecraft minecraft) { + + } + + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper) { + + } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeHandler.java b/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeHandler.java index dc414295..3a9be064 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeHandler.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeHandler.java @@ -15,14 +15,6 @@ public class AltarRecipeHandler implements IRecipeHandler return AltarRecipeJEI.class; } - @Deprecated - @Nonnull - @Override - public String getRecipeCategoryUid() - { - return Constants.Compat.JEI_CATEGORY_ALTAR; - } - @Override public String getRecipeCategoryUid(@Nonnull AltarRecipeJEI recipe) { @@ -39,6 +31,11 @@ public class AltarRecipeHandler implements IRecipeHandler @Override public boolean isRecipeValid(@Nonnull AltarRecipeJEI recipe) { - return recipe.getInputs().size() > 0 && recipe.getOutputs().size() > 0; + return true; + } + + @Override + public String getRecipeCategoryUid() { + return null; } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeJEI.java b/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeJEI.java index 7b9e00cc..22558ba6 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeJEI.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeJEI.java @@ -2,13 +2,12 @@ package WayofTime.bloodmagic.compat.jei.altar; import java.awt.Color; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import javax.annotation.Nonnull; -import javax.annotation.Nullable; import WayofTime.bloodmagic.util.helper.NumeralHelper; +import mezz.jei.api.ingredients.IIngredients; import mezz.jei.api.recipe.BlankRecipeWrapper; import net.minecraft.client.Minecraft; import net.minecraft.item.ItemStack; @@ -18,7 +17,6 @@ public class AltarRecipeJEI extends BlankRecipeWrapper { @Nonnull private final List input; - @Nonnull private final ItemStack output; @@ -31,35 +29,27 @@ public class AltarRecipeJEI extends BlankRecipeWrapper this.input = input; this.output = output; - this.infoString = new String[] { TextHelper.localize("jei.BloodMagic.recipe.requiredTier", NumeralHelper.toRoman(tier)), TextHelper.localize("jei.BloodMagic.recipe.requiredLP", requiredLP) }; + this.infoString = new String[] { TextHelper.localize("jei.bloodmagic.recipe.requiredTier", NumeralHelper.toRoman(tier)), TextHelper.localize("jei.bloodmagic.recipe.requiredLP", requiredLP) }; this.consumptionRate = consumptionRate; this.drainRate = drainRate; } @Override - public List> getInputs() - { - return Collections.singletonList(input); + public void getIngredients(IIngredients ingredients) { + ingredients.setInputs(ItemStack.class, input); + ingredients.setOutput(ItemStack.class, output); } - @Override - public List getOutputs() - { - return Collections.singletonList(output); - } - - @Nullable @Override public List getTooltipStrings(int mouseX, int mouseY) { ArrayList ret = new ArrayList(); if (mouseX >= 13 && mouseX <= 64 && mouseY >= 27 && mouseY <= 58) { - ret.add(TextHelper.localize("jei.BloodMagic.recipe.consumptionRate", consumptionRate)); - ret.add(TextHelper.localize("jei.BloodMagic.recipe.drainRate", drainRate)); - return ret; + ret.add(TextHelper.localize("jei.bloodmagic.recipe.consumptionRate", consumptionRate)); + ret.add(TextHelper.localize("jei.bloodmagic.recipe.drainRate", drainRate)); } - return null; + return ret; } @Override diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/altar/package-info.java b/src/main/java/WayofTime/bloodmagic/compat/jei/altar/package-info.java deleted file mode 100644 index 4fb6eef6..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/altar/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault -package WayofTime.bloodmagic.compat.jei.altar; - -import mcp.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeCategory.java b/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeCategory.java index 83e8efd5..b264427c 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeCategory.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeCategory.java @@ -1,14 +1,13 @@ package WayofTime.bloodmagic.compat.jei.armourDowngrade; -import java.util.ArrayList; -import java.util.List; - import javax.annotation.Nonnull; +import javax.annotation.Nullable; import mezz.jei.api.gui.ICraftingGridHelper; import mezz.jei.api.gui.IDrawable; import mezz.jei.api.gui.IGuiItemStackGroup; import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.ingredients.IIngredients; import mezz.jei.api.recipe.IRecipeCategory; import mezz.jei.api.recipe.IRecipeWrapper; import net.minecraft.client.Minecraft; @@ -27,7 +26,7 @@ public class ArmourDowngradeRecipeCategory implements IRecipeCategory @Nonnull private final IDrawable background = BloodMagicPlugin.jeiHelper.getGuiHelper().createDrawable(new ResourceLocation(Constants.Mod.DOMAIN + "gui/jei/alchemyTable.png"), 0, 0, 118, 40); @Nonnull - private final String localizedName = TextHelper.localize("jei.BloodMagic.recipe.armourDowngrade"); + private final String localizedName = TextHelper.localize("jei.bloodmagic.recipe.armourDowngrade"); @Nonnull private final ICraftingGridHelper craftingGridHelper; @@ -63,15 +62,15 @@ public class ArmourDowngradeRecipeCategory implements IRecipeCategory } + @Nullable @Override - public void drawAnimations(Minecraft minecraft) - { - + public IDrawable getIcon() { + return null; } @Override @SuppressWarnings("unchecked") - public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull IRecipeWrapper recipeWrapper) + public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull IRecipeWrapper recipeWrapper, IIngredients ingredients) { IGuiItemStackGroup guiItemStacks = recipeLayout.getItemStacks(); @@ -89,10 +88,20 @@ public class ArmourDowngradeRecipeCategory implements IRecipeCategory if (recipeWrapper instanceof ArmourDowngradeRecipeJEI) { - ArmourDowngradeRecipeJEI recipe = (ArmourDowngradeRecipeJEI) recipeWrapper; - guiItemStacks.set(KEY_SLOT, (ArrayList) recipe.getInputs().get(1)); - craftingGridHelper.setOutput(guiItemStacks, recipe.getOutputs()); - craftingGridHelper.setInput(guiItemStacks, (List) recipe.getInputs().get(0), 3, 2); + guiItemStacks.set(KEY_SLOT, ingredients.getInputs(ItemStack.class).get(ingredients.getInputs(ItemStack.class).size() - 1)); + ingredients.getInputs(ItemStack.class).remove(ingredients.getInputs(ItemStack.class).size() - 1); + guiItemStacks.set(OUTPUT_SLOT, ingredients.getOutputs(ItemStack.class).get(0)); + craftingGridHelper.setInputStacks(guiItemStacks, ingredients.getInputs(ItemStack.class), 3, 2); } } + + @Override + public void drawAnimations(Minecraft minecraft) { + + } + + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper) { + + } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeHandler.java b/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeHandler.java index 757f1c32..06360885 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeHandler.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeHandler.java @@ -15,14 +15,6 @@ public class ArmourDowngradeRecipeHandler implements IRecipeHandler 0 && recipe.getOutputs().size() > 0; + return true; + } + + @Override + public String getRecipeCategoryUid() { + return null; } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeJEI.java b/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeJEI.java index a66d53f6..e412380a 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeJEI.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeJEI.java @@ -1,65 +1,34 @@ package WayofTime.bloodmagic.compat.jei.armourDowngrade; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - +import WayofTime.bloodmagic.compat.jei.BloodMagicPlugin; +import com.google.common.collect.Lists; import lombok.Getter; +import mezz.jei.api.ingredients.IIngredients; import mezz.jei.api.recipe.BlankRecipeWrapper; import net.minecraft.item.ItemStack; import WayofTime.bloodmagic.api.recipe.LivingArmourDowngradeRecipe; import WayofTime.bloodmagic.api.util.helper.ItemHelper.LivingUpgrades; import WayofTime.bloodmagic.registry.ModItems; -import com.google.common.collect.Lists; +import java.util.List; public class ArmourDowngradeRecipeJEI extends BlankRecipeWrapper { @Getter private LivingArmourDowngradeRecipe recipe; -// @Getter -// private ArrayList validGems = new ArrayList(); - public ArmourDowngradeRecipeJEI(LivingArmourDowngradeRecipe recipe) { this.recipe = recipe; } @Override - @Nonnull - public List getInputs() - { - ArrayList ret = new ArrayList(); - ret.add(recipe.getInput()); - ret.add(Lists.newArrayList(recipe.getKey())); - return ret; - } - - @Override - @Nonnull - public List getOutputs() - { + public void getIngredients(IIngredients ingredients) { + List> expanded = BloodMagicPlugin.jeiHelper.getStackHelper().expandRecipeItemStackInputs(recipe.getInput()); + expanded.add(Lists.newArrayList(recipe.getKey())); + ingredients.setInputLists(ItemStack.class, expanded); ItemStack upgradeStack = new ItemStack(ModItems.UPGRADE_TOME); LivingUpgrades.setUpgrade(upgradeStack, recipe.getRecipeOutput()); - return Collections.singletonList(upgradeStack); - } - - @Nullable - @Override - public List getTooltipStrings(int mouseX, int mouseY) - { -// ArrayList ret = new ArrayList(); -// if (mouseX >= 58 && mouseX <= 78 && mouseY >= 21 && mouseY <= 34) -// { -// ret.add(TextHelper.localize("jei.BloodMagic.recipe.lpDrained", recipe.getLpDrained())); -// ret.add(TextHelper.localize("jei.BloodMagic.recipe.ticksRequired", recipe.getTicksRequired())); -// return ret; -// } - return null; + ingredients.setOutput(ItemStack.class, upgradeStack); } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/package-info.java b/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/package-info.java deleted file mode 100644 index cd9bdf10..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault -package WayofTime.bloodmagic.compat.jei.armourDowngrade; - -import mcp.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeCategory.java b/src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeCategory.java index cc341cd1..1479d45d 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeCategory.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeCategory.java @@ -1,9 +1,11 @@ package WayofTime.bloodmagic.compat.jei.binding; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import mezz.jei.api.gui.IDrawable; import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.ingredients.IIngredients; import mezz.jei.api.recipe.IRecipeCategory; import mezz.jei.api.recipe.IRecipeWrapper; import net.minecraft.client.Minecraft; @@ -22,7 +24,7 @@ public class BindingRecipeCategory implements IRecipeCategory @Nonnull private final IDrawable background = BloodMagicPlugin.jeiHelper.getGuiHelper().createDrawable(new ResourceLocation(Constants.Mod.DOMAIN + "gui/jei/binding.png"), 0, 0, 100, 30); @Nonnull - private final String localizedName = TextHelper.localize("jei.BloodMagic.recipe.binding"); + private final String localizedName = TextHelper.localize("jei.bloodmagic.recipe.binding"); @Nonnull @Override @@ -51,26 +53,33 @@ public class BindingRecipeCategory implements IRecipeCategory } + @Nullable @Override - public void drawAnimations(Minecraft minecraft) - { - + public IDrawable getIcon() { + return null; } @Override - @SuppressWarnings("unchecked") - public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull IRecipeWrapper recipeWrapper) - { + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) { recipeLayout.getItemStacks().init(INPUT_SLOT, true, 0, 5); recipeLayout.getItemStacks().init(CATALYST_SLOT, true, 29, 3); recipeLayout.getItemStacks().init(OUTPUT_SLOT, false, 73, 5); if (recipeWrapper instanceof BindingRecipeJEI) { - BindingRecipeJEI bindingRecipe = (BindingRecipeJEI) recipeWrapper; - recipeLayout.getItemStacks().set(INPUT_SLOT, bindingRecipe.getInputs()); - recipeLayout.getItemStacks().set(CATALYST_SLOT, bindingRecipe.getCatalyst()); - recipeLayout.getItemStacks().set(OUTPUT_SLOT, bindingRecipe.getOutputs()); + recipeLayout.getItemStacks().set(INPUT_SLOT, ingredients.getInputs(ItemStack.class).get(0)); + recipeLayout.getItemStacks().set(CATALYST_SLOT, ingredients.getInputs(ItemStack.class).get(1)); + recipeLayout.getItemStacks().set(OUTPUT_SLOT, ingredients.getOutputs(ItemStack.class).get(0)); } } + + @Override + public void drawAnimations(Minecraft minecraft) { + + } + + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper) { + + } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeHandler.java b/src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeHandler.java index 34981bf9..7439034b 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeHandler.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeHandler.java @@ -15,14 +15,6 @@ public class BindingRecipeHandler implements IRecipeHandler return BindingRecipeJEI.class; } - @Deprecated - @Nonnull - @Override - public String getRecipeCategoryUid() - { - return Constants.Compat.JEI_CATEGORY_BINDING; - } - @Override public String getRecipeCategoryUid(@Nonnull BindingRecipeJEI recipe) { @@ -39,6 +31,11 @@ public class BindingRecipeHandler implements IRecipeHandler @Override public boolean isRecipeValid(@Nonnull BindingRecipeJEI recipe) { - return recipe.getInputs().size() > 0 && recipe.getOutputs().size() > 0; + return true; + } + + @Override + public String getRecipeCategoryUid() { + return null; } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeJEI.java b/src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeJEI.java index 7081c921..b73dce1b 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeJEI.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeJEI.java @@ -1,10 +1,11 @@ package WayofTime.bloodmagic.compat.jei.binding; -import java.util.Collections; import java.util.List; import javax.annotation.Nonnull; +import com.google.common.collect.Lists; +import mezz.jei.api.ingredients.IIngredients; import mezz.jei.api.recipe.BlankRecipeWrapper; import net.minecraft.item.ItemStack; @@ -28,21 +29,9 @@ public class BindingRecipeJEI extends BlankRecipeWrapper } @Override - @Nonnull - public List getInputs() - { - return inputs; - } + public void getIngredients(IIngredients ingredients) { - public ItemStack getCatalyst() - { - return catalyst; - } - - @Override - @Nonnull - public List getOutputs() - { - return Collections.singletonList(output); + ingredients.setInputLists(ItemStack.class, Lists.newArrayList(inputs, Lists.newArrayList(catalyst))); + ingredients.setOutput(ItemStack.class, output); } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/binding/package-info.java b/src/main/java/WayofTime/bloodmagic/compat/jei/binding/package-info.java deleted file mode 100644 index b63096ff..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/binding/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault -package WayofTime.bloodmagic.compat.jei.binding; - -import mcp.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeCategory.java b/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeCategory.java index 999d6e8f..2b85ba1f 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeCategory.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeCategory.java @@ -1,14 +1,15 @@ package WayofTime.bloodmagic.compat.jei.forge; -import java.util.ArrayList; import java.util.List; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import mezz.jei.api.gui.ICraftingGridHelper; import mezz.jei.api.gui.IDrawable; import mezz.jei.api.gui.IGuiItemStackGroup; import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.ingredients.IIngredients; import mezz.jei.api.recipe.IRecipeCategory; import mezz.jei.api.recipe.IRecipeWrapper; import net.minecraft.client.Minecraft; @@ -27,7 +28,7 @@ public class TartaricForgeRecipeCategory implements IRecipeCategory @Nonnull private final IDrawable background = BloodMagicPlugin.jeiHelper.getGuiHelper().createDrawable(new ResourceLocation(Constants.Mod.DOMAIN + "gui/jei/soulForge.png"), 0, 0, 100, 40); @Nonnull - private final String localizedName = TextHelper.localize("jei.BloodMagic.recipe.soulForge"); + private final String localizedName = TextHelper.localize("jei.bloodmagic.recipe.soulForge"); @Nonnull private final ICraftingGridHelper craftingGridHelper; @@ -63,15 +64,15 @@ public class TartaricForgeRecipeCategory implements IRecipeCategory } + @Nullable @Override - public void drawAnimations(Minecraft minecraft) + public IDrawable getIcon() { - + return null; } @Override - @SuppressWarnings("unchecked") - public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull IRecipeWrapper recipeWrapper) + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) { IGuiItemStackGroup guiItemStacks = recipeLayout.getItemStacks(); @@ -87,12 +88,25 @@ public class TartaricForgeRecipeCategory implements IRecipeCategory } } + List> inputs = ingredients.getInputs(ItemStack.class); + if (recipeWrapper instanceof TartaricForgeRecipeJEI) { - TartaricForgeRecipeJEI recipe = (TartaricForgeRecipeJEI) recipeWrapper; - guiItemStacks.set(GEM_SLOT, (ArrayList) recipe.getInputs().get(1)); - craftingGridHelper.setOutput(guiItemStacks, recipe.getOutputs()); - craftingGridHelper.setInput(guiItemStacks, (List) recipe.getInputs().get(0), 2, 3); + guiItemStacks.set(GEM_SLOT, ingredients.getInputs(ItemStack.class).get(ingredients.getInputs(ItemStack.class).size() - 1)); + inputs.remove(ingredients.getInputs(ItemStack.class).size() - 1); + guiItemStacks.set(OUTPUT_SLOT, ingredients.getOutputs(ItemStack.class).get(0)); + guiItemStacks.set(INPUT_SLOT, ingredients.getInputs(ItemStack.class).get(0)); + craftingGridHelper.setInputStacks(guiItemStacks, inputs); } } + + @Override + public void drawAnimations(Minecraft minecraft) { + + } + + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper) { + + } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeHandler.java b/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeHandler.java index e5c0ac05..98fae5a0 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeHandler.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeHandler.java @@ -15,14 +15,6 @@ public class TartaricForgeRecipeHandler implements IRecipeHandler 0 && recipe.getOutputs().size() > 0; + return true; + } + + @Override + public String getRecipeCategoryUid() { + return null; } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeJEI.java b/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeJEI.java index e51511bd..82133b75 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeJEI.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeJEI.java @@ -8,7 +8,10 @@ import java.util.List; import javax.annotation.Nonnull; import javax.annotation.Nullable; +import WayofTime.bloodmagic.compat.jei.BloodMagicPlugin; +import com.google.common.collect.Lists; import lombok.Getter; +import mezz.jei.api.ingredients.IIngredients; import mezz.jei.api.recipe.BlankRecipeWrapper; import net.minecraft.item.ItemStack; import WayofTime.bloodmagic.api.recipe.TartaricForgeRecipe; @@ -20,7 +23,7 @@ public class TartaricForgeRecipeJEI extends BlankRecipeWrapper @Getter private TartaricForgeRecipe recipe; @Getter - private ArrayList validGems = new ArrayList(); + private List validGems = new ArrayList(); public TartaricForgeRecipeJEI(TartaricForgeRecipe recipe) { @@ -32,20 +35,11 @@ public class TartaricForgeRecipeJEI extends BlankRecipeWrapper } @Override - @Nonnull - public List getInputs() - { - ArrayList ret = new ArrayList(); - ret.add(recipe.getInput()); - ret.add(validGems); - return ret; - } - - @Override - @Nonnull - public List getOutputs() - { - return Collections.singletonList(recipe.getRecipeOutput()); + public void getIngredients(IIngredients ingredients) { + List> expandedInputs = BloodMagicPlugin.jeiHelper.getStackHelper().expandRecipeItemStackInputs(recipe.getInput()); + expandedInputs.add(validGems); + ingredients.setInputLists(ItemStack.class, expandedInputs); + ingredients.setOutput(ItemStack.class, recipe.getRecipeOutput()); } @Nullable @@ -55,8 +49,8 @@ public class TartaricForgeRecipeJEI extends BlankRecipeWrapper ArrayList ret = new ArrayList(); if (mouseX >= 40 && mouseX <= 60 && mouseY >= 21 && mouseY <= 34) { - ret.add(TextHelper.localize("jei.BloodMagic.recipe.minimumSouls", recipe.getMinimumSouls())); - ret.add(TextHelper.localize("jei.BloodMagic.recipe.soulsDrained", recipe.getSoulsDrained())); + ret.add(TextHelper.localize("jei.bloodmagic.recipe.minimumSouls", recipe.getMinimumSouls())); + ret.add(TextHelper.localize("jei.bloodmagic.recipe.soulsDrained", recipe.getSoulsDrained())); return ret; } return null; diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/forge/package-info.java b/src/main/java/WayofTime/bloodmagic/compat/jei/forge/package-info.java deleted file mode 100644 index cc0c044a..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/forge/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault -package WayofTime.bloodmagic.compat.jei.forge; - -import mcp.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/orb/ShapedOrbRecipeHandler.java b/src/main/java/WayofTime/bloodmagic/compat/jei/orb/ShapedOrbRecipeHandler.java index 4e746059..65e8d4fb 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/orb/ShapedOrbRecipeHandler.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/orb/ShapedOrbRecipeHandler.java @@ -19,14 +19,6 @@ public class ShapedOrbRecipeHandler implements IRecipeHandler 0; } + + @Override + public String getRecipeCategoryUid() { + return null; + } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/orb/ShapedOrbRecipeJEI.java b/src/main/java/WayofTime/bloodmagic/compat/jei/orb/ShapedOrbRecipeJEI.java index 840e59ff..acb6d5fe 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/orb/ShapedOrbRecipeJEI.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/orb/ShapedOrbRecipeJEI.java @@ -2,21 +2,21 @@ package WayofTime.bloodmagic.compat.jei.orb; import java.awt.Color; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import javax.annotation.Nonnull; -import javax.annotation.Nullable; +import WayofTime.bloodmagic.compat.jei.BloodMagicPlugin; import WayofTime.bloodmagic.util.helper.NumeralHelper; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.BlankRecipeWrapper; import mezz.jei.api.recipe.wrapper.IShapedCraftingRecipeWrapper; import net.minecraft.client.Minecraft; import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; import WayofTime.bloodmagic.api.registry.OrbRegistry; import WayofTime.bloodmagic.util.helper.TextHelper; -public class ShapedOrbRecipeJEI implements IShapedCraftingRecipeWrapper +public class ShapedOrbRecipeJEI extends BlankRecipeWrapper implements IShapedCraftingRecipeWrapper { @Nonnull @@ -54,52 +54,15 @@ public class ShapedOrbRecipeJEI implements IShapedCraftingRecipeWrapper } @Override - public List getInputs() - { - return inputs; + public void getIngredients(IIngredients ingredients) { + List> expanded = BloodMagicPlugin.jeiHelper.getStackHelper().expandRecipeItemStackInputs(inputs); + ingredients.setInputLists(ItemStack.class, expanded); + ingredients.setOutput(ItemStack.class, output); } @Override - public List getOutputs() - { - return Collections.singletonList(output); - } - - @Override - public void drawInfo(@Nonnull Minecraft minecraft, int recipeWidth, int recipeHeight, int mouseX, int mouseY) - { - String draw = TextHelper.localize("jei.BloodMagic.recipe.requiredTier", NumeralHelper.toRoman(tier)); + public void drawInfo(@Nonnull Minecraft minecraft, int recipeWidth, int recipeHeight, int mouseX, int mouseY) { + String draw = TextHelper.localize("jei.bloodmagic.recipe.requiredTier", NumeralHelper.toRoman(tier)); minecraft.fontRendererObj.drawString(draw, 72 - minecraft.fontRendererObj.getStringWidth(draw) / 2, 10, Color.gray.getRGB()); } - - @Override - public List getFluidInputs() - { - return null; - } - - @Override - public List getFluidOutputs() - { - return null; - } - - @Override - public void drawAnimations(@Nonnull Minecraft minecraft, int recipeWidth, int recipeHeight) - { - - } - - @Nullable - @Override - public List getTooltipStrings(int mouseX, int mouseY) - { - return null; - } - - @Override - public boolean handleClick(@Nonnull Minecraft minecraft, int mouseX, int mouseY, int mouseButton) - { - return false; - } -} +} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/orb/ShapelessOrbRecipeHandler.java b/src/main/java/WayofTime/bloodmagic/compat/jei/orb/ShapelessOrbRecipeHandler.java index 5bca16e6..380d91a3 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/orb/ShapelessOrbRecipeHandler.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/orb/ShapelessOrbRecipeHandler.java @@ -17,14 +17,6 @@ public class ShapelessOrbRecipeHandler implements IRecipeHandler 0; } + + @Override + public String getRecipeCategoryUid() { + return null; + } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/orb/ShapelessOrbRecipeJEI.java b/src/main/java/WayofTime/bloodmagic/compat/jei/orb/ShapelessOrbRecipeJEI.java index dc16002d..dd9eccc5 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/orb/ShapelessOrbRecipeJEI.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/orb/ShapelessOrbRecipeJEI.java @@ -8,7 +8,10 @@ import java.util.List; import javax.annotation.Nonnull; import javax.annotation.Nullable; +import WayofTime.bloodmagic.compat.jei.BloodMagicPlugin; import WayofTime.bloodmagic.util.helper.NumeralHelper; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.BlankRecipeWrapper; import mezz.jei.api.recipe.wrapper.ICraftingRecipeWrapper; import net.minecraft.client.Minecraft; import net.minecraft.item.ItemStack; @@ -16,14 +19,12 @@ import net.minecraftforge.fluids.FluidStack; import WayofTime.bloodmagic.api.registry.OrbRegistry; import WayofTime.bloodmagic.util.helper.TextHelper; -public class ShapelessOrbRecipeJEI implements ICraftingRecipeWrapper +public class ShapelessOrbRecipeJEI extends BlankRecipeWrapper implements ICraftingRecipeWrapper { @Nonnull private final List inputs; - private final int tier; - @Nonnull private final ItemStack output; @@ -42,52 +43,16 @@ public class ShapelessOrbRecipeJEI implements ICraftingRecipeWrapper } @Override - public List getInputs() - { - return inputs; - } - - @Override - public List getOutputs() - { - return Collections.singletonList(output); + public void getIngredients(IIngredients ingredients) { + List> expanded = BloodMagicPlugin.jeiHelper.getStackHelper().expandRecipeItemStackInputs(inputs); + ingredients.setInputLists(ItemStack.class, expanded); + ingredients.setOutput(ItemStack.class, output); } @Override public void drawInfo(@Nonnull Minecraft minecraft, int recipeWidth, int recipeHeight, int mouseX, int mouseY) { - String draw = TextHelper.localize("jei.BloodMagic.recipe.requiredTier", NumeralHelper.toRoman(tier)); + String draw = TextHelper.localize("jei.bloodmagic.recipe.requiredTier", NumeralHelper.toRoman(tier)); minecraft.fontRendererObj.drawString(draw, 72 - minecraft.fontRendererObj.getStringWidth(draw) / 2, 10, Color.gray.getRGB()); } - - @Override - public List getFluidInputs() - { - return null; - } - - @Override - public List getFluidOutputs() - { - return null; - } - - @Override - public void drawAnimations(@Nonnull Minecraft minecraft, int recipeWidth, int recipeHeight) - { - - } - - @Nullable - @Override - public List getTooltipStrings(int mouseX, int mouseY) - { - return null; - } - - @Override - public boolean handleClick(@Nonnull Minecraft minecraft, int mouseX, int mouseY, int mouseButton) - { - return false; - } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/orb/package-info.java b/src/main/java/WayofTime/bloodmagic/compat/jei/orb/package-info.java deleted file mode 100644 index a9b8d95a..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/orb/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault -package WayofTime.bloodmagic.compat.jei.orb; - -import mcp.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/package-info.java b/src/main/java/WayofTime/bloodmagic/compat/jei/package-info.java deleted file mode 100644 index 7ce52522..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault -package WayofTime.bloodmagic.compat.jei; - -import mcp.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIAttackStealthMelee.java b/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIAttackStealthMelee.java index e54d3c1e..6a5ca700 100644 --- a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIAttackStealthMelee.java +++ b/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIAttackStealthMelee.java @@ -37,7 +37,7 @@ public class EntityAIAttackStealthMelee extends EntityAIBase public EntityAIAttackStealthMelee(EntityCorruptedChicken creature, double speedIn, boolean useLongMemory) { this.chicken = creature; - this.worldObj = creature.worldObj; + this.worldObj = creature.getEntityWorld(); this.speedTowardsTarget = speedIn; this.longMemory = useLongMemory; this.setMutexBits(3); diff --git a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIEatAndCorruptBlock.java b/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIEatAndCorruptBlock.java index 6c95a68a..288fc685 100644 --- a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIEatAndCorruptBlock.java +++ b/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIEatAndCorruptBlock.java @@ -20,7 +20,7 @@ public class EntityAIEatAndCorruptBlock extends EntityAIBase public EntityAIEatAndCorruptBlock(EntityAspectedDemonBase entity) { this.grassEaterEntity = entity; - this.world = entity.worldObj; + this.world = entity.getEntityWorld(); this.setMutexBits(7); } diff --git a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIFollowOwner.java b/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIFollowOwner.java index 7227f8cf..27b450b1 100644 --- a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIFollowOwner.java +++ b/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIFollowOwner.java @@ -29,7 +29,7 @@ public class EntityAIFollowOwner extends EntityAIBase public EntityAIFollowOwner(EntityDemonBase thePetIn, double followSpeedIn, float minDistIn, float maxDistIn) { this.thePet = thePetIn; - this.theWorld = thePetIn.worldObj; + this.theWorld = thePetIn.getEntityWorld(); this.followSpeed = followSpeedIn; this.petPathfinder = thePetIn.getNavigator(); this.minDist = minDistIn; @@ -122,9 +122,9 @@ public class EntityAIFollowOwner extends EntityAIBase { if (this.thePet.getDistanceSqToEntity(this.theOwner) >= 144.0D) { - int i = MathHelper.floor_double(this.theOwner.posX) - 2; - int j = MathHelper.floor_double(this.theOwner.posZ) - 2; - int k = MathHelper.floor_double(this.theOwner.getEntityBoundingBox().minY); + int i = MathHelper.floor(this.theOwner.posX) - 2; + int j = MathHelper.floor(this.theOwner.posZ) - 2; + int k = MathHelper.floor(this.theOwner.getEntityBoundingBox().minY); for (int l = 0; l <= 4; ++l) { diff --git a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIGrabEffectsFromOwner.java b/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIGrabEffectsFromOwner.java index 04e5fc62..28a81764 100644 --- a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIGrabEffectsFromOwner.java +++ b/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIGrabEffectsFromOwner.java @@ -32,7 +32,7 @@ public class EntityAIGrabEffectsFromOwner extends EntityAIBase public EntityAIGrabEffectsFromOwner(EntitySentientSpecter thePetIn, double followSpeedIn, float minDistIn) { this.thePet = thePetIn; - this.theWorld = thePetIn.worldObj; + this.theWorld = thePetIn.getEntityWorld(); this.followSpeed = followSpeedIn; this.petPathfinder = thePetIn.getNavigator(); this.minDist = minDistIn; @@ -135,9 +135,9 @@ public class EntityAIGrabEffectsFromOwner extends EntityAIBase { if (this.thePet.getDistanceSqToEntity(this.theOwner) >= 144.0D) { - int i = MathHelper.floor_double(this.theOwner.posX) - 2; - int j = MathHelper.floor_double(this.theOwner.posZ) - 2; - int k = MathHelper.floor_double(this.theOwner.getEntityBoundingBox().minY); + int i = MathHelper.floor(this.theOwner.posX) - 2; + int j = MathHelper.floor(this.theOwner.posZ) - 2; + int k = MathHelper.floor(this.theOwner.getEntityBoundingBox().minY); for (int l = 0; l <= 4; ++l) { diff --git a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIPickUpAlly.java b/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIPickUpAlly.java index c1ac0d59..62477326 100644 --- a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIPickUpAlly.java +++ b/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIPickUpAlly.java @@ -40,7 +40,7 @@ public class EntityAIPickUpAlly extends EntityAIBase public EntityAIPickUpAlly(EntityAspectedDemonBase creature, double speedIn, boolean useLongMemory) { this.entity = creature; - this.worldObj = creature.worldObj; + this.worldObj = creature.getEntityWorld(); this.speedTowardsTarget = speedIn; this.longMemory = useLongMemory; this.setMutexBits(3); @@ -57,7 +57,7 @@ public class EntityAIPickUpAlly extends EntityAIBase } AxisAlignedBB bb = new AxisAlignedBB(entity.posX - 0.5, entity.posY - 0.5, entity.posZ - 0.5, entity.posX + 0.5, entity.posY + 0.5, entity.posZ + 0.5).expandXyz(5); - List list = this.entity.worldObj.getEntitiesWithinAABB(EntityLivingBase.class, bb, new EntityAspectedDemonBase.WillTypePredicate(entity.getType())); + List list = this.entity.getEntityWorld().getEntitiesWithinAABB(EntityLivingBase.class, bb, new EntityAspectedDemonBase.WillTypePredicate(entity.getType())); for (EntityLivingBase testEntity : list) { if (testEntity != this.entity) diff --git a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIProtectAlly.java b/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIProtectAlly.java index ad46d8ca..23b345ca 100644 --- a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIProtectAlly.java +++ b/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIProtectAlly.java @@ -21,7 +21,7 @@ public class EntityAIProtectAlly extends EntityAIBase public EntityAIProtectAlly(EntityCorruptedSheep entity) { this.entity = entity; - this.world = entity.worldObj; + this.world = entity.getEntityWorld(); this.setMutexBits(7); } diff --git a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIRetreatToHeal.java b/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIRetreatToHeal.java index c4b08304..57561229 100644 --- a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIRetreatToHeal.java +++ b/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIRetreatToHeal.java @@ -69,7 +69,7 @@ public class EntityAIRetreatToHeal extends EntityAIBase } //This part almost doesn't matter - List list = this.theEntity.worldObj.getEntitiesWithinAABB(this.classToAvoid, this.theEntity.getEntityBoundingBox().expand((double) this.avoidDistance, 3.0D, (double) this.avoidDistance), Predicates.and(new Predicate[] { EntitySelectors.CAN_AI_TARGET, this.canBeSeenSelector, this.avoidTargetSelector })); + List list = this.theEntity.getEntityWorld().getEntitiesWithinAABB(this.classToAvoid, this.theEntity.getEntityBoundingBox().expand((double) this.avoidDistance, 3.0D, (double) this.avoidDistance), Predicates.and(new Predicate[] { EntitySelectors.CAN_AI_TARGET, this.canBeSeenSelector, this.avoidTargetSelector })); if (list.isEmpty()) { diff --git a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIStealthRetreat.java b/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIStealthRetreat.java index 68d84d7b..533af52b 100644 --- a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIStealthRetreat.java +++ b/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIStealthRetreat.java @@ -82,7 +82,7 @@ public class EntityAIStealthRetreat extends EntityAIBase @Override public void startExecuting() { - ticksLeft = this.entity.worldObj.rand.nextInt(100) + 100; + ticksLeft = this.entity.getEntityWorld().rand.nextInt(100) + 100; this.entityPathNavigate.setPath(this.entityPathEntity, this.farSpeed); } diff --git a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIStealthTowardsTarget.java b/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIStealthTowardsTarget.java index fa9a52fe..6e4a6a78 100644 --- a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIStealthTowardsTarget.java +++ b/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIStealthTowardsTarget.java @@ -47,7 +47,7 @@ public class EntityAIStealthTowardsTarget extends EntityAIBase return false; } else { - ticksLeft = this.entity.worldObj.rand.nextInt(200) + 100; + ticksLeft = this.entity.getEntityWorld().rand.nextInt(200) + 100; this.xPosition = vec3d.xCoord; this.yPosition = vec3d.yCoord; this.zPosition = vec3d.zCoord; diff --git a/src/main/java/WayofTime/bloodmagic/entity/mob/EntityAspectedDemonBase.java b/src/main/java/WayofTime/bloodmagic/entity/mob/EntityAspectedDemonBase.java index a3ba864b..caeedfd3 100644 --- a/src/main/java/WayofTime/bloodmagic/entity/mob/EntityAspectedDemonBase.java +++ b/src/main/java/WayofTime/bloodmagic/entity/mob/EntityAspectedDemonBase.java @@ -180,15 +180,15 @@ public abstract class EntityAspectedDemonBase extends EntityDemonBase float newAmount = amount; if (source.isProjectile()) { - newAmount *= MathHelper.clamp_double(1 - getProjectileResist(), 0, 1); + newAmount *= MathHelper.clamp(1 - getProjectileResist(), 0, 1); } else { - newAmount *= MathHelper.clamp_double(1 - getMeleeResist(), 0, 1); + newAmount *= MathHelper.clamp(1 - getMeleeResist(), 0, 1); } if (source.isMagicDamage()) { - newAmount *= MathHelper.clamp_double(1 - getMagicResist(), 0, 1); + newAmount *= MathHelper.clamp(1 - getMagicResist(), 0, 1); } return super.attackEntityFrom(source, newAmount); diff --git a/src/main/java/WayofTime/bloodmagic/entity/mob/EntityCorruptedChicken.java b/src/main/java/WayofTime/bloodmagic/entity/mob/EntityCorruptedChicken.java index 474343cf..77058576 100644 --- a/src/main/java/WayofTime/bloodmagic/entity/mob/EntityCorruptedChicken.java +++ b/src/main/java/WayofTime/bloodmagic/entity/mob/EntityCorruptedChicken.java @@ -139,7 +139,7 @@ public class EntityCorruptedChicken extends EntityAspectedDemonBase this.oFlap = this.wingRotation; this.oFlapSpeed = this.destPos; this.destPos = (float) ((double) this.destPos + (double) (this.onGround ? -1 : 4) * 0.3D); - this.destPos = MathHelper.clamp_float(this.destPos, 0.0F, 1.0F); + this.destPos = MathHelper.clamp(this.destPos, 0.0F, 1.0F); if (!this.onGround && this.wingRotDelta < 1.0F) { @@ -155,7 +155,7 @@ public class EntityCorruptedChicken extends EntityAspectedDemonBase this.wingRotation += this.wingRotDelta * 2.0F; - if (!this.worldObj.isRemote && !this.isChild() && --this.timeUntilNextEgg <= 0) + if (!this.getEntityWorld().isRemote && !this.isChild() && --this.timeUntilNextEgg <= 0) { this.playSound(SoundEvents.ENTITY_CHICKEN_EGG, 1.0F, (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); this.dropItem(Items.EGG, 1); diff --git a/src/main/java/WayofTime/bloodmagic/entity/mob/EntityCorruptedSheep.java b/src/main/java/WayofTime/bloodmagic/entity/mob/EntityCorruptedSheep.java index 516ff8d2..4a71af52 100644 --- a/src/main/java/WayofTime/bloodmagic/entity/mob/EntityCorruptedSheep.java +++ b/src/main/java/WayofTime/bloodmagic/entity/mob/EntityCorruptedSheep.java @@ -66,7 +66,7 @@ public class EntityCorruptedSheep extends EntityAspectedDemonBase implements ISh public static float[] getDyeRgb(EnumDyeColor dyeColor) { - return (float[]) DYE_TO_RGB.get(dyeColor); + return DYE_TO_RGB.get(dyeColor); } public EntityCorruptedSheep(World world) @@ -121,7 +121,7 @@ public class EntityCorruptedSheep extends EntityAspectedDemonBase implements ISh @Override public void onLivingUpdate() { - if (this.worldObj.isRemote) + if (this.getEntityWorld().isRemote) { this.sheepTimer = Math.max(0, this.sheepTimer - 1); this.castTimer = Math.max(0, castTimer - 1); @@ -359,7 +359,7 @@ public class EntityCorruptedSheep extends EntityAspectedDemonBase implements ISh public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, @Nullable IEntityLivingData livingdata) { livingdata = super.onInitialSpawn(difficulty, livingdata); - this.setFleeceColor(getRandomSheepColor(this.worldObj.rand)); + this.setFleeceColor(getRandomSheepColor(this.getEntityWorld().rand)); return livingdata; } diff --git a/src/main/java/WayofTime/bloodmagic/entity/mob/EntityCorruptedSpider.java b/src/main/java/WayofTime/bloodmagic/entity/mob/EntityCorruptedSpider.java index ee512510..eba027a6 100644 --- a/src/main/java/WayofTime/bloodmagic/entity/mob/EntityCorruptedSpider.java +++ b/src/main/java/WayofTime/bloodmagic/entity/mob/EntityCorruptedSpider.java @@ -52,7 +52,7 @@ public class EntityCorruptedSpider extends EntityAspectedDemonBase this.tasks.addTask(5, new EntityAIWander(this, 0.8D)); this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); this.tasks.addTask(6, new EntityAILookIdle(this)); - this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false, new Class[0])); + this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false)); this.targetTasks.addTask(1, new EntityAINearestAttackableTarget(this, EntityPlayer.class, true)); this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityLivingBase.class, 10, true, false, new EntityAspectedDemonBase.TeamAttackPredicate(this))); @@ -95,7 +95,7 @@ public class EntityCorruptedSpider extends EntityAspectedDemonBase } @Override - protected PathNavigate getNewNavigator(World worldIn) + protected PathNavigate createNavigator(World worldIn) { return new PathNavigateClimber(this, worldIn); } @@ -112,7 +112,7 @@ public class EntityCorruptedSpider extends EntityAspectedDemonBase { super.onUpdate(); - if (!this.worldObj.isRemote) + if (!this.getEntityWorld().isRemote) { this.setBesideClimbableBlock(this.isCollidedHorizontally); } diff --git a/src/main/java/WayofTime/bloodmagic/entity/mob/EntityCorruptedZombie.java b/src/main/java/WayofTime/bloodmagic/entity/mob/EntityCorruptedZombie.java index 34b0825e..ec0cd6cc 100644 --- a/src/main/java/WayofTime/bloodmagic/entity/mob/EntityCorruptedZombie.java +++ b/src/main/java/WayofTime/bloodmagic/entity/mob/EntityCorruptedZombie.java @@ -73,7 +73,7 @@ public class EntityCorruptedZombie extends EntityAspectedDemonBase @Override public void setCombatTask() { - if (this.worldObj != null && !this.worldObj.isRemote) + if (this.getEntityWorld() != null && !this.getEntityWorld().isRemote) { this.tasks.removeTask(this.aiAttackOnCollide); this.tasks.removeTask(this.aiArrowAttack); @@ -83,7 +83,7 @@ public class EntityCorruptedZombie extends EntityAspectedDemonBase { int i = 20; - if (this.worldObj.getDifficulty() != EnumDifficulty.HARD) + if (this.getEntityWorld().getDifficulty() != EnumDifficulty.HARD) { i = 40; } @@ -128,7 +128,7 @@ public class EntityCorruptedZombie extends EntityAspectedDemonBase */ public double absorbWillFromAuraToHeal(double toHeal) { - if (worldObj.isRemote) + if (getEntityWorld().isRemote) { return 0; } @@ -139,13 +139,13 @@ public class EntityCorruptedZombie extends EntityAspectedDemonBase return 0; } - double will = WorldDemonWillHandler.getCurrentWill(worldObj, getPosition(), getType()); + double will = WorldDemonWillHandler.getCurrentWill(getEntityWorld(), getPosition(), getType()); toHeal = Math.min(healthMissing, Math.min(toHeal, will / getWillToHealth())); if (toHeal > 0) { this.heal((float) toHeal); - return WorldDemonWillHandler.drainWill(worldObj, getPosition(), getType(), toHeal * getWillToHealth(), true); + return WorldDemonWillHandler.drainWill(getEntityWorld(), getPosition(), getType(), toHeal * getWillToHealth(), true); } return 0; @@ -164,7 +164,7 @@ public class EntityCorruptedZombie extends EntityAspectedDemonBase public void onUpdate() { - if (!this.worldObj.isRemote && this.ticksExisted % 20 == 0) + if (!this.getEntityWorld().isRemote && this.ticksExisted % 20 == 0) { absorbWillFromAuraToHeal(2); } diff --git a/src/main/java/WayofTime/bloodmagic/entity/mob/EntityDemonBase.java b/src/main/java/WayofTime/bloodmagic/entity/mob/EntityDemonBase.java index 70d99fa1..653f2b89 100644 --- a/src/main/java/WayofTime/bloodmagic/entity/mob/EntityDemonBase.java +++ b/src/main/java/WayofTime/bloodmagic/entity/mob/EntityDemonBase.java @@ -51,7 +51,7 @@ public class EntityDemonBase extends EntityCreature implements IEntityOwnable protected void entityInit() { super.entityInit(); - this.dataManager.register(TAMED, Byte.valueOf((byte) 0)); + this.dataManager.register(TAMED, (byte) 0); this.dataManager.register(OWNER_UNIQUE_ID, Optional.absent()); } @@ -84,7 +84,7 @@ public class EntityDemonBase extends EntityCreature implements IEntityOwnable @Override public boolean attackEntityFrom(DamageSource source, float amount) { - return this.isEntityInvulnerable(source) ? false : super.attackEntityFrom(source, amount); + return !this.isEntityInvulnerable(source) && super.attackEntityFrom(source, amount); } /** @@ -133,7 +133,7 @@ public class EntityDemonBase extends EntityCreature implements IEntityOwnable if (this.rand.nextFloat() < f1) { entityplayer.getCooldownTracker().setCooldown(Items.SHIELD, 100); - this.worldObj.setEntityState(entityplayer, (byte) 30); + this.getEntityWorld().setEntityState(entityplayer, (byte) 30); } } } @@ -149,7 +149,7 @@ public class EntityDemonBase extends EntityCreature implements IEntityOwnable { super.setItemStackToSlot(slotIn, stack); - if (!this.worldObj.isRemote && slotIn == EntityEquipmentSlot.MAINHAND) + if (!this.getEntityWorld().isRemote && slotIn == EntityEquipmentSlot.MAINHAND) { this.setCombatTask(); } @@ -169,9 +169,9 @@ public class EntityDemonBase extends EntityCreature implements IEntityOwnable { this.heal((float) toHeal); - if (worldObj instanceof WorldServer) + if (getEntityWorld() instanceof WorldServer) { - WorldServer server = (WorldServer) worldObj; + WorldServer server = (WorldServer) getEntityWorld(); server.spawnParticle(EnumParticleTypes.HEART, this.posX + (double) (this.rand.nextFloat() * this.width * 2.0F) - (double) this.width, this.posY + 0.5D + (double) (this.rand.nextFloat() * this.height), this.posZ + (double) (this.rand.nextFloat() * this.width * 2.0F) - (double) this.width, 7, 0.2, 0.2, 0.2, 0, new int[0]); } } @@ -248,7 +248,7 @@ public class EntityDemonBase extends EntityCreature implements IEntityOwnable } } - return attacker instanceof EntityPlayer && owner instanceof EntityPlayer && !((EntityPlayer) owner).canAttackPlayer((EntityPlayer) attacker) ? false : !(attacker instanceof EntityHorse) || !((EntityHorse) attacker).isTame(); + return !(attacker instanceof EntityPlayer && owner instanceof EntityPlayer && !((EntityPlayer) owner).canAttackPlayer((EntityPlayer) attacker)) && (!(attacker instanceof EntityHorse) || !((EntityHorse) attacker).isTame()); } else { return false; @@ -262,19 +262,19 @@ public class EntityDemonBase extends EntityCreature implements IEntityOwnable public boolean isTamed() { - return (((Byte) this.dataManager.get(TAMED)).byteValue() & 4) != 0; + return (this.dataManager.get(TAMED) & 4) != 0; } public void setTamed(boolean tamed) { - byte b0 = ((Byte) this.dataManager.get(TAMED)).byteValue(); + byte b0 = this.dataManager.get(TAMED); if (tamed) { - this.dataManager.set(TAMED, Byte.valueOf((byte) (b0 | 4))); + this.dataManager.set(TAMED, (byte) (b0 | 4)); } else { - this.dataManager.set(TAMED, Byte.valueOf((byte) (b0 & -5))); + this.dataManager.set(TAMED, (byte) (b0 & -5)); } // this.setupTamedAI(); @@ -316,7 +316,7 @@ public class EntityDemonBase extends EntityCreature implements IEntityOwnable @Override public UUID getOwnerId() { - return (UUID) (this.dataManager.get(OWNER_UNIQUE_ID)).orNull(); + return this.dataManager.get(OWNER_UNIQUE_ID).orNull(); } public void setOwnerId(UUID uuid) @@ -330,7 +330,7 @@ public class EntityDemonBase extends EntityCreature implements IEntityOwnable try { UUID uuid = this.getOwnerId(); - return uuid == null ? null : this.worldObj.getPlayerEntityByUUID(uuid); + return uuid == null ? null : this.getEntityWorld().getPlayerEntityByUUID(uuid); } catch (IllegalArgumentException var2) { return null; diff --git a/src/main/java/WayofTime/bloodmagic/entity/mob/EntityMimic.java b/src/main/java/WayofTime/bloodmagic/entity/mob/EntityMimic.java index 37c32741..cfe63b1a 100644 --- a/src/main/java/WayofTime/bloodmagic/entity/mob/EntityMimic.java +++ b/src/main/java/WayofTime/bloodmagic/entity/mob/EntityMimic.java @@ -43,7 +43,7 @@ public class EntityMimic extends EntityDemonBase /** * Copy of EntitySpider's AI (should be pretty evident...) */ - private static final DataParameter CLIMBING = EntityDataManager.createKey(EntityMimic.class, DataSerializers.BYTE); + private static final DataParameter CLIMBING = EntityDataManager.createKey(EntityMimic.class, DataSerializers.BYTE); public boolean dropItemsOnBreak = true; public NBTTagCompound tileTag = new NBTTagCompound(); @@ -64,7 +64,7 @@ public class EntityMimic extends EntityDemonBase this.tasks.addTask(8, new EntityAILookIdle(this)); this.tasks.addTask(7, new EntityAIMimicReform(this)); - this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false, new Class[0])); + this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false)); this.targetTasks.addTask(2, new EntityMimic.AISpiderTarget(this, EntityPlayer.class)); this.targetTasks.addTask(3, new EntityMimic.AISpiderTarget(this, EntityIronGolem.class)); } @@ -160,7 +160,7 @@ public class EntityMimic extends EntityDemonBase } BlockPos newPos = centerPos.add(i, j, k); - if (spawnMimicBlockAtPosition(worldObj, newPos)) + if (spawnMimicBlockAtPosition(getEntityWorld(), newPos)) { return true; } @@ -178,7 +178,7 @@ public class EntityMimic extends EntityDemonBase { super.onDeath(cause); - if (!worldObj.isRemote) + if (!getEntityWorld().isRemote) { BlockPos centerPos = this.getPosition(); @@ -201,7 +201,7 @@ public class EntityMimic extends EntityDemonBase } BlockPos newPos = centerPos.add(i, j, k); - if (spawnHeldBlockOnDeath(worldObj, newPos)) + if (spawnHeldBlockOnDeath(getEntityWorld(), newPos)) { return; } @@ -227,7 +227,7 @@ public class EntityMimic extends EntityDemonBase * Returns new PathNavigateGround instance */ @Override - protected PathNavigate getNewNavigator(World worldIn) + protected PathNavigate createNavigator(World worldIn) { return new PathNavigateClimber(this, worldIn); } @@ -236,7 +236,7 @@ public class EntityMimic extends EntityDemonBase protected void entityInit() { super.entityInit(); - this.dataManager.register(CLIMBING, Byte.valueOf((byte) 0)); + this.dataManager.register(CLIMBING, (byte) 0); // this.dataManager.register(ITEMSTACK, null); } @@ -246,7 +246,7 @@ public class EntityMimic extends EntityDemonBase @Override public void onUpdate() { - if (!this.worldObj.isRemote && this.worldObj.getDifficulty() == EnumDifficulty.PEACEFUL) + if (!this.getEntityWorld().isRemote && this.getEntityWorld().getDifficulty() == EnumDifficulty.PEACEFUL) { if (reformIntoMimicBlock(this.getPosition())) { @@ -256,7 +256,7 @@ public class EntityMimic extends EntityDemonBase super.onUpdate(); - if (!this.worldObj.isRemote) + if (!this.getEntityWorld().isRemote) { this.setBesideClimbableBlock(this.isCollidedHorizontally); } @@ -324,7 +324,7 @@ public class EntityMimic extends EntityDemonBase @Override public boolean isPotionApplicable(PotionEffect potioneffectIn) { - return potioneffectIn.getPotion() == MobEffects.POISON ? false : super.isPotionApplicable(potioneffectIn); + return potioneffectIn.getPotion() != MobEffects.POISON && super.isPotionApplicable(potioneffectIn); } /** @@ -333,7 +333,7 @@ public class EntityMimic extends EntityDemonBase */ public boolean isBesideClimbableBlock() { - return (((Byte) this.dataManager.get(CLIMBING)).byteValue() & 1) != 0; + return (this.dataManager.get(CLIMBING) & 1) != 0; } /** @@ -342,7 +342,7 @@ public class EntityMimic extends EntityDemonBase */ public void setBesideClimbableBlock(boolean climbing) { - byte b0 = ((Byte) this.dataManager.get(CLIMBING)).byteValue(); + byte b0 = this.dataManager.get(CLIMBING); if (climbing) { @@ -352,7 +352,7 @@ public class EntityMimic extends EntityDemonBase b0 = (byte) (b0 & -2); } - this.dataManager.set(CLIMBING, Byte.valueOf(b0)); + this.dataManager.set(CLIMBING, b0); } public float getEyeHeight() diff --git a/src/main/java/WayofTime/bloodmagic/entity/mob/EntitySentientSpecter.java b/src/main/java/WayofTime/bloodmagic/entity/mob/EntitySentientSpecter.java index 6e6c15a9..880b3f4b 100644 --- a/src/main/java/WayofTime/bloodmagic/entity/mob/EntitySentientSpecter.java +++ b/src/main/java/WayofTime/bloodmagic/entity/mob/EntitySentientSpecter.java @@ -107,7 +107,7 @@ public class EntitySentientSpecter extends EntityDemonBase @Override public void setCombatTask() { - if (this.worldObj != null && !this.worldObj.isRemote) + if (this.getEntityWorld() != null && !this.getEntityWorld().isRemote) { this.tasks.removeTask(this.aiAttackOnCollide); this.tasks.removeTask(this.aiArrowAttack); @@ -117,7 +117,7 @@ public class EntitySentientSpecter extends EntityDemonBase { int i = 20; - if (this.worldObj.getDifficulty() != EnumDifficulty.HARD) + if (this.getEntityWorld().getDifficulty() != EnumDifficulty.HARD) { i = 40; } @@ -311,7 +311,7 @@ public class EntitySentientSpecter extends EntityDemonBase { super.onDeath(cause); - if (!worldObj.isRemote && getHeldItemMainhand() != null) + if (!getEntityWorld().isRemote && getHeldItemMainhand() != null) { this.entityDropItem(getHeldItemMainhand(), 0); } @@ -345,7 +345,7 @@ public class EntitySentientSpecter extends EntityDemonBase { if (stack == null && player.isSneaking()) //Should return to the entity { - if (!worldObj.isRemote) + if (!getEntityWorld().isRemote) { if (getHeldItemMainhand() != null) { @@ -380,9 +380,9 @@ public class EntitySentientSpecter extends EntityDemonBase { this.heal((float) toHeal); - if (worldObj instanceof WorldServer) + if (getEntityWorld() instanceof WorldServer) { - WorldServer server = (WorldServer) worldObj; + WorldServer server = (WorldServer) getEntityWorld(); server.spawnParticle(EnumParticleTypes.HEART, this.posX + (double) (this.rand.nextFloat() * this.width * 2.0F) - (double) this.width, this.posY + 0.5D + (double) (this.rand.nextFloat() * this.height), this.posZ + (double) (this.rand.nextFloat() * this.width * 2.0F) - (double) this.width, 7, 0.2, 0.2, 0.2, 0, new int[0]); } } @@ -394,7 +394,7 @@ public class EntitySentientSpecter extends EntityDemonBase */ public double absorbWillFromAuraToHeal(double toHeal) { - if (worldObj.isRemote) + if (getEntityWorld().isRemote) { return 0; } @@ -405,13 +405,13 @@ public class EntitySentientSpecter extends EntityDemonBase return 0; } - double will = WorldDemonWillHandler.getCurrentWill(worldObj, getPosition(), getType()); + double will = WorldDemonWillHandler.getCurrentWill(getEntityWorld(), getPosition(), getType()); toHeal = Math.min(healthMissing, Math.min(toHeal, will / getWillToHealth())); if (toHeal > 0) { this.heal((float) toHeal); - return WorldDemonWillHandler.drainWill(worldObj, getPosition(), getType(), toHeal * getWillToHealth(), true); + return WorldDemonWillHandler.drainWill(getEntityWorld(), getPosition(), getType(), toHeal * getWillToHealth(), true); } return 0; @@ -430,7 +430,7 @@ public class EntitySentientSpecter extends EntityDemonBase public void onUpdate() { - if (!this.worldObj.isRemote && this.ticksExisted % 20 == 0) + if (!this.getEntityWorld().isRemote && this.ticksExisted % 20 == 0) { absorbWillFromAuraToHeal(2); } @@ -485,7 +485,7 @@ public class EntitySentientSpecter extends EntityDemonBase ItemStack heldStack = this.getItemStackFromSlot(EntityEquipmentSlot.MAINHAND); if (heldStack != null && heldStack.getItem() == ModItems.SENTIENT_BOW) { - EntityTippedArrow arrowEntity = ((ItemSentientBow) heldStack.getItem()).getArrowEntity(worldObj, heldStack, target, this, velocity); + EntityTippedArrow arrowEntity = ((ItemSentientBow) heldStack.getItem()).getArrowEntity(getEntityWorld(), heldStack, target, this, velocity); if (arrowEntity != null) { List effects = getPotionEffectsForArrowRemovingDuration(0.2f); @@ -495,19 +495,19 @@ public class EntitySentientSpecter extends EntityDemonBase } this.playSound(SoundEvents.ENTITY_SKELETON_SHOOT, 1.0F, 1.0F / (this.getRNG().nextFloat() * 0.4F + 0.8F)); - this.worldObj.spawnEntityInWorld(arrowEntity); + this.getEntityWorld().spawnEntity(arrowEntity); } } else { - EntityTippedArrow entitytippedarrow = new EntityTippedArrow(this.worldObj, this); //TODO: Change to an arrow created by the Sentient Bow + EntityTippedArrow entitytippedarrow = new EntityTippedArrow(this.getEntityWorld(), this); //TODO: Change to an arrow created by the Sentient Bow double d0 = target.posX - this.posX; double d1 = target.getEntityBoundingBox().minY + (double) (target.height / 3.0F) - entitytippedarrow.posY; double d2 = target.posZ - this.posZ; - double d3 = (double) MathHelper.sqrt_double(d0 * d0 + d2 * d2); + double d3 = (double) MathHelper.sqrt(d0 * d0 + d2 * d2); entitytippedarrow.setThrowableHeading(d0, d1 + d3 * 0.2, d2, 1.6F, 0); //TODO: Yes, it is an accurate arrow. Don't be hatin' int i = EnchantmentHelper.getMaxEnchantmentLevel(Enchantments.POWER, this); int j = EnchantmentHelper.getMaxEnchantmentLevel(Enchantments.PUNCH, this); - entitytippedarrow.setDamage((double) (velocity * 2.0F) + this.rand.nextGaussian() * 0.25D + (double) ((float) this.worldObj.getDifficulty().getDifficultyId() * 0.11F)); + entitytippedarrow.setDamage((double) (velocity * 2.0F) + this.rand.nextGaussian() * 0.25D + (double) ((float) this.getEntityWorld().getDifficulty().getDifficultyId() * 0.11F)); if (i > 0) { @@ -533,7 +533,7 @@ public class EntitySentientSpecter extends EntityDemonBase } this.playSound(SoundEvents.ENTITY_SKELETON_SHOOT, 1.0F, 1.0F / (this.getRNG().nextFloat() * 0.4F + 0.8F)); - this.worldObj.spawnEntityInWorld(entitytippedarrow); + this.getEntityWorld().spawnEntity(entitytippedarrow); } } diff --git a/src/main/java/WayofTime/bloodmagic/entity/projectile/EntityBloodLight.java b/src/main/java/WayofTime/bloodmagic/entity/projectile/EntityBloodLight.java index d2bb8bd4..6d8f86ef 100644 --- a/src/main/java/WayofTime/bloodmagic/entity/projectile/EntityBloodLight.java +++ b/src/main/java/WayofTime/bloodmagic/entity/projectile/EntityBloodLight.java @@ -61,7 +61,7 @@ public class EntityBloodLight extends EntityThrowable implements IThrowableEntit @Override public void setThrowableHeading(double var1, double var3, double var5, float var7, float var8) { - float var9 = MathHelper.sqrt_double(var1 * var1 + var3 * var3 + var5 * var5); + float var9 = MathHelper.sqrt(var1 * var1 + var3 * var3 + var5 * var5); var1 /= var9; var3 /= var9; var5 /= var9; @@ -74,7 +74,7 @@ public class EntityBloodLight extends EntityThrowable implements IThrowableEntit motionX = var1; motionY = var3; motionZ = var5; - float var10 = MathHelper.sqrt_double(var1 * var1 + var5 * var5); + float var10 = MathHelper.sqrt(var1 * var1 + var5 * var5); prevRotationYaw = rotationYaw = (float) (Math.atan2(var1, var5) * 180.0D / Math.PI); prevRotationPitch = rotationPitch = (float) (Math.atan2(var3, var10) * 180.0D / Math.PI); } @@ -105,9 +105,9 @@ public class EntityBloodLight extends EntityThrowable implements IThrowableEntit EnumFacing sideHit = mop.sideHit; BlockPos blockPos = mop.getBlockPos().offset(sideHit); - if (worldObj.isAirBlock(blockPos)) + if (getEntityWorld().isAirBlock(blockPos)) { - worldObj.setBlockState(blockPos, ModBlocks.BLOOD_LIGHT.getDefaultState()); + getEntityWorld().setBlockState(blockPos, ModBlocks.BLOOD_LIGHT.getDefaultState()); } } @@ -129,9 +129,9 @@ public class EntityBloodLight extends EntityThrowable implements IThrowableEntit } } - if (worldObj.isAirBlock(new BlockPos((int) this.posX, (int) this.posY, (int) this.posZ))) + if (getEntityWorld().isAirBlock(new BlockPos((int) this.posX, (int) this.posY, (int) this.posZ))) { - worldObj.setBlockState(new BlockPos((int) this.posX, (int) this.posY, (int) this.posZ), Blocks.FIRE.getDefaultState()); + getEntityWorld().setBlockState(new BlockPos((int) this.posX, (int) this.posY, (int) this.posZ), Blocks.FIRE.getDefaultState()); } // spawnHitParticles("magicCrit", 8); diff --git a/src/main/java/WayofTime/bloodmagic/entity/projectile/EntityMeteor.java b/src/main/java/WayofTime/bloodmagic/entity/projectile/EntityMeteor.java index 6735b95b..70e158b2 100644 --- a/src/main/java/WayofTime/bloodmagic/entity/projectile/EntityMeteor.java +++ b/src/main/java/WayofTime/bloodmagic/entity/projectile/EntityMeteor.java @@ -95,7 +95,7 @@ public class EntityMeteor extends EntityThrowable implements IThrowableEntity public void generateMeteor(BlockPos pos) { - MeteorRegistry.generateMeteorForItem(meteorStack, worldObj, pos, Blocks.STONE.getDefaultState(), radiusModifier, explosionModifier, fillerChance); + MeteorRegistry.generateMeteorForItem(meteorStack, getEntityWorld(), pos, Blocks.STONE.getDefaultState(), radiusModifier, explosionModifier, fillerChance); } public DamageSource getDamageSource() diff --git a/src/main/java/WayofTime/bloodmagic/entity/projectile/EntitySentientArrow.java b/src/main/java/WayofTime/bloodmagic/entity/projectile/EntitySentientArrow.java index c9dc343e..c6cf622f 100644 --- a/src/main/java/WayofTime/bloodmagic/entity/projectile/EntitySentientArrow.java +++ b/src/main/java/WayofTime/bloodmagic/entity/projectile/EntitySentientArrow.java @@ -41,7 +41,7 @@ public class EntitySentientArrow extends EntityTippedArrow { if (this.shootingEntity instanceof EntityPlayer) { - if (hitEntity.worldObj.getDifficulty() != EnumDifficulty.PEACEFUL && !(hitEntity instanceof IMob)) + if (hitEntity.getEntityWorld().getDifficulty() != EnumDifficulty.PEACEFUL && !(hitEntity instanceof IMob)) { return; } diff --git a/src/main/java/WayofTime/bloodmagic/entity/projectile/EntitySoulSnare.java b/src/main/java/WayofTime/bloodmagic/entity/projectile/EntitySoulSnare.java index aa26da03..ee30ed6d 100644 --- a/src/main/java/WayofTime/bloodmagic/entity/projectile/EntitySoulSnare.java +++ b/src/main/java/WayofTime/bloodmagic/entity/projectile/EntitySoulSnare.java @@ -39,7 +39,7 @@ public class EntitySoulSnare extends EntityThrowable if (result.entityHit != null && result.entityHit != this.getThrower()) { - if (result.entityHit instanceof EntityLivingBase && result.entityHit.worldObj.rand.nextDouble() < 0.25) + if (result.entityHit instanceof EntityLivingBase && result.entityHit.getEntityWorld().rand.nextDouble() < 0.25) { ((EntityLivingBase) result.entityHit).addPotionEffect(new PotionEffect(ModPotions.soulSnare, 300, 0)); } @@ -49,10 +49,10 @@ public class EntitySoulSnare extends EntityThrowable for (int j = 0; j < 8; ++j) { - this.worldObj.spawnParticle(EnumParticleTypes.SNOWBALL, this.posX, this.posY, this.posZ, 0.0D, 0.0D, 0.0D, new int[0]); + this.getEntityWorld().spawnParticle(EnumParticleTypes.SNOWBALL, this.posX, this.posY, this.posZ, 0.0D, 0.0D, 0.0D); } - if (!this.worldObj.isRemote) + if (!this.getEntityWorld().isRemote) { this.setDead(); } diff --git a/src/main/java/WayofTime/bloodmagic/fakePlayer/FakeNetHandlerPlayServer.java b/src/main/java/WayofTime/bloodmagic/fakePlayer/FakeNetHandlerPlayServer.java index 7486c89b..dc64f53b 100644 --- a/src/main/java/WayofTime/bloodmagic/fakePlayer/FakeNetHandlerPlayServer.java +++ b/src/main/java/WayofTime/bloodmagic/fakePlayer/FakeNetHandlerPlayServer.java @@ -47,7 +47,7 @@ public class FakeNetHandlerPlayServer extends NetHandlerPlayServer } @Override - public void kickPlayerFromServer(String p_147360_1_) + public void disconnect(String reason) { } @@ -72,7 +72,7 @@ public class FakeNetHandlerPlayServer extends NetHandlerPlayServer } @Override - public void processPlayerBlockPlacement(CPacketPlayerTryUseItem packetIn) + public void processTryUseItem(CPacketPlayerTryUseItem packetIn) { } diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemAltarMaker.java b/src/main/java/WayofTime/bloodmagic/item/ItemAltarMaker.java index 74ad1c20..35240151 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemAltarMaker.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemAltarMaker.java @@ -132,7 +132,7 @@ public class ItemAltarMaker extends Item implements IAltarManipulator, IVariantP public String destroyAltar(EntityPlayer player) { - World world = player.worldObj; + World world = player.getEntityWorld(); if (world.isRemote) return ""; diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundAxe.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundAxe.java index 0521def7..83bdb390 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBoundAxe.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBoundAxe.java @@ -67,7 +67,7 @@ public class ItemBoundAxe extends ItemBoundTool implements IMeshProvider boolean silkTouch = EnchantmentHelper.getEnchantmentLevel(Enchantments.SILK_TOUCH, stack) > 0; int fortuneLvl = EnchantmentHelper.getEnchantmentLevel(Enchantments.FORTUNE, stack); - int range = (int) (charge / 6); //Charge is a max of 30 - want 5 to be the max + int range = (charge / 6); //Charge is a max of 30 - want 5 to be the max HashMultiset drops = HashMultiset.create(); @@ -127,8 +127,8 @@ public class ItemBoundAxe extends ItemBoundTool implements IMeshProvider Multimap multimap = super.getItemAttributeModifiers(equipmentSlot); if (equipmentSlot == EntityEquipmentSlot.MAINHAND) { - multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getAttributeUnlocalizedName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", getActivated(stack) ? 11 : 2, 0)); - multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getAttributeUnlocalizedName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Tool modifier", -3.0, 0)); + multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", getActivated(stack) ? 11 : 2, 0)); + multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Tool modifier", -3.0, 0)); } return multimap; } diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundPickaxe.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundPickaxe.java index 429e905b..138f0605 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBoundPickaxe.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBoundPickaxe.java @@ -143,8 +143,8 @@ public class ItemBoundPickaxe extends ItemBoundTool implements IMeshProvider Multimap multimap = super.getItemAttributeModifiers(equipmentSlot); if (equipmentSlot == EntityEquipmentSlot.MAINHAND) { - multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getAttributeUnlocalizedName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", getActivated(stack) ? 5 : 2, 0)); - multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getAttributeUnlocalizedName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Tool modifier", -2.5, 0)); + multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", getActivated(stack) ? 5 : 2, 0)); + multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Tool modifier", -2.5, 0)); } return multimap; } diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundShovel.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundShovel.java index f95b163b..5eec0a4c 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBoundShovel.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBoundShovel.java @@ -127,8 +127,8 @@ public class ItemBoundShovel extends ItemBoundTool implements IMeshProvider Multimap multimap = super.getItemAttributeModifiers(equipmentSlot); if (equipmentSlot == EntityEquipmentSlot.MAINHAND) { - multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getAttributeUnlocalizedName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", 5, 0)); - multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getAttributeUnlocalizedName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Tool modifier", -2.5, 0)); + multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", 5, 0)); + multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Tool modifier", -2.5, 0)); } return multimap; } diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java index db1f9223..7e264f3f 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java @@ -115,8 +115,8 @@ public class ItemBoundSword extends ItemSword implements IBindable, IActivatable Multimap multimap = HashMultimap.create(); if (equipmentSlot == EntityEquipmentSlot.MAINHAND) { - multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getAttributeUnlocalizedName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", getActivated(stack) ? 8 : 2, 0)); - multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getAttributeUnlocalizedName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", -2.4, 0)); + multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", getActivated(stack) ? 8 : 2, 0)); + multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", -2.4, 0)); } return multimap; } diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java index 480543a8..17a03491 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java @@ -244,12 +244,12 @@ public class ItemBoundTool extends ItemTool implements IBindable, IActivatable while (count >= maxStackSize) { - world.spawnEntityInWorld(new EntityItem(world, posToDrop.getX(), posToDrop.getY(), posToDrop.getZ(), stack.toStack(maxStackSize))); + world.spawnEntity(new EntityItem(world, posToDrop.getX(), posToDrop.getY(), posToDrop.getZ(), stack.toStack(maxStackSize))); count -= maxStackSize; } if (count > 0) - world.spawnEntityInWorld(new EntityItem(world, posToDrop.getX(), posToDrop.getY(), posToDrop.getZ(), stack.toStack(count))); + world.spawnEntity(new EntityItem(world, posToDrop.getX(), posToDrop.getY(), posToDrop.getZ(), stack.toStack(count))); } } diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemDaggerOfSacrifice.java b/src/main/java/WayofTime/bloodmagic/item/ItemDaggerOfSacrifice.java index abdbb755..06ad4c91 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemDaggerOfSacrifice.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemDaggerOfSacrifice.java @@ -37,7 +37,7 @@ public class ItemDaggerOfSacrifice extends Item implements IVariantProvider @Override public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) { - if (target == null || attacker == null || attacker.worldObj.isRemote || (attacker instanceof EntityPlayer && !(attacker instanceof EntityPlayerMP))) + if (target == null || attacker == null || attacker.getEntityWorld().isRemote || (attacker instanceof EntityPlayer && !(attacker instanceof EntityPlayerMP))) return false; if (!target.isNonBoss()) @@ -67,9 +67,9 @@ public class ItemDaggerOfSacrifice extends Item implements IVariantProvider lifeEssence = (int) (lifeEssence * (1 + PurificationHelper.getCurrentPurity((EntityAnimal) target))); } - if (PlayerSacrificeHelper.findAndFillAltar(attacker.worldObj, target, lifeEssence, true)) + if (PlayerSacrificeHelper.findAndFillAltar(attacker.getEntityWorld(), target, lifeEssence, true)) { - target.worldObj.playSound(null, target.posX, target.posY, target.posZ, SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, 2.6F + (target.worldObj.rand.nextFloat() - target.worldObj.rand.nextFloat()) * 0.8F); + target.getEntityWorld().playSound(null, target.posX, target.posY, target.posZ, SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, 2.6F + (target.getEntityWorld().rand.nextFloat() - target.getEntityWorld().rand.nextFloat()) * 0.8F); target.setHealth(-1); target.onDeath(BloodMagicAPI.getDamageSource()); } diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemDemonCrystal.java b/src/main/java/WayofTime/bloodmagic/item/ItemDemonCrystal.java index 649bf361..ccf99211 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemDemonCrystal.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemDemonCrystal.java @@ -101,7 +101,7 @@ public class ItemDemonCrystal extends Item implements IDiscreteDemonWill, IVaria @Override public EnumDemonWillType getType(ItemStack willStack) { - return EnumDemonWillType.values()[MathHelper.clamp_int(willStack.getMetadata(), 0, EnumDemonWillType.values().length - 1)]; + return EnumDemonWillType.values()[MathHelper.clamp(willStack.getMetadata(), 0, EnumDemonWillType.values().length - 1)]; } @Override diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemExperienceBook.java b/src/main/java/WayofTime/bloodmagic/item/ItemExperienceBook.java index 8d0063f9..880b2d39 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemExperienceBook.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemExperienceBook.java @@ -95,7 +95,7 @@ public class ItemExperienceBook extends Item implements IVariantProvider if (player.experienceLevel % 5 == 0) { float f = player.experienceLevel > 30 ? 1.0F : (float) player.experienceLevel / 30.0F; - player.worldObj.playSound((EntityPlayer) null, player.posX, player.posY, player.posZ, SoundEvents.ENTITY_PLAYER_LEVELUP, player.getSoundCategory(), f * 0.75F, 1.0F); + player.getEntityWorld().playSound(null, player.posX, player.posY, player.posZ, SoundEvents.ENTITY_PLAYER_LEVELUP, player.getSoundCategory(), f * 0.75F, 1.0F); } } else { diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemRitualDiviner.java b/src/main/java/WayofTime/bloodmagic/item/ItemRitualDiviner.java index 3a4154a6..37da318a 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemRitualDiviner.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemRitualDiviner.java @@ -372,7 +372,7 @@ public class ItemRitualDiviner extends Item implements IVariantProvider { EntityPlayer player = (EntityPlayer) entityLiving; - RayTraceResult ray = this.rayTrace(player.worldObj, player, false); + RayTraceResult ray = this.rayTrace(player.getEntityWorld(), player, false); if (ray != null && ray.typeOfHit == RayTraceResult.Type.BLOCK) { return false; diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemSacrificialDagger.java b/src/main/java/WayofTime/bloodmagic/item/ItemSacrificialDagger.java index 29ebda58..95035644 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemSacrificialDagger.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemSacrificialDagger.java @@ -81,7 +81,7 @@ public class ItemSacrificialDagger extends Item implements IMeshProvider @Override public void onPlayerStoppedUsing(ItemStack stack, World worldIn, EntityLivingBase entityLiving, int timeLeft) { - if (entityLiving instanceof EntityPlayer && !entityLiving.worldObj.isRemote) + if (entityLiving instanceof EntityPlayer && !entityLiving.getEntityWorld().isRemote) PlayerSacrificeHelper.sacrificePlayerHealth((EntityPlayer) entityLiving); } diff --git a/src/main/java/WayofTime/bloodmagic/item/armour/ItemLivingArmour.java b/src/main/java/WayofTime/bloodmagic/item/armour/ItemLivingArmour.java index d94bdcca..37da1d12 100644 --- a/src/main/java/WayofTime/bloodmagic/item/armour/ItemLivingArmour.java +++ b/src/main/java/WayofTime/bloodmagic/item/armour/ItemLivingArmour.java @@ -243,7 +243,7 @@ public class ItemLivingArmour extends ItemArmor implements ISpecialArmor, IMeshP if (damage > this.getMaxDamage(stack) - this.getDamage(stack)) { //TODO: Syphon a load of LP. - if (entity.worldObj.isRemote && entity instanceof EntityPlayer) + if (entity.getEntityWorld().isRemote && entity instanceof EntityPlayer) { EntityPlayer player = (EntityPlayer) entity; SoulNetwork network = NetworkHelper.getSoulNetwork(player); @@ -307,7 +307,7 @@ public class ItemLivingArmour extends ItemArmor implements ISpecialArmor, IMeshP if (tracker != null) { double progress = tracker.getProgress(armour, upgrade.getUpgradeLevel()); - tooltip.add(TextHelper.localize("tooltip.BloodMagic.livingArmour.upgrade.progress", TextHelper.localize(upgrade.getUnlocalizedName()), MathHelper.clamp_int((int) (progress * 100D), 0, 100))); + tooltip.add(TextHelper.localize("tooltip.BloodMagic.livingArmour.upgrade.progress", TextHelper.localize(upgrade.getUnlocalizedName()), MathHelper.clamp((int) (progress * 100D), 0, 100))); } } else { diff --git a/src/main/java/WayofTime/bloodmagic/item/armour/ItemSentientArmour.java b/src/main/java/WayofTime/bloodmagic/item/armour/ItemSentientArmour.java index f5dc8800..3ea9a5eb 100644 --- a/src/main/java/WayofTime/bloodmagic/item/armour/ItemSentientArmour.java +++ b/src/main/java/WayofTime/bloodmagic/item/armour/ItemSentientArmour.java @@ -371,11 +371,11 @@ public class ItemSentientArmour extends ItemArmor implements ISpecialArmor, IMes Multimap multimap = HashMultimap.create(); if (slot == EntityEquipmentSlot.CHEST) { - multimap.put(SharedMonsterAttributes.MAX_HEALTH.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(0, 318145), "Armor modifier", this.getHealthBonus(stack), 0)); - multimap.put(SharedMonsterAttributes.KNOCKBACK_RESISTANCE.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(0, 8145), "Armor modifier", this.getKnockbackResistance(stack), 0)); - multimap.put(SharedMonsterAttributes.MOVEMENT_SPEED.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(0, 94021), "Armor modifier", this.getSpeedBoost(stack), 2)); - multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(0, 96721), "Armor modifier", this.getDamageBoost(stack), 2)); - multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(0, 73245), "Armor modifier", this.getAttackSpeedBoost(stack), 2)); + multimap.put(SharedMonsterAttributes.MAX_HEALTH.getName(), new AttributeModifier(new UUID(0, 318145), "Armor modifier", this.getHealthBonus(stack), 0)); + multimap.put(SharedMonsterAttributes.KNOCKBACK_RESISTANCE.getName(), new AttributeModifier(new UUID(0, 8145), "Armor modifier", this.getKnockbackResistance(stack), 0)); + multimap.put(SharedMonsterAttributes.MOVEMENT_SPEED.getName(), new AttributeModifier(new UUID(0, 94021), "Armor modifier", this.getSpeedBoost(stack), 2)); + multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(new UUID(0, 96721), "Armor modifier", this.getDamageBoost(stack), 2)); + multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(new UUID(0, 73245), "Armor modifier", this.getAttackSpeedBoost(stack), 2)); } return multimap; } diff --git a/src/main/java/WayofTime/bloodmagic/item/block/base/ItemBlockEnum.java b/src/main/java/WayofTime/bloodmagic/item/block/base/ItemBlockEnum.java index 9b9f825e..9efd5ff4 100644 --- a/src/main/java/WayofTime/bloodmagic/item/block/base/ItemBlockEnum.java +++ b/src/main/java/WayofTime/bloodmagic/item/block/base/ItemBlockEnum.java @@ -27,7 +27,7 @@ public class ItemBlockEnum & IStringSerializable> extends Item @Override public String getUnlocalizedName(ItemStack stack) { - return getBlock().getUnlocalizedName() + getBlock().getTypes()[MathHelper.clamp_int(stack.getItemDamage(), 0, 15)].getName(); + return getBlock().getUnlocalizedName() + getBlock().getTypes()[MathHelper.clamp(stack.getItemDamage(), 0, 15)].getName(); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/item/block/base/ItemBlockString.java b/src/main/java/WayofTime/bloodmagic/item/block/base/ItemBlockString.java index 3fdea986..37e51279 100644 --- a/src/main/java/WayofTime/bloodmagic/item/block/base/ItemBlockString.java +++ b/src/main/java/WayofTime/bloodmagic/item/block/base/ItemBlockString.java @@ -22,7 +22,7 @@ public class ItemBlockString extends ItemBlock { @Override public String getUnlocalizedName(ItemStack stack) { - return getBlock().getUnlocalizedName() + "." + getBlock().getTypes()[MathHelper.clamp_int(stack.getItemDamage(), 0, 15)]; + return getBlock().getUnlocalizedName() + "." + getBlock().getTypes()[MathHelper.clamp(stack.getItemDamage(), 0, 15)]; } @Override diff --git a/src/main/java/WayofTime/bloodmagic/item/inventory/ContainerHolding.java b/src/main/java/WayofTime/bloodmagic/item/inventory/ContainerHolding.java index c95f2497..c64c678d 100644 --- a/src/main/java/WayofTime/bloodmagic/item/inventory/ContainerHolding.java +++ b/src/main/java/WayofTime/bloodmagic/item/inventory/ContainerHolding.java @@ -59,7 +59,7 @@ public class ContainerHolding extends Container { super.onContainerClosed(entityPlayer); - if (!entityPlayer.worldObj.isRemote) + if (!entityPlayer.getEntityWorld().isRemote) { saveInventory(entityPlayer); } @@ -70,7 +70,7 @@ public class ContainerHolding extends Container { super.detectAndSendChanges(); - if (!player.worldObj.isRemote) + if (!player.getEntityWorld().isRemote) { saveInventory(player); } diff --git a/src/main/java/WayofTime/bloodmagic/item/inventory/ItemInventory.java b/src/main/java/WayofTime/bloodmagic/item/inventory/ItemInventory.java index dcea591a..4c8bb267 100644 --- a/src/main/java/WayofTime/bloodmagic/item/inventory/ItemInventory.java +++ b/src/main/java/WayofTime/bloodmagic/item/inventory/ItemInventory.java @@ -177,7 +177,7 @@ public class ItemInventory implements IInventory } @Override - public boolean isUseableByPlayer(EntityPlayer player) + public boolean isUsableByPlayer(EntityPlayer player) { return true; } diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBloodLight.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBloodLight.java index bd271c71..47dc9976 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBloodLight.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBloodLight.java @@ -58,7 +58,7 @@ public class ItemSigilBloodLight extends ItemSigilBase { if (!world.isRemote) { - world.spawnEntityInWorld(new EntityBloodLight(world, player)); + world.spawnEntity(new EntityBloodLight(world, player)); NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage(player, getLpUsed()); } resetCooldown(stack); diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilCompression.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilCompression.java index 8da86084..d37faaf2 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilCompression.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilCompression.java @@ -28,7 +28,7 @@ public class ItemSigilCompression extends ItemSigilToggleableBase if (compressedStack != null) { EntityItem entityItem = new EntityItem(world, player.posX, player.posY, player.posZ, compressedStack); - world.spawnEntityInWorld(entityItem); + world.spawnEntity(entityItem); } } } diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHolding.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHolding.java index 5214d64a..b5d421af 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHolding.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHolding.java @@ -48,7 +48,7 @@ public class ItemSigilHolding extends ItemSigilBase implements IKeybindable, IAl if (stack == player.getHeldItemMainhand() && stack.getItem() instanceof ItemSigilHolding && key.equals(KeyBindings.OPEN_HOLDING)) { Utils.setUUID(stack); - player.openGui(BloodMagic.instance, Constants.Gui.SIGIL_HOLDING_GUI, player.worldObj, (int) player.posX, (int) player.posY, (int) player.posZ); + player.openGui(BloodMagic.instance, Constants.Gui.SIGIL_HOLDING_GUI, player.getEntityWorld(), (int) player.posX, (int) player.posY, (int) player.posZ); } } @@ -251,7 +251,7 @@ public class ItemSigilHolding extends ItemSigilBase implements IKeybindable, IAl { initModeTag(itemStack); int currentSigil = itemStack.getTagCompound().getInteger(Constants.NBT.CURRENT_SIGIL); - currentSigil = MathHelper.clamp_int(currentSigil, 0, inventorySize - 1); + currentSigil = MathHelper.clamp(currentSigil, 0, inventorySize - 1); return currentSigil; } diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilMagnetism.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilMagnetism.java index 5ab19bc1..3c5aec7a 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilMagnetism.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilMagnetism.java @@ -28,8 +28,8 @@ public class ItemSigilMagnetism extends ItemSigilToggleableBase float posX = Math.round(player.posX); float posY = (float) (player.posY - player.getEyeHeight()); float posZ = Math.round(player.posZ); - List entities = player.worldObj.getEntitiesWithinAABB(EntityItem.class, new AxisAlignedBB(posX - 0.5f, posY - 0.5f, posZ - 0.5f, posX + 0.5f, posY + 0.5f, posZ + 0.5f).expand(range, verticalRange, range)); - List xpOrbs = player.worldObj.getEntitiesWithinAABB(EntityXPOrb.class, new AxisAlignedBB(posX - 0.5f, posY - 0.5f, posZ - 0.5f, posX + 0.5f, posY + 0.5f, posZ + 0.5f).expand(range, verticalRange, range)); + List entities = player.getEntityWorld().getEntitiesWithinAABB(EntityItem.class, new AxisAlignedBB(posX - 0.5f, posY - 0.5f, posZ - 0.5f, posX + 0.5f, posY + 0.5f, posZ + 0.5f).expand(range, verticalRange, range)); + List xpOrbs = player.getEntityWorld().getEntitiesWithinAABB(EntityXPOrb.class, new AxisAlignedBB(posX - 0.5f, posY - 0.5f, posZ - 0.5f, posX + 0.5f, posY + 0.5f, posZ + 0.5f).expand(range, verticalRange, range)); for (EntityItem entity : entities) { diff --git a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientAxe.java b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientAxe.java index 255ac5d9..a32873df 100644 --- a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientAxe.java +++ b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientAxe.java @@ -224,7 +224,7 @@ public class ItemSentientAxe extends ItemAxe implements IDemonWillWeapon, IMeshP if (attacker instanceof EntityPlayer) { EntityPlayer attackerPlayer = (EntityPlayer) attacker; - this.recalculatePowers(stack, attackerPlayer.worldObj, attackerPlayer); + this.recalculatePowers(stack, attackerPlayer.getEntityWorld(), attackerPlayer); EnumDemonWillType type = this.getCurrentType(stack); double will = PlayerDemonWillHandler.getTotalDemonWill(type, attackerPlayer); int willBracket = this.getLevel(stack, will); @@ -314,7 +314,7 @@ public class ItemSentientAxe extends ItemAxe implements IDemonWillWeapon, IMeshP @Override public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity) { - recalculatePowers(stack, player.worldObj, player); + recalculatePowers(stack, player.getEntityWorld(), player); double drain = this.getDrainOfActivatedSword(stack); if (drain > 0) @@ -365,7 +365,7 @@ public class ItemSentientAxe extends ItemAxe implements IDemonWillWeapon, IMeshP { List soulList = new ArrayList(); - if (killedEntity.worldObj.getDifficulty() != EnumDifficulty.PEACEFUL && !(killedEntity instanceof IMob)) + if (killedEntity.getEntityWorld().getDifficulty() != EnumDifficulty.PEACEFUL && !(killedEntity instanceof IMob)) { return soulList; } @@ -378,9 +378,9 @@ public class ItemSentientAxe extends ItemAxe implements IDemonWillWeapon, IMeshP for (int i = 0; i <= looting; i++) { - if (i == 0 || attackingEntity.worldObj.rand.nextDouble() < 0.4) + if (i == 0 || attackingEntity.getEntityWorld().rand.nextDouble() < 0.4) { - ItemStack soulStack = soul.createWill(type.ordinal(), willModifier * (this.getDropOfActivatedSword(stack) * attackingEntity.worldObj.rand.nextDouble() + this.getStaticDropOfActivatedSword(stack)) * killedEntity.getMaxHealth() / 20d); + ItemStack soulStack = soul.createWill(type.ordinal(), willModifier * (this.getDropOfActivatedSword(stack) * attackingEntity.getEntityWorld().rand.nextDouble() + this.getStaticDropOfActivatedSword(stack)) * killedEntity.getMaxHealth() / 20d); soulList.add(soulStack); } } @@ -395,10 +395,10 @@ public class ItemSentientAxe extends ItemAxe implements IDemonWillWeapon, IMeshP Multimap multimap = HashMultimap.create(); if (slot == EntityEquipmentSlot.MAINHAND) { - multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getAttributeUnlocalizedName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", getDamageOfActivatedSword(stack), 0)); - multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getAttributeUnlocalizedName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", this.getAttackSpeedOfSword(stack), 0)); - multimap.put(SharedMonsterAttributes.MAX_HEALTH.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(0, 31818145), "Weapon modifier", this.getHealthBonusOfSword(stack), 0)); - multimap.put(SharedMonsterAttributes.MOVEMENT_SPEED.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(0, 4218052), "Weapon modifier", this.getSpeedOfSword(stack), 2)); + multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", getDamageOfActivatedSword(stack), 0)); + multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", this.getAttackSpeedOfSword(stack), 0)); + multimap.put(SharedMonsterAttributes.MAX_HEALTH.getName(), new AttributeModifier(new UUID(0, 31818145), "Weapon modifier", this.getHealthBonusOfSword(stack), 0)); + multimap.put(SharedMonsterAttributes.MOVEMENT_SPEED.getName(), new AttributeModifier(new UUID(0, 4218052), "Weapon modifier", this.getSpeedOfSword(stack), 2)); } return multimap; @@ -543,7 +543,7 @@ public class ItemSentientAxe extends ItemAxe implements IDemonWillWeapon, IMeshP @Override public boolean spawnSentientEntityOnDrop(ItemStack droppedStack, EntityPlayer player) { - World world = player.worldObj; + World world = player.getEntityWorld(); if (!world.isRemote) { this.recalculatePowers(droppedStack, world, player); @@ -559,7 +559,7 @@ public class ItemSentientAxe extends ItemAxe implements IDemonWillWeapon, IMeshP EntitySentientSpecter specterEntity = new EntitySentientSpecter(world); specterEntity.setPosition(player.posX, player.posY, player.posZ); - world.spawnEntityInWorld(specterEntity); + world.spawnEntity(specterEntity); specterEntity.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, droppedStack.copy()); diff --git a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientBow.java b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientBow.java index 29505a45..ca4b82e3 100644 --- a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientBow.java +++ b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientBow.java @@ -85,7 +85,7 @@ public class ItemSentientBow extends ItemBow implements IMultiWillTool, ISentien @Override public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) { - return ModItems.ITEM_DEMON_CRYSTAL == repair.getItem() ? true : super.getIsRepairable(toRepair, repair); + return ModItems.ITEM_DEMON_CRYSTAL == repair.getItem() || super.getIsRepairable(toRepair, repair); } public void recalculatePowers(ItemStack stack, World world, EntityPlayer player) @@ -294,7 +294,7 @@ public class ItemSentientBow extends ItemBow implements IMultiWillTool, ISentien double d0 = target.posX - user.posX; double d1 = target.getEntityBoundingBox().minY + (double) (target.height / 3.0F) - entityArrow.posY; double d2 = target.posZ - user.posZ; - double d3 = (double) MathHelper.sqrt_double(d0 * d0 + d2 * d2); + double d3 = (double) MathHelper.sqrt(d0 * d0 + d2 * d2); entityArrow.setThrowableHeading(d0, d1 + d3 * 0.05, d2, newArrowVelocity, 0); if (newArrowVelocity == 0) @@ -405,7 +405,7 @@ public class ItemSentientBow extends ItemBow implements IMultiWillTool, ISentien entityArrow.pickupStatus = EntityArrow.PickupStatus.CREATIVE_ONLY; } - world.spawnEntityInWorld(entityArrow); + world.spawnEntity(entityArrow); } world.playSound(null, player.posX, player.posY, player.posZ, SoundEvents.ENTITY_ARROW_SHOOT, SoundCategory.NEUTRAL, 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + arrowVelocity * 0.5F); @@ -453,7 +453,7 @@ public class ItemSentientBow extends ItemBow implements IMultiWillTool, ISentien @Override public boolean spawnSentientEntityOnDrop(ItemStack droppedStack, EntityPlayer player) { - World world = player.worldObj; + World world = player.getEntityWorld(); if (!world.isRemote) { this.recalculatePowers(droppedStack, world, player); @@ -469,7 +469,7 @@ public class ItemSentientBow extends ItemBow implements IMultiWillTool, ISentien EntitySentientSpecter specterEntity = new EntitySentientSpecter(world); specterEntity.setPosition(player.posX, player.posY, player.posZ); - world.spawnEntityInWorld(specterEntity); + world.spawnEntity(specterEntity); specterEntity.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, droppedStack.copy()); diff --git a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientPickaxe.java b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientPickaxe.java index 9ccef5ad..a6d3bd90 100644 --- a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientPickaxe.java +++ b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientPickaxe.java @@ -224,7 +224,7 @@ public class ItemSentientPickaxe extends ItemPickaxe implements IDemonWillWeapon if (attacker instanceof EntityPlayer) { EntityPlayer attackerPlayer = (EntityPlayer) attacker; - this.recalculatePowers(stack, attackerPlayer.worldObj, attackerPlayer); + this.recalculatePowers(stack, attackerPlayer.getEntityWorld(), attackerPlayer); EnumDemonWillType type = this.getCurrentType(stack); double will = PlayerDemonWillHandler.getTotalDemonWill(type, attackerPlayer); int willBracket = this.getLevel(stack, will); @@ -314,7 +314,7 @@ public class ItemSentientPickaxe extends ItemPickaxe implements IDemonWillWeapon @Override public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity) { - recalculatePowers(stack, player.worldObj, player); + recalculatePowers(stack, player.getEntityWorld(), player); double drain = this.getDrainOfActivatedSword(stack); if (drain > 0) @@ -365,7 +365,7 @@ public class ItemSentientPickaxe extends ItemPickaxe implements IDemonWillWeapon { List soulList = new ArrayList(); - if (killedEntity.worldObj.getDifficulty() != EnumDifficulty.PEACEFUL && !(killedEntity instanceof IMob)) + if (killedEntity.getEntityWorld().getDifficulty() != EnumDifficulty.PEACEFUL && !(killedEntity instanceof IMob)) { return soulList; } @@ -378,9 +378,9 @@ public class ItemSentientPickaxe extends ItemPickaxe implements IDemonWillWeapon for (int i = 0; i <= looting; i++) { - if (i == 0 || attackingEntity.worldObj.rand.nextDouble() < 0.4) + if (i == 0 || attackingEntity.getEntityWorld().rand.nextDouble() < 0.4) { - ItemStack soulStack = soul.createWill(type.ordinal(), willModifier * (this.getDropOfActivatedSword(stack) * attackingEntity.worldObj.rand.nextDouble() + this.getStaticDropOfActivatedSword(stack)) * killedEntity.getMaxHealth() / 20d); + ItemStack soulStack = soul.createWill(type.ordinal(), willModifier * (this.getDropOfActivatedSword(stack) * attackingEntity.getEntityWorld().rand.nextDouble() + this.getStaticDropOfActivatedSword(stack)) * killedEntity.getMaxHealth() / 20d); soulList.add(soulStack); } } @@ -395,10 +395,10 @@ public class ItemSentientPickaxe extends ItemPickaxe implements IDemonWillWeapon Multimap multimap = HashMultimap.create(); if (slot == EntityEquipmentSlot.MAINHAND) { - multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getAttributeUnlocalizedName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", getDamageOfActivatedSword(stack), 0)); - multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getAttributeUnlocalizedName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", this.getAttackSpeedOfSword(stack), 0)); - multimap.put(SharedMonsterAttributes.MAX_HEALTH.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(0, 31818145), "Weapon modifier", this.getHealthBonusOfSword(stack), 0)); - multimap.put(SharedMonsterAttributes.MOVEMENT_SPEED.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(0, 4218052), "Weapon modifier", this.getSpeedOfSword(stack), 2)); + multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", getDamageOfActivatedSword(stack), 0)); + multimap.put(SharedMonsterAttributes.ATTACK_SPEED. getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", this.getAttackSpeedOfSword(stack), 0)); + multimap.put(SharedMonsterAttributes.MAX_HEALTH.getName(), new AttributeModifier(new UUID(0, 31818145), "Weapon modifier", this.getHealthBonusOfSword(stack), 0)); + multimap.put(SharedMonsterAttributes.MOVEMENT_SPEED.getName(), new AttributeModifier(new UUID(0, 4218052), "Weapon modifier", this.getSpeedOfSword(stack), 2)); } return multimap; @@ -543,7 +543,7 @@ public class ItemSentientPickaxe extends ItemPickaxe implements IDemonWillWeapon @Override public boolean spawnSentientEntityOnDrop(ItemStack droppedStack, EntityPlayer player) { - World world = player.worldObj; + World world = player.getEntityWorld(); if (!world.isRemote) { this.recalculatePowers(droppedStack, world, player); @@ -559,7 +559,7 @@ public class ItemSentientPickaxe extends ItemPickaxe implements IDemonWillWeapon EntitySentientSpecter specterEntity = new EntitySentientSpecter(world); specterEntity.setPosition(player.posX, player.posY, player.posZ); - world.spawnEntityInWorld(specterEntity); + world.spawnEntity(specterEntity); specterEntity.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, droppedStack.copy()); diff --git a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientShovel.java b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientShovel.java index 664afb3e..0e1deb4c 100644 --- a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientShovel.java +++ b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientShovel.java @@ -224,7 +224,7 @@ public class ItemSentientShovel extends ItemSpade implements IDemonWillWeapon, I if (attacker instanceof EntityPlayer) { EntityPlayer attackerPlayer = (EntityPlayer) attacker; - this.recalculatePowers(stack, attackerPlayer.worldObj, attackerPlayer); + this.recalculatePowers(stack, attackerPlayer.getEntityWorld(), attackerPlayer); EnumDemonWillType type = this.getCurrentType(stack); double will = PlayerDemonWillHandler.getTotalDemonWill(type, attackerPlayer); int willBracket = this.getLevel(stack, will); @@ -314,7 +314,7 @@ public class ItemSentientShovel extends ItemSpade implements IDemonWillWeapon, I @Override public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity) { - recalculatePowers(stack, player.worldObj, player); + recalculatePowers(stack, player.getEntityWorld(), player); double drain = this.getDrainOfActivatedSword(stack); if (drain > 0) @@ -365,7 +365,7 @@ public class ItemSentientShovel extends ItemSpade implements IDemonWillWeapon, I { List soulList = new ArrayList(); - if (killedEntity.worldObj.getDifficulty() != EnumDifficulty.PEACEFUL && !(killedEntity instanceof IMob)) + if (killedEntity.getEntityWorld().getDifficulty() != EnumDifficulty.PEACEFUL && !(killedEntity instanceof IMob)) { return soulList; } @@ -378,9 +378,9 @@ public class ItemSentientShovel extends ItemSpade implements IDemonWillWeapon, I for (int i = 0; i <= looting; i++) { - if (i == 0 || attackingEntity.worldObj.rand.nextDouble() < 0.4) + if (i == 0 || attackingEntity.getEntityWorld().rand.nextDouble() < 0.4) { - ItemStack soulStack = soul.createWill(type.ordinal(), willModifier * (this.getDropOfActivatedSword(stack) * attackingEntity.worldObj.rand.nextDouble() + this.getStaticDropOfActivatedSword(stack)) * killedEntity.getMaxHealth() / 20d); + ItemStack soulStack = soul.createWill(type.ordinal(), willModifier * (this.getDropOfActivatedSword(stack) * attackingEntity.getEntityWorld().rand.nextDouble() + this.getStaticDropOfActivatedSword(stack)) * killedEntity.getMaxHealth() / 20d); soulList.add(soulStack); } } @@ -395,10 +395,10 @@ public class ItemSentientShovel extends ItemSpade implements IDemonWillWeapon, I Multimap multimap = HashMultimap.create(); if (slot == EntityEquipmentSlot.MAINHAND) { - multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getAttributeUnlocalizedName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", getDamageOfActivatedSword(stack), 0)); - multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getAttributeUnlocalizedName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", this.getAttackSpeedOfSword(stack), 0)); - multimap.put(SharedMonsterAttributes.MAX_HEALTH.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(0, 31818145), "Weapon modifier", this.getHealthBonusOfSword(stack), 0)); - multimap.put(SharedMonsterAttributes.MOVEMENT_SPEED.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(0, 4218052), "Weapon modifier", this.getSpeedOfSword(stack), 2)); + multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", getDamageOfActivatedSword(stack), 0)); + multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", this.getAttackSpeedOfSword(stack), 0)); + multimap.put(SharedMonsterAttributes.MAX_HEALTH.getName(), new AttributeModifier(new UUID(0, 31818145), "Weapon modifier", this.getHealthBonusOfSword(stack), 0)); + multimap.put(SharedMonsterAttributes.MOVEMENT_SPEED.getName(), new AttributeModifier(new UUID(0, 4218052), "Weapon modifier", this.getSpeedOfSword(stack), 2)); } return multimap; @@ -543,7 +543,7 @@ public class ItemSentientShovel extends ItemSpade implements IDemonWillWeapon, I @Override public boolean spawnSentientEntityOnDrop(ItemStack droppedStack, EntityPlayer player) { - World world = player.worldObj; + World world = player.getEntityWorld(); if (!world.isRemote) { this.recalculatePowers(droppedStack, world, player); @@ -559,7 +559,7 @@ public class ItemSentientShovel extends ItemSpade implements IDemonWillWeapon, I EntitySentientSpecter specterEntity = new EntitySentientSpecter(world); specterEntity.setPosition(player.posX, player.posY, player.posZ); - world.spawnEntityInWorld(specterEntity); + world.spawnEntity(specterEntity); specterEntity.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, droppedStack.copy()); diff --git a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientSword.java b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientSword.java index bbc5cc5d..cd3cd61a 100644 --- a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientSword.java +++ b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientSword.java @@ -79,7 +79,7 @@ public class ItemSentientSword extends ItemSword implements IDemonWillWeapon, IM @Override public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) { - return ModItems.ITEM_DEMON_CRYSTAL == repair.getItem() ? true : super.getIsRepairable(toRepair, repair); + return ModItems.ITEM_DEMON_CRYSTAL == repair.getItem() || super.getIsRepairable(toRepair, repair); } public void recalculatePowers(ItemStack stack, World world, EntityPlayer player) @@ -196,7 +196,7 @@ public class ItemSentientSword extends ItemSword implements IDemonWillWeapon, IM if (attacker instanceof EntityPlayer) { EntityPlayer attackerPlayer = (EntityPlayer) attacker; - this.recalculatePowers(stack, attackerPlayer.worldObj, attackerPlayer); + this.recalculatePowers(stack, attackerPlayer.getEntityWorld(), attackerPlayer); EnumDemonWillType type = this.getCurrentType(stack); double will = PlayerDemonWillHandler.getTotalDemonWill(type, attackerPlayer); int willBracket = this.getLevel(stack, will); @@ -286,7 +286,7 @@ public class ItemSentientSword extends ItemSword implements IDemonWillWeapon, IM @Override public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity) { - recalculatePowers(stack, player.worldObj, player); + recalculatePowers(stack, player.getEntityWorld(), player); double drain = this.getDrainOfActivatedSword(stack); if (drain > 0) @@ -337,7 +337,7 @@ public class ItemSentientSword extends ItemSword implements IDemonWillWeapon, IM { List soulList = new ArrayList(); - if (killedEntity.worldObj.getDifficulty() != EnumDifficulty.PEACEFUL && !(killedEntity instanceof IMob)) + if (killedEntity.getEntityWorld().getDifficulty() != EnumDifficulty.PEACEFUL && !(killedEntity instanceof IMob)) { return soulList; } @@ -350,9 +350,9 @@ public class ItemSentientSword extends ItemSword implements IDemonWillWeapon, IM for (int i = 0; i <= looting; i++) { - if (i == 0 || attackingEntity.worldObj.rand.nextDouble() < 0.4) + if (i == 0 || attackingEntity.getEntityWorld().rand.nextDouble() < 0.4) { - ItemStack soulStack = soul.createWill(type.ordinal(), willModifier * (this.getDropOfActivatedSword(stack) * attackingEntity.worldObj.rand.nextDouble() + this.getStaticDropOfActivatedSword(stack)) * killedEntity.getMaxHealth() / 20d); + ItemStack soulStack = soul.createWill(type.ordinal(), willModifier * (this.getDropOfActivatedSword(stack) * attackingEntity.getEntityWorld().rand.nextDouble() + this.getStaticDropOfActivatedSword(stack)) * killedEntity.getMaxHealth() / 20d); soulList.add(soulStack); } } @@ -367,10 +367,10 @@ public class ItemSentientSword extends ItemSword implements IDemonWillWeapon, IM Multimap multimap = HashMultimap.create(); if (slot == EntityEquipmentSlot.MAINHAND) { - multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getAttributeUnlocalizedName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", getDamageOfActivatedSword(stack), 0)); - multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getAttributeUnlocalizedName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", this.getAttackSpeedOfSword(stack), 0)); - multimap.put(SharedMonsterAttributes.MAX_HEALTH.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(0, 31818145), "Weapon modifier", this.getHealthBonusOfSword(stack), 0)); - multimap.put(SharedMonsterAttributes.MOVEMENT_SPEED.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(0, 4218052), "Weapon modifier", this.getSpeedOfSword(stack), 2)); + multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", getDamageOfActivatedSword(stack), 0)); + multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", this.getAttackSpeedOfSword(stack), 0)); + multimap.put(SharedMonsterAttributes.MAX_HEALTH.getName(), new AttributeModifier(new UUID(0, 31818145), "Weapon modifier", this.getHealthBonusOfSword(stack), 0)); + multimap.put(SharedMonsterAttributes.MOVEMENT_SPEED.getName(), new AttributeModifier(new UUID(0, 4218052), "Weapon modifier", this.getSpeedOfSword(stack), 2)); } return multimap; @@ -498,7 +498,7 @@ public class ItemSentientSword extends ItemSword implements IDemonWillWeapon, IM @Override public boolean spawnSentientEntityOnDrop(ItemStack droppedStack, EntityPlayer player) { - World world = player.worldObj; + World world = player.getEntityWorld(); if (!world.isRemote) { this.recalculatePowers(droppedStack, world, player); @@ -514,7 +514,7 @@ public class ItemSentientSword extends ItemSword implements IDemonWillWeapon, IM EntitySentientSpecter specterEntity = new EntitySentientSpecter(world); specterEntity.setPosition(player.posX, player.posY, player.posZ); - world.spawnEntityInWorld(specterEntity); + world.spawnEntity(specterEntity); specterEntity.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, droppedStack.copy()); diff --git a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSoulSnare.java b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSoulSnare.java index b1107f31..3ddf3169 100644 --- a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSoulSnare.java +++ b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSoulSnare.java @@ -53,7 +53,7 @@ public class ItemSoulSnare extends Item implements IVariantProvider { EntitySoulSnare snare = new EntitySoulSnare(worldIn, playerIn); snare.setHeadingFromThrower(playerIn, playerIn.rotationPitch, playerIn.rotationYaw, 0.0F, 1.5F, 1.0F); - worldIn.spawnEntityInWorld(snare); + worldIn.spawnEntity(snare); } return new ActionResult(EnumActionResult.SUCCESS, itemStackIn); diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeMeleeDecrease.java b/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeMeleeDecrease.java index 96dc33fa..b8c2568e 100644 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeMeleeDecrease.java +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeMeleeDecrease.java @@ -36,7 +36,7 @@ public class LivingArmourUpgradeMeleeDecrease extends LivingArmourUpgrade { Multimap modifierMap = HashMultimap.create(); - modifierMap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(0271023, 5321), "damage modifier" + 2, meleeDamage[this.level], 1)); + modifierMap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(new UUID(0271023, 5321), "damage modifier" + 2, meleeDamage[this.level], 1)); return modifierMap; } diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeSlowness.java b/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeSlowness.java index ad67cfe4..b516db11 100644 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeSlowness.java +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeSlowness.java @@ -29,7 +29,7 @@ public class LivingArmourUpgradeSlowness extends LivingArmourUpgrade { Multimap modifierMap = HashMultimap.create(); - modifierMap.put(SharedMonsterAttributes.MOVEMENT_SPEED.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(85472, 8502), "speed modifier" + 2, speedModifier[this.level], 1)); + modifierMap.put(SharedMonsterAttributes.MOVEMENT_SPEED.getName(), new AttributeModifier(new UUID(85472, 8502), "speed modifier" + 2, speedModifier[this.level], 1)); return modifierMap; } diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeHealthboost.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeHealthboost.java index b593da5a..4dc51e55 100644 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeHealthboost.java +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeHealthboost.java @@ -34,7 +34,7 @@ public class LivingArmourUpgradeHealthboost extends LivingArmourUpgrade { Multimap modifierMap = HashMultimap.create(); - modifierMap.put(SharedMonsterAttributes.MAX_HEALTH.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(9423688, 1), "Health modifier" + 1, healthModifier[this.level], 0)); + modifierMap.put(SharedMonsterAttributes.MAX_HEALTH.getName(), new AttributeModifier(new UUID(9423688, 1), "Health modifier" + 1, healthModifier[this.level], 0)); return modifierMap; } diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeKnockbackResist.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeKnockbackResist.java index 078aa21f..c59f4e48 100644 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeKnockbackResist.java +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeKnockbackResist.java @@ -26,11 +26,11 @@ public class LivingArmourUpgradeKnockbackResist extends LivingArmourUpgrade { Multimap modifierMap = HashMultimap.create(); - modifierMap.put(SharedMonsterAttributes.KNOCKBACK_RESISTANCE.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(895132, 1), "Knockback modifier" + 1, kbModifier[this.level], 0)); + modifierMap.put(SharedMonsterAttributes.KNOCKBACK_RESISTANCE.getName(), new AttributeModifier(new UUID(895132, 1), "Knockback modifier" + 1, kbModifier[this.level], 0)); if (healthModifier[this.level] > 0) { - modifierMap.put(SharedMonsterAttributes.MAX_HEALTH.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(952142, 1), "Health modifier" + 1, healthModifier[this.level], 0)); + modifierMap.put(SharedMonsterAttributes.MAX_HEALTH.getName(), new AttributeModifier(new UUID(952142, 1), "Health modifier" + 1, healthModifier[this.level], 0)); } return modifierMap; diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeMeleeDamage.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeMeleeDamage.java index 228404de..4bbe2fc7 100644 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeMeleeDamage.java +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeMeleeDamage.java @@ -34,7 +34,7 @@ public class LivingArmourUpgradeMeleeDamage extends LivingArmourUpgrade { Multimap modifierMap = HashMultimap.create(); - modifierMap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(9423688, 1), "damage modifier" + 1, meleeDamage[this.level], 0)); + modifierMap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(new UUID(9423688, 1), "damage modifier" + 1, meleeDamage[this.level], 0)); return modifierMap; } diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeSolarPowered.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeSolarPowered.java index b86b39cc..5196c902 100644 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeSolarPowered.java +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeSolarPowered.java @@ -29,7 +29,7 @@ public class LivingArmourUpgradeSolarPowered extends LivingArmourUpgrade @Override public double getArmourProtection(EntityLivingBase wearer, DamageSource source) { - if (wearer.worldObj.canSeeSky(wearer.getPosition()) || wearer.worldObj.provider.isDaytime()) + if (wearer.getEntityWorld().canSeeSky(wearer.getPosition()) || wearer.getEntityWorld().provider.isDaytime()) { return protectionLevel[this.level]; } diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeSpeed.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeSpeed.java index eca1937e..6e591e7a 100644 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeSpeed.java +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeSpeed.java @@ -61,7 +61,7 @@ public class LivingArmourUpgradeSpeed extends LivingArmourUpgrade if (healthModifier[this.level] > 0) { - modifierMap.put(SharedMonsterAttributes.MAX_HEALTH.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(952142, 1), "Health modifier" + 1, healthModifier[this.level], 0)); + modifierMap.put(SharedMonsterAttributes.MAX_HEALTH.getName(), new AttributeModifier(new UUID(952142, 1), "Health modifier" + 1, healthModifier[this.level], 0)); } return modifierMap; diff --git a/src/main/java/WayofTime/bloodmagic/network/PlayerVelocityPacketProcessor.java b/src/main/java/WayofTime/bloodmagic/network/PlayerVelocityPacketProcessor.java index d2a1c13f..e9a6f608 100644 --- a/src/main/java/WayofTime/bloodmagic/network/PlayerVelocityPacketProcessor.java +++ b/src/main/java/WayofTime/bloodmagic/network/PlayerVelocityPacketProcessor.java @@ -59,7 +59,7 @@ public class PlayerVelocityPacketProcessor implements IMessage, IMessageHandler< @SideOnly(Side.CLIENT) public void onMessageFromServer() { - EntityPlayer player = Minecraft.getMinecraft().thePlayer; + EntityPlayer player = Minecraft.getMinecraft().player; player.motionX = motionX; player.motionY = motionY; player.motionZ = motionZ; diff --git a/src/main/java/WayofTime/bloodmagic/potion/BMPotionUtils.java b/src/main/java/WayofTime/bloodmagic/potion/BMPotionUtils.java index 1296ed4b..4306fdfa 100644 --- a/src/main/java/WayofTime/bloodmagic/potion/BMPotionUtils.java +++ b/src/main/java/WayofTime/bloodmagic/potion/BMPotionUtils.java @@ -30,7 +30,7 @@ public class BMPotionUtils public static double damageMobAndGrowSurroundingPlants(EntityLivingBase entity, int horizontalRadius, int verticalRadius, double damageRatio, int maxPlantsGrown) { - World world = entity.worldObj; + World world = entity.getEntityWorld(); if (world.isRemote) { return 0; diff --git a/src/main/java/WayofTime/bloodmagic/potion/PotionEventHandlers.java b/src/main/java/WayofTime/bloodmagic/potion/PotionEventHandlers.java index 58813ea4..4bfb118f 100644 --- a/src/main/java/WayofTime/bloodmagic/potion/PotionEventHandlers.java +++ b/src/main/java/WayofTime/bloodmagic/potion/PotionEventHandlers.java @@ -59,7 +59,7 @@ public class PotionEventHandlers { int d0 = 3; AxisAlignedBB axisAlignedBB = new AxisAlignedBB(event.getEntityLiving().posX - 0.5, event.getEntityLiving().posY - 0.5, event.getEntityLiving().posZ - 0.5, event.getEntityLiving().posX + 0.5, event.getEntityLiving().posY + 0.5, event.getEntityLiving().posZ + 0.5).expand(d0, d0, d0); - List entityList = event.getEntityLiving().worldObj.getEntitiesWithinAABB(Entity.class, axisAlignedBB); + List entityList = event.getEntityLiving().getEntityWorld().getEntitiesWithinAABB(Entity.class, axisAlignedBB); for (Object thing : entityList) { diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java b/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java index b76b8028..f9378dfe 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java @@ -80,7 +80,6 @@ import WayofTime.bloodmagic.tile.TileInversionPillar; import WayofTime.bloodmagic.tile.TileMasterRitualStone; import WayofTime.bloodmagic.tile.TileMimic; import WayofTime.bloodmagic.tile.TilePhantomBlock; -import WayofTime.bloodmagic.tile.TilePlinth; import WayofTime.bloodmagic.tile.TileSoulForge; import WayofTime.bloodmagic.tile.TileSpectralBlock; import WayofTime.bloodmagic.tile.TileTeleposer; @@ -213,7 +212,6 @@ public class ModBlocks GameRegistry.registerTileEntity(TileAltar.class, Constants.Mod.MODID + ":" + TileAltar.class.getSimpleName()); GameRegistry.registerTileEntity(TileImperfectRitualStone.class, Constants.Mod.MODID + ":" + TileImperfectRitualStone.class.getSimpleName()); GameRegistry.registerTileEntity(TileMasterRitualStone.class, Constants.Mod.MODID + ":" + TileMasterRitualStone.class.getSimpleName()); - GameRegistry.registerTileEntity(TilePlinth.class, Constants.Mod.MODID + ":" + TilePlinth.class.getSimpleName()); GameRegistry.registerTileEntity(TileAlchemyArray.class, Constants.Mod.MODID + ":" + TileAlchemyArray.class.getSimpleName()); GameRegistry.registerTileEntity(TileSpectralBlock.class, Constants.Mod.MODID + ":" + TileSpectralBlock.class.getSimpleName()); GameRegistry.registerTileEntity(TilePhantomBlock.class, Constants.Mod.MODID + ":" + TilePhantomBlock.class.getSimpleName()); diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModCompatibility.java b/src/main/java/WayofTime/bloodmagic/registry/ModCompatibility.java index fdf91ba5..28dbcaa4 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModCompatibility.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModCompatibility.java @@ -2,7 +2,6 @@ package WayofTime.bloodmagic.registry; import WayofTime.bloodmagic.compat.ICompatibility; import WayofTime.bloodmagic.compat.guideapi.CompatibilityGuideAPI; -import WayofTime.bloodmagic.compat.jei.CompatibilityJustEnoughItems; import WayofTime.bloodmagic.compat.waila.CompatibilityWaila; import net.minecraftforge.fml.common.Loader; @@ -14,7 +13,6 @@ public class ModCompatibility public static void registerModCompat() { - compatibilities.add(new CompatibilityJustEnoughItems()); compatibilities.add(new CompatibilityWaila()); compatibilities.add(new CompatibilityGuideAPI()); // compatibilities.add(new CompatibilityThaumcraft()); diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualArmourEvolve.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualArmourEvolve.java index 2fb686f9..caff98f0 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualArmourEvolve.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualArmourEvolve.java @@ -55,7 +55,7 @@ public class RitualArmourEvolve extends Ritual masterRitualStone.setActive(false); - world.spawnEntityInWorld(new EntityLightningBolt(world, pos.getX(), pos.getY() - 1, pos.getZ(), true)); + world.spawnEntity(new EntityLightningBolt(world, pos.getX(), pos.getY() - 1, pos.getZ(), true)); } } } diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualExpulsion.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualExpulsion.java index 4cfdece0..2c833ac9 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualExpulsion.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualExpulsion.java @@ -136,18 +136,18 @@ public class RitualExpulsion extends Ritual moveEntityViaTeleport(entityLiving, event.getTargetX(), event.getTargetY(), event.getTargetZ()); boolean flag = false; - int i = MathHelper.floor_double(entityLiving.posX); - int j = MathHelper.floor_double(entityLiving.posY); - int k = MathHelper.floor_double(entityLiving.posZ); + int i = MathHelper.floor(entityLiving.posX); + int j = MathHelper.floor(entityLiving.posY); + int k = MathHelper.floor(entityLiving.posZ); int l; - if (!entityLiving.worldObj.isAirBlock(new BlockPos(i, j, k))) + if (!entityLiving.getEntityWorld().isAirBlock(new BlockPos(i, j, k))) { boolean flag1 = false; while (!flag1 && j > 0) { - IBlockState state = entityLiving.worldObj.getBlockState(new BlockPos(i, j - 1, k)); + IBlockState state = entityLiving.getEntityWorld().getBlockState(new BlockPos(i, j - 1, k)); if (state != null && state.getMaterial().blocksMovement()) { @@ -163,7 +163,7 @@ public class RitualExpulsion extends Ritual { moveEntityViaTeleport(entityLiving, entityLiving.posX, entityLiving.posY, entityLiving.posZ); - if (!entityLiving.isCollided && !entityLiving.worldObj.containsAnyLiquid(entityLiving.getEntityBoundingBox())) + if (!entityLiving.isCollided && !entityLiving.getEntityWorld().containsAnyLiquid(entityLiving.getEntityBoundingBox())) { flag = true; } @@ -179,13 +179,13 @@ public class RitualExpulsion extends Ritual for (l = 0; l < 128; ++l) { double lengthVal = (double) l / ((double) 128 - 1.0D); - float randF1 = (entityLiving.worldObj.rand.nextFloat() - 0.5F) * 0.2F; - float randF2 = (entityLiving.worldObj.rand.nextFloat() - 0.5F) * 0.2F; - float randF3 = (entityLiving.worldObj.rand.nextFloat() - 0.5F) * 0.2F; - double lengthValX = lastX + (entityLiving.posX - lastX) * lengthVal + (entityLiving.worldObj.rand.nextDouble() - 0.5D) * (double) entityLiving.width * 2.0D; - double lengthValY = lastY + (entityLiving.posY - lastY) * lengthVal + entityLiving.worldObj.rand.nextDouble() * (double) entityLiving.height; - double lengthValZ = lastZ + (entityLiving.posZ - lastZ) * lengthVal + (entityLiving.worldObj.rand.nextDouble() - 0.5D) * (double) entityLiving.width * 2.0D; - entityLiving.worldObj.spawnParticle(EnumParticleTypes.PORTAL, lengthValX, lengthValY, lengthValZ, (double) randF1, (double) randF2, (double) randF3); + float randF1 = (entityLiving.getEntityWorld().rand.nextFloat() - 0.5F) * 0.2F; + float randF2 = (entityLiving.getEntityWorld().rand.nextFloat() - 0.5F) * 0.2F; + float randF3 = (entityLiving.getEntityWorld().rand.nextFloat() - 0.5F) * 0.2F; + double lengthValX = lastX + (entityLiving.posX - lastX) * lengthVal + (entityLiving.getEntityWorld().rand.nextDouble() - 0.5D) * (double) entityLiving.width * 2.0D; + double lengthValY = lastY + (entityLiving.posY - lastY) * lengthVal + entityLiving.getEntityWorld().rand.nextDouble() * (double) entityLiving.height; + double lengthValZ = lastZ + (entityLiving.posZ - lastZ) * lengthVal + (entityLiving.getEntityWorld().rand.nextDouble() - 0.5D) * (double) entityLiving.width * 2.0D; + entityLiving.getEntityWorld().spawnParticle(EnumParticleTypes.PORTAL, lengthValX, lengthValY, lengthValZ, (double) randF1, (double) randF2, (double) randF3); } return true; @@ -200,7 +200,7 @@ public class RitualExpulsion extends Ritual { EntityPlayerMP entityplayermp = (EntityPlayerMP) entityLiving; - if (entityplayermp.worldObj == entityLiving.worldObj) + if (entityplayermp.getEntityWorld() == entityLiving.getEntityWorld()) { EnderTeleportEvent event = new EnderTeleportEvent(entityplayermp, x, y, z, 5.0F); diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualFelling.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualFelling.java index e235c7ba..072f17c2 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualFelling.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualFelling.java @@ -124,7 +124,7 @@ public class RitualFelling extends Ritual Utils.insertStackIntoInventory(copyStack, (IInventory) tile, EnumFacing.DOWN); if (copyStack.stackSize > 0) { - world.spawnEntityInWorld(new EntityItem(world, blockPos.getX() + 0.4, blockPos.getY() + 2, blockPos.getZ() + 0.4, copyStack)); + world.spawnEntity(new EntityItem(world, blockPos.getX() + 0.4, blockPos.getY() + 2, blockPos.getZ() + 0.4, copyStack)); } } } diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualLivingArmourDowngrade.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualLivingArmourDowngrade.java index f4d3244d..1895d037 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualLivingArmourDowngrade.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualLivingArmourDowngrade.java @@ -126,7 +126,7 @@ public class RitualLivingArmourDowngrade extends Ritual recipe.consumeInventory(inv); EntityLightningBolt lightning = new EntityLightningBolt(world, chestPos.getX(), chestPos.getY(), chestPos.getZ(), true); - world.spawnEntityInWorld(lightning); + world.spawnEntity(lightning); masterRitualStone.setActive(false); } diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualMeteor.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualMeteor.java index 1ef24b08..cc690201 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualMeteor.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualMeteor.java @@ -65,7 +65,7 @@ public class RitualMeteor extends Ritual { EntityMeteor meteor = new EntityMeteor(world, pos.getX(), 260, pos.getZ(), 0, -0.1, 0, radiusModifier, explosionModifier, fillerChance); meteor.setMeteorStack(stack.copy()); - world.spawnEntityInWorld(meteor); + world.spawnEntity(meteor); entityItem.setDead(); diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualUpgradeRemove.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualUpgradeRemove.java index c859c7f2..79dacbe7 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualUpgradeRemove.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualUpgradeRemove.java @@ -79,7 +79,7 @@ public class RitualUpgradeRemove extends Ritual if (successful) { removedUpgrade = true; - world.spawnEntityInWorld(new EntityItem(world, player.posX, player.posY, player.posZ, upgradeStack)); + world.spawnEntity(new EntityItem(world, player.posX, player.posY, player.posZ, upgradeStack)); for (Entry trackerEntry : armour.trackerMap.entrySet()) { StatTracker tracker = trackerEntry.getValue(); @@ -102,7 +102,7 @@ public class RitualUpgradeRemove extends Ritual masterRitualStone.setActive(false); - world.spawnEntityInWorld(new EntityLightningBolt(world, pos.getX(), pos.getY() - 1, pos.getZ(), true)); + world.spawnEntity(new EntityLightningBolt(world, pos.getX(), pos.getY() - 1, pos.getZ(), true)); } } diff --git a/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerPlantable.java b/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerPlantable.java index 74b5b1cd..a1e98351 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerPlantable.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerPlantable.java @@ -70,7 +70,7 @@ public class HarvestHandlerPlantable implements IHarvestHandler if (!world.isRemote) { EntityItem toDrop = new EntityItem(world, pos.getX(), pos.getY() + 0.5, pos.getZ(), stack); - world.spawnEntityInWorld(toDrop); + world.spawnEntity(toDrop); } } diff --git a/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerStem.java b/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerStem.java index 16984fd4..1d98a5f1 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerStem.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerStem.java @@ -61,7 +61,7 @@ public class HarvestHandlerStem implements IHarvestHandler for (ItemStack drop : drops) { EntityItem item = new EntityItem(world, cropPos.getX(), cropPos.getY() + 0.5, cropPos.getZ(), drop); - world.spawnEntityInWorld(item); + world.spawnEntity(item); } } diff --git a/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerTall.java b/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerTall.java index 8bcdecf8..4325a79b 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerTall.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerTall.java @@ -47,7 +47,7 @@ public class HarvestHandlerTall implements IHarvestHandler for (ItemStack drop : drops) { EntityItem item = new EntityItem(world, pos.getX(), pos.getY() + 0.5, pos.getZ(), drop); - world.spawnEntityInWorld(item); + world.spawnEntity(item); } } diff --git a/src/main/java/WayofTime/bloodmagic/ritual/imperfect/ImperfectRitualZombie.java b/src/main/java/WayofTime/bloodmagic/ritual/imperfect/ImperfectRitualZombie.java index 362fe1b8..75dfaf5d 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/imperfect/ImperfectRitualZombie.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/imperfect/ImperfectRitualZombie.java @@ -28,7 +28,7 @@ public class ImperfectRitualZombie extends ImperfectRitual zombie.addPotionEffect(new PotionEffect(MobEffects.RESISTANCE, 20000, 3)); if (!imperfectRitualStone.getRitualWorld().isRemote) - imperfectRitualStone.getRitualWorld().spawnEntityInWorld(zombie); + imperfectRitualStone.getRitualWorld().spawnEntity(zombie); return true; } diff --git a/src/main/java/WayofTime/bloodmagic/ritual/portal/Teleports.java b/src/main/java/WayofTime/bloodmagic/ritual/portal/Teleports.java index e3c035d1..f15568ad 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/portal/Teleports.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/portal/Teleports.java @@ -54,7 +54,7 @@ public class Teleports return; if (teleposer) - if (MinecraftForge.EVENT_BUS.post(new TeleposeEvent.Ent(entity, entity.worldObj, entity.getPosition(), entity.worldObj, new BlockPos(x, y, z)))) + if (MinecraftForge.EVENT_BUS.post(new TeleposeEvent.Ent(entity, entity.getEntityWorld(), entity.getPosition(), entity.getEntityWorld(), new BlockPos(x, y, z)))) return; network.syphon(getTeleportCost()); @@ -62,13 +62,13 @@ public class Teleports EntityPlayerMP player = (EntityPlayerMP) entity; player.setPositionAndUpdate(x + 0.5, y + 0.5, z + 0.5); - player.worldObj.updateEntityWithOptionalForce(player, false); + player.getEntityWorld().updateEntityWithOptionalForce(player, false); player.connection.sendPacket(new SPacketUpdateHealth(player.getHealth(), player.getFoodStats().getFoodLevel(), player.getFoodStats().getSaturationLevel())); player.timeUntilPortal = 150; - player.worldObj.playSound(x, y, z, SoundEvents.ENTITY_ENDERMEN_TELEPORT, SoundCategory.AMBIENT, 1.0F, 1.0F, false); + player.getEntityWorld().playSound(x, y, z, SoundEvents.ENTITY_ENDERMEN_TELEPORT, SoundCategory.AMBIENT, 1.0F, 1.0F, false); if (teleposer) - MinecraftForge.EVENT_BUS.post(new TeleposeEvent.Ent.Post(entity, entity.worldObj, entity.getPosition(), entity.worldObj, new BlockPos(x, y, z))); + MinecraftForge.EVENT_BUS.post(new TeleposeEvent.Ent.Post(entity, entity.getEntityWorld(), entity.getPosition(), entity.getEntityWorld(), new BlockPos(x, y, z))); } else { SoulNetwork network = NetworkHelper.getSoulNetwork(networkToDrain); @@ -76,20 +76,20 @@ public class Teleports return; if (teleposer) - if (MinecraftForge.EVENT_BUS.post(new TeleposeEvent.Ent(entity, entity.worldObj, entity.getPosition(), entity.worldObj, new BlockPos(x, y, z)))) + if (MinecraftForge.EVENT_BUS.post(new TeleposeEvent.Ent(entity, entity.getEntityWorld(), entity.getPosition(), entity.getEntityWorld(), new BlockPos(x, y, z)))) return; network.syphon(getTeleportCost() / 10); - WorldServer world = (WorldServer) entity.worldObj; + WorldServer world = (WorldServer) entity.getEntityWorld(); entity.setPosition(x + 0.5, y + 0.5, z + 0.5); entity.timeUntilPortal = 150; world.resetUpdateEntityTick(); - entity.worldObj.playSound(x, y, z, SoundEvents.ENTITY_ENDERMEN_TELEPORT, SoundCategory.AMBIENT, 1.0F, 1.0F, false); + entity.getEntityWorld().playSound(x, y, z, SoundEvents.ENTITY_ENDERMEN_TELEPORT, SoundCategory.AMBIENT, 1.0F, 1.0F, false); if (teleposer) - MinecraftForge.EVENT_BUS.post(new TeleposeEvent.Ent.Post(entity, entity.worldObj, entity.getPosition(), entity.worldObj, new BlockPos(x, y, z))); + MinecraftForge.EVENT_BUS.post(new TeleposeEvent.Ent.Post(entity, entity.getEntityWorld(), entity.getPosition(), entity.getEntityWorld(), new BlockPos(x, y, z))); } } } @@ -137,14 +137,14 @@ public class Teleports { EntityPlayerMP player = (EntityPlayerMP) entity; - if (!player.worldObj.isRemote) + if (!player.getEntityWorld().isRemote) { SoulNetwork network = NetworkHelper.getSoulNetwork(networkToDrain); if (network.getCurrentEssence() < getTeleportCost()) return; if (teleposer) - if (MinecraftForge.EVENT_BUS.post(new TeleposeEvent.Ent(entity, entity.worldObj, entity.getPosition(), newWorldServer, new BlockPos(x, y, z)))) + if (MinecraftForge.EVENT_BUS.post(new TeleposeEvent.Ent(entity, entity.getEntityWorld(), entity.getPosition(), newWorldServer, new BlockPos(x, y, z)))) return; network.syphon(getTeleportCost()); @@ -152,20 +152,20 @@ public class Teleports player.changeDimension(newWorldID); //TODO: UNTESTED // server.getConfigurationManager().transferPlayerToDimension(player, newWorldID, new TeleporterBloodMagic(newWorldServer)); player.setPositionAndUpdate(x + 0.5, y + 0.5, z + 0.5); - player.worldObj.updateEntityWithOptionalForce(player, false); + player.getEntityWorld().updateEntityWithOptionalForce(player, false); player.connection.sendPacket(new SPacketUpdateHealth(player.getHealth(), player.getFoodStats().getFoodLevel(), player.getFoodStats().getSaturationLevel())); if (teleposer) - MinecraftForge.EVENT_BUS.post(new TeleposeEvent.Ent.Post(entity, entity.worldObj, entity.getPosition(), newWorldServer, new BlockPos(x, y, z))); + MinecraftForge.EVENT_BUS.post(new TeleposeEvent.Ent.Post(entity, entity.getEntityWorld(), entity.getPosition(), newWorldServer, new BlockPos(x, y, z))); } - } else if (!entity.worldObj.isRemote) + } else if (!entity.getEntityWorld().isRemote) { SoulNetwork network = NetworkHelper.getSoulNetwork(networkToDrain); if (network.getCurrentEssence() < (getTeleportCost() / 10)) return; if (teleposer) - if (MinecraftForge.EVENT_BUS.post(new TeleposeEvent.Ent(entity, entity.worldObj, entity.getPosition(), newWorldServer, new BlockPos(x, y, z)))) + if (MinecraftForge.EVENT_BUS.post(new TeleposeEvent.Ent(entity, entity.getEntityWorld(), entity.getPosition(), newWorldServer, new BlockPos(x, y, z)))) return; network.syphon(getTeleportCost() / 10); @@ -181,7 +181,7 @@ public class Teleports { teleportedEntity.setLocationAndAngles(x + 0.5, y + 0.5, z + 0.5, entity.rotationYaw, entity.rotationPitch); teleportedEntity.forceSpawn = true; - newWorldServer.spawnEntityInWorld(teleportedEntity); + newWorldServer.spawnEntity(teleportedEntity); teleportedEntity.setWorld(newWorldServer); teleportedEntity.timeUntilPortal = teleportedEntity instanceof EntityPlayer ? 150 : 20; } @@ -189,7 +189,7 @@ public class Teleports oldWorldServer.resetUpdateEntityTick(); newWorldServer.resetUpdateEntityTick(); if (teleposer) - MinecraftForge.EVENT_BUS.post(new TeleposeEvent.Ent.Post(entity, entity.worldObj, entity.getPosition(), newWorldServer, new BlockPos(x, y, z))); + MinecraftForge.EVENT_BUS.post(new TeleposeEvent.Ent.Post(entity, entity.getEntityWorld(), entity.getPosition(), newWorldServer, new BlockPos(x, y, z))); } entity.timeUntilPortal = entity instanceof EntityLiving ? 150 : 20; newWorldServer.playSound(x, y, z, SoundEvents.ENTITY_ENDERMEN_TELEPORT, SoundCategory.AMBIENT, 1.0F, 1.0F, false); diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileAlchemyArray.java b/src/main/java/WayofTime/bloodmagic/tile/TileAlchemyArray.java index b9aade81..a1ebd2cf 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileAlchemyArray.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileAlchemyArray.java @@ -35,7 +35,7 @@ public class TileAlchemyArray extends TileInventory implements ITickable, IAlche { if (arrayEffect != null) { - arrayEffect.onEntityCollidedWithBlock(this, worldObj, pos, state, entity); + arrayEffect.onEntityCollidedWithBlock(this, getWorld(), pos, state, entity); } } @@ -145,7 +145,7 @@ public class TileAlchemyArray extends TileInventory implements ITickable, IAlche { this.decrStackSize(0, 1); this.decrStackSize(1, 1); - this.worldObj.setBlockToAir(getPos()); + this.getWorld().setBlockToAir(getPos()); } return true; diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileAlchemyTable.java b/src/main/java/WayofTime/bloodmagic/tile/TileAlchemyTable.java index 2e1c3d1a..99e2c628 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileAlchemyTable.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileAlchemyTable.java @@ -136,7 +136,7 @@ public class TileAlchemyTable extends TileInventory implements ISidedInventory, { if (this.isSlave()) { - TileEntity tile = worldObj.getTileEntity(connectedPos); + TileEntity tile = getWorld().getTileEntity(connectedPos); if (tile instanceof TileAlchemyTable) { return (T) new SidedInvWrapper((TileAlchemyTable) tile, facing); @@ -246,12 +246,12 @@ public class TileAlchemyTable extends TileInventory implements ISidedInventory, int tier = getTierOfOrb(); AlchemyTableRecipe recipe = AlchemyTableRecipeRegistry.getMatchingRecipe(inputList, getWorld(), getPos()); - if (recipe != null && (burnTime > 0 || (!worldObj.isRemote && tier >= recipe.getTierRequired() && this.getContainedLp() >= recipe.getLpDrained()))) + if (recipe != null && (burnTime > 0 || (!getWorld().isRemote && tier >= recipe.getTierRequired() && this.getContainedLp() >= recipe.getLpDrained()))) { if (burnTime == 1) { - IBlockState state = worldObj.getBlockState(pos); - worldObj.notifyBlockUpdate(getPos(), state, state, 3); + IBlockState state = getWorld().getBlockState(pos); + getWorld().notifyBlockUpdate(getPos(), state, state, 3); } if (canCraft(inputList, recipe)) @@ -261,18 +261,18 @@ public class TileAlchemyTable extends TileInventory implements ISidedInventory, if (burnTime == ticksRequired) { - if (!worldObj.isRemote) + if (!getWorld().isRemote) { int requiredLp = recipe.getLpDrained(); if (requiredLp > 0) { - if (!worldObj.isRemote) + if (!getWorld().isRemote) { consumeLp(requiredLp); } } - if (!worldObj.isRemote) + if (!getWorld().isRemote) { craftItem(inputList, recipe); } @@ -280,8 +280,8 @@ public class TileAlchemyTable extends TileInventory implements ISidedInventory, burnTime = 0; - IBlockState state = worldObj.getBlockState(pos); - worldObj.notifyBlockUpdate(getPos(), state, state, 3); + IBlockState state = getWorld().getBlockState(pos); + getWorld().notifyBlockUpdate(getPos(), state, state, 3); } else if (burnTime > ticksRequired + 10) { burnTime = 0; diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrucible.java b/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrucible.java index e34b3c0f..8f4a75c7 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrucible.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrucible.java @@ -30,14 +30,14 @@ public class TileDemonCrucible extends TileInventory implements ITickable, IDemo @Override public void update() { - if (worldObj.isRemote) + if (getWorld().isRemote) { return; } internalCounter++; - if (worldObj.isBlockPowered(getPos())) + if (getWorld().isBlockPowered(getPos())) { //TODO: Fill the contained gem if it is there. ItemStack stack = this.getStackInSlot(0); @@ -77,21 +77,21 @@ public class TileDemonCrucible extends TileInventory implements ITickable, IDemo IDemonWillGem gemItem = (IDemonWillGem) stack.getItem(); for (EnumDemonWillType type : EnumDemonWillType.values()) { - double currentAmount = WorldDemonWillHandler.getCurrentWill(worldObj, pos, type); + double currentAmount = WorldDemonWillHandler.getCurrentWill(getWorld(), pos, type); double drainAmount = Math.min(maxWill - currentAmount, gemDrainRate); - double filled = WorldDemonWillHandler.fillWillToMaximum(worldObj, pos, type, drainAmount, maxWill, false); + double filled = WorldDemonWillHandler.fillWillToMaximum(getWorld(), pos, type, drainAmount, maxWill, false); filled = gemItem.drainWill(type, stack, filled, false); if (filled > 0) { filled = gemItem.drainWill(type, stack, filled, true); - WorldDemonWillHandler.fillWillToMaximum(worldObj, pos, type, filled, maxWill, true); + WorldDemonWillHandler.fillWillToMaximum(getWorld(), pos, type, filled, maxWill, true); } } } else if (stack.getItem() instanceof IDiscreteDemonWill) //TODO: Limit the speed of this process { IDiscreteDemonWill willItem = (IDiscreteDemonWill) stack.getItem(); EnumDemonWillType type = willItem.getType(stack); - double currentAmount = WorldDemonWillHandler.getCurrentWill(worldObj, pos, type); + double currentAmount = WorldDemonWillHandler.getCurrentWill(getWorld(), pos, type); double needed = maxWill - currentAmount; double discreteAmount = willItem.getDiscretization(stack); if (needed >= discreteAmount) @@ -99,7 +99,7 @@ public class TileDemonCrucible extends TileInventory implements ITickable, IDemo double filled = willItem.drainWill(stack, discreteAmount); if (filled > 0) { - WorldDemonWillHandler.fillWillToMaximum(worldObj, pos, type, filled, maxWill, true); + WorldDemonWillHandler.fillWillToMaximum(getWorld(), pos, type, filled, maxWill, true); if (stack.stackSize <= 0) { this.setInventorySlotContents(0, null); diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrystal.java b/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrystal.java index 44fbc634..b1083df8 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrystal.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrystal.java @@ -41,7 +41,7 @@ public class TileDemonCrystal extends TileTicking @Override public void onUpdate() { - if (worldObj.isRemote) + if (getWorld().isRemote) { return; } @@ -52,20 +52,20 @@ public class TileDemonCrystal extends TileTicking { EnumDemonWillType type = EnumDemonWillType.values()[this.getBlockMetadata()]; - double value = WorldDemonWillHandler.getCurrentWill(worldObj, pos, type); + double value = WorldDemonWillHandler.getCurrentWill(getWorld(), pos, type); if (type != EnumDemonWillType.DEFAULT) { if (value >= 100) { double nextProgress = getCrystalGrowthPerSecond(value); - progressToNextCrystal += WorldDemonWillHandler.drainWill(worldObj, getPos(), type, nextProgress * sameWillConversionRate, true) / sameWillConversionRate; + progressToNextCrystal += WorldDemonWillHandler.drainWill(getWorld(), getPos(), type, nextProgress * sameWillConversionRate, true) / sameWillConversionRate; } else { - value = WorldDemonWillHandler.getCurrentWill(worldObj, pos, EnumDemonWillType.DEFAULT); + value = WorldDemonWillHandler.getCurrentWill(getWorld(), pos, EnumDemonWillType.DEFAULT); if (value > 0.5) { double nextProgress = getCrystalGrowthPerSecond(value) * timeDelayForWrongWill; - progressToNextCrystal += WorldDemonWillHandler.drainWill(worldObj, getPos(), EnumDemonWillType.DEFAULT, nextProgress * defaultWillConversionRate, true) / defaultWillConversionRate; + progressToNextCrystal += WorldDemonWillHandler.drainWill(getWorld(), getPos(), EnumDemonWillType.DEFAULT, nextProgress * defaultWillConversionRate, true) / defaultWillConversionRate; } } } else @@ -73,17 +73,17 @@ public class TileDemonCrystal extends TileTicking if (value > 0.5) { double nextProgress = getCrystalGrowthPerSecond(value); - progressToNextCrystal += WorldDemonWillHandler.drainWill(worldObj, getPos(), type, nextProgress * sameWillConversionRate, true) / sameWillConversionRate; + progressToNextCrystal += WorldDemonWillHandler.drainWill(getWorld(), getPos(), type, nextProgress * sameWillConversionRate, true) / sameWillConversionRate; } } checkAndGrowCrystal(); } -// if (worldObj.getWorldTime() % 200 == 0) +// if (getWorld().getWorldTime() % 200 == 0) // { // crystalCount = Math.min(crystalCount + 1, 7); -// worldObj.markBlockForUpdate(pos); +// getWorld().markBlockForUpdate(pos); // } } @@ -105,11 +105,11 @@ public class TileDemonCrystal extends TileTicking return 0; } - IBlockState state = worldObj.getBlockState(pos); + IBlockState state = getWorld().getBlockState(pos); int meta = this.getBlockType().getMetaFromState(state); EnumDemonWillType type = EnumDemonWillType.values()[meta]; - double value = WorldDemonWillHandler.getCurrentWill(worldObj, pos, type); + double value = WorldDemonWillHandler.getCurrentWill(getWorld(), pos, type); double percentDrain = willDrain <= 0 ? 1 : Math.min(1, value / willDrain); if (percentDrain <= 0) { @@ -117,7 +117,7 @@ public class TileDemonCrystal extends TileTicking } // Verification that you can actually drain the will from this chunk, for future proofing. - WorldDemonWillHandler.drainWill(worldObj, pos, type, percentDrain * willDrain, true); + WorldDemonWillHandler.drainWill(getWorld(), pos, type, percentDrain * willDrain, true); progressToNextCrystal += percentDrain * progressPercentage; checkAndGrowCrystal(); @@ -131,8 +131,8 @@ public class TileDemonCrystal extends TileTicking { progressToNextCrystal--; crystalCount++; - IBlockState thisState = worldObj.getBlockState(pos); - worldObj.notifyBlockUpdate(pos, thisState, thisState, 3); + IBlockState thisState = getWorld().getBlockState(pos); + getWorld().notifyBlockUpdate(pos, thisState, thisState, 3); markDirty(); } } @@ -144,15 +144,15 @@ public class TileDemonCrystal extends TileTicking public boolean dropSingleCrystal() { - if (!worldObj.isRemote && crystalCount > 1) + if (!getWorld().isRemote && crystalCount > 1) { - IBlockState state = worldObj.getBlockState(pos); + IBlockState state = getWorld().getBlockState(pos); EnumDemonWillType type = state.getValue(BlockDemonCrystal.TYPE); ItemStack stack = BlockDemonCrystal.getItemStackDropped(type, 1); if (stack != null) { crystalCount--; - worldObj.spawnEntityInWorld(new EntityItem(worldObj, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, stack)); + getWorld().spawnEntity(new EntityItem(getWorld(), pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, stack)); return true; } } @@ -167,7 +167,7 @@ public class TileDemonCrystal extends TileTicking public int getCrystalCountForRender() { - return MathHelper.clamp_int(crystalCount - 1, 0, 6); + return MathHelper.clamp(crystalCount - 1, 0, 6); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrystallizer.java b/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrystallizer.java index cb088dd9..a0acb3ee 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrystallizer.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrystallizer.java @@ -30,26 +30,26 @@ public class TileDemonCrystallizer extends TileTicking implements IDemonWillCond @Override public void onUpdate() { - if (worldObj.isRemote) + if (getWorld().isRemote) { return; } BlockPos offsetPos = pos.offset(EnumFacing.UP); - if (worldObj.isAirBlock(offsetPos)) //Room for a crystal to grow + if (getWorld().isAirBlock(offsetPos)) //Room for a crystal to grow { - EnumDemonWillType highestType = WorldDemonWillHandler.getHighestDemonWillType(worldObj, pos); - double amount = WorldDemonWillHandler.getCurrentWill(worldObj, pos, highestType); + EnumDemonWillType highestType = WorldDemonWillHandler.getHighestDemonWillType(getWorld(), pos); + double amount = WorldDemonWillHandler.getCurrentWill(getWorld(), pos, highestType); if (amount >= willToFormCrystal) { internalCounter += getCrystalFormationRate(amount); if (internalCounter >= totalFormationTime) { - if (WorldDemonWillHandler.drainWill(worldObj, getPos(), highestType, willToFormCrystal, false) >= willToFormCrystal) + if (WorldDemonWillHandler.drainWill(getWorld(), getPos(), highestType, willToFormCrystal, false) >= willToFormCrystal) { if (highestType == EnumDemonWillType.DEFAULT && formRandomSpecialCrystal(offsetPos) || formCrystal(highestType, offsetPos)) { - WorldDemonWillHandler.drainWill(worldObj, getPos(), highestType, willToFormCrystal, true); + WorldDemonWillHandler.drainWill(getWorld(), getPos(), highestType, willToFormCrystal, true); internalCounter = 0; } } @@ -60,8 +60,8 @@ public class TileDemonCrystallizer extends TileTicking implements IDemonWillCond public boolean formCrystal(EnumDemonWillType type, BlockPos position) { - worldObj.setBlockState(position, ModBlocks.DEMON_CRYSTAL.getStateFromMeta(type.ordinal())); - TileEntity tile = worldObj.getTileEntity(position); + getWorld().setBlockState(position, ModBlocks.DEMON_CRYSTAL.getStateFromMeta(type.ordinal())); + TileEntity tile = getWorld().getTileEntity(position); if (tile instanceof TileDemonCrystal) { ((TileDemonCrystal) tile).setPlacement(EnumFacing.UP); @@ -73,11 +73,11 @@ public class TileDemonCrystallizer extends TileTicking implements IDemonWillCond public boolean formRandomSpecialCrystal(BlockPos position) { - if (worldObj.rand.nextDouble() > 0.1) + if (getWorld().rand.nextDouble() > 0.1) { return formCrystal(EnumDemonWillType.DEFAULT, position); } - EnumDemonWillType crystalType = EnumDemonWillType.values()[worldObj.rand.nextInt(EnumDemonWillType.values().length - 1) + 1]; + EnumDemonWillType crystalType = EnumDemonWillType.values()[getWorld().rand.nextInt(EnumDemonWillType.values().length - 1) + 1]; return formCrystal(crystalType, position); } diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileDemonPylon.java b/src/main/java/WayofTime/bloodmagic/tile/TileDemonPylon.java index ca95170d..475f73c8 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileDemonPylon.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileDemonPylon.java @@ -23,24 +23,24 @@ public class TileDemonPylon extends TileTicking implements IDemonWillConduit @Override public void onUpdate() { - if (worldObj.isRemote) + if (getWorld().isRemote) { return; } for (EnumDemonWillType type : EnumDemonWillType.values()) { - double currentAmount = WorldDemonWillHandler.getCurrentWill(worldObj, pos, type); + double currentAmount = WorldDemonWillHandler.getCurrentWill(getWorld(), pos, type); for (EnumFacing side : EnumFacing.HORIZONTALS) { BlockPos offsetPos = pos.offset(side, 16); - double sideAmount = WorldDemonWillHandler.getCurrentWill(worldObj, offsetPos, type); + double sideAmount = WorldDemonWillHandler.getCurrentWill(getWorld(), offsetPos, type); if (sideAmount > currentAmount) { double drainAmount = Math.min((sideAmount - currentAmount) / 2, drainRate); - double drain = WorldDemonWillHandler.drainWill(worldObj, offsetPos, type, drainAmount, true); - WorldDemonWillHandler.fillWill(worldObj, pos, type, drain, true); + double drain = WorldDemonWillHandler.drainWill(getWorld(), offsetPos, type, drainAmount, true); + WorldDemonWillHandler.fillWill(getWorld(), pos, type, drain, true); } } } diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileIncenseAltar.java b/src/main/java/WayofTime/bloodmagic/tile/TileIncenseAltar.java index f08dcf94..6ebf9778 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileIncenseAltar.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileIncenseAltar.java @@ -42,13 +42,13 @@ public class TileIncenseAltar extends TileInventory implements ITickable public void update() { AxisAlignedBB aabb = incenseArea.getAABB(getPos()); - List playerList = worldObj.getEntitiesWithinAABB(EntityPlayer.class, aabb); + List playerList = getWorld().getEntitiesWithinAABB(EntityPlayer.class, aabb); if (playerList.isEmpty()) { return; } - if (worldObj.getTotalWorldTime() % 100 == 0) + if (getWorld().getTotalWorldTime() % 100 == 0) { recheckConstruction(); } @@ -65,9 +65,9 @@ public class TileIncenseAltar extends TileInventory implements ITickable if (hasPerformed) { - if (worldObj.rand.nextInt(4) == 0 && worldObj instanceof WorldServer) + if (getWorld().rand.nextInt(4) == 0 && getWorld() instanceof WorldServer) { - WorldServer server = (WorldServer) worldObj; + WorldServer server = (WorldServer) getWorld(); server.spawnParticle(EnumParticleTypes.FLAME, pos.getX() + 0.5, pos.getY() + 1.2, pos.getZ() + 0.5, 1, 0.02, 0.03, 0.02, 0, new int[0]); } } @@ -113,9 +113,9 @@ public class TileIncenseAltar extends TileInventory implements ITickable for (int j = -1; j <= 1; j++) { BlockPos offsetPos = facingOffsetPos.offset(horizontalFacing.rotateY(), j); - IBlockState state = worldObj.getBlockState(offsetPos); + IBlockState state = getWorld().getBlockState(offsetPos); Block block = state.getBlock(); - if (!(block instanceof IIncensePath && ((IIncensePath) block).getLevelOfPath(worldObj, offsetPos, state) >= currentDistance - 2)) + if (!(block instanceof IIncensePath && ((IIncensePath) block).getLevelOfPath(getWorld(), offsetPos, state) >= currentDistance - 2)) { canFormRoad = false; break level; @@ -144,9 +144,9 @@ public class TileIncenseAltar extends TileInventory implements ITickable for (int y = 0 + yOffset; y <= 2 + yOffset; y++) { BlockPos offsetPos = pos.add(i, y, j); - IBlockState state = worldObj.getBlockState(offsetPos); + IBlockState state = getWorld().getBlockState(offsetPos); Block block = state.getBlock(); - TranquilityStack stack = IncenseTranquilityRegistry.getTranquilityOfBlock(worldObj, offsetPos, block, state); + TranquilityStack stack = IncenseTranquilityRegistry.getTranquilityOfBlock(getWorld(), offsetPos, block, state); if (stack != null) { if (!tranquilityMap.containsKey(stack.type)) @@ -186,7 +186,7 @@ public class TileIncenseAltar extends TileInventory implements ITickable appliedTranquility += Math.sqrt(entry.getValue()); } - double bonus = IncenseAltarHandler.getIncenseBonusFromComponents(worldObj, pos, appliedTranquility, roadDistance); + double bonus = IncenseAltarHandler.getIncenseBonusFromComponents(getWorld(), pos, appliedTranquility, roadDistance); incenseAddition = bonus; this.tranquility = appliedTranquility; } diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileInventory.java b/src/main/java/WayofTime/bloodmagic/tile/TileInventory.java index 3e34ccdd..367661ff 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileInventory.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileInventory.java @@ -164,7 +164,7 @@ public class TileInventory extends TileBase implements IInventory } @Override - public boolean isUseableByPlayer(EntityPlayer player) + public boolean isUsableByPlayer(EntityPlayer player) { return true; } diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileInversionPillar.java b/src/main/java/WayofTime/bloodmagic/tile/TileInversionPillar.java index 62bad390..a2a5f56a 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileInversionPillar.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileInversionPillar.java @@ -82,23 +82,23 @@ public class TileInversionPillar extends TileTicking { if (animationOffsetValue < 0) { - animationOffsetValue = worldObj.getTotalWorldTime() * worldObj.rand.nextFloat(); + animationOffsetValue = getWorld().getTotalWorldTime() * getWorld().rand.nextFloat(); animationOffset.setValue(animationOffsetValue); } - if (worldObj.isRemote) + if (getWorld().isRemote) { return; } if (!isRegistered) { - isRegistered = InversionPillarHandler.addPillarToMap(worldObj, getType(), getPos()); + isRegistered = InversionPillarHandler.addPillarToMap(getWorld(), getType(), getPos()); } counter++; - double currentWill = WorldDemonWillHandler.getCurrentWill(worldObj, pos, type); + double currentWill = WorldDemonWillHandler.getCurrentWill(getWorld(), pos, type); if (counter % 1 == 0) { List pillarList = getNearbyPillarsExcludingThis(); @@ -151,17 +151,17 @@ public class TileInversionPillar extends TileTicking if (currentInfectionRadius >= 8 && currentInversion >= inversionToAddPillar) { //TODO: Improve algorithm - List allConnectedPos = InversionPillarHandler.getAllConnectedPillars(worldObj, type, pos); - BlockPos candidatePos = findCandidatePositionForPillar(worldObj, type, pos, allConnectedPos, 5, 10); + List allConnectedPos = InversionPillarHandler.getAllConnectedPillars(getWorld(), type, pos); + BlockPos candidatePos = findCandidatePositionForPillar(getWorld(), type, pos, allConnectedPos, 5, 10); if (!candidatePos.equals(BlockPos.ORIGIN)) { currentInversion = 0; IBlockState pillarState = ModBlocks.INVERSION_PILLAR.getStateFromMeta(type.ordinal()); IBlockState bottomState = ModBlocks.INVERSION_PILLAR_END.getStateFromMeta(type.ordinal() * 2); IBlockState topState = ModBlocks.INVERSION_PILLAR_END.getStateFromMeta(type.ordinal() * 2 + 1); - worldObj.setBlockState(candidatePos, pillarState); - worldObj.setBlockState(candidatePos.down(), bottomState); - worldObj.setBlockState(candidatePos.up(), topState); + getWorld().setBlockState(candidatePos, pillarState); + getWorld().setBlockState(candidatePos.down(), bottomState); + getWorld().setBlockState(candidatePos.up(), topState); } } } @@ -176,11 +176,11 @@ public class TileInversionPillar extends TileTicking { if (currentInversion > 1000) { - Vec3d vec = new Vec3d(worldObj.rand.nextDouble() * 2 - 1, worldObj.rand.nextDouble() * 2 - 1, worldObj.rand.nextDouble() * 2 - 1).normalize().scale(2 * currentInfectionRadius); + Vec3d vec = new Vec3d(getWorld().rand.nextDouble() * 2 - 1, getWorld().rand.nextDouble() * 2 - 1, getWorld().rand.nextDouble() * 2 - 1).normalize().scale(2 * currentInfectionRadius); BlockPos centralPos = pos.add(vec.xCoord, vec.yCoord, vec.zCoord); - worldObj.setBlockState(centralPos, ModBlocks.DEMON_EXTRAS.getStateFromMeta(0)); + getWorld().setBlockState(centralPos, ModBlocks.DEMON_EXTRAS.getStateFromMeta(0)); currentInversion -= 1000; } } @@ -236,7 +236,7 @@ public class TileInversionPillar extends TileTicking public void spreadWillToSurroundingChunks() { - double currentAmount = WorldDemonWillHandler.getCurrentWill(worldObj, pos, type); + double currentAmount = WorldDemonWillHandler.getCurrentWill(getWorld(), pos, type); if (currentAmount <= minimumWillForChunkWhenSpreading) { return; @@ -245,7 +245,7 @@ public class TileInversionPillar extends TileTicking for (EnumFacing side : EnumFacing.HORIZONTALS) { BlockPos offsetPos = pos.offset(side, 16); - double sideAmount = WorldDemonWillHandler.getCurrentWill(worldObj, offsetPos, type); + double sideAmount = WorldDemonWillHandler.getCurrentWill(getWorld(), offsetPos, type); if (currentAmount > sideAmount) { double drainAmount = Math.min((currentAmount - sideAmount) / 2, willPushRate); @@ -254,8 +254,8 @@ public class TileInversionPillar extends TileTicking continue; } - double drain = WorldDemonWillHandler.drainWill(worldObj, pos, type, drainAmount, true); - drain = WorldDemonWillHandler.fillWillToMaximum(worldObj, offsetPos, type, drain, maxWillForChunk, true); + double drain = WorldDemonWillHandler.drainWill(getWorld(), pos, type, drainAmount, true); + drain = WorldDemonWillHandler.fillWillToMaximum(getWorld(), offsetPos, type, drain, maxWillForChunk, true); currentInversion -= drain * inversionCostPerWillSpread; } @@ -264,15 +264,15 @@ public class TileInversionPillar extends TileTicking public void removePillarFromMap() { - if (!worldObj.isRemote) + if (!getWorld().isRemote) { - InversionPillarHandler.removePillarFromMap(worldObj, type, pos); + InversionPillarHandler.removePillarFromMap(getWorld(), type, pos); } } public List getNearbyPillarsExcludingThis() { - return InversionPillarHandler.getNearbyPillars(worldObj, type, pos); + return InversionPillarHandler.getNearbyPillars(getWorld(), type, pos); } @Override @@ -322,7 +322,7 @@ public class TileInversionPillar extends TileTicking if (totalGeneratedWill > 0) { - WorldDemonWillHandler.fillWillToMaximum(worldObj, pos, type, totalGeneratedWill, maxWillForChunk, true); + WorldDemonWillHandler.fillWillToMaximum(getWorld(), pos, type, totalGeneratedWill, maxWillForChunk, true); } } @@ -359,9 +359,9 @@ public class TileInversionPillar extends TileTicking for (int i = 0; i < currentInfectionRadius; i++) { - double xOff = (worldObj.rand.nextBoolean() ? 1 : -1) * (worldObj.rand.nextGaussian() + 1) * (currentInfectionRadius); - double yOff = (worldObj.rand.nextBoolean() ? 1 : -1) * (worldObj.rand.nextGaussian() + 1) * (currentInfectionRadius); - double zOff = (worldObj.rand.nextBoolean() ? 1 : -1) * (worldObj.rand.nextGaussian() + 1) * (currentInfectionRadius); + double xOff = (getWorld().rand.nextBoolean() ? 1 : -1) * (getWorld().rand.nextGaussian() + 1) * (currentInfectionRadius); + double yOff = (getWorld().rand.nextBoolean() ? 1 : -1) * (getWorld().rand.nextGaussian() + 1) * (currentInfectionRadius); + double zOff = (getWorld().rand.nextBoolean() ? 1 : -1) * (getWorld().rand.nextGaussian() + 1) * (currentInfectionRadius); double r2 = xOff * xOff + yOff * yOff + zOff * zOff; int maxInfectionRadius2 = (9 * currentInfectionRadius * currentInfectionRadius); if (r2 > maxInfectionRadius2) @@ -378,16 +378,16 @@ public class TileInversionPillar extends TileTicking return 1; //Invalid block (itself!) } - IBlockState state = worldObj.getBlockState(offsetPos); - if (!state.getBlock().isAir(state, worldObj, offsetPos)) + IBlockState state = getWorld().getBlockState(offsetPos); + if (!state.getBlock().isAir(state, getWorld(), offsetPos)) { //Consume Will and set this block Block block = state.getBlock(); if (block == Blocks.DIRT || block == Blocks.STONE || block == Blocks.GRASS) { - if (worldObj.setBlockState(offsetPos, ModBlocks.DEMON_EXTRAS.getStateFromMeta(0))) + if (getWorld().setBlockState(offsetPos, ModBlocks.DEMON_EXTRAS.getStateFromMeta(0))) { - WorldDemonWillHandler.drainWill(worldObj, pos, type, willPerOperation, true); + WorldDemonWillHandler.drainWill(getWorld(), pos, type, willPerOperation, true); currentInversion -= inversionPerOperation; return 0; //Successfully placed diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileMasterRitualStone.java b/src/main/java/WayofTime/bloodmagic/tile/TileMasterRitualStone.java index 58f0b59b..f5167081 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileMasterRitualStone.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileMasterRitualStone.java @@ -51,7 +51,7 @@ public class TileMasterRitualStone extends TileTicking implements IMasterRitualS @Override public void onUpdate() { - if (worldObj.isRemote) + if (getWorld().isRemote) return; if (getWorld().isBlockPowered(getPos()) && isActive()) diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileMimic.java b/src/main/java/WayofTime/bloodmagic/tile/TileMimic.java index 122f3cff..65df2412 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileMimic.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileMimic.java @@ -55,7 +55,7 @@ public class TileMimic extends TileInventory implements ITickable @Override public void update() { - if (worldObj.isRemote) + if (getWorld().isRemote) { return; } @@ -67,36 +67,36 @@ public class TileMimic extends TileInventory implements ITickable if (potionStack != null) { AxisAlignedBB bb = new AxisAlignedBB(this.getPos()).expand(playerCheckRadius, playerCheckRadius, playerCheckRadius); - List playerList = worldObj.getEntitiesWithinAABB(EntityPlayer.class, bb); + List playerList = getWorld().getEntitiesWithinAABB(EntityPlayer.class, bb); for (EntityPlayer player : playerList) { if (!player.capabilities.isCreativeMode) { - double posX = this.pos.getX() + 0.5 + (2 * worldObj.rand.nextDouble() - 1) * potionSpawnRadius; - double posY = this.pos.getY() + 0.5 + (2 * worldObj.rand.nextDouble() - 1) * potionSpawnRadius; - double posZ = this.pos.getZ() + 0.5 + (2 * worldObj.rand.nextDouble() - 1) * potionSpawnRadius; + double posX = this.pos.getX() + 0.5 + (2 * getWorld().rand.nextDouble() - 1) * potionSpawnRadius; + double posY = this.pos.getY() + 0.5 + (2 * getWorld().rand.nextDouble() - 1) * potionSpawnRadius; + double posZ = this.pos.getZ() + 0.5 + (2 * getWorld().rand.nextDouble() - 1) * potionSpawnRadius; ItemStack newStack = new ItemStack(potionStack.getItem() == ModItems.POTION_FLASK ? Items.SPLASH_POTION : potionStack.getItem()); newStack.setTagCompound(potionStack.getTagCompound()); - EntityPotion potionEntity = new EntityPotion(worldObj, posX, posY, posZ, newStack); + EntityPotion potionEntity = new EntityPotion(getWorld(), posX, posY, posZ, newStack); - worldObj.spawnEntityInWorld(potionEntity); + getWorld().spawnEntity(potionEntity); break; } } } } - if (this.getBlockMetadata() == BlockMimic.sentientMimicMeta && worldObj.getDifficulty() != EnumDifficulty.PEACEFUL && !(mimicedTile instanceof IInventory)) + if (this.getBlockMetadata() == BlockMimic.sentientMimicMeta && getWorld().getDifficulty() != EnumDifficulty.PEACEFUL && !(mimicedTile instanceof IInventory)) { AxisAlignedBB bb = new AxisAlignedBB(this.getPos()).expand(playerCheckRadius, playerCheckRadius, playerCheckRadius); - List playerList = worldObj.getEntitiesWithinAABB(EntityPlayer.class, bb); + List playerList = getWorld().getEntitiesWithinAABB(EntityPlayer.class, bb); for (EntityPlayer player : playerList) { - if (!player.capabilities.isCreativeMode && Utils.canEntitySeeBlock(worldObj, player, getPos())) + if (!player.capabilities.isCreativeMode && Utils.canEntitySeeBlock(getWorld(), player, getPos())) { spawnMimicEntity(player); break; @@ -242,17 +242,17 @@ public class TileMimic extends TileInventory implements ITickable public boolean spawnMimicEntity(EntityPlayer target) { - if (this.worldObj.getDifficulty() == EnumDifficulty.PEACEFUL) + if (this.getWorld().getDifficulty() == EnumDifficulty.PEACEFUL) { return false; } - if (this.getStackInSlot(0) == null || worldObj.isRemote) + if (this.getStackInSlot(0) == null || getWorld().isRemote) { return false; } - EntityMimic mimicEntity = new EntityMimic(worldObj); + EntityMimic mimicEntity = new EntityMimic(getWorld()); mimicEntity.setPosition(pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5); mimicEntity.initializeMimic(getStackInSlot(0), tileTag, dropItemsOnBreak, metaOfReplacedBlock, playerCheckRadius, pos); @@ -260,13 +260,13 @@ public class TileMimic extends TileInventory implements ITickable mimicedTile = null; this.setInventorySlotContents(0, null); - worldObj.spawnEntityInWorld(mimicEntity); + getWorld().spawnEntity(mimicEntity); if (target != null) { mimicEntity.setAttackTarget(target); } - worldObj.setBlockToAir(pos); + getWorld().setBlockToAir(pos); return true; } @@ -277,7 +277,7 @@ public class TileMimic extends TileInventory implements ITickable { dropMimicedTileInventory(); } - mimicedTile = getTileFromStackWithTag(worldObj, pos, getStackInSlot(0), tileTag, metaOfReplacedBlock); + mimicedTile = getTileFromStackWithTag(getWorld(), pos, getStackInSlot(0), tileTag, metaOfReplacedBlock); } @Override @@ -288,7 +288,7 @@ public class TileMimic extends TileInventory implements ITickable dropItemsOnBreak = tag.getBoolean("dropItemsOnBreak"); tileTag = tag.getCompoundTag("tileTag"); metaOfReplacedBlock = tag.getInteger("metaOfReplacedBlock"); - mimicedTile = getTileFromStackWithTag(worldObj, pos, getStackInSlot(0), tileTag, metaOfReplacedBlock); + mimicedTile = getTileFromStackWithTag(getWorld(), pos, getStackInSlot(0), tileTag, metaOfReplacedBlock); playerCheckRadius = tag.getInteger("playerCheckRadius"); potionSpawnRadius = tag.getInteger("potionSpawnRadius"); potionSpawnInterval = Math.max(1, tag.getInteger("potionSpawnInterval")); @@ -356,14 +356,14 @@ public class TileMimic extends TileInventory implements ITickable if (tag != null) { - NBTTagCompound copyTag = (NBTTagCompound) (tag.copy()); + NBTTagCompound copyTag = tag.copy(); copyTag.setInteger("x", pos.getX()); copyTag.setInteger("y", pos.getY()); copyTag.setInteger("z", pos.getZ()); tile.readFromNBT(copyTag); } - tile.setWorldObj(world); + tile.setWorld(world); try { @@ -396,7 +396,7 @@ public class TileMimic extends TileInventory implements ITickable public void dropMimicedTileInventory() { - if (!worldObj.isRemote && mimicedTile instanceof IInventory) + if (!getWorld().isRemote && mimicedTile instanceof IInventory) { InventoryHelper.dropInventoryItems(getWorld(), getPos(), (IInventory) mimicedTile); } diff --git a/src/main/java/WayofTime/bloodmagic/tile/TilePhantomBlock.java b/src/main/java/WayofTime/bloodmagic/tile/TilePhantomBlock.java index 4c5b8f76..d495095b 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TilePhantomBlock.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TilePhantomBlock.java @@ -35,8 +35,8 @@ public class TilePhantomBlock extends TileTicking if (ticksRemaining <= 0) { - worldObj.setBlockToAir(getPos()); - worldObj.removeTileEntity(getPos()); + getWorld().setBlockToAir(getPos()); + getWorld().removeTileEntity(getPos()); } } } diff --git a/src/main/java/WayofTime/bloodmagic/tile/TilePlinth.java b/src/main/java/WayofTime/bloodmagic/tile/TilePlinth.java deleted file mode 100644 index bb824969..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/TilePlinth.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.bloodmagic.tile; - -public class TilePlinth extends TileInventory -{ - public TilePlinth() - { - super(1, "plinth"); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/tile/TilePurificationAltar.java b/src/main/java/WayofTime/bloodmagic/tile/TilePurificationAltar.java index 387f5562..7e6d3e1f 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TilePurificationAltar.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TilePurificationAltar.java @@ -45,7 +45,7 @@ public class TilePurificationAltar extends TileInventory implements ITickable } AxisAlignedBB aabb = purityArea.getAABB(getPos()); - List animalList = worldObj.getEntitiesWithinAABB(EntityAnimal.class, aabb); + List animalList = getWorld().getEntitiesWithinAABB(EntityAnimal.class, aabb); if (animalList.isEmpty()) { return; @@ -65,9 +65,9 @@ public class TilePurificationAltar extends TileInventory implements ITickable if (hasPerformed) { - if (worldObj.rand.nextInt(4) == 0 && worldObj instanceof WorldServer) + if (getWorld().rand.nextInt(4) == 0 && getWorld() instanceof WorldServer) { - WorldServer server = (WorldServer) worldObj; + WorldServer server = (WorldServer) getWorld(); server.spawnParticle(EnumParticleTypes.FLAME, pos.getX() + 0.5, pos.getY() + 1.2, pos.getZ() + 0.5, 1, 0.02, 0.03, 0.02, 0, new int[0]); } } diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileSoulForge.java b/src/main/java/WayofTime/bloodmagic/tile/TileSoulForge.java index 183f8516..a3e240b6 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileSoulForge.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileSoulForge.java @@ -52,22 +52,22 @@ public class TileSoulForge extends TileInventory implements ITickable, IDemonWil @Override public void update() { - if (!worldObj.isRemote) + if (!getWorld().isRemote) { for (EnumDemonWillType type : EnumDemonWillType.values()) { - double willInWorld = WorldDemonWillHandler.getCurrentWill(worldObj, pos, type); + double willInWorld = WorldDemonWillHandler.getCurrentWill(getWorld(), pos, type); double filled = Math.min(willInWorld, worldWillTransferRate); if (filled > 0) { filled = this.fillDemonWill(type, filled, false); - filled = WorldDemonWillHandler.drainWill(worldObj, pos, type, filled, false); + filled = WorldDemonWillHandler.drainWill(getWorld(), pos, type, filled, false); if (filled > 0) { this.fillDemonWill(type, filled, true); - WorldDemonWillHandler.drainWill(worldObj, pos, type, filled, true); + WorldDemonWillHandler.drainWill(getWorld(), pos, type, filled, true); } } } @@ -100,18 +100,18 @@ public class TileSoulForge extends TileInventory implements ITickable, IDemonWil if (burnTime == ticksRequired) { - if (!worldObj.isRemote) + if (!getWorld().isRemote) { double requiredSouls = recipe.getSoulsDrained(); if (requiredSouls > 0) { - if (!worldObj.isRemote && soulsInGem >= recipe.getMinimumSouls()) + if (!getWorld().isRemote && soulsInGem >= recipe.getMinimumSouls()) { consumeSouls(EnumDemonWillType.DEFAULT, requiredSouls); } } - if (!worldObj.isRemote && soulsInGem >= recipe.getMinimumSouls()) + if (!getWorld().isRemote && soulsInGem >= recipe.getMinimumSouls()) craftItem(recipe); } diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileSpectralBlock.java b/src/main/java/WayofTime/bloodmagic/tile/TileSpectralBlock.java index c8eafe62..22c48fef 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileSpectralBlock.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileSpectralBlock.java @@ -42,7 +42,7 @@ public class TileSpectralBlock extends TileTicking @Override public void onUpdate() { - if (worldObj.isRemote) + if (getWorld().isRemote) { return; } @@ -79,7 +79,7 @@ public class TileSpectralBlock extends TileTicking if (!Strings.isNullOrEmpty(containedBlockName)) block = ForgeRegistries.BLOCKS.getValue(new ResourceLocation(containedBlockName)); - if (block != null && worldObj.setBlockState(pos, block.getStateFromMeta(containedBlockMeta))) + if (block != null && getWorld().setBlockState(pos, block.getStateFromMeta(containedBlockMeta))) getWorld().notifyBlockUpdate(getPos(), getWorld().getBlockState(getPos()), getWorld().getBlockState(getPos()), 3); } diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileTeleposer.java b/src/main/java/WayofTime/bloodmagic/tile/TileTeleposer.java index fc016bb3..39cf8f28 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileTeleposer.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileTeleposer.java @@ -52,9 +52,9 @@ public class TileTeleposer extends TileInventory implements ITickable @Override public void update() { - if (!worldObj.isRemote) + if (!getWorld().isRemote) { - int currentInput = worldObj.getStrongPower(pos); + int currentInput = getWorld().getStrongPower(pos); if (previousInput == 0 && currentInput != 0) { @@ -67,9 +67,9 @@ public class TileTeleposer extends TileInventory implements ITickable public void initiateTeleport() { - if (!worldObj.isRemote && worldObj.getTileEntity(pos) != null && worldObj.getTileEntity(pos) instanceof TileTeleposer && canInitiateTeleport((TileTeleposer) worldObj.getTileEntity(pos)) && worldObj.getBlockState(pos).getBlock() instanceof BlockTeleposer) + if (!getWorld().isRemote && getWorld().getTileEntity(pos) != null && getWorld().getTileEntity(pos) instanceof TileTeleposer && canInitiateTeleport((TileTeleposer) getWorld().getTileEntity(pos)) && getWorld().getBlockState(pos).getBlock() instanceof BlockTeleposer) { - TileTeleposer teleposer = (TileTeleposer) worldObj.getTileEntity(pos); + TileTeleposer teleposer = (TileTeleposer) getWorld().getTileEntity(pos); ItemStack focusStack = NBTHelper.checkNBT(teleposer.getStackInSlot(0)); ItemTelepositionFocus focus = (ItemTelepositionFocus) focusStack.getItem(); BlockPos focusPos = focus.getBlockPos(teleposer.getStackInSlot(0)); @@ -90,7 +90,7 @@ public class TileTeleposer extends TileInventory implements ITickable { for (int k = -(focusLevel - 1); k <= (focusLevel - 1); k++) { - TeleposeEvent event = new TeleposeEvent(worldObj, pos.add(i, 1 + j, k), focusWorld, focusPos.add(i, 1 + j, k)); + TeleposeEvent event = new TeleposeEvent(getWorld(), pos.add(i, 1 + j, k), focusWorld, focusPos.add(i, 1 + j, k)); if (Utils.swapLocations(event.initalWorld, event.initialBlockPos, event.finalWorld, event.finalBlockPos) && !MinecraftForge.EVENT_BUS.post(event)) { blocksTransported++; @@ -104,11 +104,11 @@ public class TileTeleposer extends TileInventory implements ITickable List originalWorldEntities; List focusWorldEntities; AxisAlignedBB originalArea = new AxisAlignedBB(pos.getX(), pos.getY() + 1, pos.getZ(), pos.getX() + 1, Math.min(focusWorld.getHeight(), pos.getY() + 2 * focusLevel), pos.getZ() + 1).expand(focusLevel - 1, 0, focusLevel - 1); - originalWorldEntities = worldObj.getEntitiesWithinAABB(Entity.class, originalArea); + originalWorldEntities = getWorld().getEntitiesWithinAABB(Entity.class, originalArea); AxisAlignedBB focusArea = new AxisAlignedBB(focusPos.getX(), focusPos.getY() + 1, focusPos.getZ(), focusPos.getX() + 1, Math.min(focusWorld.getHeight(), focusPos.getY() + 2 * focusLevel), focusPos.getZ() + 1).expand(focusLevel - 1, 0, focusLevel - 1); focusWorldEntities = focusWorld.getEntitiesWithinAABB(Entity.class, focusArea); - if (focusWorld.equals(worldObj)) + if (focusWorld.equals(getWorld())) { if (!originalWorldEntities.isEmpty()) { @@ -131,7 +131,7 @@ public class TileTeleposer extends TileInventory implements ITickable { for (Entity entity : originalWorldEntities) { - TeleportQueue.getInstance().addITeleport(new Teleports.TeleportToDim(new BlockPos(entity.posX - pos.getX() + focusPos.getX(), entity.posY - pos.getY() + focusPos.getY(), entity.posZ - pos.getZ() + focusPos.getZ()), entity, focusStack.getTagCompound().getString(Constants.NBT.OWNER_UUID), worldObj, focusWorld.provider.getDimension(), true)); + TeleportQueue.getInstance().addITeleport(new Teleports.TeleportToDim(new BlockPos(entity.posX - pos.getX() + focusPos.getX(), entity.posY - pos.getY() + focusPos.getY(), entity.posZ - pos.getZ() + focusPos.getZ()), entity, focusStack.getTagCompound().getString(Constants.NBT.OWNER_UUID), getWorld(), focusWorld.provider.getDimension(), true)); } } @@ -139,7 +139,7 @@ public class TileTeleposer extends TileInventory implements ITickable { for (Entity entity : focusWorldEntities) { - TeleportQueue.getInstance().addITeleport(new Teleports.TeleportToDim(new BlockPos(entity.posX - pos.getX() + focusPos.getX(), entity.posY - pos.getY() + focusPos.getY(), entity.posZ - pos.getZ() + focusPos.getZ()), entity, focusStack.getTagCompound().getString(Constants.NBT.OWNER_UUID), focusWorld, worldObj.provider.getDimension(), true)); + TeleportQueue.getInstance().addITeleport(new Teleports.TeleportToDim(new BlockPos(entity.posX - pos.getX() + focusPos.getX(), entity.posY - pos.getY() + focusPos.getY(), entity.posZ - pos.getZ() + focusPos.getZ()), entity, focusStack.getTagCompound().getString(Constants.NBT.OWNER_UUID), focusWorld, getWorld().provider.getDimension(), true)); } } } diff --git a/src/main/java/WayofTime/bloodmagic/tile/container/ContainerAlchemyTable.java b/src/main/java/WayofTime/bloodmagic/tile/container/ContainerAlchemyTable.java index 79e2923d..de59b054 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/container/ContainerAlchemyTable.java +++ b/src/main/java/WayofTime/bloodmagic/tile/container/ContainerAlchemyTable.java @@ -116,7 +116,7 @@ public class ContainerAlchemyTable extends Container @Override public boolean canInteractWith(EntityPlayer playerIn) { - return this.tileTable.isUseableByPlayer(playerIn); + return this.tileTable.isUsableByPlayer(playerIn); } private class SlotOrb extends Slot diff --git a/src/main/java/WayofTime/bloodmagic/tile/container/ContainerItemRoutingNode.java b/src/main/java/WayofTime/bloodmagic/tile/container/ContainerItemRoutingNode.java index 84135207..4fc75f5c 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/container/ContainerItemRoutingNode.java +++ b/src/main/java/WayofTime/bloodmagic/tile/container/ContainerItemRoutingNode.java @@ -178,7 +178,7 @@ public class ContainerItemRoutingNode extends Container @Override public boolean canInteractWith(EntityPlayer playerIn) { - return this.tileItemRoutingNode.isUseableByPlayer(playerIn); + return this.tileItemRoutingNode.isUsableByPlayer(playerIn); } private class SlotItemFilter extends Slot diff --git a/src/main/java/WayofTime/bloodmagic/tile/container/ContainerMasterRoutingNode.java b/src/main/java/WayofTime/bloodmagic/tile/container/ContainerMasterRoutingNode.java index 77121ecf..64cd4de9 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/container/ContainerMasterRoutingNode.java +++ b/src/main/java/WayofTime/bloodmagic/tile/container/ContainerMasterRoutingNode.java @@ -18,6 +18,6 @@ public class ContainerMasterRoutingNode extends Container @Override public boolean canInteractWith(EntityPlayer playerIn) { - return this.tileMasterRoutingNode.isUseableByPlayer(playerIn); + return this.tileMasterRoutingNode.isUsableByPlayer(playerIn); } } diff --git a/src/main/java/WayofTime/bloodmagic/tile/container/ContainerSoulForge.java b/src/main/java/WayofTime/bloodmagic/tile/container/ContainerSoulForge.java index 85497373..1e9e0553 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/container/ContainerSoulForge.java +++ b/src/main/java/WayofTime/bloodmagic/tile/container/ContainerSoulForge.java @@ -96,7 +96,7 @@ public class ContainerSoulForge extends Container @Override public boolean canInteractWith(EntityPlayer playerIn) { - return this.tileForge.isUseableByPlayer(playerIn); + return this.tileForge.isUsableByPlayer(playerIn); } private class SlotSoul extends Slot diff --git a/src/main/java/WayofTime/bloodmagic/tile/container/ContainerTeleposer.java b/src/main/java/WayofTime/bloodmagic/tile/container/ContainerTeleposer.java index 2b3e93eb..2093d7f4 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/container/ContainerTeleposer.java +++ b/src/main/java/WayofTime/bloodmagic/tile/container/ContainerTeleposer.java @@ -79,7 +79,7 @@ public class ContainerTeleposer extends Container @Override public boolean canInteractWith(EntityPlayer playerIn) { - return this.tileTeleposer.isUseableByPlayer(playerIn); + return this.tileTeleposer.isUsableByPlayer(playerIn); } private class SlotTeleposer extends Slot diff --git a/src/main/java/WayofTime/bloodmagic/tile/routing/TileFilteredRoutingNode.java b/src/main/java/WayofTime/bloodmagic/tile/routing/TileFilteredRoutingNode.java index a6ae7453..e67690ba 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/routing/TileFilteredRoutingNode.java +++ b/src/main/java/WayofTime/bloodmagic/tile/routing/TileFilteredRoutingNode.java @@ -126,14 +126,14 @@ public class TileFilteredRoutingNode extends TileRoutingNode implements ISidedIn public void incrementCurrentPriotiryToMaximum(int max) { priorities[currentActiveSlot] = Math.min(priorities[currentActiveSlot] + 1, max); - IBlockState state = worldObj.getBlockState(pos); - worldObj.notifyBlockUpdate(pos, state, state, 3); + IBlockState state = getWorld().getBlockState(pos); + getWorld().notifyBlockUpdate(pos, state, state, 3); } public void decrementCurrentPriority() { priorities[currentActiveSlot] = Math.max(priorities[currentActiveSlot] - 1, 0); - IBlockState state = worldObj.getBlockState(pos); - worldObj.notifyBlockUpdate(pos, state, state, 3); + IBlockState state = getWorld().getBlockState(pos); + getWorld().notifyBlockUpdate(pos, state, state, 3); } } diff --git a/src/main/java/WayofTime/bloodmagic/tile/routing/TileInputRoutingNode.java b/src/main/java/WayofTime/bloodmagic/tile/routing/TileInputRoutingNode.java index 69897264..009709e2 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/routing/TileInputRoutingNode.java +++ b/src/main/java/WayofTime/bloodmagic/tile/routing/TileInputRoutingNode.java @@ -31,7 +31,7 @@ public class TileInputRoutingNode extends TileFilteredRoutingNode implements IIn @Override public IItemFilter getInputFilterForSide(EnumFacing side) { - TileEntity tile = worldObj.getTileEntity(pos.offset(side)); + TileEntity tile = getWorld().getTileEntity(pos.offset(side)); if (tile != null) { IItemHandler handler = Utils.getInventory(tile, side.getOpposite()); @@ -66,7 +66,7 @@ public class TileInputRoutingNode extends TileFilteredRoutingNode implements IIn @Override public IFluidFilter getInputFluidFilterForSide(EnumFacing side) { - TileEntity tile = worldObj.getTileEntity(pos.offset(side)); + TileEntity tile = getWorld().getTileEntity(pos.offset(side)); if (tile != null && tile.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side)) { IFluidHandler handler = tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side); diff --git a/src/main/java/WayofTime/bloodmagic/tile/routing/TileMasterRoutingNode.java b/src/main/java/WayofTime/bloodmagic/tile/routing/TileMasterRoutingNode.java index 944987c4..2344057c 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/routing/TileMasterRoutingNode.java +++ b/src/main/java/WayofTime/bloodmagic/tile/routing/TileMasterRoutingNode.java @@ -48,15 +48,15 @@ public class TileMasterRoutingNode extends TileInventory implements IMasterRouti @Override public void update() { - if (!worldObj.isRemote) + if (!getWorld().isRemote) { -// currentInput = worldObj.isBlockIndirectlyGettingPowered(pos); - currentInput = worldObj.getStrongPower(pos); +// currentInput = getWorld().isBlockIndirectlyGettingPowered(pos); + currentInput = getWorld().getStrongPower(pos); // System.out.println(currentInput); } - if (worldObj.isRemote || worldObj.getTotalWorldTime() % tickRate != 0) //Temporary tick rate solver + if (getWorld().isRemote || getWorld().getTotalWorldTime() % tickRate != 0) //Temporary tick rate solver { return; } @@ -66,7 +66,7 @@ public class TileMasterRoutingNode extends TileInventory implements IMasterRouti for (BlockPos outputPos : outputNodeList) { - TileEntity outputTile = worldObj.getTileEntity(outputPos); + TileEntity outputTile = getWorld().getTileEntity(outputPos); if (this.isConnected(new LinkedList(), outputPos)) { if (outputTile instanceof IOutputItemRoutingNode) @@ -132,7 +132,7 @@ public class TileMasterRoutingNode extends TileInventory implements IMasterRouti for (BlockPos inputPos : inputNodeList) { - TileEntity inputTile = worldObj.getTileEntity(inputPos); + TileEntity inputTile = getWorld().getTileEntity(inputPos); if (this.isConnected(new LinkedList(), inputPos)) { if (inputTile instanceof IInputItemRoutingNode) @@ -193,7 +193,7 @@ public class TileMasterRoutingNode extends TileInventory implements IMasterRouti } } - int maxTransfer = this.getMaxTransferForDemonWill(WorldDemonWillHandler.getCurrentWill(worldObj, pos, EnumDemonWillType.DEFAULT)); + int maxTransfer = this.getMaxTransferForDemonWill(WorldDemonWillHandler.getCurrentWill(getWorld(), pos, EnumDemonWillType.DEFAULT)); int maxFluidTransfer = 1000; for (Entry> outputEntry : outputMap.entrySet()) @@ -319,7 +319,7 @@ public class TileMasterRoutingNode extends TileInventory implements IMasterRouti // { // return false; // } - TileEntity tile = worldObj.getTileEntity(nodePos); + TileEntity tile = getWorld().getTileEntity(nodePos); if (!(tile instanceof IRoutingNode)) { // connectionMap.remove(nodePos); @@ -342,7 +342,7 @@ public class TileMasterRoutingNode extends TileInventory implements IMasterRouti // path.clear(); // path.addAll(testPath); return true; - } else if (NodeHelper.isNodeConnectionEnabled(worldObj, node, testPos)) + } else if (NodeHelper.isNodeConnectionEnabled(getWorld(), node, testPos)) { if (isConnected(path, testPos)) { @@ -489,7 +489,7 @@ public class TileMasterRoutingNode extends TileInventory implements IMasterRouti while (itr.hasNext()) { BlockPos testPos = itr.next(); - TileEntity tile = worldObj.getTileEntity(testPos); + TileEntity tile = getWorld().getTileEntity(testPos); if (tile instanceof IRoutingNode) { ((IRoutingNode) tile).removeConnection(pos); diff --git a/src/main/java/WayofTime/bloodmagic/tile/routing/TileOutputRoutingNode.java b/src/main/java/WayofTime/bloodmagic/tile/routing/TileOutputRoutingNode.java index 051041ff..bdbc8bcf 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/routing/TileOutputRoutingNode.java +++ b/src/main/java/WayofTime/bloodmagic/tile/routing/TileOutputRoutingNode.java @@ -31,7 +31,7 @@ public class TileOutputRoutingNode extends TileFilteredRoutingNode implements IO @Override public IItemFilter getOutputFilterForSide(EnumFacing side) { - TileEntity tile = worldObj.getTileEntity(pos.offset(side)); + TileEntity tile = getWorld().getTileEntity(pos.offset(side)); if (tile != null) { IItemHandler handler = Utils.getInventory(tile, side.getOpposite()); @@ -66,7 +66,7 @@ public class TileOutputRoutingNode extends TileFilteredRoutingNode implements IO @Override public IFluidFilter getOutputFluidFilterForSide(EnumFacing side) { - TileEntity tile = worldObj.getTileEntity(pos.offset(side)); + TileEntity tile = getWorld().getTileEntity(pos.offset(side)); if (tile != null && tile.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side)) { IFluidHandler handler = tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side); diff --git a/src/main/java/WayofTime/bloodmagic/tile/routing/TileRoutingNode.java b/src/main/java/WayofTime/bloodmagic/tile/routing/TileRoutingNode.java index 2dfadd98..ac00e276 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/routing/TileRoutingNode.java +++ b/src/main/java/WayofTime/bloodmagic/tile/routing/TileRoutingNode.java @@ -30,10 +30,10 @@ public class TileRoutingNode extends TileInventory implements IRoutingNode, IIte @Override public void update() { - if (!worldObj.isRemote) + if (!getWorld().isRemote) { - currentInput = worldObj.isBlockIndirectlyGettingPowered(pos); -// currentInput = worldObj.getStrongPower(pos); + currentInput = getWorld().isBlockIndirectlyGettingPowered(pos); +// currentInput = getWorld().getStrongPower(pos); } } @@ -83,14 +83,14 @@ public class TileRoutingNode extends TileInventory implements IRoutingNode, IIte @Override public void removeAllConnections() { - TileEntity testTile = worldObj.getTileEntity(getMasterPos()); + TileEntity testTile = getWorld().getTileEntity(getMasterPos()); if (testTile instanceof IMasterRoutingNode) { ((IMasterRoutingNode) testTile).removeConnection(pos); // Remove this node from the master } for (BlockPos testPos : connectionList) { - TileEntity tile = worldObj.getTileEntity(testPos); + TileEntity tile = getWorld().getTileEntity(testPos); if (tile instanceof IRoutingNode) { ((IRoutingNode) tile).removeConnection(pos); diff --git a/src/main/java/WayofTime/bloodmagic/util/ChatUtil.java b/src/main/java/WayofTime/bloodmagic/util/ChatUtil.java index d3b022e4..100d5b30 100644 --- a/src/main/java/WayofTime/bloodmagic/util/ChatUtil.java +++ b/src/main/java/WayofTime/bloodmagic/util/ChatUtil.java @@ -110,7 +110,7 @@ public class ChatUtil { for (ITextComponent c : lines) { - player.addChatComponentMessage(c); + player.sendMessage(c); } } diff --git a/src/main/java/WayofTime/bloodmagic/util/Utils.java b/src/main/java/WayofTime/bloodmagic/util/Utils.java index 57154001..4dece72e 100644 --- a/src/main/java/WayofTime/bloodmagic/util/Utils.java +++ b/src/main/java/WayofTime/bloodmagic/util/Utils.java @@ -25,7 +25,6 @@ import net.minecraft.inventory.IInventory; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemArmor; -import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.potion.Potion; @@ -33,7 +32,6 @@ import net.minecraft.potion.PotionEffect; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.DamageSource; import net.minecraft.util.EnumFacing; -import net.minecraft.util.ResourceLocation; import net.minecraft.util.SoundCategory; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; @@ -86,32 +84,6 @@ public class Utils return added; } - public static Item getItem(ResourceLocation resource) - { - return Item.REGISTRY.getObject(resource); - } - - public static Block getBlock(ResourceLocation resource) - { - return Block.REGISTRY.getObject(resource); - } - - public static ResourceLocation getResourceForItem(ItemStack stack) - { - if (stack != null) - { - if (stack.getItem() instanceof ItemBlock) - { - return Block.REGISTRY.getNameForObject(((ItemBlock) stack.getItem()).getBlock()); - } else - { - return Item.REGISTRY.getNameForObject(stack.getItem()); - } - } - - return null; - } - public static boolean isImmuneToFireDamage(EntityLivingBase entity) { return entity.isImmuneToFire() || entity.isPotionActive(MobEffects.FIRE_RESISTANCE); @@ -119,7 +91,7 @@ public class Utils public static boolean isPlayerBesideSolidBlockFace(EntityPlayer player) { - World world = player.worldObj; + World world = player.getEntityWorld(); double minimumDistanceFromAxis = 0.7; BlockPos centralPos = player.getPosition(); for (EnumFacing facing : EnumFacing.HORIZONTALS) @@ -151,7 +123,7 @@ public class Utils continue; } - if (stack.getItem() instanceof IDemonWillViewer && ((IDemonWillViewer) stack.getItem()).canSeeDemonWillAura(player.worldObj, stack, player)) + if (stack.getItem() instanceof IDemonWillViewer && ((IDemonWillViewer) stack.getItem()).canSeeDemonWillAura(player.getEntityWorld(), stack, player)) { return true; } @@ -250,7 +222,7 @@ public class Utils return 0; } - World world = itemEntity.worldObj; + World world = itemEntity.getEntityWorld(); BlockPos pos = itemEntity.getPosition(); ItemStack stack = itemEntity.getEntityItem(); @@ -275,9 +247,9 @@ public class Utils continue; } - if (stack.getItem() instanceof IDemonWillViewer && ((IDemonWillViewer) stack.getItem()).canSeeDemonWillAura(player.worldObj, stack, player)) + if (stack.getItem() instanceof IDemonWillViewer && ((IDemonWillViewer) stack.getItem()).canSeeDemonWillAura(player.getEntityWorld(), stack, player)) { - return ((IDemonWillViewer) stack.getItem()).getDemonWillAuraResolution(player.worldObj, stack, player); + return ((IDemonWillViewer) stack.getItem()).getDemonWillAuraResolution(player.getEntityWorld(), stack, player); } } @@ -300,7 +272,7 @@ public class Utils public static void setPlayerSpeedFromServer(EntityPlayer player, double motionX, double motionY, double motionZ) { - if (!player.worldObj.isRemote && player instanceof EntityPlayerMP) + if (!player.getEntityWorld().isRemote && player instanceof EntityPlayerMP) { BloodMagicPacketHandler.sendTo(new PlayerVelocityPacketProcessor(motionX, motionY, motionZ), (EntityPlayerMP) player); } @@ -375,7 +347,7 @@ public class Utils if (!tile.getWorld().isRemote) { EntityItem invItem = new EntityItem(tile.getWorld(), player.posX, player.posY + 0.25, player.posZ, tile.getStackInSlot(slot)); - tile.getWorld().spawnEntityInWorld(invItem); + tile.getWorld().spawnEntity(invItem); } tile.clear(); return false; @@ -1050,7 +1022,7 @@ public class Utils } entityItem.setEntityItemStack(stack); - return world.spawnEntityInWorld(entityItem); + return world.spawnEntity(entityItem); } public static boolean swapLocations(World initialWorld, BlockPos initialPos, World finalWorld, BlockPos finalPos) @@ -1098,7 +1070,7 @@ public class Utils finalWorld.setTileEntity(finalPos, newTileInitial); newTileInitial.setPos(finalPos); - newTileInitial.setWorldObj(finalWorld); + newTileInitial.setWorld(finalWorld); } initialWorld.setBlockState(initialPos, finalBlockState, 3); @@ -1109,7 +1081,7 @@ public class Utils initialWorld.setTileEntity(initialPos, newTileFinal); newTileFinal.setPos(initialPos); - newTileFinal.setWorldObj(initialWorld); + newTileFinal.setWorld(initialWorld); } initialWorld.notifyNeighborsOfStateChange(initialPos, finalStack.getBlock()); diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/event/ClientHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/event/ClientHandler.java index eeead4a8..822a6753 100644 --- a/src/main/java/WayofTime/bloodmagic/util/handler/event/ClientHandler.java +++ b/src/main/java/WayofTime/bloodmagic/util/handler/event/ClientHandler.java @@ -121,7 +121,7 @@ public class ClientHandler @SubscribeEvent public void onSoundEvent(PlaySoundEvent event) { - EntityPlayer player = Minecraft.getMinecraft().thePlayer; + EntityPlayer player = Minecraft.getMinecraft().player; if (player != null && player.isPotionActive(ModPotions.deafness)) { event.setResultSound(null); @@ -152,8 +152,8 @@ public class ClientHandler @SubscribeEvent public void render(RenderWorldLastEvent event) { - EntityPlayerSP player = minecraft.thePlayer; - World world = player.worldObj; + EntityPlayerSP player = minecraft.player; + World world = player.getEntityWorld(); if (mrsHoloTile != null) { @@ -181,7 +181,7 @@ public class ClientHandler @SubscribeEvent public void onMouseEvent(MouseEvent event) { - EntityPlayerSP player = Minecraft.getMinecraft().thePlayer; + EntityPlayerSP player = Minecraft.getMinecraft().player; if (event.getDwheel() != 0 && player != null && player.isSneaking()) { @@ -311,7 +311,7 @@ public class ClientHandler BloodMagicPacketHandler.INSTANCE.sendToServer(new SigilHoldingPacketProcessor(player.inventory.currentItem, mode)); ItemStack newStack = ItemSigilHolding.getItemStackInSlot(stack, ItemSigilHolding.getCurrentItemOrdinal(stack)); if (newStack != null) - Minecraft.getMinecraft().ingameGUI.setRecordPlaying(newStack.getDisplayName(), false); + Minecraft.getMinecraft().ingameGUI.setOverlayMessage(newStack.getDisplayName(), false); } private static TextureAtlasSprite forName(TextureMap textureMap, String name, String dir) @@ -321,7 +321,7 @@ public class ClientHandler private void renderRitualStones(EntityPlayerSP player, float partialTicks) { - World world = player.worldObj; + World world = player.getEntityWorld(); ItemRitualDiviner ritualDiviner = (ItemRitualDiviner) player.inventory.getCurrentItem().getItem(); EnumFacing direction = ritualDiviner.getDirection(player.inventory.getCurrentItem()); Ritual ritual = RitualRegistry.getRitualForId(ritualDiviner.getCurrentRitual(player.inventory.getCurrentItem())); @@ -385,8 +385,8 @@ public class ClientHandler public static void renderRitualStones(TileMasterRitualStone masterRitualStone, float partialTicks) { - EntityPlayerSP player = minecraft.thePlayer; - World world = player.worldObj; + EntityPlayerSP player = minecraft.player; + World world = player.getEntityWorld(); EnumFacing direction = mrsHoloDirection; Ritual ritual = mrsHoloRitual; diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/event/GenericHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/event/GenericHandler.java index 2d269a0b..a6dc5a00 100644 --- a/src/main/java/WayofTime/bloodmagic/util/handler/event/GenericHandler.java +++ b/src/main/java/WayofTime/bloodmagic/util/handler/event/GenericHandler.java @@ -101,7 +101,7 @@ public class GenericHandler { event.setDamageMultiplier(0); - if (player.worldObj.isRemote) + if (player.getEntityWorld().isRemote) { player.motionY *= -0.9; player.fallDistance = 0; @@ -197,7 +197,7 @@ public class GenericHandler @SubscribeEvent public void onEntityHurt(LivingHurtEvent event) { - if (event.getEntity().worldObj.isRemote) + if (event.getEntity().getEntityWorld().isRemote) return; if (event.getSource().getEntity() instanceof EntityPlayer && !PlayerHelper.isFakePlayer((EntityPlayer) event.getSource().getEntity())) @@ -240,7 +240,7 @@ public class GenericHandler @SubscribeEvent public void onLivingUpdate(LivingUpdateEvent event) { - if (!event.getEntityLiving().worldObj.isRemote) + if (!event.getEntityLiving().getEntityWorld().isRemote) { EntityLivingBase entity = event.getEntityLiving(); if (entity instanceof EntityPlayer && entity.ticksExisted % 50 == 0) //TODO: Change to an incremental counter @@ -265,7 +265,7 @@ public class GenericHandler if (animal.getAttackTarget() != null && animal.getDistanceSqToEntity(animal.getAttackTarget()) < 4) { - animal.worldObj.createExplosion(null, animal.posX, animal.posY + (double) (animal.height / 16.0F), animal.posZ, 2 + animal.getActivePotionEffect(ModPotions.sacrificialLamb).getAmplifier() * 1.5f, false); + animal.getEntityWorld().createExplosion(null, animal.posX, animal.posY + (double) (animal.height / 16.0F), animal.posZ, 2 + animal.getActivePotionEffect(ModPotions.sacrificialLamb).getAmplifier() * 1.5f, false); targetTaskMap.remove(animal); attackTaskMap.remove(animal); } @@ -284,7 +284,7 @@ public class GenericHandler EntityPlayer player = (EntityPlayer) entity; if (player.isSneaking() && player.isPotionActive(ModPotions.cling) && Utils.isPlayerBesideSolidBlockFace(player) && !player.onGround) { - if (player.worldObj.isRemote) + if (player.getEntityWorld().isRemote) { player.motionY = 0; player.motionX *= 0.8; @@ -307,14 +307,14 @@ public class GenericHandler if (entity.isPotionActive(ModPotions.fireFuse)) { - entity.worldObj.spawnParticle(EnumParticleTypes.FLAME, entity.posX + entity.worldObj.rand.nextDouble() * 0.3, entity.posY + entity.worldObj.rand.nextDouble() * 0.3, entity.posZ + entity.worldObj.rand.nextDouble() * 0.3, 0, 0.06d, 0); + entity.getEntityWorld().spawnParticle(EnumParticleTypes.FLAME, entity.posX + entity.getEntityWorld().rand.nextDouble() * 0.3, entity.posY + entity.getEntityWorld().rand.nextDouble() * 0.3, entity.posZ + entity.getEntityWorld().rand.nextDouble() * 0.3, 0, 0.06d, 0); int r = entity.getActivePotionEffect(ModPotions.fireFuse).getAmplifier(); int radius = 1 * r + 1; if (entity.getActivePotionEffect(ModPotions.fireFuse).getDuration() <= 3) { - entity.worldObj.createExplosion(null, entity.posX, entity.posY, entity.posZ, radius, false); + entity.getEntityWorld().createExplosion(null, entity.posX, entity.posY, entity.posZ, radius, false); } } @@ -335,7 +335,7 @@ public class GenericHandler if (player instanceof EntityPlayerMP) { BlockPos pos = player.getPosition(); - DemonWillHolder holder = WorldDemonWillHandler.getWillHolder(player.worldObj.provider.getDimension(), pos.getX() >> 4, pos.getZ() >> 4); + DemonWillHolder holder = WorldDemonWillHandler.getWillHolder(player.getEntityWorld().provider.getDimension(), pos.getX() >> 4, pos.getZ() >> 4); if (holder != null) { BloodMagicPacketHandler.sendTo(new DemonAuraPacketProcessor(holder), (EntityPlayerMP) player); @@ -469,7 +469,7 @@ public class GenericHandler if (heldStack != null && heldStack.getItem() == ModItems.BOUND_SWORD && !(attackedEntity instanceof EntityAnimal)) for (int i = 0; i <= EnchantmentHelper.getLootingModifier(player); i++) if (attackedEntity.getEntityWorld().rand.nextDouble() < 0.2) - event.getDrops().add(new EntityItem(attackedEntity.worldObj, attackedEntity.posX, attackedEntity.posY, attackedEntity.posZ, new ItemStack(ModItems.BLOOD_SHARD, 1, 0))); + event.getDrops().add(new EntityItem(attackedEntity.getEntityWorld(), attackedEntity.posX, attackedEntity.posY, attackedEntity.posZ, new ItemStack(ModItems.BLOOD_SHARD, 1, 0))); } } @@ -487,7 +487,7 @@ public class GenericHandler itemstack.setItemDamage(itemstack.getItemDamage() - i); } - if (!player.worldObj.isRemote) + if (!player.getEntityWorld().isRemote) { for (ItemStack stack : player.inventory.mainInventory) { diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/event/LivingArmourHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/event/LivingArmourHandler.java index 727e3f75..a4ef11d1 100644 --- a/src/main/java/WayofTime/bloodmagic/util/handler/event/LivingArmourHandler.java +++ b/src/main/java/WayofTime/bloodmagic/util/handler/event/LivingArmourHandler.java @@ -308,7 +308,7 @@ public class LivingArmourHandler @SubscribeEvent public void onArrowFire(ArrowLooseEvent event) { - World world = event.getEntityPlayer().worldObj; + World world = event.getEntityPlayer().getEntityWorld(); ItemStack stack = event.getBow(); EntityPlayer player = event.getEntityPlayer(); @@ -368,7 +368,7 @@ public class LivingArmourHandler entityarrow.pickupStatus = EntityArrow.PickupStatus.CREATIVE_ONLY; - world.spawnEntityInWorld(entityarrow); + world.spawnEntity(entityarrow); } } } diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/event/StatTrackerHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/event/StatTrackerHandler.java index 7089d682..c8909436 100644 --- a/src/main/java/WayofTime/bloodmagic/util/handler/event/StatTrackerHandler.java +++ b/src/main/java/WayofTime/bloodmagic/util/handler/event/StatTrackerHandler.java @@ -87,7 +87,7 @@ public class StatTrackerHandler if (armour != null) { StatTrackerHealthboost.incrementCounter(armour, event.getAmount()); - if (player.worldObj.canSeeSky(player.getPosition()) && player.worldObj.provider.isDaytime()) + if (player.getEntityWorld().canSeeSky(player.getPosition()) && player.getEntityWorld().provider.isDaytime()) { StatTrackerSolarPowered.incrementCounter(armour, event.getAmount()); } @@ -162,7 +162,7 @@ public class StatTrackerHandler { StatTrackerMeleeDamage.incrementCounter(armour, amount); - if (player.worldObj.getLight(player.getPosition()) <= 9) + if (player.getEntityWorld().getLight(player.getPosition()) <= 9) StatTrackerNightSight.incrementCounter(armour, amount); if (mainWeapon != null && mainWeapon.getItem() instanceof ItemSpade) diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/event/WillHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/event/WillHandler.java index 0192e3a6..93dbaa99 100644 --- a/src/main/java/WayofTime/bloodmagic/util/handler/event/WillHandler.java +++ b/src/main/java/WayofTime/bloodmagic/util/handler/event/WillHandler.java @@ -84,21 +84,21 @@ public class WillHandler DamageSource source = event.getSource(); Entity entity = source.getEntity(); - if (attackedEntity.isPotionActive(ModPotions.soulSnare) && (attackedEntity instanceof EntityMob || attackedEntity.worldObj.getDifficulty() == EnumDifficulty.PEACEFUL)) + if (attackedEntity.isPotionActive(ModPotions.soulSnare) && (attackedEntity instanceof EntityMob || attackedEntity.getEntityWorld().getDifficulty() == EnumDifficulty.PEACEFUL)) { PotionEffect eff = attackedEntity.getActivePotionEffect(ModPotions.soulSnare); int lvl = eff.getAmplifier(); double amountOfSouls = attackedEntity.getEntityWorld().rand.nextDouble() * (lvl + 1) * (lvl + 1) * 5; ItemStack soulStack = ((IDemonWill) ModItems.MONSTER_SOUL).createWill(0, amountOfSouls); - event.getDrops().add(new EntityItem(attackedEntity.worldObj, attackedEntity.posX, attackedEntity.posY, attackedEntity.posZ, soulStack)); + event.getDrops().add(new EntityItem(attackedEntity.getEntityWorld(), attackedEntity.posX, attackedEntity.posY, attackedEntity.posZ, soulStack)); } if (entity != null && entity instanceof EntityPlayer) { EntityPlayer player = (EntityPlayer) entity; ItemStack heldStack = player.getHeldItemMainhand(); - if (heldStack != null && heldStack.getItem() instanceof IDemonWillWeapon && !player.worldObj.isRemote) + if (heldStack != null && heldStack.getItem() instanceof IDemonWillWeapon && !player.getEntityWorld().isRemote) { IDemonWillWeapon demonWillWeapon = (IDemonWillWeapon) heldStack.getItem(); List droppedSouls = demonWillWeapon.getRandomDemonWillDrop(attackedEntity, player, heldStack, event.getLootingLevel()); @@ -114,7 +114,7 @@ public class WillHandler EnumDemonWillType pickupType = ((IDemonWill) remainder.getItem()).getType(remainder); if (((IDemonWill) remainder.getItem()).getWill(pickupType, remainder) >= 0.0001) { - event.getDrops().add(new EntityItem(attackedEntity.worldObj, attackedEntity.posX, attackedEntity.posY, attackedEntity.posZ, remainder)); + event.getDrops().add(new EntityItem(attackedEntity.getEntityWorld(), attackedEntity.posX, attackedEntity.posY, attackedEntity.posZ, remainder)); } } } From 305e001b1589737405a794b76a80d0db10bd8799 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Sat, 4 Feb 2017 22:44:57 -0800 Subject: [PATCH 16/82] No-spam messages should be handled on the main thread (#1035) --- src/main/java/WayofTime/bloodmagic/util/ChatUtil.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/WayofTime/bloodmagic/util/ChatUtil.java b/src/main/java/WayofTime/bloodmagic/util/ChatUtil.java index 100d5b30..ba5ff465 100644 --- a/src/main/java/WayofTime/bloodmagic/util/ChatUtil.java +++ b/src/main/java/WayofTime/bloodmagic/util/ChatUtil.java @@ -260,9 +260,14 @@ public class ChatUtil public static class Handler implements IMessageHandler { @Override - public IMessage onMessage(PacketNoSpamChat message, MessageContext ctx) + public IMessage onMessage(final PacketNoSpamChat message, MessageContext ctx) { - sendNoSpamMessages(message.chatLines); + Minecraft.getMinecraft().addScheduledTask(new Runnable() { + @Override + public void run() { + sendNoSpamMessages(message.chatLines); + } + }); return null; } } From 13228f61da76ae79214fe1d9ff32aafc8882f604 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Sun, 5 Feb 2017 11:58:23 -0800 Subject: [PATCH 17/82] Temporarily remove item rendering for tank fluid You cannot bake GL stuff. This is bad. Also it got broken at one point. I'll re-add this once I remove the need for a TESR. --- .../render/model/BakedCustomItemModel.java | 205 ------------------ .../render/model/CustomModelFactory.java | 80 ------- .../util/handler/event/ClientHandler.java | 7 - 3 files changed, 292 deletions(-) delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/model/BakedCustomItemModel.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/model/CustomModelFactory.java diff --git a/src/main/java/WayofTime/bloodmagic/client/render/model/BakedCustomItemModel.java b/src/main/java/WayofTime/bloodmagic/client/render/model/BakedCustomItemModel.java deleted file mode 100644 index 4529d6f7..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/model/BakedCustomItemModel.java +++ /dev/null @@ -1,205 +0,0 @@ -package WayofTime.bloodmagic.client.render.model; - -import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.block.BlockBloodTank; -import WayofTime.bloodmagic.client.render.block.RenderBloodTank; -import WayofTime.bloodmagic.tile.TileBloodTank; -import com.google.common.collect.ImmutableMap; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.VertexBuffer; -import net.minecraft.client.renderer.block.model.BakedQuad; -import net.minecraft.client.renderer.block.model.IBakedModel; -import net.minecraft.client.renderer.block.model.ItemCameraTransforms; -import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; -import net.minecraft.client.renderer.block.model.ItemOverrideList; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.client.renderer.texture.TextureMap; -import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; -import net.minecraft.client.renderer.vertex.VertexFormat; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumFacing; -import net.minecraftforge.client.model.IPerspectiveAwareModel; -import net.minecraftforge.common.model.TRSRTransformation; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fml.relauncher.ReflectionHelper; -import org.apache.commons.lang3.tuple.Pair; - -import javax.vecmath.Matrix4f; -import javax.vecmath.Vector3f; -import java.util.List; -import java.util.Map; - -/** - * Shamelessly taken off of the Mekanism repository written by {@author aidancbrady} - * https://github.com/aidancbrady/Mekanism - */ -public class BakedCustomItemModel implements IPerspectiveAwareModel -{ - private IBakedModel baseModel; - private ItemStack stack; - - private TransformType prevTransform; - - private static VertexFormat prevFormat = null; - private static int prevMode = -1; - - private static final RenderBloodTank tankRenderer = (RenderBloodTank) TileEntityRendererDispatcher.instance.mapSpecialRenderers.get(TileBloodTank.class); - - public BakedCustomItemModel(IBakedModel model, ItemStack stack) - { - this.baseModel = model; - this.stack = stack; - } - - private void doRender(TransformType transformType) - { - Block block = Block.getBlockFromItem(stack.getItem()); - - if (transformType == TransformType.GUI) - { - GlStateManager.rotate(180F, 0.0F, 1.0F, 0.0F); - } - - if (block instanceof BlockBloodTank) - { - GlStateManager.pushMatrix(); - - FluidStack fluid = null; - float capacity = TileBloodTank.CAPACITIES[stack.getItemDamage()] * Fluid.BUCKET_VOLUME; - int amount = 0; - if (stack.hasTagCompound() && stack.getTagCompound().hasKey(Constants.NBT.TANK)) - { - NBTTagCompound tag = stack.getTagCompound().getCompoundTag(Constants.NBT.TANK); - fluid = FluidStack.loadFluidStackFromNBT(tag); - if (fluid != null) - amount = tag.getInteger("Amount"); - } - - if (fluid != null && amount > 0) - tankRenderer.renderFluid(amount / capacity, fluid.getFluid(), -0.498, -0.49, -0.498); - - GlStateManager.popMatrix(); - } - } - - @Override - public List getQuads(IBlockState state, EnumFacing side, long rand) - { - Tessellator tessellator = Tessellator.getInstance(); - pauseRenderer(tessellator); - - GlStateManager.pushMatrix(); - GlStateManager.translate(0.5F, 0.5F, 0.5F); - GlStateManager.rotate(180, 0.0F, 1.0F, 0.0F); - Minecraft.getMinecraft().getTextureManager().bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); - doRender(prevTransform); - GlStateManager.enableLighting(); - GlStateManager.enableLight(0); - GlStateManager.enableLight(1); - GlStateManager.enableColorMaterial(); - GlStateManager.colorMaterial(1032, 5634); - GlStateManager.enableCull(); - GlStateManager.popMatrix(); - - resumeRenderer(tessellator); - - return baseModel.getQuads(state, side, rand); - } - - @Override - public boolean isAmbientOcclusion() - { - return baseModel.isAmbientOcclusion(); - } - - @Override - public boolean isGui3d() - { - return baseModel.isGui3d(); - } - - @Override - public boolean isBuiltInRenderer() - { - return baseModel.isBuiltInRenderer(); - } - - @Override - public TextureAtlasSprite getParticleTexture() - { - return baseModel.getParticleTexture(); - } - - @Override - public ItemCameraTransforms getItemCameraTransforms() - { - return baseModel.getItemCameraTransforms(); - } - - private static TRSRTransformation get(float tx, float ty, float tz, float ax, float ay, float az, float s) - { - return new TRSRTransformation(new Vector3f(tx / 16, ty / 16, tz / 16), TRSRTransformation.quatFromXYZDegrees(new Vector3f(ax, ay, az)), new Vector3f(s, s, s), null); - } - - public static Map transforms = ImmutableMap.builder() - .put(TransformType.GUI, get(0, 0, 0, 30F, 225F, 0, 0.625F)) - .put(TransformType.THIRD_PERSON_RIGHT_HAND, get(0, 2.5F, 0, 75F, 45F, 0, 0.375F)) - .put(TransformType.THIRD_PERSON_LEFT_HAND, get(0, 2.5F, 0, 75F, 45F, 0, 0.375F)) - .put(TransformType.FIRST_PERSON_RIGHT_HAND, get(0, 0, 0, 0, 45F, 0, 0.4f)) - .put(TransformType.FIRST_PERSON_LEFT_HAND, get(0, 0, 0, 0, 225F, 0, 0.4F)) - .put(TransformType.GROUND, get(0, 2F, 0, 0, 0, 0, 0.25F)) - .put(TransformType.HEAD, get(0, 0, 0, 0, 0, 0, 1F)) - .put(TransformType.FIXED, get(0, 0, 0, 0, 0, 0, 1F)) - .put(TransformType.NONE, get(0, 0, 0, 0, 0, 0, 0)) - .build(); - - @Override - public Pair handlePerspective(ItemCameraTransforms.TransformType cameraTransformType) - { - prevTransform = cameraTransformType; - return Pair.of(this, transforms.get(cameraTransformType).getMatrix()); - } - - @Override - public ItemOverrideList getOverrides() - { - return ItemOverrideList.NONE; - } - - public static void pauseRenderer(Tessellator tess) - { - if (isDrawing(tess)) - { - prevFormat = tess.getBuffer().getVertexFormat(); - prevMode = tess.getBuffer().getDrawMode(); - tess.draw(); - } - } - - public static void resumeRenderer(Tessellator tess) - { - if (prevFormat != null) - { - tess.getBuffer().begin(prevMode, prevFormat); - } - - prevFormat = null; - prevMode = -1; - } - - public static boolean isDrawing(Tessellator tess) - { - return isDrawing(tess.getBuffer()); - } - - public static boolean isDrawing(VertexBuffer buffer) - { - return (Boolean) ReflectionHelper.getPrivateValue(VertexBuffer.class, buffer, "isDrawing", "field_179010_r"); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/render/model/CustomModelFactory.java b/src/main/java/WayofTime/bloodmagic/client/render/model/CustomModelFactory.java deleted file mode 100644 index cddd3773..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/model/CustomModelFactory.java +++ /dev/null @@ -1,80 +0,0 @@ -package WayofTime.bloodmagic.client.render.model; - -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.renderer.block.model.*; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.List; - -public class CustomModelFactory implements IBakedModel -{ - private IBakedModel baseModel; - - private BlockOverrideList override = new BlockOverrideList(); - - public CustomModelFactory(IBakedModel base) - { - baseModel = base; - } - - @Override - public ItemOverrideList getOverrides() - { - return override; - } - - @Override - public List getQuads(IBlockState state, EnumFacing facing, long rand) - { - throw new UnsupportedOperationException(); - } - - @Override - public boolean isAmbientOcclusion() - { - throw new UnsupportedOperationException(); - } - - @Override - public boolean isGui3d() - { - return baseModel.isGui3d(); - } - - @Override - public boolean isBuiltInRenderer() - { - throw new UnsupportedOperationException(); - } - - @Override - public TextureAtlasSprite getParticleTexture() - { - throw new UnsupportedOperationException(); - } - - @Override - public ItemCameraTransforms getItemCameraTransforms() - { - throw new UnsupportedOperationException(); - } - - private class BlockOverrideList extends ItemOverrideList - { - public BlockOverrideList() - { - super(new ArrayList()); - } - - @Override - public IBakedModel handleItemState(IBakedModel originalModel, ItemStack stack, World world, EntityLivingBase entity) - { - return new BakedCustomItemModel(baseModel, stack); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/event/ClientHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/event/ClientHandler.java index 822a6753..0a498478 100644 --- a/src/main/java/WayofTime/bloodmagic/util/handler/event/ClientHandler.java +++ b/src/main/java/WayofTime/bloodmagic/util/handler/event/ClientHandler.java @@ -9,7 +9,6 @@ import java.util.Set; import javax.annotation.Nullable; import WayofTime.bloodmagic.client.key.KeyBindings; -import WayofTime.bloodmagic.client.render.model.CustomModelFactory; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.renderer.GlStateManager; @@ -223,12 +222,6 @@ public class ClientHandler @SubscribeEvent public void onModelBake(ModelBakeEvent event) { - ModelResourceLocation location = new ModelResourceLocation("bloodmagic:BlockBloodTank", "inventory"); - IBakedModel model = event.getModelRegistry().getObject(location); - - if (model instanceof IBakedModel) - event.getModelRegistry().putObject(location, new CustomModelFactory(model)); - if (BloodMagic.isDev() && SUPPRESS_ASSET_ERRORS) return; From 59920ef34f3ecad438b721fbc560848d9851e331 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Sun, 5 Feb 2017 12:42:28 -0800 Subject: [PATCH 18/82] Bound tools should drain LP (#1033) --- .../java/WayofTime/bloodmagic/item/ItemBoundSword.java | 9 +++++++++ .../java/WayofTime/bloodmagic/item/ItemBoundTool.java | 10 +++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java index 7e264f3f..4664a5b3 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java @@ -5,10 +5,12 @@ import java.util.List; import javax.annotation.Nullable; +import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.util.Utils; import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.ItemMeshDefinition; import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.attributes.AttributeModifier; @@ -68,6 +70,13 @@ public class ItemBoundSword extends ItemSword implements IBindable, IActivatable return super.onItemRightClick(stack, world, player, hand); } + @Override + public void onUpdate(ItemStack stack, World world, Entity entity, int itemSlot, boolean isSelected) + { + if (entity instanceof EntityPlayer && getActivated(stack) && world.getTotalWorldTime() % 80 == 0) + NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage((EntityPlayer) entity, 20); + } + @Override public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) { diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java index 17a03491..7bcb7232 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java @@ -6,6 +6,7 @@ import java.util.Map; import java.util.Set; import WayofTime.bloodmagic.BloodMagic; +import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.api.util.helper.PlayerHelper; import WayofTime.bloodmagic.util.Utils; import com.google.common.base.Strings; @@ -86,16 +87,19 @@ public class ItemBoundTool extends ItemTool implements IBindable, IActivatable } @Override - public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int itemSlot, boolean isSelected) + public void onUpdate(ItemStack stack, World world, Entity entity, int itemSlot, boolean isSelected) { - if (entityIn instanceof EntityPlayer && getActivated(stack) && isSelected && getBeingHeldDown(stack) && stack == ((EntityPlayer) entityIn).getActiveItemStack()) + if (entity instanceof EntityPlayer && getActivated(stack) && isSelected && getBeingHeldDown(stack) && stack == ((EntityPlayer) entity).getActiveItemStack()) { - EntityPlayer player = (EntityPlayer) entityIn; + EntityPlayer player = (EntityPlayer) entity; setHeldDownCount(stack, Math.min(player.getItemInUseCount(), chargeTime)); } else if (!isSelected) { setBeingHeldDown(stack, false); } + + if (entity instanceof EntityPlayer && getActivated(stack) && world.getTotalWorldTime() % 80 == 0) + NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage((EntityPlayer) entity, 20); } protected int getHeldDownCount(ItemStack stack) From 6802bc5f47116e4f7dd41f54cc33d2ad9d100464 Mon Sep 17 00:00:00 2001 From: pksiazek Date: Tue, 7 Feb 2017 01:03:27 +0100 Subject: [PATCH 19/82] #1036 Fixed Living Armor sacrifical upgrade (#1037) --- .../api/util/helper/PlayerSacrificeHelper.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/WayofTime/bloodmagic/api/util/helper/PlayerSacrificeHelper.java b/src/main/java/WayofTime/bloodmagic/api/util/helper/PlayerSacrificeHelper.java index 8b7b5b5e..6379902f 100644 --- a/src/main/java/WayofTime/bloodmagic/api/util/helper/PlayerSacrificeHelper.java +++ b/src/main/java/WayofTime/bloodmagic/api/util/helper/PlayerSacrificeHelper.java @@ -2,6 +2,7 @@ package WayofTime.bloodmagic.api.util.helper; import WayofTime.bloodmagic.ConfigHandler; import WayofTime.bloodmagic.api.altar.IBloodAltar; +import WayofTime.bloodmagic.api.event.SacrificeKnifeUsedEvent; import WayofTime.bloodmagic.registry.ModPotions; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -10,6 +11,7 @@ import net.minecraft.potion.PotionEffect; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.minecraftforge.common.MinecraftForge; public class PlayerSacrificeHelper { @@ -70,8 +72,13 @@ public class PlayerSacrificeHelper if (health > maxHealth / 10.0) { float sacrificedHealth = health - maxHealth / 10.0f; + int lpAdded = (int) (sacrificedHealth * ConfigHandler.sacrificialDaggerConversion * getModifier(amount)); - if (findAndFillAltar(player.getEntityWorld(), player, (int) (sacrificedHealth * ConfigHandler.sacrificialDaggerConversion * getModifier(amount)), false)) + SacrificeKnifeUsedEvent evt = new SacrificeKnifeUsedEvent(player, true, true, (int) sacrificedHealth, lpAdded); + if (MinecraftForge.EVENT_BUS.post(evt)) + return false; + + if (findAndFillAltar(player.getEntityWorld(), player, evt.lpAdded, false)) { player.setHealth(maxHealth / 10.0f); setPlayerIncense(player, 0); From 8a8bff865f5e8143f550cfa63b45403afbcbc07b Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Sun, 12 Feb 2017 01:18:16 -0800 Subject: [PATCH 20/82] IMC API for adding new altar components (#1039) CC @Drullkus --- .../bloodmagic/altar/BloodAltar.java | 5 +++- .../bloodmagic/api/BloodMagicAPI.java | 24 +++++++++++++++++++ .../bloodmagic/util/handler/IMCHandler.java | 12 ++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java b/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java index bd4e8efa..cb2a3bc5 100644 --- a/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java +++ b/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java @@ -129,9 +129,12 @@ public class BloodAltar implements IFluidHandler EnumAltarComponent component = ((IAltarComponent) worldBlock.getBlock()).getType(world, worldBlock.getState(), componentPos); if (component == null || component != altarComponent.getComponent()) return false; - } else if (worldBlock.getBlock() != Utils.getBlockForComponent(altarComponent.getComponent())) + } else if (worldBlock.getBlock() != Utils.getBlockForComponent(altarComponent.getComponent())) // Special case Vanilla { return false; + } else if (BloodMagicAPI.getAltarComponents().get(worldBlock.getState()) != null) // Mod compat + { + return BloodMagicAPI.getAltarComponents().get(worldBlock.getState()) == altarComponent.getComponent(); } } else { diff --git a/src/main/java/WayofTime/bloodmagic/api/BloodMagicAPI.java b/src/main/java/WayofTime/bloodmagic/api/BloodMagicAPI.java index c65e63cd..f667db7d 100644 --- a/src/main/java/WayofTime/bloodmagic/api/BloodMagicAPI.java +++ b/src/main/java/WayofTime/bloodmagic/api/BloodMagicAPI.java @@ -1,9 +1,11 @@ package WayofTime.bloodmagic.api; +import WayofTime.bloodmagic.api.altar.EnumAltarComponent; import WayofTime.bloodmagic.api.util.helper.LogHelper; import lombok.Getter; import lombok.Setter; import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -40,6 +42,8 @@ public class BloodMagicAPI private static final Map entitySacrificeValues = new HashMap(); @Getter private static final ArrayList greenGroveBlacklist = new ArrayList(); + @Getter + private static final Map altarComponents = new HashMap(); @Getter @Setter @@ -261,4 +265,24 @@ public class BloodMagicAPI if (!greenGroveBlacklist.contains(block)) greenGroveBlacklist.add(block); } + + /** + * Marks an IBlockState as a specific {@link EnumAltarComponent} without needing to implement + * {@link WayofTime.bloodmagic.api.altar.IAltarComponent} on the block. + * + * IMC: + * {@code FMLInterModComs.sendMessage("BloodMagic", "altarComponent", "domain:name:meta:component")} + * Example: + * {@code FMLInterModComs.sendMessage("BloodMagic", "altarComponent", "minecraft:glowstone:0:GLOWSTONE")} + * + * @param state + * - The IBlockState for this component + * @param altarComponent + * - The EnumAltarComponent for this state + */ + public static void addAltarComponent(IBlockState state, EnumAltarComponent altarComponent) + { + if (!altarComponents.containsKey(state)) + altarComponents.put(state, altarComponent); + } } diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/IMCHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/IMCHandler.java index 5f0dccf6..4f2de729 100644 --- a/src/main/java/WayofTime/bloodmagic/util/handler/IMCHandler.java +++ b/src/main/java/WayofTime/bloodmagic/util/handler/IMCHandler.java @@ -1,6 +1,7 @@ package WayofTime.bloodmagic.util.handler; import WayofTime.bloodmagic.api.BloodMagicAPI; +import WayofTime.bloodmagic.api.altar.EnumAltarComponent; import WayofTime.bloodmagic.util.Utils; import net.minecraft.block.Block; import net.minecraft.item.ItemBlock; @@ -54,6 +55,17 @@ public class IMCHandler BloodMagicAPI.blacklistFromGreenGrove(block); } } + + if (message.key.equals("altarComponent") && message.isStringMessage()) + { + String[] splitInfo = message.getStringValue().split(":"); + if (splitInfo.length == 4) + { + Block block = ForgeRegistries.BLOCKS.getValue(new ResourceLocation(splitInfo[0], splitInfo[1])); + if (block != null) + BloodMagicAPI.addAltarComponent(block.getStateFromMeta(Integer.parseInt(splitInfo[2])), EnumAltarComponent.valueOf(splitInfo[3])); + } + } } } } From 24f110f79011c779f794de14fe2866d3f4fb0908 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Sun, 12 Feb 2017 11:24:56 -0800 Subject: [PATCH 21/82] Update version + changelog (cherry picked from commit b00fe38) --- changelog.txt | 13 +++++++++++++ gradle.properties | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/changelog.txt b/changelog.txt index 20db1aa4..e82c3273 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,9 +1,22 @@ ------------------------------------------------------ Version 2.1.1-70 ------------------------------------------------------ +- Fixed the Living Armour Sacrificial Upgrade +- Fixed Bound Tools not draining LP +- Implemented the Blood Tank + - Current recipes are temporary™ +- Empty flasks can now be refilled to create a new flask +- Fixed Aura of Expulsion whitelist +- Added the Altar's Charge value to the Waila Tooltip when holding a Seer's Sigil +- Fixed meteor config error caused by EnderCore reloading configs early into startup +- Fixed meteor config not generating new entries +- Blacklisted Sentient Spectres from the Well of Suffering +- Fixed Sigils drawing from the user instead of the bound network - Added Fluid routing to the routing nodes - this is done by using the Fluid Filter and placing a fluid container as the filter. - Made it so the book does not give the filling recipe when the Blood Orb recipe is queried. - Added a null check for the Will getter for the Aura incase the WillChunk somehow does not generate. +- [API] Added a new IMC API for modders to register their blocks as an altar component. + - Example: Chisel Glowstone can now be used for the Tier 3 caps (once Chisel implements it) ------------------------------------------------------ Version 2.1.0-69 diff --git a/gradle.properties b/gradle.properties index cf4b78a2..31414a87 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_name=BloodMagic package_group=com.wayoftime.bloodmagic -mod_version=2.1.0 +mod_version=2.1.1 mc_version=1.10.2 forge_version=12.18.3.2221 curse_id=224791 From bb9347ba5a38e484f98300187e6a7e5b1a9e24a4 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Sun, 12 Feb 2017 16:01:54 -0800 Subject: [PATCH 22/82] Fix server crash when adding guide recipe to JEI (#1045) --- .../WayofTime/bloodmagic/compat/guideapi/GuideBloodMagic.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/WayofTime/bloodmagic/compat/guideapi/GuideBloodMagic.java b/src/main/java/WayofTime/bloodmagic/compat/guideapi/GuideBloodMagic.java index a0f65082..7969ba4f 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/guideapi/GuideBloodMagic.java +++ b/src/main/java/WayofTime/bloodmagic/compat/guideapi/GuideBloodMagic.java @@ -44,6 +44,9 @@ public class GuideBloodMagic public static void handleBookRecipe(boolean add) { if (Loader.isModLoaded("JEI")) { + if (BloodMagicPlugin.jeiRuntime == null) + return; + if (add) BloodMagicPlugin.jeiRuntime.getRecipeRegistry().addRecipe(CompatibilityGuideAPI.guideRecipe); else From 8040d85e97cbddac5c88dd2278df866d2863c499 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Sun, 12 Feb 2017 16:14:10 -0800 Subject: [PATCH 23/82] Update version + changelog --- changelog.txt | 5 +++++ gradle.properties | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/changelog.txt b/changelog.txt index e82c3273..235437ae 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,8 @@ +------------------------------------------------------ +Version 2.1.2 +------------------------------------------------------ +- Fixed server crash when adding guide recipe to JEI + ------------------------------------------------------ Version 2.1.1-70 ------------------------------------------------------ diff --git a/gradle.properties b/gradle.properties index 31414a87..fe9a5127 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_name=BloodMagic package_group=com.wayoftime.bloodmagic -mod_version=2.1.1 +mod_version=2.1.2 mc_version=1.10.2 forge_version=12.18.3.2221 curse_id=224791 From dea31f5f360b1f64216263533ac196032426e6d8 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Sun, 12 Feb 2017 17:00:18 -0800 Subject: [PATCH 24/82] Cache the bound SoulNetwork for rituals Avoids looking up the map data once or more each tick (cherry picked from commit c13be9e) --- .../bloodmagic/api/ritual/IMasterRitualStone.java | 3 +++ .../bloodmagic/ritual/RitualAltarBuilder.java | 15 ++++++--------- .../bloodmagic/ritual/RitualAnimalGrowth.java | 9 +++------ .../bloodmagic/ritual/RitualCobblestone.java | 9 +++------ .../bloodmagic/ritual/RitualContainment.java | 7 ++----- .../bloodmagic/ritual/RitualCrushing.java | 11 ++++------- .../bloodmagic/ritual/RitualCrystalHarvest.java | 9 +++------ .../bloodmagic/ritual/RitualExpulsion.java | 9 +++------ .../bloodmagic/ritual/RitualFeatheredKnife.java | 9 +++------ .../bloodmagic/ritual/RitualFelling.java | 9 +++------ .../bloodmagic/ritual/RitualForsakenSoul.java | 9 +++------ .../bloodmagic/ritual/RitualFullStomach.java | 10 +++------- .../bloodmagic/ritual/RitualGreenGrove.java | 9 +++------ .../bloodmagic/ritual/RitualHarvest.java | 9 +++------ .../bloodmagic/ritual/RitualInterdiction.java | 7 ++----- .../bloodmagic/ritual/RitualJumping.java | 9 +++------ .../WayofTime/bloodmagic/ritual/RitualLava.java | 9 +++------ .../ritual/RitualLivingArmourDowngrade.java | 7 ++----- .../bloodmagic/ritual/RitualMagnetic.java | 10 +++------- .../WayofTime/bloodmagic/ritual/RitualMeteor.java | 7 ++----- .../WayofTime/bloodmagic/ritual/RitualPlacer.java | 11 ++++------- .../WayofTime/bloodmagic/ritual/RitualPump.java | 9 +++------ .../bloodmagic/ritual/RitualRegeneration.java | 9 +++------ .../WayofTime/bloodmagic/ritual/RitualSpeed.java | 7 ++----- .../bloodmagic/ritual/RitualSuppression.java | 7 ++----- .../WayofTime/bloodmagic/ritual/RitualWater.java | 9 +++------ .../bloodmagic/ritual/RitualWellOfSuffering.java | 9 +++------ .../WayofTime/bloodmagic/ritual/RitualZephyr.java | 9 +++------ .../bloodmagic/tile/TileMasterRitualStone.java | 11 ++++++++++- 29 files changed, 93 insertions(+), 164 deletions(-) diff --git a/src/main/java/WayofTime/bloodmagic/api/ritual/IMasterRitualStone.java b/src/main/java/WayofTime/bloodmagic/api/ritual/IMasterRitualStone.java index 076c820d..7ffecdb9 100644 --- a/src/main/java/WayofTime/bloodmagic/api/ritual/IMasterRitualStone.java +++ b/src/main/java/WayofTime/bloodmagic/api/ritual/IMasterRitualStone.java @@ -2,6 +2,7 @@ package WayofTime.bloodmagic.api.ritual; import java.util.List; +import WayofTime.bloodmagic.api.saving.SoulNetwork; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; @@ -18,6 +19,8 @@ public interface IMasterRitualStone { String getOwner(); + SoulNetwork getOwnerNetwork(); + boolean activateRitual(ItemStack activationCrystal, EntityPlayer activator, Ritual ritual); void performRitual(World world, BlockPos pos); diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualAltarBuilder.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualAltarBuilder.java index 6a093244..34bb9484 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualAltarBuilder.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualAltarBuilder.java @@ -5,12 +5,10 @@ import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.altar.AltarComponent; import WayofTime.bloodmagic.api.altar.EnumAltarComponent; import WayofTime.bloodmagic.api.altar.EnumAltarTier; -import WayofTime.bloodmagic.api.saving.SoulNetwork; import WayofTime.bloodmagic.api.ritual.EnumRuneType; import WayofTime.bloodmagic.api.ritual.IMasterRitualStone; import WayofTime.bloodmagic.api.ritual.Ritual; import WayofTime.bloodmagic.api.ritual.RitualComponent; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.block.BlockBloodRune; import WayofTime.bloodmagic.registry.ModBlocks; import WayofTime.bloodmagic.util.Utils; @@ -47,15 +45,14 @@ public class RitualAltarBuilder extends Ritual public void performRitual(IMasterRitualStone masterRitualStone) { World world = masterRitualStone.getWorldObj(); - SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner()); TileEntity tileEntity = world.getTileEntity(masterRitualStone.getBlockPos().up()); BlockPos altarPos = masterRitualStone.getBlockPos().up(2); - int currentEssence = network.getCurrentEssence(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); if (currentEssence < getRefreshCost()) { - network.causeNausea(); + masterRitualStone.getOwnerNetwork().causeNausea(); return; } @@ -68,7 +65,7 @@ public class RitualAltarBuilder extends Ritual { world.setBlockState(altarPos, ModBlocks.ALTAR.getDefaultState()); lightning(world, altarPos); - network.syphon(getRefreshCost()); + masterRitualStone.getOwnerNetwork().syphon(getRefreshCost()); } if (altarComponentsIterator.hasNext()) @@ -87,7 +84,7 @@ public class RitualAltarBuilder extends Ritual { world.setBlockState(currentPos, blockStack.getState(), 3); lightning(world, currentPos); - network.syphon(getRefreshCost()); + masterRitualStone.getOwnerNetwork().syphon(getRefreshCost()); } break; } @@ -98,7 +95,7 @@ public class RitualAltarBuilder extends Ritual { world.setBlockState(currentPos, blockStack.getState(), 3); lightning(world, currentPos); - network.syphon(getRefreshCost()); + masterRitualStone.getOwnerNetwork().syphon(getRefreshCost()); } break; } @@ -109,7 +106,7 @@ public class RitualAltarBuilder extends Ritual { world.setBlockState(currentPos, blockStack.getState(), 3); lightning(world, currentPos); - network.syphon(getRefreshCost()); + masterRitualStone.getOwnerNetwork().syphon(getRefreshCost()); } break; } diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualAnimalGrowth.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualAnimalGrowth.java index 6b2728fd..3e5d2a59 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualAnimalGrowth.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualAnimalGrowth.java @@ -20,9 +20,7 @@ import WayofTime.bloodmagic.api.ritual.EnumRuneType; import WayofTime.bloodmagic.api.ritual.IMasterRitualStone; import WayofTime.bloodmagic.api.ritual.Ritual; import WayofTime.bloodmagic.api.ritual.RitualComponent; -import WayofTime.bloodmagic.api.saving.SoulNetwork; import WayofTime.bloodmagic.api.soul.EnumDemonWillType; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler; import WayofTime.bloodmagic.registry.ModPotions; import WayofTime.bloodmagic.util.Utils; @@ -54,12 +52,11 @@ public class RitualAnimalGrowth extends Ritual public void performRitual(IMasterRitualStone masterRitualStone) { World world = masterRitualStone.getWorldObj(); - SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner()); - int currentEssence = network.getCurrentEssence(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); if (currentEssence < getRefreshCost()) { - network.causeNausea(); + masterRitualStone.getOwnerNetwork().causeNausea(); return; } @@ -195,7 +192,7 @@ public class RitualAnimalGrowth extends Ritual WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.DESTRUCTIVE, destructiveDrain, true); } - network.syphon(totalGrowths * getRefreshCost()); + masterRitualStone.getOwnerNetwork().syphon(totalGrowths * getRefreshCost()); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualCobblestone.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualCobblestone.java index 3f8a2d0e..66393f5e 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualCobblestone.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualCobblestone.java @@ -1,9 +1,7 @@ package WayofTime.bloodmagic.ritual; import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.api.saving.SoulNetwork; import WayofTime.bloodmagic.api.ritual.*; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.item.ItemComponent; import WayofTime.bloodmagic.tile.TileAlchemyArray; import net.minecraft.block.Block; @@ -29,14 +27,13 @@ public class RitualCobblestone extends Ritual public void performRitual(IMasterRitualStone masterRitualStone) { World world = masterRitualStone.getWorldObj(); - SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner()); - int currentEssence = network.getCurrentEssence(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); TileEntity tileEntity = world.getTileEntity(masterRitualStone.getBlockPos().up()); Block block = Blocks.COBBLESTONE; if (currentEssence < getRefreshCost()) { - network.causeNausea(); + masterRitualStone.getOwnerNetwork().causeNausea(); return; } @@ -87,7 +84,7 @@ public class RitualCobblestone extends Ritual } } - network.syphon(getRefreshCost() * totalEffects); + masterRitualStone.getOwnerNetwork().syphon(getRefreshCost() * totalEffects); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualContainment.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualContainment.java index d96561e3..2ee8aa2f 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualContainment.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualContainment.java @@ -1,9 +1,7 @@ package WayofTime.bloodmagic.ritual; import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.api.saving.SoulNetwork; import WayofTime.bloodmagic.api.ritual.*; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.api.util.helper.PlayerHelper; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -27,12 +25,11 @@ public class RitualContainment extends Ritual public void performRitual(IMasterRitualStone masterRitualStone) { World world = masterRitualStone.getWorldObj(); - SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner()); - int currentEssence = network.getCurrentEssence(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); if (currentEssence < getRefreshCost()) { - network.causeNausea(); + masterRitualStone.getOwnerNetwork().causeNausea(); return; } diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualCrushing.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualCrushing.java index c88dd481..f06a8a09 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualCrushing.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualCrushing.java @@ -28,9 +28,7 @@ import WayofTime.bloodmagic.api.ritual.EnumRuneType; import WayofTime.bloodmagic.api.ritual.IMasterRitualStone; import WayofTime.bloodmagic.api.ritual.Ritual; import WayofTime.bloodmagic.api.ritual.RitualComponent; -import WayofTime.bloodmagic.api.saving.SoulNetwork; import WayofTime.bloodmagic.api.soul.EnumDemonWillType; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler; import WayofTime.bloodmagic.registry.ModBlocks; import WayofTime.bloodmagic.util.Utils; @@ -71,12 +69,11 @@ public class RitualCrushing extends Ritual public void performRitual(IMasterRitualStone masterRitualStone) { World world = masterRitualStone.getWorldObj(); - SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner()); - int currentEssence = network.getCurrentEssence(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); if (currentEssence < getRefreshCost()) { - network.causeNausea(); + masterRitualStone.getOwnerNetwork().causeNausea(); return; } @@ -179,7 +176,7 @@ public class RitualCrushing extends Ritual WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.CORROSIVE, willDrain, true); corrosiveWill -= willDrain; - network.syphon(lpDrain); + masterRitualStone.getOwnerNetwork().syphon(lpDrain); currentEssence -= lpDrain; isBlockClaimed = true; @@ -252,7 +249,7 @@ public class RitualCrushing extends Ritual } world.destroyBlock(newPos, false); - network.syphon(getRefreshCost()); + masterRitualStone.getOwnerNetwork().syphon(getRefreshCost()); hasOperated = true; if (consumeRawWill) diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualCrystalHarvest.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualCrystalHarvest.java index c2ee0625..0aa5202c 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualCrystalHarvest.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualCrystalHarvest.java @@ -7,13 +7,11 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.api.saving.SoulNetwork; import WayofTime.bloodmagic.api.ritual.AreaDescriptor; import WayofTime.bloodmagic.api.ritual.EnumRuneType; import WayofTime.bloodmagic.api.ritual.IMasterRitualStone; import WayofTime.bloodmagic.api.ritual.Ritual; import WayofTime.bloodmagic.api.ritual.RitualComponent; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.tile.TileDemonCrystal; public class RitualCrystalHarvest extends Ritual @@ -32,13 +30,12 @@ public class RitualCrystalHarvest extends Ritual public void performRitual(IMasterRitualStone masterRitualStone) { World world = masterRitualStone.getWorldObj(); - SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner()); - int currentEssence = network.getCurrentEssence(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); BlockPos pos = masterRitualStone.getBlockPos(); if (currentEssence < getRefreshCost()) { - network.causeNausea(); + masterRitualStone.getOwnerNetwork().causeNausea(); return; } @@ -68,7 +65,7 @@ public class RitualCrystalHarvest extends Ritual } } - network.syphon(getRefreshCost() * totalEffects); + masterRitualStone.getOwnerNetwork().syphon(getRefreshCost() * totalEffects); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualExpulsion.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualExpulsion.java index 2c833ac9..989a0d63 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualExpulsion.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualExpulsion.java @@ -24,8 +24,6 @@ import WayofTime.bloodmagic.api.ritual.EnumRuneType; import WayofTime.bloodmagic.api.ritual.IMasterRitualStone; import WayofTime.bloodmagic.api.ritual.Ritual; import WayofTime.bloodmagic.api.ritual.RitualComponent; -import WayofTime.bloodmagic.api.saving.SoulNetwork; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.api.util.helper.PlayerHelper; import WayofTime.bloodmagic.util.Utils; @@ -46,12 +44,11 @@ public class RitualExpulsion extends Ritual public void performRitual(IMasterRitualStone masterRitualStone) { World world = masterRitualStone.getWorldObj(); - SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner()); - int currentEssence = network.getCurrentEssence(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); if (currentEssence < getRefreshCost()) { - network.causeNausea(); + masterRitualStone.getOwnerNetwork().causeNausea(); return; } @@ -90,7 +87,7 @@ public class RitualExpulsion extends Ritual continue; if (teleportRandomly(player, teleportDistance)) - network.syphon(getRefreshCost() * 1000); + masterRitualStone.getOwnerNetwork().syphon(getRefreshCost() * 1000); } allowedNames.clear(); diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualFeatheredKnife.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualFeatheredKnife.java index 20097edd..0266b780 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualFeatheredKnife.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualFeatheredKnife.java @@ -22,9 +22,7 @@ import WayofTime.bloodmagic.api.ritual.EnumRuneType; import WayofTime.bloodmagic.api.ritual.IMasterRitualStone; import WayofTime.bloodmagic.api.ritual.Ritual; import WayofTime.bloodmagic.api.ritual.RitualComponent; -import WayofTime.bloodmagic.api.saving.SoulNetwork; import WayofTime.bloodmagic.api.soul.EnumDemonWillType; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.api.util.helper.PlayerSacrificeHelper; import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler; import WayofTime.bloodmagic.item.armour.ItemLivingArmour; @@ -62,12 +60,11 @@ public class RitualFeatheredKnife extends Ritual public void performRitual(IMasterRitualStone masterRitualStone) { World world = masterRitualStone.getWorldObj(); - SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner()); - int currentEssence = network.getCurrentEssence(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); if (currentEssence < getRefreshCost()) { - network.causeNausea(); + masterRitualStone.getOwnerNetwork().causeNausea(); return; } @@ -195,7 +192,7 @@ public class RitualFeatheredKnife extends Ritual } } - network.syphon(getRefreshCost() * totalEffects); + masterRitualStone.getOwnerNetwork().syphon(getRefreshCost() * totalEffects); if (totalEffects > 0 && consumeRawWill) { WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.DEFAULT, rawWillDrain, true); diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualFelling.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualFelling.java index 072f17c2..2a643910 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualFelling.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualFelling.java @@ -1,9 +1,7 @@ package WayofTime.bloodmagic.ritual; import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.api.saving.SoulNetwork; import WayofTime.bloodmagic.api.ritual.*; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.util.Utils; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityItem; @@ -44,8 +42,7 @@ public class RitualFelling extends Ritual public void performRitual(IMasterRitualStone masterRitualStone) { World world = masterRitualStone.getWorldObj(); - SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner()); - int currentEssence = network.getCurrentEssence(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); BlockPos masterPos = masterRitualStone.getBlockPos(); AreaDescriptor chestRange = getBlockRange(CHEST_RANGE); @@ -53,7 +50,7 @@ public class RitualFelling extends Ritual if (currentEssence < getRefreshCost()) { - network.causeNausea(); + masterRitualStone.getOwnerNetwork().causeNausea(); return; } @@ -74,7 +71,7 @@ public class RitualFelling extends Ritual if (blockPosIterator.hasNext() && tileInventory != null && tileInventory instanceof IInventory) { - network.syphon(getRefreshCost()); + masterRitualStone.getOwnerNetwork().syphon(getRefreshCost()); currentPos = blockPosIterator.next(); placeInInventory(world.getBlockState(currentPos), world, currentPos, chestRange.getContainedPositions(masterPos).get(0)); world.setBlockToAir(currentPos); diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualForsakenSoul.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualForsakenSoul.java index 0659e5d4..7206293c 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualForsakenSoul.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualForsakenSoul.java @@ -19,8 +19,6 @@ import WayofTime.bloodmagic.api.ritual.EnumRuneType; import WayofTime.bloodmagic.api.ritual.IMasterRitualStone; import WayofTime.bloodmagic.api.ritual.Ritual; import WayofTime.bloodmagic.api.ritual.RitualComponent; -import WayofTime.bloodmagic.api.saving.SoulNetwork; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.tile.TileDemonCrystal; public class RitualForsakenSoul extends Ritual @@ -84,13 +82,12 @@ public class RitualForsakenSoul extends Ritual public void performRitual(IMasterRitualStone masterRitualStone) { World world = masterRitualStone.getWorldObj(); - SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner()); - int currentEssence = network.getCurrentEssence(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); BlockPos pos = masterRitualStone.getBlockPos(); if (currentEssence < getRefreshCost()) { - network.causeNausea(); + masterRitualStone.getOwnerNetwork().causeNausea(); return; } @@ -161,7 +158,7 @@ public class RitualForsakenSoul extends Ritual } } - network.syphon(getRefreshCost() * totalEffects); + masterRitualStone.getOwnerNetwork().syphon(getRefreshCost() * totalEffects); } /** diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualFullStomach.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualFullStomach.java index 19c80230..2c898472 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualFullStomach.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualFullStomach.java @@ -1,9 +1,7 @@ package WayofTime.bloodmagic.ritual; import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.api.saving.SoulNetwork; import WayofTime.bloodmagic.api.ritual.*; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemFood; @@ -36,8 +34,7 @@ public class RitualFullStomach extends Ritual public void performRitual(IMasterRitualStone masterRitualStone) { World world = masterRitualStone.getWorldObj(); - SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner()); - int currentEssence = network.getCurrentEssence(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); BlockPos pos = masterRitualStone.getBlockPos(); @@ -91,13 +88,12 @@ public class RitualFullStomach extends Ritual if (totalEffects >= maxEffects) { - network.causeNausea(); - + masterRitualStone.getOwnerNetwork().causeNausea(); break; } } - network.syphon(getRefreshCost() * totalEffects); + masterRitualStone.getOwnerNetwork().syphon(getRefreshCost() * totalEffects); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualGreenGrove.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualGreenGrove.java index 658357ec..8ad1cfdd 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualGreenGrove.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualGreenGrove.java @@ -25,10 +25,8 @@ import WayofTime.bloodmagic.api.ritual.EnumRuneType; import WayofTime.bloodmagic.api.ritual.IMasterRitualStone; import WayofTime.bloodmagic.api.ritual.Ritual; import WayofTime.bloodmagic.api.ritual.RitualComponent; -import WayofTime.bloodmagic.api.saving.SoulNetwork; import WayofTime.bloodmagic.api.soul.DemonWillHolder; import WayofTime.bloodmagic.api.soul.EnumDemonWillType; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler; import WayofTime.bloodmagic.registry.ModPotions; import WayofTime.bloodmagic.util.Utils; @@ -67,12 +65,11 @@ public class RitualGreenGrove extends Ritual { World world = masterRitualStone.getWorldObj(); BlockPos pos = masterRitualStone.getBlockPos(); - SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner()); - int currentEssence = network.getCurrentEssence(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); if (currentEssence < getRefreshCost()) { - network.causeNausea(); + masterRitualStone.getOwnerNetwork().causeNausea(); return; } @@ -234,7 +231,7 @@ public class RitualGreenGrove extends Ritual } } - network.syphon(totalGrowths * getRefreshCost()); + masterRitualStone.getOwnerNetwork().syphon(totalGrowths * getRefreshCost()); } public double getPlantGrowthChanceForWill(double will) diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualHarvest.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualHarvest.java index ff366848..fb5065de 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualHarvest.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualHarvest.java @@ -3,10 +3,8 @@ package WayofTime.bloodmagic.ritual; import WayofTime.bloodmagic.api.BlockStack; import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.iface.IHarvestHandler; -import WayofTime.bloodmagic.api.saving.SoulNetwork; import WayofTime.bloodmagic.api.registry.HarvestRegistry; import WayofTime.bloodmagic.api.ritual.*; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -37,13 +35,12 @@ public class RitualHarvest extends Ritual @Override public void performRitual(IMasterRitualStone masterRitualStone) { - SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner()); World world = masterRitualStone.getWorldObj(); BlockPos pos = masterRitualStone.getBlockPos(); - if (network.getCurrentEssence() < getRefreshCost()) + if (masterRitualStone.getOwnerNetwork().getCurrentEssence() < getRefreshCost()) { - network.causeNausea(); + masterRitualStone.getOwnerNetwork().causeNausea(); return; } @@ -61,7 +58,7 @@ public class RitualHarvest extends Ritual } } - network.syphon(getRefreshCost() * harvested); + masterRitualStone.getOwnerNetwork().syphon(getRefreshCost() * harvested); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualInterdiction.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualInterdiction.java index a94d9f53..a9965c40 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualInterdiction.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualInterdiction.java @@ -1,9 +1,7 @@ package WayofTime.bloodmagic.ritual; import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.api.saving.SoulNetwork; import WayofTime.bloodmagic.api.ritual.*; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.api.util.helper.PlayerHelper; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -27,12 +25,11 @@ public class RitualInterdiction extends Ritual public void performRitual(IMasterRitualStone masterRitualStone) { World world = masterRitualStone.getWorldObj(); - SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner()); - int currentEssence = network.getCurrentEssence(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); if (currentEssence < getRefreshCost()) { - network.causeNausea(); + masterRitualStone.getOwnerNetwork().causeNausea(); return; } diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualJumping.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualJumping.java index f5e2e7b4..a01628eb 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualJumping.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualJumping.java @@ -1,9 +1,7 @@ package WayofTime.bloodmagic.ritual; import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.api.saving.SoulNetwork; import WayofTime.bloodmagic.api.ritual.*; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.util.Utils; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -28,12 +26,11 @@ public class RitualJumping extends Ritual public void performRitual(IMasterRitualStone masterRitualStone) { World world = masterRitualStone.getWorldObj(); - SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner()); - int currentEssence = network.getCurrentEssence(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); if (currentEssence < getRefreshCost()) { - network.causeNausea(); + masterRitualStone.getOwnerNetwork().causeNausea(); return; } @@ -69,7 +66,7 @@ public class RitualJumping extends Ritual } } - network.syphon(getRefreshCost() * totalEffects); + masterRitualStone.getOwnerNetwork().syphon(getRefreshCost() * totalEffects); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualLava.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualLava.java index 11bdb3b6..22e688c9 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualLava.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualLava.java @@ -26,10 +26,8 @@ import WayofTime.bloodmagic.api.ritual.EnumRuneType; import WayofTime.bloodmagic.api.ritual.IMasterRitualStone; import WayofTime.bloodmagic.api.ritual.Ritual; import WayofTime.bloodmagic.api.ritual.RitualComponent; -import WayofTime.bloodmagic.api.saving.SoulNetwork; import WayofTime.bloodmagic.api.soul.DemonWillHolder; import WayofTime.bloodmagic.api.soul.EnumDemonWillType; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler; import WayofTime.bloodmagic.registry.ModPotions; import WayofTime.bloodmagic.util.Utils; @@ -70,13 +68,12 @@ public class RitualLava extends Ritual { timer++; World world = masterRitualStone.getWorldObj(); - SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner()); - int currentEssence = network.getCurrentEssence(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); int lpDrain = 0; if (currentEssence < getRefreshCost()) { - network.causeNausea(); + masterRitualStone.getOwnerNetwork().causeNausea(); return; } @@ -253,7 +250,7 @@ public class RitualLava extends Ritual WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.DEFAULT, rawDrained, true); } - network.syphon(lpDrain); + masterRitualStone.getOwnerNetwork().syphon(lpDrain); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualLivingArmourDowngrade.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualLivingArmourDowngrade.java index 1895d037..8d50c2b2 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualLivingArmourDowngrade.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualLivingArmourDowngrade.java @@ -25,8 +25,6 @@ import WayofTime.bloodmagic.api.ritual.EnumRuneType; import WayofTime.bloodmagic.api.ritual.IMasterRitualStone; import WayofTime.bloodmagic.api.ritual.Ritual; import WayofTime.bloodmagic.api.ritual.RitualComponent; -import WayofTime.bloodmagic.api.saving.SoulNetwork; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.item.armour.ItemLivingArmour; import WayofTime.bloodmagic.livingArmour.LivingArmour; import WayofTime.bloodmagic.util.ChatUtil; @@ -47,12 +45,11 @@ public class RitualLivingArmourDowngrade extends Ritual public void performRitual(IMasterRitualStone masterRitualStone) { World world = masterRitualStone.getWorldObj(); - SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner()); - int currentEssence = network.getCurrentEssence(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); if (currentEssence < getRefreshCost()) { - network.causeNausea(); + masterRitualStone.getOwnerNetwork().causeNausea(); return; } diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualMagnetic.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualMagnetic.java index 9f4ee548..bc9f9fb4 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualMagnetic.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualMagnetic.java @@ -13,7 +13,6 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import net.minecraftforge.common.util.FakePlayer; import net.minecraftforge.oredict.OreDictionary; import WayofTime.bloodmagic.api.BlockStack; import WayofTime.bloodmagic.api.Constants; @@ -22,8 +21,6 @@ import WayofTime.bloodmagic.api.ritual.EnumRuneType; import WayofTime.bloodmagic.api.ritual.IMasterRitualStone; import WayofTime.bloodmagic.api.ritual.Ritual; import WayofTime.bloodmagic.api.ritual.RitualComponent; -import WayofTime.bloodmagic.api.saving.SoulNetwork; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.util.Utils; public class RitualMagnetic extends Ritual @@ -89,12 +86,11 @@ public class RitualMagnetic extends Ritual public void performRitual(IMasterRitualStone masterRitualStone) { World world = masterRitualStone.getWorldObj(); - SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner()); - int currentEssence = network.getCurrentEssence(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); if (currentEssence < getRefreshCost()) { - network.causeNausea(); + masterRitualStone.getOwnerNetwork().causeNausea(); return; } @@ -148,7 +144,7 @@ public class RitualMagnetic extends Ritual if (isBlockOre(checkStack)) { Utils.swapLocations(world, newPos, world, replacement); - network.syphon(getRefreshCost()); + masterRitualStone.getOwnerNetwork().syphon(getRefreshCost()); k++; this.lastPos = new BlockPos(i, j, k); return; diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualMeteor.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualMeteor.java index cc690201..e115111a 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualMeteor.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualMeteor.java @@ -13,9 +13,7 @@ import WayofTime.bloodmagic.api.ritual.EnumRuneType; import WayofTime.bloodmagic.api.ritual.IMasterRitualStone; import WayofTime.bloodmagic.api.ritual.Ritual; import WayofTime.bloodmagic.api.ritual.RitualComponent; -import WayofTime.bloodmagic.api.saving.SoulNetwork; import WayofTime.bloodmagic.api.soul.EnumDemonWillType; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler; import WayofTime.bloodmagic.entity.projectile.EntityMeteor; import WayofTime.bloodmagic.meteor.MeteorRegistry; @@ -36,8 +34,7 @@ public class RitualMeteor extends Ritual public void performRitual(IMasterRitualStone masterRitualStone) { World world = masterRitualStone.getWorldObj(); - SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner()); - int currentEssence = network.getCurrentEssence(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); BlockPos pos = masterRitualStone.getBlockPos(); @@ -71,7 +68,7 @@ public class RitualMeteor extends Ritual if (destructiveWill >= destructiveWillDrain && currentEssence >= 1000000000) { - network.syphon(1000000); + masterRitualStone.getOwnerNetwork().syphon(1000000); } else { masterRitualStone.setActive(false); diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualPlacer.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualPlacer.java index f373eb83..a37bf73d 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualPlacer.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualPlacer.java @@ -1,9 +1,7 @@ package WayofTime.bloodmagic.ritual; import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.api.saving.SoulNetwork; import WayofTime.bloodmagic.api.ritual.*; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import net.minecraft.block.Block; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemBlock; @@ -35,16 +33,15 @@ public class RitualPlacer extends Ritual public void performRitual(IMasterRitualStone masterRitualStone) { World world = masterRitualStone.getWorldObj(); - SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner()); BlockPos masterPos = masterRitualStone.getBlockPos(); AreaDescriptor chestRange = getBlockRange(CHEST_RANGE); TileEntity tileEntity = world.getTileEntity(chestRange.getContainedPositions(masterPos).get(0)); - int currentEssence = network.getCurrentEssence(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); if (currentEssence < getRefreshCost()) { - network.causeNausea(); + masterRitualStone.getOwnerNetwork().causeNausea(); return; } @@ -76,7 +73,7 @@ public class RitualPlacer extends Ritual world.setBlockState(blockPos, Block.getBlockFromItem(iItemHandler.getStackInSlot(inv).getItem()).getStateFromMeta(iItemHandler.getStackInSlot(inv).getItemDamage())); iItemHandler.extractItem(inv, 1, false); tileEntity.markDirty(); - network.syphon(getRefreshCost()); + masterRitualStone.getOwnerNetwork().syphon(getRefreshCost()); } } } @@ -103,7 +100,7 @@ public class RitualPlacer extends Ritual world.setBlockState(blockPos, Block.getBlockFromItem(iInventory.getStackInSlot(inv).getItem()).getStateFromMeta(iInventory.getStackInSlot(inv).getItemDamage())); iInventory.decrStackSize(inv, 1); iInventory.markDirty(); - network.syphon(getRefreshCost()); + masterRitualStone.getOwnerNetwork().syphon(getRefreshCost()); break; } } diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualPump.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualPump.java index 5111d5f9..35c8b981 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualPump.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualPump.java @@ -1,9 +1,7 @@ package WayofTime.bloodmagic.ritual; import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.api.saving.SoulNetwork; import WayofTime.bloodmagic.api.ritual.*; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import net.minecraft.block.BlockLiquid; import net.minecraft.init.Blocks; import net.minecraft.tileentity.TileEntity; @@ -39,13 +37,12 @@ public class RitualPump extends Ritual public void performRitual(IMasterRitualStone masterRitualStone) { World world = masterRitualStone.getWorldObj(); - SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner()); - int currentEssence = network.getCurrentEssence(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); TileEntity tileEntity = world.getTileEntity(masterRitualStone.getBlockPos().up()); if (currentEssence < getRefreshCost()) { - network.causeNausea(); + masterRitualStone.getOwnerNetwork().causeNausea(); return; } @@ -75,7 +72,7 @@ public class RitualPump extends Ritual if (blockPosIterator.hasNext()) { - network.syphon(getRefreshCost()); + masterRitualStone.getOwnerNetwork().syphon(getRefreshCost()); currentPos = blockPosIterator.next(); fluidHandler.fill(EnumFacing.DOWN, fluidHandler.drain(EnumFacing.DOWN, 1000, false), true); world.setBlockState(currentPos, Blocks.STONE.getDefaultState()); diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualRegeneration.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualRegeneration.java index fb03fa79..8a3df796 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualRegeneration.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualRegeneration.java @@ -18,9 +18,7 @@ import WayofTime.bloodmagic.api.ritual.EnumRuneType; import WayofTime.bloodmagic.api.ritual.IMasterRitualStone; import WayofTime.bloodmagic.api.ritual.Ritual; import WayofTime.bloodmagic.api.ritual.RitualComponent; -import WayofTime.bloodmagic.api.saving.SoulNetwork; import WayofTime.bloodmagic.api.soul.EnumDemonWillType; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler; import WayofTime.bloodmagic.util.Utils; @@ -47,12 +45,11 @@ public class RitualRegeneration extends Ritual public void performRitual(IMasterRitualStone masterRitualStone) { World world = masterRitualStone.getWorldObj(); - SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner()); - int currentEssence = network.getCurrentEssence(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); if (currentEssence < getRefreshCost()) { - network.causeNausea(); + masterRitualStone.getOwnerNetwork().causeNausea(); return; } @@ -165,7 +162,7 @@ public class RitualRegeneration extends Ritual WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.CORROSIVE, corrosiveDrain, true); } - network.syphon(totalCost); + masterRitualStone.getOwnerNetwork().syphon(totalCost); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualSpeed.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualSpeed.java index 12caf0bb..e2bccc13 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualSpeed.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualSpeed.java @@ -16,9 +16,7 @@ import WayofTime.bloodmagic.api.ritual.EnumRuneType; import WayofTime.bloodmagic.api.ritual.IMasterRitualStone; import WayofTime.bloodmagic.api.ritual.Ritual; import WayofTime.bloodmagic.api.ritual.RitualComponent; -import WayofTime.bloodmagic.api.saving.SoulNetwork; import WayofTime.bloodmagic.api.soul.EnumDemonWillType; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler; import WayofTime.bloodmagic.util.Utils; @@ -41,12 +39,11 @@ public class RitualSpeed extends Ritual public void performRitual(IMasterRitualStone masterRitualStone) { World world = masterRitualStone.getWorldObj(); - SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner()); - int currentEssence = network.getCurrentEssence(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); if (currentEssence < getRefreshCost()) { - network.causeNausea(); + masterRitualStone.getOwnerNetwork().causeNausea(); return; } diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualSuppression.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualSuppression.java index 99037752..872e7964 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualSuppression.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualSuppression.java @@ -7,13 +7,11 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.api.saving.SoulNetwork; import WayofTime.bloodmagic.api.ritual.AreaDescriptor; import WayofTime.bloodmagic.api.ritual.EnumRuneType; import WayofTime.bloodmagic.api.ritual.IMasterRitualStone; import WayofTime.bloodmagic.api.ritual.Ritual; import WayofTime.bloodmagic.api.ritual.RitualComponent; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.tile.TileSpectralBlock; import WayofTime.bloodmagic.util.Utils; @@ -31,12 +29,11 @@ public class RitualSuppression extends Ritual public void performRitual(IMasterRitualStone masterRitualStone) { World world = masterRitualStone.getWorldObj(); - SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner()); - int currentEssence = network.getCurrentEssence(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); if (currentEssence < getRefreshCost()) { - network.causeNausea(); + masterRitualStone.getOwnerNetwork().causeNausea(); return; } diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualWater.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualWater.java index b359e788..ac8c8112 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualWater.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualWater.java @@ -1,9 +1,7 @@ package WayofTime.bloodmagic.ritual; import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.api.saving.SoulNetwork; import WayofTime.bloodmagic.api.ritual.*; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import net.minecraft.init.Blocks; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -25,12 +23,11 @@ public class RitualWater extends Ritual public void performRitual(IMasterRitualStone masterRitualStone) { World world = masterRitualStone.getWorldObj(); - SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner()); - int currentEssence = network.getCurrentEssence(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); if (currentEssence < getRefreshCost()) { - network.causeNausea(); + masterRitualStone.getOwnerNetwork().causeNausea(); return; } @@ -53,7 +50,7 @@ public class RitualWater extends Ritual } } - network.syphon(getRefreshCost() * totalEffects); + masterRitualStone.getOwnerNetwork().syphon(getRefreshCost() * totalEffects); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualWellOfSuffering.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualWellOfSuffering.java index df2f176f..3e759d55 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualWellOfSuffering.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualWellOfSuffering.java @@ -3,9 +3,7 @@ package WayofTime.bloodmagic.ritual; import WayofTime.bloodmagic.ConfigHandler; import WayofTime.bloodmagic.api.BloodMagicAPI; import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.api.saving.SoulNetwork; import WayofTime.bloodmagic.api.ritual.*; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.tile.TileAltar; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -41,12 +39,11 @@ public class RitualWellOfSuffering extends Ritual public void performRitual(IMasterRitualStone masterRitualStone) { World world = masterRitualStone.getWorldObj(); - SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner()); - int currentEssence = network.getCurrentEssence(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); if (currentEssence < getRefreshCost()) { - network.causeNausea(); + masterRitualStone.getOwnerNetwork().causeNausea(); return; } @@ -122,7 +119,7 @@ public class RitualWellOfSuffering extends Ritual } } - network.syphon(getRefreshCost() * totalEffects); + masterRitualStone.getOwnerNetwork().syphon(getRefreshCost() * totalEffects); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualZephyr.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualZephyr.java index 7f45574d..a4d67d7e 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualZephyr.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualZephyr.java @@ -15,8 +15,6 @@ import WayofTime.bloodmagic.api.ritual.EnumRuneType; import WayofTime.bloodmagic.api.ritual.IMasterRitualStone; import WayofTime.bloodmagic.api.ritual.Ritual; import WayofTime.bloodmagic.api.ritual.RitualComponent; -import WayofTime.bloodmagic.api.saving.SoulNetwork; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.util.Utils; public class RitualZephyr extends Ritual @@ -38,8 +36,7 @@ public class RitualZephyr extends Ritual public void performRitual(IMasterRitualStone masterRitualStone) { World world = masterRitualStone.getWorldObj(); - SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner()); - int currentEssence = network.getCurrentEssence(); + int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); BlockPos masterPos = masterRitualStone.getBlockPos(); AreaDescriptor chestRange = getBlockRange(CHEST_RANGE); TileEntity tileInventory = world.getTileEntity(chestRange.getContainedPositions(masterPos).get(0)); @@ -48,7 +45,7 @@ public class RitualZephyr extends Ritual { if (currentEssence < getRefreshCost()) { - network.causeNausea(); + masterRitualStone.getOwnerNetwork().causeNausea(); return; } @@ -86,7 +83,7 @@ public class RitualZephyr extends Ritual } } - network.syphon(this.getRefreshCost() * Math.min(count, 100)); + masterRitualStone.getOwnerNetwork().syphon(this.getRefreshCost() * Math.min(count, 100)); } } diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileMasterRitualStone.java b/src/main/java/WayofTime/bloodmagic/tile/TileMasterRitualStone.java index f5167081..52e65915 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileMasterRitualStone.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileMasterRitualStone.java @@ -38,6 +38,7 @@ import com.google.common.base.Strings; public class TileMasterRitualStone extends TileTicking implements IMasterRitualStone { private String owner; + private SoulNetwork cachedNetwork; private boolean active; private boolean redstoned; private int activeTime; @@ -84,6 +85,8 @@ public class TileMasterRitualStone extends TileTicking implements IMasterRitualS public void deserialize(NBTTagCompound tag) { owner = tag.getString(Constants.NBT.OWNER_UUID); + if (!Strings.isNullOrEmpty(owner)) + cachedNetwork = NetworkHelper.getSoulNetwork(owner); currentRitual = RitualRegistry.getRitualForId(tag.getString(Constants.NBT.CURRENT_RITUAL)); if (currentRitual != null) { @@ -140,7 +143,6 @@ public class TileMasterRitualStone extends TileTicking implements IMasterRitualS activationCrystal = NBTHelper.checkNBT(activationCrystal); String crystalOwner = activationCrystal.getTagCompound().getString(Constants.NBT.OWNER_UUID); -// crystalOwner = PlayerHelper.getUUIDFromPlayer(activator).toString(); //Temporary patch job if (!Strings.isNullOrEmpty(crystalOwner) && ritual != null) { @@ -179,6 +181,7 @@ public class TileMasterRitualStone extends TileTicking implements IMasterRitualS this.active = true; this.owner = crystalOwner; + this.cachedNetwork = network; this.currentRitual = ritual; notifyUpdate(); @@ -281,6 +284,12 @@ public class TileMasterRitualStone extends TileTicking implements IMasterRitualS return owner; } + @Override + public SoulNetwork getOwnerNetwork() + { + return cachedNetwork; + } + @Override public World getWorld() { From 55949109e1ba3d99c20aaa7a94ec5794348096a3 Mon Sep 17 00:00:00 2001 From: neconeco2 Date: Tue, 14 Feb 2017 05:12:17 +0900 Subject: [PATCH 25/82] Update ja_JP.lang (#1049) --- .../assets/bloodmagic/lang/ja_JP.lang | 61 ++++++++++++++++--- 1 file changed, 54 insertions(+), 7 deletions(-) diff --git a/src/main/resources/assets/bloodmagic/lang/ja_JP.lang b/src/main/resources/assets/bloodmagic/lang/ja_JP.lang index a09ef5ed..981ebb01 100644 --- a/src/main/resources/assets/bloodmagic/lang/ja_JP.lang +++ b/src/main/resources/assets/bloodmagic/lang/ja_JP.lang @@ -114,6 +114,10 @@ item.BloodMagic.demonCrystal.crystalVengeful.name=報復性ウィル結晶 item.BloodMagic.demonCrystal.crystalSteadfast.name=不活性ウィル結晶 item.BloodMagic.monsterSoul.base.name=デーモニックウィル +item.BloodMagic.monsterSoul.corrosive.name=腐食性デーモニックウィル +item.BloodMagic.monsterSoul.destructive.name=破壊性デーモニックウィル +item.BloodMagic.monsterSoul.vengeful.name=報復性デーモニックウィル +item.BloodMagic.monsterSoul.steadfast.name=不活性デーモニックウィル item.BloodMagic.sigil.air.name=風の印章 item.BloodMagic.sigil.bloodLight.name=血のランプの印章 @@ -178,6 +182,7 @@ item.BloodMagic.itemFilter.exact.name=精密アイテムフィルタ item.BloodMagic.itemFilter.ignoreNBT.name=NBTタグフィルタ item.BloodMagic.itemFilter.modItems.name=MODアイテムフィルタ item.BloodMagic.itemFilter.oreDict.name=鉱石辞書フィルタ +item.BloodMagic.fluidFilter.exact.name=液体フィルタ item.BloodMagic.experienceTome.name=ペリティアの書 item.BloodMagic.sanguineBook.name=インスペクトリス・スカンダルム @@ -376,6 +381,7 @@ tooltip.BloodMagic.orb.owner=以下による追加要素: %s tooltip.BloodMagic.currentOwner=現在の所有者: %s tooltip.BloodMagic.currentTier=祭壇のグレード: %d tooltip.BloodMagic.config.disabled=現在configにより無効化されています +tooltip.BloodMagic.tier=グレード %d tooltip.BloodMagic.activated=アクティブ tooltip.BloodMagic.deactivated=非アクティブ @@ -393,7 +399,7 @@ tooltip.BloodMagic.sigil.divination.currentInversion=現在の反転度: %d tooltip.BloodMagic.sigil.divination.currentBonus=結合度: +%d%% tooltip.BloodMagic.sigil.water.desc=&o無限の水はいかが? tooltip.BloodMagic.sigil.lava.desc=&o高温注意!食べられません -tooltip.BloodMagic.sigil.void.desc=&oクイックルワイパー(R)より良い! +tooltip.BloodMagic.sigil.void.desc=&oクイックルワイパー(R)より素晴らしい! tooltip.BloodMagic.sigil.greenGrove.desc=&o環境にやさしい tooltip.BloodMagic.sigil.magnetism.desc=&o私は引き付ける性格です tooltip.BloodMagic.sigil.suppression.desc=&o素晴らしい念動力だ... @@ -492,7 +498,7 @@ tooltip.BloodMagic.livingArmour.upgrade.sprintAttack=チャージストライク tooltip.BloodMagic.livingArmour.upgrade.criticalStrike=トゥルーストライク tooltip.BloodMagic.livingArmour.upgrade.elytra=エリトラ tooltip.BloodMagic.livingArmour.upgrade.nightSight=夜間技能 -tooltip.BloodMagic.livingArmour.upgrade.repair=修理 +tooltip.BloodMagic.livingArmour.upgrade.repair=補修 tooltip.BloodMagic.livingArmour.upgrade.slowness=引きずる足 @@ -501,8 +507,9 @@ tooltip.BloodMagic.livingArmour.upgrade.slippery=摩擦力低下 tooltip.BloodMagic.livingArmour.upgrade.battleHunger=飢餓の戦い tooltip.BloodMagic.livingArmour.upgrade.quenched=抑制 tooltip.BloodMagic.livingArmour.upgrade.meleeDecrease=鈍い刃 -tooltip.BloodMagic.livingArmour.upgrade.digSlowdown=脆くなったツルハシ +tooltip.BloodMagic.livingArmour.upgrade.digSlowdown=朽ちたツルハシ tooltip.BloodMagic.livingArmour.upgrade.stormTrooper=突撃兵 +tooltip.BloodMagic.livingArmour.upgrade.slowHeal=病気 tooltip.BloodMagic.livingArmour.upgrade.level=%s (Lv %d) tooltip.BloodMagic.livingArmour.upgrade.progress=%s (%d/100) tooltip.BloodMagic.livingArmour.upgrade.points=&6強化ポイント: %s / %s @@ -526,6 +533,8 @@ tooltip.BloodMagic.itemFilter.ignoreNBT=NBTタグでフィルタします tooltip.BloodMagic.itemFilter.modItems=特定MODのアイテムをフィルタします tooltip.BloodMagic.itemFilter.oreDict=鉱石辞書を用いてフィルタします +tooltip.BloodMagic.itemFilter.exact=液体フィルタ 入力/出力 + tooltip.BloodMagic.fluid.type=液体を格納する tooltip.BloodMagic.fluid.amount=量 tooltip.BloodMagic.fluid.capacity=最大容量 @@ -545,7 +554,7 @@ tooltip.BloodMagic.currentBaseType.destructive=破壊性 tooltip.BloodMagic.currentBaseType.vengeful=報復性 tooltip.BloodMagic.currentBaseType.steadfast=不活性 -tooltip.BloodMagic.experienceTome=経験値を貯蔵するのに用いる本 +tooltip.BloodMagic.experienceTome=経験値を貯蔵するために用いる本 tooltip.BloodMagic.experienceTome.exp=Exp: %0.3f tooltip.BloodMagic.experienceTome.expLevel=レベル: %d @@ -558,7 +567,7 @@ tooltip.BloodMagic.potion.uses=%d 回使用可能 tooltip.BloodMagic.book.shifting=紋様が... &oShiftして... -tooltip.BloodMagic.willGauge=大気中のデーモンウィルを測定できる奇妙な装置。 +tooltip.BloodMagic.willGauge=大気中のデーモンウィルを測定するための奇妙な装置。 # Ritual ritual.BloodMagic.blockRange.tooBig=指定されたブロック範囲が広すぎます!最大%sブロックの範囲内である必要があります。 @@ -601,24 +610,52 @@ ritual.BloodMagic.fellingRitual=木こりの粉砕 ritual.BloodMagic.pumpRitual=サイフォンの讃歌 ritual.BloodMagic.altarBuilderRitual=高位祭壇構築儀式 ritual.BloodMagic.portalRitual=組み込みゲート -ritual.BloodMagic.downgradeRitual=弱化の儀式 +ritual.BloodMagic.downgradeRitual=重き魂の懺悔 ritual.BloodMagic.waterRitual.info=マスター儀式石から水源を生成します。 ritual.BloodMagic.lavaRitual.info=マスター儀式石から溶岩源を生成します。 -ritual.BloodMagic.greenGroveRitual.info=エリア内の作物を育成させます。 +ritual.BloodMagic.lavaRitual.default.info=(原生) 溶岩の生成LPコストを下げ、リンクさせた容器に溶岩を注ぎ込みます。 +ritual.BloodMagic.lavaRitual.corrosive.info=(腐食性) 範囲内にいる生物のうち、火炎耐性を持つものに深刻なダメージを与えます。 +ritual.BloodMagic.lavaRitual.destructive.info=(破壊性) 総ウィル量に応じて溶岩の設置範囲が拡大します。 +ritual.BloodMagic.lavaRitual.vengeful.info=(報復性) 範囲内の生物に対して火炎への抵抗を付与します。 +ritual.BloodMagic.lavaRitual.steadfast.info=(不活性) 指定した範囲内にいるプレイヤーに対して火炎耐性を付与します。 + +ritual.BloodMagic.greenGroveRitual.info=エリア内の作物を成長させます。 ritual.BloodMagic.jumpRitual.info=空中にはね飛ぶ効果を付与します。 ritual.BloodMagic.wellOfSufferingRitual.info=生物にダメージを与えるエリアを生成し、付近の血の祭壇にLPを供給します。 ritual.BloodMagic.featheredKnifeRitual.info=プレイヤーにダメージを与えるエリアを生成し、付近後の祭壇にLPを供給します。 ritual.BloodMagic.regenerationRitual.info=エリア内にHPが減少している生物がいた場合、再生能力を付与します。 +ritual.BloodMagic.regenerationRitual.default.info=(原生) +ritual.BloodMagic.regenerationRitual.corrosive.info=(腐食性) 範囲内にいるプレイヤー以外の生物から生命力を奪い、プレイヤーを治癒します。 +ritual.BloodMagic.regenerationRitual.destructive.info=(破壊性) +ritual.BloodMagic.regenerationRitual.vengeful.info=(報復性) +ritual.BloodMagic.regenerationRitual.steadfast.info=(不活性) ritual.BloodMagic.harvestRitual.info=エリア内の作物を刈り取り、種などの収穫物があった場合は植え直します。 ritual.BloodMagic.magneticRitual.info=地中から鉱石を掘り起こし、指定エリアに並べます。 ritual.BloodMagic.crushingRitual.info=指定エリアのブロックを破壊し、収集物をリンクしているチェストに格納します。 ritual.BloodMagic.crushingRitual.destructive.info=(破壊性) ブロックを強制的に破壊します:破壊した全てのブロックは幸運IIIの効果が適用されています。 ritual.BloodMagic.crushingRitual.steadfast.info=(不活性) 全てのブロックはシルクタッチによって破壊されます。幸運の効果は無視されます。 ritual.BloodMagic.crushingRitual.corrosive.info=(腐食性) 全てのブロックは切削液で破壊されます。シルクタッチの効果は無視されます。 +ritual.BloodMagic.crushingRitual.vengeful.info=(報復性) 可能であればインベントリの圧縮を試みます。1回の動作で一度の圧縮しか行われません。 +ritual.BloodMagic.crushingRitual.default.info=(原生) 総ウィル量に応じて、儀式の速度が向上します。 ritual.BloodMagic.greenGroveRitual.corrosive.info=(腐食性) 作物の周囲にいる生物は攻撃を受け、生命力が作物に吸収される。 ritual.BloodMagic.greenGroveRitual.default.info=(原生) オーラ中のウィル量に応じて全ての儀式の作動速度が向上します。 +ritual.BloodMagic.greenGroveRitual.vengeful.info=(報復性) Tick当たりの成長の成功率が増加します。 ritual.BloodMagic.greenGroveRitual.steadfast.info=(不活性) 種を植え直し、潅水範囲にあるブロックを湿らせる。 +ritual.BloodMagic.greenGroveRitual.destructive.info=(破壊性) 総ウィル量に応じて、成長させる範囲が拡大します。 +ritual.BloodMagic.featheredKnifeRitual.default.info=(原生) オーラ中の総ウィル量に応じて、儀式の速度が向上します。 +ritual.BloodMagic.featheredKnifeRitual.destructive.info=(破壊性) オーラ中の総ウィル量に応じて、儀式による収集量を増やします。 +ritual.BloodMagic.featheredKnifeRitual.vengeful.info=(報復性) 犠牲にするHPの最低値を10%%までにします。所有者が不活性が有効にしていると上書きされます。 +ritual.BloodMagic.featheredKnifeRitual.corrosive.info=(腐食性) お香による効果増大を有効にします。 +ritual.BloodMagic.featheredKnifeRitual.steadfast.info=(不活性) 犠牲にするHPの最低値を30%%から70%%にします。 +ritual.BloodMagic.speedRitual.default.info=(原生) オーラ中の総ウィル量に応じて、射出速度が上昇します。 +ritual.BloodMagic.speedRitual.vengeful.info=(報復性) 大人の生物やプレイヤーを移動させます。破壊性も利用していた場合はプレイヤーを移動させます。 +ritual.BloodMagic.speedRitual.destructive.info=(破壊性) 子供の生物やプレイヤーを移動させます。報復性も利用していた場合はプレイヤーを移動させます。 +ritual.BloodMagic.animalGrowthRitual.vengeful.info=(報復性) 大人が再び繁殖するまでの時間を短縮すます。 +ritual.BloodMagic.animalGrowthRitual.steadfast.info=(不活性) 関連付けられたチェスト内のアイテムを用いて、エリア内の大人を自動的に繁殖させます。 +ritual.BloodMagic.animalGrowthRitual.default.info=(原生) オーラ中の総ウィル量に応じて、儀式の速度が向上します。 +ritual.BloodMagic.animalGrowthRitual.destructive.info=(破壊性) 長い間繁殖を行っていない大人は、MOBに向かっていき爆発する。 +ritual.BloodMagic.animalGrowthRitual.corrosive.info=(腐食性) Unimplemented. ritual.BloodMagic.fullStomachRitual.info=リンクしているチェスト内にある食料を、満腹でないプレイヤーに自動的に供給します。 ritual.BloodMagic.interdictionRitual.info=マスター儀式石の一定エリア内の生物を排除して侵入できないようにします。 @@ -641,7 +678,10 @@ ritual.BloodMagic.meteorRitual.info=範囲内のアイテムを消費し、空 ritual.BloodMagic.waterRitual.waterRange.info=(水) 設定したエリアに水源を生成させます。 ritual.BloodMagic.lavaRitual.lavaRange.info=(溶岩) 設定したエリアに溶岩源を生成させます。 +ritual.BloodMagic.lavaRitual.lavaTank.info=(原生) 儀式によって生成した溶岩を入れるタンク。 ritual.BloodMagic.lavaRitual.fireFuse.info=(報復性) 範囲内のエンティティは炎によって苦しめられます。 +ritual.BloodMagic.lavaRitual.fireResist.info=(不活性) 範囲内のプレイヤーは火炎耐性の効果を与えます。 +ritual.BloodMagic.lavaRitual.fireDamage.info=(腐食性) 範囲内にいる火炎耐性を持つ生物はウィル量に比例したダメージを受けます。 ritual.BloodMagic.greenGroveRitual.growing.info=(成長) 設定したエリア内の植物の成長を促進させます。 ritual.BloodMagic.greenGroveRitual.leech.info=(腐食性) 作物の成長のために周辺の生物は生命力を吸収される。 ritual.BloodMagic.greenGroveRitual.hydrate.info=(不活性) 範囲内の耕したブロックを湿らせ、エリア周辺にある種子を植え付ける。 @@ -651,6 +691,7 @@ ritual.BloodMagic.wellOfSufferingRitual.damage.info=(ダメージ) 儀式によ ritual.BloodMagic.featheredKnifeRitual.altar.info=(祭壇)儀式が血の祭壇を検索するエリアを指定します。変更することにより検索エリアを拡大したり特定の領域に制限したりすることが可能です。 ritual.BloodMagic.featheredKnifeRitual.damage.info=(ダメージ) 儀式によってプレイヤーが継続ダメージを受けるエリアを設定します。この範囲内に居るプレイヤーは死ぬ一歩手前まで徐々にダメージを受け続ける。 ritual.BloodMagic.regenerationRitual.heal.info=(回復) 範囲内に居る生物は再生能力の効果を与えます。 +ritual.BloodMagic.regenerationRitual.vampire.info=(吸血主義) 範囲内にいる生物はプレイヤーの回復のために生命力が削られていきます。 ritual.BloodMagic.harvestRitual.harvestRange.info=(収穫) 範囲内の植物を収穫します。 ritual.BloodMagic.magneticRitual.placementRange.info=(配置) 儀式はこのエリアに手に入れた鉱石を配置します。 ritual.BloodMagic.crushingRitual.crushingRange.info=(粉砕) 儀式はこのエリア内のブロックを破壊して入手します。 @@ -665,6 +706,7 @@ ritual.BloodMagic.expulsionRitual.expulsionRange.info=(追放) ritual.BloodMagic.zephyrRitual.zephyrRange.info=(吸引) 設定範囲内のアイテムが収集され、リンクされているチェストに収納されます。 ritual.BloodMagic.zephyrRitual.chest.info=(チェスト) 儀式が収集したアイテムを収納するためのチェストの場所。 ritual.BloodMagic.animalGrowthRitual.growing.info=(成長) 範囲内の動物がとても早く成長します。 +ritual.BloodMagic.animalGrowthRitual.chest.info=(チェスト) 繁殖させるための適切な餌を入れたチェストの場所。 ritual.BloodMagic.forsakenSoulRitual.crystal.info=(結晶) 儀式によって生物が死亡した際に、この範囲内のデーモンウィル結晶の成長が促進します。 ritual.BloodMagic.forsakenSoulRitual.damage.info=(ダメージ) この範囲内の生物は徐々にダメージを受け、死亡した際のウィルがクリスタルの成長に利用されます。 ritual.BloodMagic.crystalHarvestRitual.crystal.info=(結晶) 析出した全てのデーモンウィル結晶株を破壊して単結晶の結晶にします。結晶株が1つだけになった場合は破壊しない。 @@ -688,6 +730,10 @@ ritual.BloodMagic.downgradeRitual.dialogue.dulledBlade.100=もし死を超越し ritual.BloodMagic.downgradeRitual.dialogue.dulledBlade.300=ただし、私はお前に何かしらの代償を要求しよう:お前の物理的な戦闘能力だ。 ritual.BloodMagic.downgradeRitual.dialogue.dulledBlade.500=これに契約することで、もはやお前は確実に武器を振るえなくなり、以前に振るえていたダメージのほんの僅かしか与えることができなくなる。 ritual.BloodMagic.downgradeRitual.dialogue.dulledBlade.700=さあ、お前の選択次第だ:祭壇に跪くか、己の剣を執り続けるのか? +ritual.BloodMagic.downgradeRitual.dialogue.slowHeal.1=用心したまえ、人間よ。お前の地盤は崩れ行くことになるだろう。 +ritual.BloodMagic.downgradeRitual.dialogue.slowHeal.100=私は我が同輩たちとは異なる。お前の生命を扱う魔術師として、お前の望みを叶えるための恐ろしい契約を提供しよう。 +ritual.BloodMagic.downgradeRitual.dialogue.slowHeal.300=お前の怪我はいずれ癒えることだろう。しかし私の”加護”を受けし者はそれが酷くゆったりとしたものになる。戦場で傷を負えばお前をさらに悩ませることだろう。 +ritual.BloodMagic.downgradeRitual.dialogue.slowHeal.500=挑む前によくよく考えたまえ。ひとたび空にしてしまった杯を、再び満たすことは不可能なのだから... # Chat chat.BloodMagic.altarMaker.setTier=グレードを設定: %d @@ -812,6 +858,7 @@ jei.BloodMagic.recipe.binding=錬金術魔法陣(結合) jei.BloodMagic.recipe.alchemyArrayCrafting=錬金術魔法陣 jei.BloodMagic.recipe.soulForge=業火のかまど jei.BloodMagic.recipe.alchemyTable=錬金術テーブル +jei.BloodMagic.recipe.armourDowngrade=懺悔 (儀式) jei.BloodMagic.recipe.requiredLP=LP: %d jei.BloodMagic.recipe.requiredTier=グレード: %d jei.BloodMagic.recipe.consumptionRate=消費率: %d LP/t From 2d02bcf37b2dd98b1e60ab4440d65911c2c76cc1 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Mon, 13 Feb 2017 12:42:27 -0800 Subject: [PATCH 26/82] Fixed JEI localization (#1048) --- .../WayofTime/bloodmagic/compat/jei/BloodMagicPlugin.java | 4 ++-- .../jei/alchemyArray/AlchemyArrayCraftingCategory.java | 2 +- .../compat/jei/alchemyTable/AlchemyTableRecipeCategory.java | 2 +- .../compat/jei/alchemyTable/AlchemyTableRecipeJEI.java | 4 ++-- .../bloodmagic/compat/jei/altar/AltarRecipeCategory.java | 2 +- .../bloodmagic/compat/jei/altar/AltarRecipeJEI.java | 6 +++--- .../jei/armourDowngrade/ArmourDowngradeRecipeCategory.java | 2 +- .../compat/jei/binding/BindingRecipeCategory.java | 2 +- .../compat/jei/forge/TartaricForgeRecipeCategory.java | 2 +- .../bloodmagic/compat/jei/forge/TartaricForgeRecipeJEI.java | 4 ++-- .../bloodmagic/compat/jei/orb/ShapedOrbRecipeJEI.java | 2 +- .../bloodmagic/compat/jei/orb/ShapelessOrbRecipeJEI.java | 2 +- src/main/resources/assets/bloodmagic/lang/en_US.lang | 5 ----- 13 files changed, 17 insertions(+), 22 deletions(-) diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/BloodMagicPlugin.java b/src/main/java/WayofTime/bloodmagic/compat/jei/BloodMagicPlugin.java index 21cfd340..07ba2d0c 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/BloodMagicPlugin.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/BloodMagicPlugin.java @@ -57,8 +57,8 @@ public class BloodMagicPlugin extends BlankModPlugin registry.addRecipes(AlchemyTableRecipeMaker.getRecipes()); registry.addRecipes(ArmourDowngradeRecipeMaker.getRecipes()); - registry.addDescription(new ItemStack(ModItems.ALTAR_MAKER), "jei.bloodmagic.desc.altarBuilder"); - registry.addDescription(new ItemStack(ModItems.MONSTER_SOUL), "jei.bloodmagic.desc.demonicWill"); + registry.addDescription(new ItemStack(ModItems.ALTAR_MAKER), "jei.BloodMagic.desc.altarBuilder"); + registry.addDescription(new ItemStack(ModItems.MONSTER_SOUL), "jei.BloodMagic.desc.demonicWill"); jeiHelper.getItemBlacklist().addItemToBlacklist(new ItemStack(ModBlocks.BLOOD_LIGHT)); jeiHelper.getItemBlacklist().addItemToBlacklist(new ItemStack(ModBlocks.SPECTRAL_BLOCK)); diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyArray/AlchemyArrayCraftingCategory.java b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyArray/AlchemyArrayCraftingCategory.java index c2ffb1b1..7a2f6383 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyArray/AlchemyArrayCraftingCategory.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyArray/AlchemyArrayCraftingCategory.java @@ -24,7 +24,7 @@ public class AlchemyArrayCraftingCategory implements IRecipeCategory @Nonnull private final IDrawable background = BloodMagicPlugin.jeiHelper.getGuiHelper().createDrawable(new ResourceLocation(Constants.Mod.DOMAIN + "gui/jei/binding.png"), 0, 0, 100, 30); @Nonnull - private final String localizedName = TextHelper.localize("jei.bloodmagic.recipe.alchemyArrayCrafting"); + private final String localizedName = TextHelper.localize("jei.BloodMagic.recipe.alchemyArrayCrafting"); @Nonnull @Override diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeCategory.java b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeCategory.java index 5cbaaf8a..549575c8 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeCategory.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeCategory.java @@ -27,7 +27,7 @@ public class AlchemyTableRecipeCategory implements IRecipeCategory @Nonnull private final IDrawable background = BloodMagicPlugin.jeiHelper.getGuiHelper().createDrawable(new ResourceLocation(Constants.Mod.DOMAIN + "gui/jei/alchemyTable.png"), 0, 0, 118, 40); @Nonnull - private final String localizedName = TextHelper.localize("jei.bloodmagic.recipe.alchemyTable"); + private final String localizedName = TextHelper.localize("jei.BloodMagic.recipe.alchemyTable"); @Nonnull private final ICraftingGridHelper craftingGridHelper; diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeJEI.java b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeJEI.java index 9c258297..17ca6704 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeJEI.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeJEI.java @@ -34,8 +34,8 @@ public class AlchemyTableRecipeJEI extends BlankRecipeWrapper ArrayList ret = new ArrayList(); if (mouseX >= 58 && mouseX <= 78 && mouseY >= 21 && mouseY <= 34) { - ret.add(TextHelper.localize("jei.bloodmagic.recipe.lpDrained", recipe.getLpDrained())); - ret.add(TextHelper.localize("jei.bloodmagic.recipe.ticksRequired", recipe.getTicksRequired())); + ret.add(TextHelper.localize("jei.BloodMagic.recipe.lpDrained", recipe.getLpDrained())); + ret.add(TextHelper.localize("jei.BloodMagic.recipe.ticksRequired", recipe.getTicksRequired())); } return ret; } diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeCategory.java b/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeCategory.java index 7bf9597b..320a3cd1 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeCategory.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeCategory.java @@ -25,7 +25,7 @@ public class AltarRecipeCategory implements IRecipeCategory @Nonnull private final IDrawable background = BloodMagicPlugin.jeiHelper.getGuiHelper().createDrawable(new ResourceLocation(Constants.Mod.DOMAIN + "gui/jei/altar.png"), 3, 4, 155, 65); @Nonnull - private final String localizedName = TextHelper.localize("jei.bloodmagic.recipe.altar"); + private final String localizedName = TextHelper.localize("jei.BloodMagic.recipe.altar"); @Nonnull @Override diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeJEI.java b/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeJEI.java index 22558ba6..41f6cc5e 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeJEI.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeJEI.java @@ -29,7 +29,7 @@ public class AltarRecipeJEI extends BlankRecipeWrapper this.input = input; this.output = output; - this.infoString = new String[] { TextHelper.localize("jei.bloodmagic.recipe.requiredTier", NumeralHelper.toRoman(tier)), TextHelper.localize("jei.bloodmagic.recipe.requiredLP", requiredLP) }; + this.infoString = new String[] { TextHelper.localize("jei.BloodMagic.recipe.requiredTier", NumeralHelper.toRoman(tier)), TextHelper.localize("jei.BloodMagic.recipe.requiredLP", requiredLP) }; this.consumptionRate = consumptionRate; this.drainRate = drainRate; } @@ -46,8 +46,8 @@ public class AltarRecipeJEI extends BlankRecipeWrapper ArrayList ret = new ArrayList(); if (mouseX >= 13 && mouseX <= 64 && mouseY >= 27 && mouseY <= 58) { - ret.add(TextHelper.localize("jei.bloodmagic.recipe.consumptionRate", consumptionRate)); - ret.add(TextHelper.localize("jei.bloodmagic.recipe.drainRate", drainRate)); + ret.add(TextHelper.localize("jei.BloodMagic.recipe.consumptionRate", consumptionRate)); + ret.add(TextHelper.localize("jei.BloodMagic.recipe.drainRate", drainRate)); } return ret; } diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeCategory.java b/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeCategory.java index b264427c..167f9826 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeCategory.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeCategory.java @@ -26,7 +26,7 @@ public class ArmourDowngradeRecipeCategory implements IRecipeCategory @Nonnull private final IDrawable background = BloodMagicPlugin.jeiHelper.getGuiHelper().createDrawable(new ResourceLocation(Constants.Mod.DOMAIN + "gui/jei/alchemyTable.png"), 0, 0, 118, 40); @Nonnull - private final String localizedName = TextHelper.localize("jei.bloodmagic.recipe.armourDowngrade"); + private final String localizedName = TextHelper.localize("jei.BloodMagic.recipe.armourDowngrade"); @Nonnull private final ICraftingGridHelper craftingGridHelper; diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeCategory.java b/src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeCategory.java index 1479d45d..b1be8a01 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeCategory.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeCategory.java @@ -24,7 +24,7 @@ public class BindingRecipeCategory implements IRecipeCategory @Nonnull private final IDrawable background = BloodMagicPlugin.jeiHelper.getGuiHelper().createDrawable(new ResourceLocation(Constants.Mod.DOMAIN + "gui/jei/binding.png"), 0, 0, 100, 30); @Nonnull - private final String localizedName = TextHelper.localize("jei.bloodmagic.recipe.binding"); + private final String localizedName = TextHelper.localize("jei.BloodMagic.recipe.binding"); @Nonnull @Override diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeCategory.java b/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeCategory.java index 2b85ba1f..8ba9e9fa 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeCategory.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeCategory.java @@ -28,7 +28,7 @@ public class TartaricForgeRecipeCategory implements IRecipeCategory @Nonnull private final IDrawable background = BloodMagicPlugin.jeiHelper.getGuiHelper().createDrawable(new ResourceLocation(Constants.Mod.DOMAIN + "gui/jei/soulForge.png"), 0, 0, 100, 40); @Nonnull - private final String localizedName = TextHelper.localize("jei.bloodmagic.recipe.soulForge"); + private final String localizedName = TextHelper.localize("jei.BloodMagic.recipe.soulForge"); @Nonnull private final ICraftingGridHelper craftingGridHelper; diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeJEI.java b/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeJEI.java index 82133b75..5e651800 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeJEI.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeJEI.java @@ -49,8 +49,8 @@ public class TartaricForgeRecipeJEI extends BlankRecipeWrapper ArrayList ret = new ArrayList(); if (mouseX >= 40 && mouseX <= 60 && mouseY >= 21 && mouseY <= 34) { - ret.add(TextHelper.localize("jei.bloodmagic.recipe.minimumSouls", recipe.getMinimumSouls())); - ret.add(TextHelper.localize("jei.bloodmagic.recipe.soulsDrained", recipe.getSoulsDrained())); + ret.add(TextHelper.localize("jei.BloodMagic.recipe.minimumSouls", recipe.getMinimumSouls())); + ret.add(TextHelper.localize("jei.BloodMagic.recipe.soulsDrained", recipe.getSoulsDrained())); return ret; } return null; diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/orb/ShapedOrbRecipeJEI.java b/src/main/java/WayofTime/bloodmagic/compat/jei/orb/ShapedOrbRecipeJEI.java index acb6d5fe..c904317c 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/orb/ShapedOrbRecipeJEI.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/orb/ShapedOrbRecipeJEI.java @@ -62,7 +62,7 @@ public class ShapedOrbRecipeJEI extends BlankRecipeWrapper implements IShapedCra @Override public void drawInfo(@Nonnull Minecraft minecraft, int recipeWidth, int recipeHeight, int mouseX, int mouseY) { - String draw = TextHelper.localize("jei.bloodmagic.recipe.requiredTier", NumeralHelper.toRoman(tier)); + String draw = TextHelper.localize("jei.BloodMagic.recipe.requiredTier", NumeralHelper.toRoman(tier)); minecraft.fontRendererObj.drawString(draw, 72 - minecraft.fontRendererObj.getStringWidth(draw) / 2, 10, Color.gray.getRGB()); } } \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/orb/ShapelessOrbRecipeJEI.java b/src/main/java/WayofTime/bloodmagic/compat/jei/orb/ShapelessOrbRecipeJEI.java index dd9eccc5..4f8d3c62 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/orb/ShapelessOrbRecipeJEI.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/orb/ShapelessOrbRecipeJEI.java @@ -52,7 +52,7 @@ public class ShapelessOrbRecipeJEI extends BlankRecipeWrapper implements ICrafti @Override public void drawInfo(@Nonnull Minecraft minecraft, int recipeWidth, int recipeHeight, int mouseX, int mouseY) { - String draw = TextHelper.localize("jei.bloodmagic.recipe.requiredTier", NumeralHelper.toRoman(tier)); + String draw = TextHelper.localize("jei.BloodMagic.recipe.requiredTier", NumeralHelper.toRoman(tier)); minecraft.fontRendererObj.drawString(draw, 72 - minecraft.fontRendererObj.getStringWidth(draw) / 2, 10, Color.gray.getRGB()); } } diff --git a/src/main/resources/assets/bloodmagic/lang/en_US.lang b/src/main/resources/assets/bloodmagic/lang/en_US.lang index 3f4412d1..5460ac73 100644 --- a/src/main/resources/assets/bloodmagic/lang/en_US.lang +++ b/src/main/resources/assets/bloodmagic/lang/en_US.lang @@ -780,11 +780,6 @@ chat.BloodMagic.mimic.potionSpawnRadius.down=Potion spawning radius has been dec entity.BloodMagic.SentientSpecter.name=Sentient Specter entity.BloodMagic.Mimic.name=Mimic -# sekrit - -secret.BloodMagic.bread.bloody=&r&cBloody Bread -secret.BloodMagic.bread.bloody.desc=Only for &odire &r&7emergencies. - # Commands commands.error.arg.invalid=Invalid arguments commands.error.arg.missing=Not enough arguments From e092161a3912887fbc60cc3c2409d20cd0091ee7 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Mon, 13 Feb 2017 12:57:41 -0800 Subject: [PATCH 27/82] Downgrade tomes are now know that they're downgrades Also Disoriented is localized finally --- .../WayofTime/bloodmagic/item/ItemUpgradeTome.java | 12 ++++++++++++ src/main/resources/assets/bloodmagic/lang/en_US.lang | 5 ++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemUpgradeTome.java b/src/main/java/WayofTime/bloodmagic/item/ItemUpgradeTome.java index 63c83d4c..d9eac442 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemUpgradeTome.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemUpgradeTome.java @@ -73,6 +73,18 @@ public class ItemUpgradeTome extends Item implements IVariantProvider return super.onItemRightClick(stack, world, player, hand); } + @Override + public String getUnlocalizedName(ItemStack stack) { + if (!stack.hasTagCompound()) + return super.getUnlocalizedName(stack); + + LivingArmourUpgrade upgrade = LivingUpgrades.getUpgrade(stack); + if (upgrade != null && upgrade.isDowngrade()) + return "item." + Constants.Mod.MODID + ".downgradeTome"; + + return super.getUnlocalizedName(stack); + } + @Override @SideOnly(Side.CLIENT) public void getSubItems(Item id, CreativeTabs creativeTab, List list) diff --git a/src/main/resources/assets/bloodmagic/lang/en_US.lang b/src/main/resources/assets/bloodmagic/lang/en_US.lang index 5460ac73..dc5012a0 100644 --- a/src/main/resources/assets/bloodmagic/lang/en_US.lang +++ b/src/main/resources/assets/bloodmagic/lang/en_US.lang @@ -1,6 +1,6 @@ #Creative Tab itemGroup.BloodMagic.creativeTab=Blood Magic -itemGroup.BloodMagic.creativeTabTome=Blood Magic Upgrade Tomes +itemGroup.BloodMagic.creativeTabTome=Blood Magic | Tomes #Items item.BloodMagic.activationCrystal.weak.name=Weak Activation Crystal @@ -162,6 +162,7 @@ item.BloodMagic.ritualReader.name=Ritual Tinkerer item.BloodMagic.arcaneAshes.name=Arcane Ashes item.BloodMagic.upgradeTome.name=Living Armour Upgrade Tome +item.BloodMagic.downgradeTome.name=Living Armour Downgrade Tome item.BloodMagic.upgradeTrainer.name=Living Armour Training Bracelet item.BloodMagic.sentientSword.name=Sentient Sword @@ -510,6 +511,8 @@ tooltip.BloodMagic.livingArmour.upgrade.meleeDecrease=Dulled Blade tooltip.BloodMagic.livingArmour.upgrade.digSlowdown=Weakened Pick tooltip.BloodMagic.livingArmour.upgrade.stormTrooper=Storm Trooper tooltip.BloodMagic.livingArmour.upgrade.slowHeal=Diseased +tooltip.BloodMagic.livingArmour.upgrade.disoriented=Disoriented + tooltip.BloodMagic.livingArmour.upgrade.level=%s (Level %d) tooltip.BloodMagic.livingArmour.upgrade.progress=%s (%d/100) tooltip.BloodMagic.livingArmour.upgrade.points=&6Upgrade points: %s / %s From 9cbec7dd374cc2c33930abfcc2415a8df17a547d Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Mon, 13 Feb 2017 16:01:19 -0800 Subject: [PATCH 28/82] Update README --- README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/README.md b/README.md index 663795cd..743d18a3 100644 --- a/README.md +++ b/README.md @@ -20,10 +20,7 @@ Blood Magic is an arcane art that is practiced by mages who attempt to gather a ##Development Setup 1. Fork this project to your own Github repository and clone it to your desktop. -2. Navigate to the directory you cloned to. Open a command window there and run `gradlew setupDevWorkspace` then (if you use Eclipse) `gradlew eclipse` or (if you use IDEA) `gradlew idea`. -3. This process will setup [Forge](http://www.minecraftforge.net/forum/), your workspace, and link [MineTweaker](http://minetweaker3.powerofbytes.com/) as a dependency. -4. Open the project in your IDE of choice. -5. Set `../src/api/java` as a source directory. +2. Navigate to the directory you cloned to. Follow the [Forge Documentation](http://mcforge.readthedocs.io/en/latest/gettingstarted/#from-zero-to-modding) (start at step 4) to setup your workspace. If you use IDEA, follow [this set](http://mcforge.readthedocs.io/en/latest/gettingstarted/#terminal-free-intellij-idea-configuration) of steps. ####IntelliJ IDEA extra steps From ddb75428274f94184048fc198ec1ecb988e9ca52 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Mon, 13 Feb 2017 16:21:54 -0800 Subject: [PATCH 29/82] Implement an inverted MRS that requires an RS signal to function (#1022) --- .../bloodmagic/block/BlockRitualController.java | 14 +++++++++----- .../block/enums/EnumRitualController.java | 4 +++- .../provider/DataProviderRitualController.java | 6 ++++-- .../WayofTime/bloodmagic/registry/ModRecipes.java | 2 ++ .../bloodmagic/tile/TileMasterRitualStone.java | 14 ++++++++++++-- .../blockstates/BlockRitualController.json | 5 +++++ .../resources/assets/bloodmagic/lang/en_US.lang | 1 + .../blocks/MasterRitualStone_Inverted.png | Bin 0 -> 724 bytes 8 files changed, 36 insertions(+), 10 deletions(-) create mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/MasterRitualStone_Inverted.png diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockRitualController.java b/src/main/java/WayofTime/bloodmagic/block/BlockRitualController.java index 86509cd7..2b2c0d80 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockRitualController.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockRitualController.java @@ -59,7 +59,7 @@ public class BlockRitualController extends BlockEnumContainer currentActiveWillConfig = new ArrayList(); @@ -55,7 +57,7 @@ public class TileMasterRitualStone extends TileTicking implements IMasterRitualS if (getWorld().isRemote) return; - if (getWorld().isBlockPowered(getPos()) && isActive()) + if (isPowered() && isActive()) { active = false; redstoned = true; @@ -63,7 +65,7 @@ public class TileMasterRitualStone extends TileTicking implements IMasterRitualS return; } - if (!isActive() && !getWorld().isBlockPowered(getPos()) && isRedstoned() && getCurrentRitual() != null) + if (!isActive() && !isPowered() && isRedstoned() && getCurrentRitual() != null) { active = true; ItemStack crystalStack = NBTHelper.checkNBT(new ItemStack(ModItems.ACTIVATION_CRYSTAL, 1, getCurrentRitual().getCrystalLevel())); @@ -405,4 +407,12 @@ public class TileMasterRitualStone extends TileTicking implements IMasterRitualS ChatUtil.sendNoSpam(player, new TextComponentTranslation("ritual.BloodMagic.willConfig.void")); } } + + public boolean isPowered() + { + if (inverted) + return !getWorld().isBlockPowered(getPos()); + + return getWorld().isBlockPowered(getPos()); + } } diff --git a/src/main/resources/assets/bloodmagic/blockstates/BlockRitualController.json b/src/main/resources/assets/bloodmagic/blockstates/BlockRitualController.json index 784afa96..1b8b489e 100644 --- a/src/main/resources/assets/bloodmagic/blockstates/BlockRitualController.json +++ b/src/main/resources/assets/bloodmagic/blockstates/BlockRitualController.json @@ -16,6 +16,11 @@ "textures": { "all": "bloodmagic:blocks/ImperfectRitualStone" } + }, + "inverted": { + "textures": { + "all": "bloodmagic:blocks/MasterRitualStone_Inverted" + } } } } diff --git a/src/main/resources/assets/bloodmagic/lang/en_US.lang b/src/main/resources/assets/bloodmagic/lang/en_US.lang index dc5012a0..5c3409ad 100644 --- a/src/main/resources/assets/bloodmagic/lang/en_US.lang +++ b/src/main/resources/assets/bloodmagic/lang/en_US.lang @@ -198,6 +198,7 @@ tile.BloodMagic.fluid.lifeEssence.name=Life Essence tile.BloodMagic.stone.ritual.master.name=Master Ritual Stone tile.BloodMagic.stone.ritual.imperfect.name=Imperfect Ritual Stone +tile.BloodMagic.stone.ritual.inverted.name=Inverted Master Ritual Stone tile.BloodMagic.altar.name=Blood Altar tile.BloodMagic.alchemyArray.name=&r&fAlchemy Array diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/MasterRitualStone_Inverted.png b/src/main/resources/assets/bloodmagic/textures/blocks/MasterRitualStone_Inverted.png new file mode 100644 index 0000000000000000000000000000000000000000..9ba93d8b8bbf23394f1c72ef43134b7804402b8b GIT binary patch literal 724 zcmV;_0xSKAP)8=17)8%FKm3=dwKtaSA`7HRfHbLt0D6ZY@3wEXNE5h9k;2~CvQ1KyL~_WPNulf$ zT%3E)mECR^0Yo5#h=?EpF+vCd5dk713WzAB03n0`fC2da?vA_dmSuLFPDixXY`3>8 z%Z!Mk?|a5^z&Qt^sH%#`f1i1Nd&9&S`T3_G`SSTQ)>zD@rm8BMFMlEmPNy?vS>n9s zaOlar=Ve*=;g8?hHw{K9#lyn`Ns{uM@Vc!XASf0@YXOnM?&Q67v^QgRwYUs#0OFl#${od9UzzxJY`iNn+?y_qO%NR z49hYTiLBRa#?f(ebHl6Ag!36ajI?b>2mvLcSg&iWb6j10pss7QRv3hAtX32;l4S-FP!KtE9m~96j3tD?@pxjDdaCh%gQVT5Gzl$NPX%N>P;+ zcA5ZTY&$X{Z(pAH%=h z;gSS^@cu*ulGGw17!l#@X42n&CC_tKtD4j4$T*H*48~dx`xnZhr0qKD^@{uZd%o^p z5mCr)w~O9;wARGfIA}A$<5Ybu@BWSG%A@U!J4Pmw=8q)y)0000 Date: Mon, 13 Feb 2017 17:13:28 -0800 Subject: [PATCH 30/82] Fix ore doubling potentially adding invalid recipes (#1051) --- src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java b/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java index a69e7113..53ee8107 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java @@ -454,8 +454,9 @@ public class ModRecipes { String dustName = ore.replaceFirst("ore", "dust"); + List discoveredOres = OreDictionary.getOres(ore); List dustList = OreDictionary.getOres(dustName); - if (dustList != null && dustList.size() > 0) + if (dustList != null && !dustList.isEmpty() && discoveredOres != null && !discoveredOres.isEmpty()) { ItemStack dustStack = dustList.get(0).copy(); dustStack.stackSize = 2; From 5bf5fd570db4d7aa8ba922b30ddd280421b815a8 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Mon, 13 Feb 2017 19:09:19 -0800 Subject: [PATCH 31/82] Fix duplicate LA attributes overwriting each other (#1019) Somebody please save me from this horrible horrible code --- .../bloodmagic/livingArmour/LivingArmour.java | 33 ++++++++++++++++--- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/LivingArmour.java b/src/main/java/WayofTime/bloodmagic/livingArmour/LivingArmour.java index 6c880de0..52236c4e 100644 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/LivingArmour.java +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/LivingArmour.java @@ -1,9 +1,7 @@ package WayofTime.bloodmagic.livingArmour; import java.lang.reflect.Constructor; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; +import java.util.*; import java.util.Map.Entry; import net.minecraft.entity.EntityLivingBase; @@ -81,8 +79,9 @@ public class LivingArmour implements ILivingArmour @Override public Multimap getAttributeModifiers() { - HashMultimap modifierMap = HashMultimap.create(); + HashMultimap modifierMap = HashMultimap.create(); + int count = 0; for (Entry entry : upgradeMap.entrySet()) { LivingArmourUpgrade upgrade = entry.getValue(); @@ -90,12 +89,36 @@ public class LivingArmour implements ILivingArmour { continue; } - modifierMap.putAll(upgrade.getAttributeModifiers()); + + Multimap upgradeModifiers = upgrade.getAttributeModifiers(); + for (String key : upgradeModifiers.keySet()) + { + if (modifierMap.containsKey(key)) + { + Collection renamed = renameModifiers(upgradeModifiers.get(key), count); + modifierMap.get(key).addAll(renamed); + count += renamed.size(); + } else + modifierMap.putAll(upgradeModifiers); + } } return modifierMap; } + private static Set renameModifiers(Collection modifiers, int count) + { + Set newModifiers = new HashSet(); + for (AttributeModifier modifier : modifiers) + { + String newName = modifier.getName().substring(0, modifier.getName().length() - 1) + count; + newModifiers.add(new AttributeModifier(UUID.nameUUIDFromBytes(new byte[] {(byte)count}), newName, modifier.getAmount(), modifier.getOperation())); + count++; + } + + return newModifiers; + } + @Override public boolean upgradeArmour(EntityPlayer user, LivingArmourUpgrade upgrade) { From 2ee2cc5ee65c6edc8e290f01a5d7709313c6f44e Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Mon, 13 Feb 2017 19:35:14 -0800 Subject: [PATCH 32/82] More proper fix for #1019 --- .../bloodmagic/livingArmour/LivingArmour.java | 26 +------------------ .../LivingArmourUpgradeMeleeDecrease.java | 2 +- .../LivingArmourUpgradeSlowness.java | 2 +- .../LivingArmourUpgradeHealthboost.java | 4 ++- .../LivingArmourUpgradeKnockbackResist.java | 7 +++-- .../LivingArmourUpgradeMeleeDamage.java | 4 ++- .../upgrade/LivingArmourUpgradeSpeed.java | 4 ++- 7 files changed, 17 insertions(+), 32 deletions(-) diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/LivingArmour.java b/src/main/java/WayofTime/bloodmagic/livingArmour/LivingArmour.java index 52236c4e..d50d1969 100644 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/LivingArmour.java +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/LivingArmour.java @@ -81,7 +81,6 @@ public class LivingArmour implements ILivingArmour { HashMultimap modifierMap = HashMultimap.create(); - int count = 0; for (Entry entry : upgradeMap.entrySet()) { LivingArmourUpgrade upgrade = entry.getValue(); @@ -90,35 +89,12 @@ public class LivingArmour implements ILivingArmour continue; } - Multimap upgradeModifiers = upgrade.getAttributeModifiers(); - for (String key : upgradeModifiers.keySet()) - { - if (modifierMap.containsKey(key)) - { - Collection renamed = renameModifiers(upgradeModifiers.get(key), count); - modifierMap.get(key).addAll(renamed); - count += renamed.size(); - } else - modifierMap.putAll(upgradeModifiers); - } + modifierMap.putAll(upgrade.getAttributeModifiers()); } return modifierMap; } - private static Set renameModifiers(Collection modifiers, int count) - { - Set newModifiers = new HashSet(); - for (AttributeModifier modifier : modifiers) - { - String newName = modifier.getName().substring(0, modifier.getName().length() - 1) + count; - newModifiers.add(new AttributeModifier(UUID.nameUUIDFromBytes(new byte[] {(byte)count}), newName, modifier.getAmount(), modifier.getOperation())); - count++; - } - - return newModifiers; - } - @Override public boolean upgradeArmour(EntityPlayer user, LivingArmourUpgrade upgrade) { diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeMeleeDecrease.java b/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeMeleeDecrease.java index b8c2568e..066c860c 100644 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeMeleeDecrease.java +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeMeleeDecrease.java @@ -36,7 +36,7 @@ public class LivingArmourUpgradeMeleeDecrease extends LivingArmourUpgrade { Multimap modifierMap = HashMultimap.create(); - modifierMap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(new UUID(0271023, 5321), "damage modifier" + 2, meleeDamage[this.level], 1)); + modifierMap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(new UUID(0271023, 5321), getUniqueIdentifier() + "-DamageModifier" + 2, meleeDamage[this.level], 1)); return modifierMap; } diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeSlowness.java b/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeSlowness.java index b516db11..6e3319bb 100644 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeSlowness.java +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeSlowness.java @@ -29,7 +29,7 @@ public class LivingArmourUpgradeSlowness extends LivingArmourUpgrade { Multimap modifierMap = HashMultimap.create(); - modifierMap.put(SharedMonsterAttributes.MOVEMENT_SPEED.getName(), new AttributeModifier(new UUID(85472, 8502), "speed modifier" + 2, speedModifier[this.level], 1)); + modifierMap.put(SharedMonsterAttributes.MOVEMENT_SPEED.getName(), new AttributeModifier(new UUID(85472, 8502), getUniqueIdentifier() + "-SpeedModifier" + 1, speedModifier[this.level], 1)); return modifierMap; } diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeHealthboost.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeHealthboost.java index 4dc51e55..78a4b71b 100644 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeHealthboost.java +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeHealthboost.java @@ -10,6 +10,7 @@ import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; +import org.apache.commons.codec.binary.StringUtils; import java.util.UUID; @@ -34,7 +35,8 @@ public class LivingArmourUpgradeHealthboost extends LivingArmourUpgrade { Multimap modifierMap = HashMultimap.create(); - modifierMap.put(SharedMonsterAttributes.MAX_HEALTH.getName(), new AttributeModifier(new UUID(9423688, 1), "Health modifier" + 1, healthModifier[this.level], 0)); + String name = getUniqueIdentifier() + "-HealthModifier1"; + modifierMap.put(SharedMonsterAttributes.MAX_HEALTH.getName(), new AttributeModifier(UUID.nameUUIDFromBytes(StringUtils.getBytesUtf8(name)), "HealthModifier1", healthModifier[this.level], 0)); return modifierMap; } diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeKnockbackResist.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeKnockbackResist.java index c59f4e48..430fe22f 100644 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeKnockbackResist.java +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeKnockbackResist.java @@ -7,6 +7,7 @@ import com.google.common.collect.Multimap; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.nbt.NBTTagCompound; +import org.apache.commons.codec.binary.StringUtils; import java.util.UUID; @@ -26,11 +27,13 @@ public class LivingArmourUpgradeKnockbackResist extends LivingArmourUpgrade { Multimap modifierMap = HashMultimap.create(); - modifierMap.put(SharedMonsterAttributes.KNOCKBACK_RESISTANCE.getName(), new AttributeModifier(new UUID(895132, 1), "Knockback modifier" + 1, kbModifier[this.level], 0)); + String name = getUniqueIdentifier() + "-KnockbackModifier1"; + modifierMap.put(SharedMonsterAttributes.KNOCKBACK_RESISTANCE.getName(), new AttributeModifier(UUID.nameUUIDFromBytes(StringUtils.getBytesUtf8(name)), "KnockbackModifier1", kbModifier[this.level], 0)); if (healthModifier[this.level] > 0) { - modifierMap.put(SharedMonsterAttributes.MAX_HEALTH.getName(), new AttributeModifier(new UUID(952142, 1), "Health modifier" + 1, healthModifier[this.level], 0)); + name = getUniqueIdentifier() + "-HealthModifier1"; + modifierMap.put(SharedMonsterAttributes.MAX_HEALTH.getName(), new AttributeModifier(UUID.nameUUIDFromBytes(StringUtils.getBytesUtf8(name)), "HealthModifier1", healthModifier[this.level], 0)); } return modifierMap; diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeMeleeDamage.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeMeleeDamage.java index 4bbe2fc7..cd228a13 100644 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeMeleeDamage.java +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeMeleeDamage.java @@ -10,6 +10,7 @@ import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; +import org.apache.commons.codec.binary.StringUtils; import java.util.UUID; @@ -34,7 +35,8 @@ public class LivingArmourUpgradeMeleeDamage extends LivingArmourUpgrade { Multimap modifierMap = HashMultimap.create(); - modifierMap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(new UUID(9423688, 1), "damage modifier" + 1, meleeDamage[this.level], 0)); + String name = getUniqueIdentifier() + "-DamageModifier1"; + modifierMap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(UUID.nameUUIDFromBytes(StringUtils.getBytesUtf8(name)), "DamageModifier1", meleeDamage[this.level], 0)); return modifierMap; } diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeSpeed.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeSpeed.java index 6e591e7a..14ff3c55 100644 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeSpeed.java +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeSpeed.java @@ -15,6 +15,7 @@ import WayofTime.bloodmagic.api.livingArmour.LivingArmourUpgrade; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; +import org.apache.commons.codec.binary.StringUtils; public class LivingArmourUpgradeSpeed extends LivingArmourUpgrade { @@ -61,7 +62,8 @@ public class LivingArmourUpgradeSpeed extends LivingArmourUpgrade if (healthModifier[this.level] > 0) { - modifierMap.put(SharedMonsterAttributes.MAX_HEALTH.getName(), new AttributeModifier(new UUID(952142, 1), "Health modifier" + 1, healthModifier[this.level], 0)); + String name = getUniqueIdentifier() + "-HealthModifier1"; + modifierMap.put(SharedMonsterAttributes.MAX_HEALTH.getName(), new AttributeModifier(UUID.nameUUIDFromBytes(StringUtils.getBytesUtf8(name)), "HealthModifier1", healthModifier[this.level], 0)); } return modifierMap; From f0e3aa6602bf299f4f80d2bd5a515b8ea9e2e462 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Mon, 13 Feb 2017 19:38:08 -0800 Subject: [PATCH 33/82] Missed a couple files --- .../downgrade/LivingArmourUpgradeMeleeDecrease.java | 4 +++- .../livingArmour/downgrade/LivingArmourUpgradeSlowness.java | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeMeleeDecrease.java b/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeMeleeDecrease.java index 066c860c..fbbf800f 100644 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeMeleeDecrease.java +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeMeleeDecrease.java @@ -12,6 +12,7 @@ import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; +import org.apache.commons.codec.binary.StringUtils; import java.util.UUID; @@ -36,7 +37,8 @@ public class LivingArmourUpgradeMeleeDecrease extends LivingArmourUpgrade { Multimap modifierMap = HashMultimap.create(); - modifierMap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(new UUID(0271023, 5321), getUniqueIdentifier() + "-DamageModifier" + 2, meleeDamage[this.level], 1)); + String name = getUniqueIdentifier() + "-DamageModifier1"; + modifierMap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(UUID.nameUUIDFromBytes(StringUtils.getBytesUtf8(name)), "DamageModifier1", meleeDamage[this.level], 1)); return modifierMap; } diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeSlowness.java b/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeSlowness.java index 6e3319bb..ff1dce79 100644 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeSlowness.java +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeSlowness.java @@ -13,6 +13,7 @@ import WayofTime.bloodmagic.api.livingArmour.LivingArmourUpgrade; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; +import org.apache.commons.codec.binary.StringUtils; public class LivingArmourUpgradeSlowness extends LivingArmourUpgrade { @@ -29,7 +30,8 @@ public class LivingArmourUpgradeSlowness extends LivingArmourUpgrade { Multimap modifierMap = HashMultimap.create(); - modifierMap.put(SharedMonsterAttributes.MOVEMENT_SPEED.getName(), new AttributeModifier(new UUID(85472, 8502), getUniqueIdentifier() + "-SpeedModifier" + 1, speedModifier[this.level], 1)); + String name = getUniqueIdentifier() + "-SpeedModifier1"; + modifierMap.put(SharedMonsterAttributes.MOVEMENT_SPEED.getName(), new AttributeModifier(UUID.nameUUIDFromBytes(StringUtils.getBytesUtf8(name)), "SpeedModifier1", speedModifier[this.level], 1)); return modifierMap; } From 4ac87f5e8a49442e51072bf7fed30a6aeb152103 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Sun, 19 Feb 2017 14:49:36 -0800 Subject: [PATCH 34/82] Update version + changelog --- changelog.txt | 10 ++++++++++ gradle.properties | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/changelog.txt b/changelog.txt index 235437ae..8107d736 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,13 @@ +------------------------------------------------------ +Version 2.1.3 +------------------------------------------------------ +- Fixed JEI localization +- Added a new Master Ritual Stone that inverts it's redstone activity +- Fixed Living Armor attributes overriding eachother instead of adding up +- Fixed Ore doubling sometimes adding invalid recipes +- Downgrade tomes are now called Downgrade Tomes +- Added some caching to rituals to (hopefully) increase performance with less world data query-ing + ------------------------------------------------------ Version 2.1.2 ------------------------------------------------------ diff --git a/gradle.properties b/gradle.properties index fe9a5127..e004616b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_name=BloodMagic package_group=com.wayoftime.bloodmagic -mod_version=2.1.2 +mod_version=2.1.3 mc_version=1.10.2 forge_version=12.18.3.2221 curse_id=224791 From 1fb221c7f01af52e7b889442ee1791862d839b49 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Mon, 20 Feb 2017 14:07:35 -0800 Subject: [PATCH 35/82] Fix crash when creating a tank stack with meta > 15 (#1057) Also finally fixes the tanks so they properly drop themselves. --- .../bloodmagic/block/BlockBloodTank.java | 28 ++++++++++++++----- .../compat/jei/BloodMagicPlugin.java | 3 +- .../waila/provider/DataProviderBloodTank.java | 13 ++++----- .../item/block/ItemBlockBloodTank.java | 25 ++++++----------- .../assets/bloodmagic/lang/en_US.lang | 6 ++-- 5 files changed, 40 insertions(+), 35 deletions(-) diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockBloodTank.java b/src/main/java/WayofTime/bloodmagic/block/BlockBloodTank.java index 4b6ab6f4..2f597d0c 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockBloodTank.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockBloodTank.java @@ -5,6 +5,7 @@ import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.block.base.BlockInteger; import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.tile.TileBloodTank; +import com.google.common.collect.Lists; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; @@ -88,6 +89,17 @@ public class BlockBloodTank extends BlockInteger implements IVariantProvider return false; } + @Override + public void harvestBlock(World world, EntityPlayer player, BlockPos pos, IBlockState state, @Nullable TileEntity tile, ItemStack stack) { + super.harvestBlock(world, player, pos, state, tile, stack); + world.setBlockToAir(pos); + } + + @Override + public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest) { + return willHarvest || super.removedByPlayer(state, world, pos, player, willHarvest); + } + @Override public boolean onBlockActivated(World world, BlockPos blockPos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { @@ -114,34 +126,36 @@ public class BlockBloodTank extends BlockInteger implements IVariantProvider @Override public List getDrops(IBlockAccess world, BlockPos pos, IBlockState blockState, int fortune) { - ArrayList list = new ArrayList(); + List list = Lists.newArrayList(); TileEntity tile = world.getTileEntity(pos); if (tile instanceof TileBloodTank) { TileBloodTank bloodTank = (TileBloodTank) tile; - ItemStack drop = new ItemStack(this); + ItemStack drop = new ItemStack(this, 1, bloodTank.getBlockMetadata()); NBTTagCompound tag = new NBTTagCompound(); - bloodTank.serialize(tag); + + if (bloodTank.getTank().getFluid() != null) + bloodTank.getTank().getFluid().writeToNBT(tag); + drop.setTagCompound(tag); - drop.setItemDamage(getMetaFromState(blockState)); list.add(drop); } return list; } - @Override public void onBlockPlacedBy(World world, BlockPos pos, IBlockState blockState, EntityLivingBase placer, ItemStack stack) { TileEntity tile = world.getTileEntity(pos); if (tile instanceof TileBloodTank) { + TileBloodTank bloodTank = (TileBloodTank) tile; NBTTagCompound tag = stack.getTagCompound(); if (tag != null) { - ((TileBloodTank) tile).deserialize(tag); - blockState.withProperty(getProperty(), stack.getMetadata()); + FluidStack fluidStack = FluidStack.loadFluidStackFromNBT(tag); + bloodTank.getTank().setFluid(fluidStack); } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/BloodMagicPlugin.java b/src/main/java/WayofTime/bloodmagic/compat/jei/BloodMagicPlugin.java index 07ba2d0c..09923177 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/BloodMagicPlugin.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/BloodMagicPlugin.java @@ -5,7 +5,6 @@ import java.util.Map; import javax.annotation.Nonnull; import mezz.jei.api.*; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; import WayofTime.bloodmagic.api.Constants; @@ -91,7 +90,7 @@ public class BloodMagicPlugin extends BlankModPlugin @Override public void registerItemSubtypes(ISubtypeRegistry subtypeRegistry) { - subtypeRegistry.useNbtForSubtypes(Item.getItemFromBlock(ModBlocks.BLOOD_TANK)); + } @Override diff --git a/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderBloodTank.java b/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderBloodTank.java index 6f381db5..f7aee7f8 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderBloodTank.java +++ b/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderBloodTank.java @@ -44,16 +44,15 @@ public class DataProviderBloodTank implements IWailaDataProvider { TileBloodTank bloodTank = (TileBloodTank) accessor.getTileEntity(); NBTTagCompound tag = accessor.getNBTData(); - int capacity = tag.getInteger(Constants.NBT.ALTAR_CAPACITY); + int capacity = accessor.getNBTData().getInteger(Constants.NBT.ALTAR_CAPACITY); currenttip.add(TextHelper.localizeEffect("tooltip.BloodMagic.tier", bloodTank.getBlockMetadata() + 1)); - currenttip.add(TextHelper.localizeEffect("tooltip.BloodMagic.fluid.capacity") + ": " + capacity + "mB"); + currenttip.add(TextHelper.localizeEffect("tooltip.BloodMagic.fluid.capacity", capacity)); - tag = tag.getCompoundTag(Constants.NBT.TANK); - FluidStack fluidStack = FluidStack.loadFluidStackFromNBT(tag); - if (!Strings.isNullOrEmpty(tag.getString("FluidName")) && fluidStack != null) + FluidStack fluidStack = FluidStack.loadFluidStackFromNBT(tag.getCompoundTag(Constants.NBT.TANK)); + if (fluidStack != null) { - currenttip.add(TextHelper.localizeEffect("tooltip.BloodMagic.fluid.type") + ": " + fluidStack.getLocalizedName()); - currenttip.add(TextHelper.localizeEffect("tooltip.BloodMagic.fluid.amount") + ": " + tag.getInteger("Amount") + "/" + capacity + "mB"); + currenttip.add(TextHelper.localizeEffect("tooltip.BloodMagic.fluid.type", fluidStack.getLocalizedName())); + currenttip.add(TextHelper.localizeEffect("tooltip.BloodMagic.fluid.amount", fluidStack.amount, capacity)); } } } diff --git a/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockBloodTank.java b/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockBloodTank.java index d9baff09..477a04b3 100644 --- a/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockBloodTank.java +++ b/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockBloodTank.java @@ -4,7 +4,6 @@ import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.block.BlockBloodTank; import WayofTime.bloodmagic.tile.TileBloodTank; import WayofTime.bloodmagic.util.helper.TextHelper; -import com.google.common.base.Strings; import net.minecraft.block.Block; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; @@ -38,10 +37,10 @@ public class ItemBlockBloodTank extends ItemBlock implements IFluidContainerItem @Override public String getItemStackDisplayName(ItemStack stack) { - if (stack.hasTagCompound() && stack.getTagCompound().hasKey(Constants.NBT.TANK) && !stack.getTagCompound().getCompoundTag(Constants.NBT.TANK).getString("FluidName").equals("")) + FluidStack fluidStack = FluidStack.loadFluidStackFromNBT(stack.getTagCompound()); + if (fluidStack != null) { - NBTTagCompound tag = stack.getTagCompound().getCompoundTag(Constants.NBT.TANK); - return super.getItemStackDisplayName(stack) + " " + TextHelper.localizeEffect("tooltip.BloodMagic.tier", stack.getItemDamage() + 1) + " (" + FluidStack.loadFluidStackFromNBT(tag).getLocalizedName() + ")"; + return super.getItemStackDisplayName(stack) + " " + TextHelper.localizeEffect("tooltip.BloodMagic.tier", stack.getItemDamage() + 1) + " (" + fluidStack.getLocalizedName() + ")"; } else { @@ -53,15 +52,15 @@ public class ItemBlockBloodTank extends ItemBlock implements IFluidContainerItem public void addInformation(ItemStack stack, EntityPlayer entityPlayer, List tooltip, boolean advanced) { tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic.tier", stack.getItemDamage() + 1)); - tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic.fluid.capacity") + ": " + getCapacity(stack) + "mB"); + tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic.fluid.capacity", getCapacity(stack))); if (stack.hasTagCompound()) { - NBTTagCompound tag = stack.getTagCompound().getCompoundTag(Constants.NBT.TANK); + NBTTagCompound tag = stack.getTagCompound(); FluidStack fluidStack = FluidStack.loadFluidStackFromNBT(tag); - if (!Strings.isNullOrEmpty(tag.getString("FluidName")) && fluidStack != null) + if (fluidStack != null) { - tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic.fluid.type") + ": " + fluidStack.getLocalizedName()); - tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic.fluid.amount") + ": " + tag.getInteger("Amount") + "/" + getCapacity(stack) + "mB"); + tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic.fluid.type", fluidStack.getLocalizedName())); + tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic.fluid.amount", fluidStack.amount, getCapacity(stack))); } } } @@ -77,13 +76,7 @@ public class ItemBlockBloodTank extends ItemBlock implements IFluidContainerItem @Override public FluidStack getFluid(ItemStack stack) { - if (stack.hasTagCompound() && stack.getTagCompound().hasKey(Constants.NBT.TANK) && !stack.getTagCompound().getCompoundTag(Constants.NBT.TANK).getString("FluidName").equals("")) - { - NBTTagCompound tag = stack.getTagCompound().getCompoundTag(Constants.NBT.TANK); - return FluidStack.loadFluidStackFromNBT(tag); - } - - return null; + return FluidStack.loadFluidStackFromNBT(stack.getTagCompound()); } @Override diff --git a/src/main/resources/assets/bloodmagic/lang/en_US.lang b/src/main/resources/assets/bloodmagic/lang/en_US.lang index 5c3409ad..577be153 100644 --- a/src/main/resources/assets/bloodmagic/lang/en_US.lang +++ b/src/main/resources/assets/bloodmagic/lang/en_US.lang @@ -539,9 +539,9 @@ tooltip.BloodMagic.itemFilter.oreDict=Used to filter through the Ore Dictionary tooltip.BloodMagic.itemFilter.exact=Filters the fluid input/output -tooltip.BloodMagic.fluid.type=Fluid Contained -tooltip.BloodMagic.fluid.amount=Amount -tooltip.BloodMagic.fluid.capacity=Capacity +tooltip.BloodMagic.fluid.type=Fluid Contained: %s +tooltip.BloodMagic.fluid.amount=Amount: %d / %d mB +tooltip.BloodMagic.fluid.capacity=Capacity: %d mB tooltip.BloodMagic.ghost.everything=Everything tooltip.BloodMagic.ghost.amount=Ghost item amount: %d From 0d4524cafc53bee634f62b254f657b656abcb57a Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Mon, 20 Feb 2017 14:13:14 -0800 Subject: [PATCH 36/82] Fix crash when checking if stacks can combine (#1053) --- .../java/WayofTime/bloodmagic/util/Utils.java | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/src/main/java/WayofTime/bloodmagic/util/Utils.java b/src/main/java/WayofTime/bloodmagic/util/Utils.java index 4dece72e..c0a2e72c 100644 --- a/src/main/java/WayofTime/bloodmagic/util/Utils.java +++ b/src/main/java/WayofTime/bloodmagic/util/Utils.java @@ -46,6 +46,7 @@ import net.minecraftforge.fluids.IFluidBlock; import net.minecraftforge.fml.common.discovery.ASMDataTable; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemHandlerHelper; import net.minecraftforge.items.wrapper.InvWrapper; import net.minecraftforge.items.wrapper.SidedInvWrapper; import WayofTime.bloodmagic.BloodMagic; @@ -537,19 +538,8 @@ public class Utils * Slot content that stack1 is placed into * @return True if they can be combined */ - public static boolean canCombine(ItemStack stack1, ItemStack stack2) - { - if (stack1 == null || stack1.isItemStackDamageable() ^ stack2.isItemStackDamageable()) - { - return false; - } - - if (stack2 == null) - { - return true; - } - - return stack1.getItem() == stack2.getItem() && stack1.getItemDamage() == stack2.getItemDamage() && ItemStack.areItemStackTagsEqual(stack1, stack2); + public static boolean canCombine(ItemStack stack1, ItemStack stack2) { + return stack1 != null && stack2 == null || ItemHandlerHelper.canItemStacksStack(stack1, stack2); } /** From 461c4762fecbe3fd0d63f18ce6d9ad0936f26e9e Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Tue, 21 Feb 2017 16:08:34 -0800 Subject: [PATCH 37/82] Fix oddity with comparators on Altars (#1058) *shakes fist at @Arcaratus* --- src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java b/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java index cb2a3bc5..edfe6e46 100644 --- a/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java +++ b/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java @@ -400,7 +400,7 @@ public class BloodAltar implements IFluidHandler { BlockPos newPos = pos.offset(facing); IBlockState block = world.getBlockState(newPos); - block.getBlock().onNeighborChange(world, pos, newPos); + block.getBlock().onNeighborChange(world, newPos, pos); } } if (internalCounter % (Math.max(20 - this.accelerationUpgrades, 1)) == 0) From a8f8ad575dac5a5485ba7ab125ef01dcf97029f7 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Tue, 21 Feb 2017 16:52:39 -0800 Subject: [PATCH 38/82] Update version + changelog (cherry picked from commit 91aeb4b) --- changelog.txt | 9 +++++++++ gradle.properties | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/changelog.txt b/changelog.txt index 8107d736..98038ac3 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,12 @@ +------------------------------------------------------ +Version 2.1.4 +------------------------------------------------------ +- Fixed a crash when checking if two items could be combined +- Fixed a crash when attempting to open the Sigil of Holding GUI +- Fixed a crash when somebody made an "invalid" stack of the Blood Tank +- Fixed a crash/hilarity where a Blood Altar would update itself as a Comparator + - Thanks to Arcaratus for causing this. I haven't laughed that hard in a while. + ------------------------------------------------------ Version 2.1.3 ------------------------------------------------------ diff --git a/gradle.properties b/gradle.properties index e004616b..9901815e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_name=BloodMagic package_group=com.wayoftime.bloodmagic -mod_version=2.1.3 +mod_version=2.1.4 mc_version=1.10.2 forge_version=12.18.3.2221 curse_id=224791 From e8f0194ed842412b59dfc0609ab114b892e3080a Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Wed, 22 Feb 2017 16:15:45 -0800 Subject: [PATCH 39/82] Special case RAW will when converting enums --- .../WayofTime/bloodmagic/block/enums/EnumSubWillType.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/WayofTime/bloodmagic/block/enums/EnumSubWillType.java b/src/main/java/WayofTime/bloodmagic/block/enums/EnumSubWillType.java index f61e5366..d42e974c 100644 --- a/src/main/java/WayofTime/bloodmagic/block/enums/EnumSubWillType.java +++ b/src/main/java/WayofTime/bloodmagic/block/enums/EnumSubWillType.java @@ -26,6 +26,11 @@ public enum EnumSubWillType implements IStringSerializable } public EnumDemonWillType getType() { - return EnumDemonWillType.valueOf(name()); + String name = name(); + + if (this == RAW) + name = EnumDemonWillType.DEFAULT.name(); + + return EnumDemonWillType.valueOf(name); } } From b55b453e6d9a9681e3d0a6099951f9377db191bf Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Wed, 22 Feb 2017 16:25:06 -0800 Subject: [PATCH 40/82] Fix crash when using newly created toggle sigils (#1059) --- .../WayofTime/bloodmagic/api/impl/ItemSigilToggleable.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/WayofTime/bloodmagic/api/impl/ItemSigilToggleable.java b/src/main/java/WayofTime/bloodmagic/api/impl/ItemSigilToggleable.java index c1c73dba..e46543dc 100644 --- a/src/main/java/WayofTime/bloodmagic/api/impl/ItemSigilToggleable.java +++ b/src/main/java/WayofTime/bloodmagic/api/impl/ItemSigilToggleable.java @@ -5,6 +5,7 @@ import WayofTime.bloodmagic.api.iface.IActivatable; import WayofTime.bloodmagic.api.util.helper.NBTHelper; import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.api.util.helper.PlayerHelper; +import com.google.common.base.Strings; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; @@ -64,6 +65,9 @@ public class ItemSigilToggleable extends ItemSigil implements IActivatable @Override public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { + if (Strings.isNullOrEmpty(getOwnerUUID(stack)) || player.isSneaking()) // Make sure Sigils are bound before handling. Also ignores while toggling state + return EnumActionResult.PASS; + return (NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage(player, getLpUsed()) && onSigilUse(stack, player, world, pos, side, hitX, hitY, hitZ)) ? EnumActionResult.SUCCESS : EnumActionResult.FAIL; } From 970acd4e69b1e49adebc64d8040e0b4b747b286b Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Thu, 23 Feb 2017 19:45:09 -0800 Subject: [PATCH 41/82] Fix crash when teleposing Demon Will Crystals (#1062) --- .../bloodmagic/block/BlockDemonCrystal.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystal.java b/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystal.java index eb5914b9..784e8f3b 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystal.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystal.java @@ -143,13 +143,13 @@ public class BlockDemonCrystal extends BlockContainer @Override public int getMetaFromState(IBlockState state) { - return ((EnumDemonWillType) state.getValue(TYPE)).ordinal(); + return state.getValue(TYPE).ordinal(); } @Override protected BlockStateContainer createBlockState() { - return new BlockStateContainer(this, new IProperty[] { TYPE, AGE, ATTACHED }); + return new BlockStateContainer(this, TYPE, AGE, ATTACHED); } @Override @@ -161,12 +161,16 @@ public class BlockDemonCrystal extends BlockContainer @Override public void breakBlock(World world, BlockPos pos, IBlockState state) { - TileDemonCrystal tile = (TileDemonCrystal) world.getTileEntity(pos); - EnumDemonWillType type = state.getValue(TYPE); - int number = tile.getCrystalCount(); + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof TileDemonCrystal) { + EnumDemonWillType type = state.getValue(TYPE); + int number = ((TileDemonCrystal) tile).getCrystalCount(); - spawnAsEntity(world, pos, getItemStackDropped(type, number)); - world.removeTileEntity(pos); + spawnAsEntity(world, pos, getItemStackDropped(type, number)); + world.removeTileEntity(pos); + } + + super.breakBlock(world, pos, state); } public static ItemStack getItemStackDropped(EnumDemonWillType type, int crystalNumber) From 32668f70caa94344703762e37dc734a58f1b5283 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Thu, 23 Feb 2017 20:01:07 -0800 Subject: [PATCH 42/82] Break early if activation crystal isn't bound Fixes annoying and usually false "not configured correctly" message. https://redd.it/5vte95 --- .../bloodmagic/block/BlockRitualController.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockRitualController.java b/src/main/java/WayofTime/bloodmagic/block/BlockRitualController.java index 2b2c0d80..a4ee9a2e 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockRitualController.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockRitualController.java @@ -5,6 +5,8 @@ import java.util.List; import javax.annotation.Nullable; +import WayofTime.bloodmagic.api.iface.IBindable; +import com.google.common.base.Strings; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; @@ -63,10 +65,13 @@ public class BlockRitualController extends BlockEnumContainer Date: Sat, 25 Feb 2017 17:16:25 -0800 Subject: [PATCH 43/82] Dagger of Sacrifice should not work for FakePlayers --- .../java/WayofTime/bloodmagic/item/ItemDaggerOfSacrifice.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemDaggerOfSacrifice.java b/src/main/java/WayofTime/bloodmagic/item/ItemDaggerOfSacrifice.java index 06ad4c91..fb23c81c 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemDaggerOfSacrifice.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemDaggerOfSacrifice.java @@ -12,6 +12,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.SoundCategory; +import net.minecraftforge.common.util.FakePlayer; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; @@ -37,6 +38,9 @@ public class ItemDaggerOfSacrifice extends Item implements IVariantProvider @Override public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) { + if (attacker instanceof FakePlayer) + return false; + if (target == null || attacker == null || attacker.getEntityWorld().isRemote || (attacker instanceof EntityPlayer && !(attacker instanceof EntityPlayerMP))) return false; From 3f24e464e60b7b1034e4323f7ddd73d26fceb723 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Sat, 25 Feb 2017 17:59:10 -0800 Subject: [PATCH 44/82] Rewrite Hymn of Syphoning for caps Needs testing and needs to be optimized. --- .../bloodmagic/ritual/RitualPump.java | 72 ++++++++++--------- .../assets/bloodmagic/lang/en_US.lang | 2 +- 2 files changed, 41 insertions(+), 33 deletions(-) diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualPump.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualPump.java index 35c8b981..48ef6552 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualPump.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualPump.java @@ -2,27 +2,32 @@ package WayofTime.bloodmagic.ritual; import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.ritual.*; +import com.google.common.collect.Lists; import net.minecraft.block.BlockLiquid; +import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.world.World; import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidHandler; +import net.minecraftforge.fluids.IFluidBlock; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.wrappers.BlockLiquidWrapper; +import net.minecraftforge.fluids.capability.wrappers.FluidBlockWrapper; +import org.apache.commons.lang3.tuple.Pair; import java.util.ArrayList; import java.util.Iterator; +import java.util.List; public class RitualPump extends Ritual { public static final String PUMP_RANGE = "pumpRange"; - private ArrayList liquidsCache; - private Iterator blockPosIterator; - - private boolean cached = false; - private BlockPos currentPos; + private List> liquidsCache; + private Iterator> blockPosIterator; public RitualPump() { @@ -30,7 +35,7 @@ public class RitualPump extends Ritual addBlockRange(PUMP_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-16, -16, -16), new BlockPos(17, 17, 17))); setMaximumVolumeAndDistanceOfRange(PUMP_RANGE, 0, 16, 16); - liquidsCache = new ArrayList(); + liquidsCache = Lists.newArrayList(); } @Override @@ -46,36 +51,39 @@ public class RitualPump extends Ritual return; } - if (tileEntity != null && tileEntity instanceof IFluidHandler) - { - IFluidHandler fluidHandler = (IFluidHandler) tileEntity; - if (!cached || liquidsCache.isEmpty()) - { - if (fluidHandler.drain(EnumFacing.DOWN, 1000, false) != null) - { - FluidStack fluidStack = fluidHandler.drain(EnumFacing.DOWN, 1000, false); - for (BlockPos blockPos : getBlockRange(PUMP_RANGE).getContainedPositions(masterRitualStone.getBlockPos())) - { - if (!liquidsCache.contains(blockPos)) - { - if (!world.isAirBlock(blockPos) && world.getBlockState(blockPos).getBlock() == fluidStack.getFluid().getBlock() && world.getBlockState(blockPos).getValue(BlockLiquid.LEVEL) == 0) - { - liquidsCache.add(blockPos); - } - } + if (tileEntity != null && tileEntity.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, EnumFacing.DOWN)) { + IFluidHandler fluidHandler = tileEntity.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, EnumFacing.DOWN); + IBlockState tankState = world.getBlockState(masterRitualStone.getBlockPos().up()); + int maxDrain = fluidHandler.getTankProperties()[0].getCapacity(); + + if (fluidHandler.getTankProperties()[0].getContents() != null && fluidHandler.getTankProperties()[0].getContents().amount >= maxDrain) + return; + + for (BlockPos pos : getBlockRange(PUMP_RANGE).getContainedPositions(masterRitualStone.getBlockPos())) { + IBlockState state = world.getBlockState(pos); + IFluidHandler blockHandler = null; + if (state.getBlock() instanceof BlockLiquid) + blockHandler = new BlockLiquidWrapper((BlockLiquid) state.getBlock(), world, pos); + else if (state.getBlock() instanceof IFluidHandler) + blockHandler = new FluidBlockWrapper((IFluidBlock) state.getBlock(), world, pos); + + if (blockHandler != null) { + FluidStack blockDrain = blockHandler.drain(maxDrain, false); + if (blockDrain != null && fluidHandler.fill(blockDrain, false) == blockDrain.amount) { + Pair posInfo = Pair.of(pos, blockHandler.drain(maxDrain, false)); + if (!liquidsCache.contains(posInfo)) + liquidsCache.add(posInfo); } } - - cached = true; - blockPosIterator = liquidsCache.iterator(); } - if (blockPosIterator.hasNext()) - { + blockPosIterator = liquidsCache.iterator(); + if (blockPosIterator.hasNext()) { + Pair posInfo = blockPosIterator.next(); masterRitualStone.getOwnerNetwork().syphon(getRefreshCost()); - currentPos = blockPosIterator.next(); - fluidHandler.fill(EnumFacing.DOWN, fluidHandler.drain(EnumFacing.DOWN, 1000, false), true); - world.setBlockState(currentPos, Blocks.STONE.getDefaultState()); + fluidHandler.fill(posInfo.getRight(), true); + world.setBlockState(posInfo.getLeft(), Blocks.STONE.getDefaultState()); + world.notifyBlockUpdate(posInfo.getLeft(), tankState, tankState, 3); blockPosIterator.remove(); } } diff --git a/src/main/resources/assets/bloodmagic/lang/en_US.lang b/src/main/resources/assets/bloodmagic/lang/en_US.lang index 577be153..e91b2364 100644 --- a/src/main/resources/assets/bloodmagic/lang/en_US.lang +++ b/src/main/resources/assets/bloodmagic/lang/en_US.lang @@ -611,7 +611,7 @@ ritual.BloodMagic.meteorRitual=Mark of the Falling Tower ritual.BloodMagic.cobblestoneRitual=Le Vulcanos Frigius ritual.BloodMagic.placerRitual=Laying of the Filler ritual.BloodMagic.fellingRitual=Crash of the Timberman -ritual.BloodMagic.pumpRitual=Hymn of Siphoning +ritual.BloodMagic.pumpRitual=Hymn of Syphoning ritual.BloodMagic.altarBuilderRitual=The Assembly of the High Altar ritual.BloodMagic.portalRitual=The Gate of the Fold ritual.BloodMagic.downgradeRitual=Penance of the Leadened Soul From 719cff06e18d8b171ee457056dba64b79a45ddec Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Sat, 25 Feb 2017 18:00:17 -0800 Subject: [PATCH 45/82] Child mobs are now viable for sacrifice at half the rate --- .../bloodmagic/item/ItemDaggerOfSacrifice.java | 11 ++++++++++- .../bloodmagic/ritual/RitualWellOfSuffering.java | 3 +++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemDaggerOfSacrifice.java b/src/main/java/WayofTime/bloodmagic/item/ItemDaggerOfSacrifice.java index fb23c81c..967218c8 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemDaggerOfSacrifice.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemDaggerOfSacrifice.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.IMob; import net.minecraft.entity.passive.EntityAnimal; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; @@ -47,7 +48,10 @@ public class ItemDaggerOfSacrifice extends Item implements IVariantProvider if (!target.isNonBoss()) return false; - if (target.isChild() || target instanceof EntityPlayer) + if (target instanceof EntityPlayer) + return false; + + if (target.isChild() && !(target instanceof IMob)) return false; if (target.isDead || target.getHealth() < 0.5F) @@ -71,6 +75,11 @@ public class ItemDaggerOfSacrifice extends Item implements IVariantProvider lifeEssence = (int) (lifeEssence * (1 + PurificationHelper.getCurrentPurity((EntityAnimal) target))); } + if (target.isChild()) + { + lifeEssence *= 0.5F; + } + if (PlayerSacrificeHelper.findAndFillAltar(attacker.getEntityWorld(), target, lifeEssence, true)) { target.getEntityWorld().playSound(null, target.posX, target.posY, target.posZ, SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, 2.6F + (target.getEntityWorld().rand.nextFloat() - target.getEntityWorld().rand.nextFloat()) * 0.8F); diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualWellOfSuffering.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualWellOfSuffering.java index 3e759d55..b3bd7333 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualWellOfSuffering.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualWellOfSuffering.java @@ -106,6 +106,9 @@ public class RitualWellOfSuffering extends Ritual if (BloodMagicAPI.getEntitySacrificeValues().containsKey(entityName)) lifeEssenceRatio = BloodMagicAPI.getEntitySacrificeValues().get(entityName); + if (entity.isChild()) + lifeEssenceRatio *= 0.5F; + tileAltar.sacrificialDaggerCall(lifeEssenceRatio, true); totalEffects++; From fedea8599344dfb3a4848f27657e7ac97b0dccf3 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Mon, 27 Feb 2017 16:44:40 -0800 Subject: [PATCH 46/82] Fix Alchemy Table JEI compat being fundamentally wrong (#1069) --- .../AlchemyTableRecipeCategory.java | 44 +++---------------- .../alchemyTable/AlchemyTableRecipeJEI.java | 4 +- 2 files changed, 10 insertions(+), 38 deletions(-) diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeCategory.java b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeCategory.java index 549575c8..9c0c5d13 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeCategory.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeCategory.java @@ -1,24 +1,21 @@ package WayofTime.bloodmagic.compat.jei.alchemyTable; import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import com.google.common.collect.Lists; +import WayofTime.bloodmagic.api.registry.OrbRegistry; import mezz.jei.api.gui.ICraftingGridHelper; import mezz.jei.api.gui.IDrawable; import mezz.jei.api.gui.IGuiItemStackGroup; import mezz.jei.api.gui.IRecipeLayout; import mezz.jei.api.ingredients.IIngredients; -import mezz.jei.api.recipe.IRecipeCategory; -import mezz.jei.api.recipe.IRecipeWrapper; -import net.minecraft.client.Minecraft; +import mezz.jei.api.recipe.BlankRecipeCategory; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.compat.jei.BloodMagicPlugin; import WayofTime.bloodmagic.util.helper.TextHelper; -public class AlchemyTableRecipeCategory implements IRecipeCategory +public class AlchemyTableRecipeCategory extends BlankRecipeCategory { private static final int OUTPUT_SLOT = 0; private static final int ORB_SLOT = 1; @@ -58,21 +55,7 @@ public class AlchemyTableRecipeCategory implements IRecipeCategory } @Override - public void drawExtras(Minecraft minecraft) - { - - } - - @Nullable - @Override - public IDrawable getIcon() - { - return null; - } - - @SuppressWarnings("unchecked") - @Override - public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) + public void setRecipe(IRecipeLayout recipeLayout, AlchemyTableRecipeJEI recipeWrapper, IIngredients ingredients) { IGuiItemStackGroup guiItemStacks = recipeLayout.getItemStacks(); @@ -88,21 +71,8 @@ public class AlchemyTableRecipeCategory implements IRecipeCategory } } - if (recipeWrapper instanceof AlchemyTableRecipeJEI) - { - guiItemStacks.set(ORB_SLOT, ingredients.getInputs(ItemStack.class).get(1)); - craftingGridHelper.setOutput(guiItemStacks, Lists.newArrayList(ingredients.getOutputs(ItemStack.class).get(0))); - craftingGridHelper.setInputStacks(guiItemStacks, ingredients.getInputs(ItemStack.class), 3, 2); - } - } - - @Override - public void drawAnimations(Minecraft minecraft) { - - } - - @Override - public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper) { - + guiItemStacks.set(ORB_SLOT, OrbRegistry.getOrbsDownToTier(recipeWrapper.getRecipe().getTierRequired())); + craftingGridHelper.setOutput(guiItemStacks, ingredients.getOutputs(ItemStack.class)); + craftingGridHelper.setInputStacks(guiItemStacks, ingredients.getInputs(ItemStack.class), 3, 2); } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeJEI.java b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeJEI.java index 17ca6704..8ac94d6a 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeJEI.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeJEI.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import WayofTime.bloodmagic.compat.jei.BloodMagicPlugin; +import com.google.common.collect.Lists; import lombok.Getter; import mezz.jei.api.ingredients.IIngredients; import mezz.jei.api.recipe.BlankRecipeWrapper; @@ -25,7 +26,7 @@ public class AlchemyTableRecipeJEI extends BlankRecipeWrapper public void getIngredients(IIngredients ingredients) { List> expanded = BloodMagicPlugin.jeiHelper.getStackHelper().expandRecipeItemStackInputs(recipe.getInput()); ingredients.setInputLists(ItemStack.class, expanded); - ingredients.setOutput(ItemStack.class, recipe.getRecipeOutput(new ArrayList())); + ingredients.setOutput(ItemStack.class, recipe.getRecipeOutput(Lists.newArrayList())); } @Override @@ -34,6 +35,7 @@ public class AlchemyTableRecipeJEI extends BlankRecipeWrapper ArrayList ret = new ArrayList(); if (mouseX >= 58 && mouseX <= 78 && mouseY >= 21 && mouseY <= 34) { + ret.add(TextHelper.localize("tooltip.BloodMagic.tier", recipe.getTierRequired())); ret.add(TextHelper.localize("jei.BloodMagic.recipe.lpDrained", recipe.getLpDrained())); ret.add(TextHelper.localize("jei.BloodMagic.recipe.ticksRequired", recipe.getTicksRequired())); } From 0b93c117336dad8c9039d2a7df0453c55cdca8cd Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Mon, 27 Feb 2017 17:37:30 -0800 Subject: [PATCH 47/82] Sort rituals by component count to avoid conflicts (#1070) Large rituals can now use, for example, the Serenade of the Nether layout if wanted. --- .../java/WayofTime/bloodmagic/BloodMagic.java | 13 ++++---- .../api/registry/RitualRegistry.java | 33 ++++++++++++++++--- 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/src/main/java/WayofTime/bloodmagic/BloodMagic.java b/src/main/java/WayofTime/bloodmagic/BloodMagic.java index 7e0dbe25..bb2d61e8 100644 --- a/src/main/java/WayofTime/bloodmagic/BloodMagic.java +++ b/src/main/java/WayofTime/bloodmagic/BloodMagic.java @@ -2,6 +2,7 @@ package WayofTime.bloodmagic; import java.io.File; +import WayofTime.bloodmagic.api.registry.RitualRegistry; import WayofTime.bloodmagic.meteor.MeteorConfigHandler; import lombok.Getter; import net.minecraft.creativetab.CreativeTabs; @@ -10,12 +11,7 @@ import net.minecraft.launchwrapper.Launch; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.SidedProxy; -import net.minecraftforge.fml.common.event.FMLInitializationEvent; -import net.minecraftforge.fml.common.event.FMLInterModComms; -import net.minecraftforge.fml.common.event.FMLModIdMappingEvent; -import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; -import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; -import net.minecraftforge.fml.common.event.FMLServerStartingEvent; +import net.minecraftforge.fml.common.event.*; import net.minecraftforge.fml.common.network.NetworkRegistry; import WayofTime.bloodmagic.annot.Handler; import WayofTime.bloodmagic.api.Constants; @@ -129,6 +125,11 @@ public class BloodMagic proxy.postInit(); } + @Mod.EventHandler + public void loadComplete(FMLLoadCompleteEvent event) { + RitualRegistry.orderLookupList(); + } + @Mod.EventHandler public void modMapping(FMLModIdMappingEvent event) { diff --git a/src/main/java/WayofTime/bloodmagic/api/registry/RitualRegistry.java b/src/main/java/WayofTime/bloodmagic/api/registry/RitualRegistry.java index ff0c43d9..6ba62dfb 100644 --- a/src/main/java/WayofTime/bloodmagic/api/registry/RitualRegistry.java +++ b/src/main/java/WayofTime/bloodmagic/api/registry/RitualRegistry.java @@ -5,20 +5,21 @@ import WayofTime.bloodmagic.api.ritual.Ritual; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; +import java.util.*; public class RitualRegistry { public static final Map enabledRituals = new HashMap(); private static final BiMap registry = HashBiMap.create(); + private static final List lookupList = new ArrayList(); /** * Ordered list for actions that depend on the order that the rituals were * registered in */ private static final ArrayList orderedIdList = new ArrayList(); + private static boolean locked; + /** * The safe way to register a new Ritual. * @@ -29,6 +30,13 @@ public class RitualRegistry */ public static void registerRitual(Ritual ritual, String id, boolean enabled) { + if (locked) + { + BloodMagicAPI.getLogger().error("This registry has been locked. Please register your ritual earlier."); + BloodMagicAPI.getLogger().error("If you reflect this, I will hunt you down. - TehNut"); + return; + } + if (ritual != null) { if (registry.containsKey(id)) @@ -107,7 +115,7 @@ public class RitualRegistry public static ArrayList getIds() { - return new ArrayList(registry.keySet()); + return new ArrayList(lookupList); } public static ArrayList getOrderedIds() @@ -119,4 +127,21 @@ public class RitualRegistry { return new ArrayList(registry.values()); } + + public static void orderLookupList() + { + locked = true; // Lock registry so no no rituals can be registered + lookupList.clear(); // Make sure it's empty + lookupList.addAll(registry.keySet()); + Collections.sort(lookupList, new Comparator() + { + @Override + public int compare(String o1, String o2) + { + Ritual ritual1 = registry.get(o1); + Ritual ritual2 = registry.get(o2); + return ritual1.getComponents().size() > ritual2.getComponents().size() ? -1 : 0; // Put earlier if bigger + } + }); + } } From acf2d683c7c7657f9127a311e0298199faa059b0 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Sat, 25 Feb 2017 17:59:10 -0800 Subject: [PATCH 48/82] Update changelog + version (cherry picked from commit 5e2ef61) --- changelog.txt | 8 ++++++++ gradle.properties | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/changelog.txt b/changelog.txt index 98038ac3..cec368bb 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,11 @@ +------------------------------------------------------ +Version 2.1.5 +------------------------------------------------------ +- Fixed JEI compat for Alchemy Table recipes +- Fixed (yet another) crash when creating an "invalid" stack of the Blood Tank +- Fixed Demon Will Crystal and Teleposer crashy interaction +- Fixed crash when working with toggleable sigils + ------------------------------------------------------ Version 2.1.4 ------------------------------------------------------ diff --git a/gradle.properties b/gradle.properties index 9901815e..3c4f59f4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_name=BloodMagic package_group=com.wayoftime.bloodmagic -mod_version=2.1.4 +mod_version=2.1.5 mc_version=1.10.2 forge_version=12.18.3.2221 curse_id=224791 From 22354eaa0abb12218661a3cd36eeaacc699f06f4 Mon Sep 17 00:00:00 2001 From: neconeco2 Date: Fri, 3 Mar 2017 13:32:55 +0900 Subject: [PATCH 49/82] Update ja_JP.lang (#1076) --- .../assets/bloodmagic/lang/ja_JP.lang | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/src/main/resources/assets/bloodmagic/lang/ja_JP.lang b/src/main/resources/assets/bloodmagic/lang/ja_JP.lang index 981ebb01..7312320c 100644 --- a/src/main/resources/assets/bloodmagic/lang/ja_JP.lang +++ b/src/main/resources/assets/bloodmagic/lang/ja_JP.lang @@ -1,6 +1,6 @@ #Creative Tab itemGroup.BloodMagic.creativeTab=Blood Magic -itemGroup.BloodMagic.creativeTabTome=Blood Magic 強化の書 +itemGroup.BloodMagic.creativeTabTome=Blood Magic ¦ 書物 #Items item.BloodMagic.activationCrystal.weak.name=弱い起動クリスタル @@ -162,6 +162,7 @@ item.BloodMagic.ritualReader.name=儀式の調整器 item.BloodMagic.arcaneAshes.name=秘儀の灰 item.BloodMagic.upgradeTome.name=生体アーマー強化の書 +item.BloodMagic.downgradeTome.name=生体アーマー弱化の書 item.BloodMagic.upgradeTrainer.name=生体アーマー養成ブレスレット item.BloodMagic.sentientSword.name=理力の剣 @@ -197,6 +198,7 @@ tile.BloodMagic.fluid.lifeEssence.name=ライフエッセンス tile.BloodMagic.stone.ritual.master.name=マスター儀式石 tile.BloodMagic.stone.ritual.imperfect.name=簡易儀式石 +tile.BloodMagic.stone.ritual.inverted.name=反転マスター儀式石 tile.BloodMagic.altar.name=血の祭壇 tile.BloodMagic.alchemyArray.name=&r&f錬金術魔法陣 @@ -261,11 +263,11 @@ tile.BloodMagic.demonCrystal.destructive.name=破壊性ウィル結晶株 tile.BloodMagic.demonCrystal.vengeful.name=報復性ウィル結晶株 tile.BloodMagic.demonCrystal.steadfast.name=不活性ウィル結晶株 -tile.BloodMagic.mimic.nohitbox.name=希薄で不透明なミミックブロック -tile.BloodMagic.mimic.solidopaque.name=不透明なミミックブロック -tile.BloodMagic.mimic.solidclear.name=透明なミミックブロック -tile.BloodMagic.mimic.solidlight.name=発光するミミックブロック -tile.BloodMagic.mimic.sentient.name=理力のミミックブロック +tile.BloodMagic.mimic.nohitbox.name=希薄で不透過な偽装ブロック +tile.BloodMagic.mimic.solidopaque.name=不透過な偽装ブロック +tile.BloodMagic.mimic.solidclear.name=透過な偽装ブロック +tile.BloodMagic.mimic.solidlight.name=発光する偽装ブロック +tile.BloodMagic.mimic.sentient.name=理力の偽装ブロック tile.BloodMagic.bricks1.brick1_raw.name=長い原生の石レンガ tile.BloodMagic.bricks1.brick1_corrosive.name=長い腐食性の石レンガ @@ -381,7 +383,7 @@ tooltip.BloodMagic.orb.owner=以下による追加要素: %s tooltip.BloodMagic.currentOwner=現在の所有者: %s tooltip.BloodMagic.currentTier=祭壇のグレード: %d tooltip.BloodMagic.config.disabled=現在configにより無効化されています -tooltip.BloodMagic.tier=グレード %d +tooltip.BloodMagic.tier=グレード%d tooltip.BloodMagic.activated=アクティブ tooltip.BloodMagic.deactivated=非アクティブ @@ -509,7 +511,9 @@ tooltip.BloodMagic.livingArmour.upgrade.quenched=抑制 tooltip.BloodMagic.livingArmour.upgrade.meleeDecrease=鈍い刃 tooltip.BloodMagic.livingArmour.upgrade.digSlowdown=朽ちたツルハシ tooltip.BloodMagic.livingArmour.upgrade.stormTrooper=突撃兵 -tooltip.BloodMagic.livingArmour.upgrade.slowHeal=病気 +tooltip.BloodMagic.livingArmour.upgrade.slowHeal=病弱 +tooltip.BloodMagic.livingArmour.upgrade.disoriented=方向感覚障害 + tooltip.BloodMagic.livingArmour.upgrade.level=%s (Lv %d) tooltip.BloodMagic.livingArmour.upgrade.progress=%s (%d/100) tooltip.BloodMagic.livingArmour.upgrade.points=&6強化ポイント: %s / %s @@ -533,11 +537,11 @@ tooltip.BloodMagic.itemFilter.ignoreNBT=NBTタグでフィルタします tooltip.BloodMagic.itemFilter.modItems=特定MODのアイテムをフィルタします tooltip.BloodMagic.itemFilter.oreDict=鉱石辞書を用いてフィルタします -tooltip.BloodMagic.itemFilter.exact=液体フィルタ 入力/出力 +tooltip.BloodMagic.itemFilter.exact=液体の入出力をフィルタします -tooltip.BloodMagic.fluid.type=液体を格納する -tooltip.BloodMagic.fluid.amount=量 -tooltip.BloodMagic.fluid.capacity=最大容量 +tooltip.BloodMagic.fluid.type=液体内容物: %s +tooltip.BloodMagic.fluid.amount=内容量: %d / %d mB +tooltip.BloodMagic.fluid.capacity=最大容量: %d mB tooltip.BloodMagic.ghost.everything=全て tooltip.BloodMagic.ghost.amount=幻影アイテムの個数: %d個 @@ -780,11 +784,6 @@ chat.BloodMagic.mimic.potionSpawnRadius.down=ポーション生成の効果範 entity.BloodMagic.SentientSpecter.name=理力の霊魂 entity.BloodMagic.Mimic.name=ミミック -# sekrit - -secret.BloodMagic.bread.bloody=&r&c血のパン -secret.BloodMagic.bread.bloody.desc=&o切迫した&r&7緊急時専用 - # Commands commands.error.arg.invalid=無効な引数です commands.error.arg.missing=引数が足りません From 9540df7cf1842b4cf5fc47f30c419613d9465c9b Mon Sep 17 00:00:00 2001 From: majikguy Date: Fri, 3 Mar 2017 19:57:04 -0500 Subject: [PATCH 50/82] Fixed a typo that made stage 4 of the Body Builder upgrade 5x as difficult as stage 5. (#1080) --- .../bloodmagic/livingArmour/tracker/StatTrackerFood.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerFood.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerFood.java index e32e7e38..18f1964f 100644 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerFood.java +++ b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerFood.java @@ -19,7 +19,7 @@ public class StatTrackerFood extends StatTracker { public static Map lastFoodEatenMap = new HashMap(); - public static int[] foodRequired = new int[] { 100, 200, 300, 5000, 1000 }; + public static int[] foodRequired = new int[] { 100, 200, 300, 500, 1000 }; public int foodEaten = 0; From 9822a7926599ee82c6b6b24cac36af6e6f9fc632 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Fri, 3 Mar 2017 17:21:36 -0800 Subject: [PATCH 51/82] Fix JEI not displaying armor tomes (cherry picked from commit 4e5bc46) --- .../java/WayofTime/bloodmagic/compat/jei/BloodMagicPlugin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/BloodMagicPlugin.java b/src/main/java/WayofTime/bloodmagic/compat/jei/BloodMagicPlugin.java index 09923177..f65b9f28 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/BloodMagicPlugin.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/BloodMagicPlugin.java @@ -90,7 +90,7 @@ public class BloodMagicPlugin extends BlankModPlugin @Override public void registerItemSubtypes(ISubtypeRegistry subtypeRegistry) { - + subtypeRegistry.useNbtForSubtypes(ModItems.UPGRADE_TOME); } @Override From ed0bde22e87a756f8291243e8504bd2d2a8d1bdd Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Tue, 7 Mar 2017 17:37:12 -0800 Subject: [PATCH 52/82] Update changelog + version (cherry picked from commit 5e2ef61) --- changelog.txt | 9 +++++++++ gradle.properties | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/changelog.txt b/changelog.txt index cec368bb..bd06f542 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,12 @@ +------------------------------------------------------ +Version 2.1.6 +------------------------------------------------------ +- Fixed JEI not displaying Armor Tomes +- Fixed Body Builder level 4 being 5x more expensive than level 5 + - https://github.com/WayofTime/BloodMagic/pull/1080 +- Updated Japanese localization + - https://github.com/WayofTime/BloodMagic/pull/1076 + ------------------------------------------------------ Version 2.1.5 ------------------------------------------------------ diff --git a/gradle.properties b/gradle.properties index 3c4f59f4..bad554ae 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_name=BloodMagic package_group=com.wayoftime.bloodmagic -mod_version=2.1.5 +mod_version=2.1.6 mc_version=1.10.2 forge_version=12.18.3.2221 curse_id=224791 From 2b921514192146d26db10a09a3efa0d58a03d036 Mon Sep 17 00:00:00 2001 From: A_D Date: Sun, 12 Mar 2017 13:07:24 +0200 Subject: [PATCH 53/82] fixed inconsistent altar tier readout with seer's sigil (#1094) --- .../java/WayofTime/bloodmagic/item/sigil/ItemSigilSeer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilSeer.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilSeer.java index 3646a8eb..ec6bfd7c 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilSeer.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilSeer.java @@ -71,7 +71,7 @@ public class ItemSigilSeer extends ItemSigilBase implements IAltarReader int progress = altar.getProgress(); int totalLiquidRequired = altar.getLiquidRequired() * ((IInventory) tile).getStackInSlot(0).stackSize; int consumptionRate = (int) (altar.getConsumptionRate() * (altar.getConsumptionMultiplier() + 1)); - ChatUtil.sendNoSpam(player, new TextComponentTranslation(tooltipBase + "currentAltarProgress", progress, totalLiquidRequired), new TextComponentTranslation(tooltipBase + "currentAltarConsumptionRate", consumptionRate), new TextComponentTranslation(tooltipBase + "currentAltarTier", tier), new TextComponentTranslation(tooltipBase + "currentEssence", currentEssence), new TextComponentTranslation(tooltipBase + "currentAltarCapacity", capacity), new TextComponentTranslation(tooltipBase + "currentCharge", charge)); + ChatUtil.sendNoSpam(player, new TextComponentTranslation(tooltipBase + "currentAltarProgress", progress, totalLiquidRequired), new TextComponentTranslation(tooltipBase + "currentAltarConsumptionRate", consumptionRate), new TextComponentTranslation(tooltipBase + "currentAltarTier", NumeralHelper.toRoman(tier)), new TextComponentTranslation(tooltipBase + "currentEssence", currentEssence), new TextComponentTranslation(tooltipBase + "currentAltarCapacity", capacity), new TextComponentTranslation(tooltipBase + "currentCharge", charge)); } else { ChatUtil.sendNoSpam(player, new TextComponentTranslation(tooltipBase + "currentAltarTier", NumeralHelper.toRoman(tier)), new TextComponentTranslation(tooltipBase + "currentEssence", currentEssence), new TextComponentTranslation(tooltipBase + "currentAltarCapacity", capacity), new TextComponentTranslation(tooltipBase + "currentCharge", charge)); From f4d1bb6ca6aee0e713e8a59f9ac5595358a8fde3 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Mon, 13 Mar 2017 16:21:30 -0700 Subject: [PATCH 54/82] Update changelog + version (cherry picked from commit 350c7cd) --- changelog.txt | 7 +++++++ gradle.properties | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/changelog.txt b/changelog.txt index bd06f542..823daa58 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,10 @@ +------------------------------------------------------ +Version 2.1.7 +------------------------------------------------------ + +- Fixed the Seer's Sigil not using Roman Numerals to display the altar tier + - https://github.com/WayofTime/BloodMagic/pull/1094 + ------------------------------------------------------ Version 2.1.6 ------------------------------------------------------ diff --git a/gradle.properties b/gradle.properties index bad554ae..d54119ae 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_name=BloodMagic package_group=com.wayoftime.bloodmagic -mod_version=2.1.6 +mod_version=2.1.7 mc_version=1.10.2 forge_version=12.18.3.2221 curse_id=224791 From f845c1306d5b9839af87c12bfeb895ac95e3b1ad Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Tue, 14 Mar 2017 19:13:08 -0700 Subject: [PATCH 55/82] Change lots of recipes to use oredict (#1101) I probably missed a few (cherry picked from commit 41c2f37) --- .../bloodmagic/registry/ModRecipes.java | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java b/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java index 53ee8107..7d599158 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java @@ -125,7 +125,7 @@ public class ModRecipes GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.BLOOD_STONE, 1, 1), "aa", "aa", 'a', new ItemStack(ModBlocks.BLOOD_STONE))); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModBlocks.BLOOD_STONE, 16), "stone", new ItemStack(ModItems.BLOOD_SHARD))); GameRegistry.addShapelessRecipe(new ItemStack(ModItems.ACTIVATION_CRYSTAL, 1, 1), new ItemStack(Items.NETHER_STAR), OrbRegistry.getOrbStack(ModItems.ORB_ARCHMAGE)); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.SOUL_SNARE, 4, 0), "sis", "iri", "sis", 's', new ItemStack(Items.STRING), 'i', "ingotIron", 'r', "dustRedstone")); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.SOUL_SNARE, 4, 0), "sis", "iri", "sis", 's', "string", 'i', "ingotIron", 'r', "dustRedstone")); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.BLOOD_TANK), "RBR", "G G", "RRR", 'R', new ItemStack(ModBlocks.BLOOD_RUNE), 'B', ModBlocks.BLOOD_STONE, 'G', "blockGlass")); for (int i = 1; i < TileBloodTank.CAPACITIES.length; i++) @@ -170,7 +170,7 @@ public class ModRecipes GameRegistry.addRecipe(new ShapelessBloodOrbRecipe(new ItemStack(ModBlocks.PATH_BLOCK, 4, 6), Blocks.OBSIDIAN, Blocks.OBSIDIAN, Blocks.OBSIDIAN, Blocks.OBSIDIAN, OrbRegistry.getOrbStack(ModItems.ORB_ARCHMAGE))); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModBlocks.PATH_BLOCK, 4, 7), new ItemStack(ModBlocks.PATH_BLOCK, 1, 6), new ItemStack(ModBlocks.PATH_BLOCK, 1, 6), new ItemStack(ModBlocks.PATH_BLOCK, 1, 6), new ItemStack(ModBlocks.PATH_BLOCK, 1, 6))); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModItems.EXPERIENCE_TOME), "ses", "lbl", "gog", 'o', OrbRegistry.getOrbStack(ModItems.ORB_MAGICIAN), 'e', Blocks.LAPIS_BLOCK, 'l', new ItemStack(ModItems.SLATE, 1, 2), 'b', Items.ENCHANTED_BOOK, 's', Items.STRING, 'g', "ingotGold")); + GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModItems.EXPERIENCE_TOME), "ses", "lbl", "gog", 'o', OrbRegistry.getOrbStack(ModItems.ORB_MAGICIAN), 'e', Blocks.LAPIS_BLOCK, 'l', new ItemStack(ModItems.SLATE, 1, 2), 'b', Items.ENCHANTED_BOOK, 's', "string", 'g', "ingotGold")); GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModItems.RITUAL_READER), "gog", "isi", " s ", 's', new ItemStack(ModItems.SLATE, 1, 3), 'g', "blockGlass", 'i', "ingotGold", 'o', OrbRegistry.getOrbStack(ModItems.ORB_MASTER))); GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModBlocks.ALCHEMY_TABLE), "sss", "wbw", "gog", 's', "stone", 'w', "plankWood", 'b', Items.BLAZE_ROD, 'g', "ingotGold", 'o', OrbRegistry.getOrbStack(ModItems.ORB_WEAK))); @@ -195,7 +195,7 @@ public class ModRecipes GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModBlocks.MIMIC, 4, 0), "b b", " r ", "bob", 'b', new ItemStack(ModBlocks.BLOOD_STONE), 'r', new ItemStack(ModBlocks.BLOOD_RUNE), 'o', OrbRegistry.getOrbStack(ModItems.ORB_MAGICIAN))); GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModBlocks.MIMIC, 4, 1), "bsb", "srs", "bob", 'b', new ItemStack(ModBlocks.BLOOD_STONE), 'r', new ItemStack(ModBlocks.BLOOD_RUNE), 's', "stone", 'o', OrbRegistry.getOrbStack(ModItems.ORB_MAGICIAN))); GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModBlocks.MIMIC, 4, 2), "bsb", "srs", "bob", 'b', new ItemStack(ModBlocks.BLOOD_STONE), 'r', new ItemStack(ModBlocks.BLOOD_RUNE), 's', "blockGlass", 'o', OrbRegistry.getOrbStack(ModItems.ORB_MAGICIAN))); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModBlocks.MIMIC, 2, 3), "bnb", "trt", "bob", 'b', new ItemStack(ModBlocks.BLOOD_STONE), 'r', new ItemStack(ModBlocks.BLOOD_RUNE), 'n', Blocks.GLOWSTONE, 't', "torch", 'o', OrbRegistry.getOrbStack(ModItems.ORB_MAGICIAN))); + GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModBlocks.MIMIC, 2, 3), "bnb", "trt", "bob", 'b', new ItemStack(ModBlocks.BLOOD_STONE), 'r', new ItemStack(ModBlocks.BLOOD_RUNE), 'n', "glowstone", 't', "torch", 'o', OrbRegistry.getOrbStack(ModItems.ORB_MAGICIAN))); for (int i = 0; i < 5; i++) { @@ -347,21 +347,21 @@ public class ModRecipes TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(ModItems.SENTIENT_AXE), 0, 0, new ItemStack(ModItems.SOUL_GEM), new ItemStack(Items.IRON_AXE)); TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(ModItems.SENTIENT_PICKAXE), 0, 0, new ItemStack(ModItems.SOUL_GEM), new ItemStack(Items.IRON_PICKAXE)); TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(ModItems.SENTIENT_SHOVEL), 0, 0, new ItemStack(ModItems.SOUL_GEM), new ItemStack(Items.IRON_SHOVEL)); - TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(ModItems.SENTIENT_BOW), 70, 0, new ItemStack(Items.BOW), new ItemStack(ModItems.SOUL_GEM, 1, 1), Items.STRING, Items.STRING); - TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(ModItems.ARCANE_ASHES), 0, 0, "dustRedstone", "dyeWhite", new ItemStack(Items.GUNPOWDER), Items.COAL); + TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(ModItems.SENTIENT_BOW), 70, 0, new ItemStack(Items.BOW), new ItemStack(ModItems.SOUL_GEM, 1, 1), "string", "string"); + TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(ModItems.ARCANE_ASHES), 0, 0, "dustRedstone", "dyeWhite", "gunpowder", Items.COAL); TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_WATER), 10, 3, new ItemStack(Items.SUGAR), new ItemStack(Items.WATER_BUCKET), new ItemStack(Items.WATER_BUCKET)); TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_LAVA), 32, 10, Items.LAVA_BUCKET, "dustRedstone", "cobblestone", "blockCoal"); - TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_VOID), 64, 10, Items.BUCKET, Items.STRING, Items.STRING, Items.GUNPOWDER); - TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_GROWTH), 128, 20, "treeSapling", "treeSapling", Items.REEDS, Items.SUGAR); - TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_AIR), 128, 20, Items.GHAST_TEAR, Items.FEATHER, Items.FEATHER); + TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_VOID), 64, 10, Items.BUCKET, "string", "string", "gunpowder"); + TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_GROWTH), 128, 20, "treeSapling", "treeSapling", "sugarcane", Items.SUGAR); + TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_AIR), 128, 20, Items.GHAST_TEAR, "feather", "feather"); TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_SIGHT), 64, 0, ModItems.SIGIL_DIVINATION, "blockGlass", "blockGlass", "dustGlowstone"); - TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_HOLDING), 64, 20, Blocks.CHEST, "leather", "string", "string"); + TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_HOLDING), 64, 20, "chestWood", "leather", "string", "string"); TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_FASTMINER), 128, 10, Items.IRON_PICKAXE, Items.IRON_AXE, Items.IRON_SHOVEL, Items.GUNPOWDER); TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_AFFINITY), 300, 30, ModItems.SIGIL_WATER, ModItems.SIGIL_AIR, ModItems.SIGIL_LAVA, Blocks.OBSIDIAN); TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_SUPPRESSION), 500, 50, ModBlocks.TELEPOSER, Items.WATER_BUCKET, Items.LAVA_BUCKET, Items.BLAZE_ROD); TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_BINDING), 400, 10, "dustGlowstone", "dustRedstone", "nuggetGold", Items.GUNPOWDER); TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_BLOODLIGHT), 300, 10, "glowstone", Blocks.TORCH, "dustRedstone", "dustRedstone"); - TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_MAGNETISM), 600, 10, Items.STRING, "ingotGold", "blockIron", "ingotGold"); + TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_MAGNETISM), 600, 10, "string", "ingotGold", "blockIron", "ingotGold"); TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_HASTE), 1400, 100, Items.COOKIE, Items.SUGAR, Items.COOKIE, "stone"); TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_BRIDGE), 600, 50, Blocks.SOUL_SAND, Blocks.SOUL_SAND, "stone", Blocks.OBSIDIAN); TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_SEVERANCE), 800, 70, Items.ENDER_EYE, Items.ENDER_PEARL, "ingotGold", "ingotGold"); @@ -369,7 +369,7 @@ public class ModRecipes TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_TELEPOSITION), 1500, 200, ModBlocks.TELEPOSER, "glowstone", "blockRedstone", "ingotGold"); TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_TRANSPOSITION), 1500, 200, ModBlocks.TELEPOSER, "gemDiamond", Items.ENDER_PEARL, Blocks.OBSIDIAN); TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_CLAW), 800, 120, Items.FLINT, Items.FLINT, ItemCuttingFluid.getStack(ItemCuttingFluid.BASIC)); - TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_BOUNCE), 200, 20, Blocks.SLIME_BLOCK, Blocks.SLIME_BLOCK, Items.LEATHER, Items.STRING); + TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_BOUNCE), 200, 20, Blocks.SLIME_BLOCK, Blocks.SLIME_BLOCK, Items.LEATHER, "string"); TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_FROST), 80, 10, Blocks.ICE, Items.SNOWBALL, Items.SNOWBALL, "dustRedstone"); TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(ModItems.SENTIENT_ARMOUR_GEM), 240, 150, Items.DIAMOND_CHESTPLATE, new ItemStack(ModItems.SOUL_GEM, 1, 1), Blocks.IRON_BLOCK, Blocks.OBSIDIAN); @@ -399,7 +399,7 @@ public class ModRecipes AlchemyTableRecipeRegistry.registerRecipe(new ItemStack(Items.FLINT, 2), 0, 20, 0, Blocks.GRAVEL, Items.FLINT); AlchemyTableRecipeRegistry.registerRecipe(new ItemStack(Items.LEATHER, 4), 100, 200, 1, Items.ROTTEN_FLESH, Items.ROTTEN_FLESH, Items.ROTTEN_FLESH, Items.ROTTEN_FLESH, Items.FLINT, Items.WATER_BUCKET); - AlchemyTableRecipeRegistry.registerRecipe(ItemCuttingFluid.getStack(ItemCuttingFluid.EXPLOSIVE), 500, 200, 1, Items.GUNPOWDER, Items.GUNPOWDER, "dustCoal"); + AlchemyTableRecipeRegistry.registerRecipe(ItemCuttingFluid.getStack(ItemCuttingFluid.EXPLOSIVE), 500, 200, 1, "gunpowder", "gunpowder", "dustCoal"); AlchemyTableRecipeRegistry.registerRecipe(new ItemStack(Items.BREAD), 100, 200, 1, Items.WHEAT, Items.SUGAR); AlchemyTableRecipeRegistry.registerRecipe(new ItemStack(Blocks.GRASS), 200, 200, 1, Blocks.DIRT, new ItemStack(Items.DYE, 1, 15), Items.WHEAT_SEEDS); @@ -413,7 +413,7 @@ public class ModRecipes AlchemyTableRecipeRegistry.registerRecipe(new AlchemyTableCustomRecipe(ItemComponent.getStack(ItemComponent.SAND_COAL, 4), 100, 100, 1, new ItemStack(Items.COAL, 1, 0), new ItemStack(Items.COAL, 1, 0), Items.FLINT)); - AlchemyTableRecipeRegistry.registerRecipe(ItemCuttingFluid.getStack(ItemCuttingFluid.BASIC), 1000, 400, 1, "dustCoal", Items.GUNPOWDER, Items.REDSTONE, Items.SUGAR, ItemComponent.getStack(ItemComponent.PLANT_OIL), new ItemStack(Items.POTIONITEM)); + AlchemyTableRecipeRegistry.registerRecipe(ItemCuttingFluid.getStack(ItemCuttingFluid.BASIC), 1000, 400, 1, "dustCoal", "gunpowder", Items.REDSTONE, Items.SUGAR, ItemComponent.getStack(ItemComponent.PLANT_OIL), new ItemStack(Items.POTIONITEM)); AlchemyTableRecipeRegistry.registerRecipe(new AlchemyTableCustomRecipe(ItemComponent.getStack(ItemComponent.SAND_IRON, 2), 400, 200, 1, "oreIron", ItemCuttingFluid.getStack(ItemCuttingFluid.BASIC))); AlchemyTableRecipeRegistry.registerRecipe(new AlchemyTableCustomRecipe(ItemComponent.getStack(ItemComponent.SAND_GOLD, 2), 400, 200, 1, "oreGold", ItemCuttingFluid.getStack(ItemCuttingFluid.BASIC))); @@ -428,21 +428,21 @@ public class ModRecipes AlchemyTableRecipeRegistry.registerRecipe(new AlchemyTableCustomRecipe(new ItemStack(Blocks.GRAVEL), 50, 50, 1, "cobblestone", ItemCuttingFluid.getStack(ItemCuttingFluid.EXPLOSIVE))); AlchemyTableRecipeRegistry.registerRecipe(new AlchemyTableCustomRecipe(new ItemStack(Blocks.SAND), 50, 50, 1, Blocks.GRAVEL, ItemCuttingFluid.getStack(ItemCuttingFluid.EXPLOSIVE))); - AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.PLANT_OIL), 100, 100, 1, Items.CARROT, Items.CARROT, Items.CARROT, new ItemStack(Items.DYE, 1, 15)); - AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.PLANT_OIL), 100, 100, 1, Items.POTATO, Items.POTATO, new ItemStack(Items.DYE, 1, 15)); - AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.PLANT_OIL), 100, 100, 1, Items.WHEAT, Items.WHEAT, new ItemStack(Items.DYE, 1, 15)); + AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.PLANT_OIL), 100, 100, 1, "cropCarrot", "cropCarrot", "cropCarrot", new ItemStack(Items.DYE, 1, 15)); + AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.PLANT_OIL), 100, 100, 1, "cropPotato", "cropPotato", new ItemStack(Items.DYE, 1, 15)); + AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.PLANT_OIL), 100, 100, 1, "cropWheat", "cropWheat", new ItemStack(Items.DYE, 1, 15)); AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.PLANT_OIL), 100, 100, 1, Items.BEETROOT, Items.BEETROOT, Items.BEETROOT, new ItemStack(Items.DYE, 1, 15)); AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.NEURO_TOXIN), 1000, 100, 2, new ItemStack(Items.FISH, 1, 3)); - AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.ANTISEPTIC, 2), 1000, 200, 2, ItemComponent.getStack(ItemComponent.PLANT_OIL), "nuggetGold", Items.WHEAT, Items.SUGAR, Blocks.BROWN_MUSHROOM, Blocks.RED_MUSHROOM); + AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.ANTISEPTIC, 2), 1000, 200, 2, ItemComponent.getStack(ItemComponent.PLANT_OIL), "nuggetGold", "cropWheat", Items.SUGAR, Blocks.BROWN_MUSHROOM, Blocks.RED_MUSHROOM); AlchemyTableRecipeRegistry.registerRecipe(ItemLivingArmourPointsUpgrade.getStack(ItemLivingArmourPointsUpgrade.DRAFT_ANGELUS), 20000, 400, 3, ItemComponent.getStack(ItemComponent.NEURO_TOXIN), ItemComponent.getStack(ItemComponent.ANTISEPTIC), "dustGold", Items.FERMENTED_SPIDER_EYE, new ItemStack(ModItems.BLOOD_SHARD, 1, 0), Items.GHAST_TEAR); AlchemyTableRecipeRegistry.registerRecipe(new AlchemyTableDyeableRecipe(0, 100, 0, new ItemStack(ModItems.SIGIL_HOLDING))); - AlchemyTableRecipeRegistry.registerRecipe(new ItemStack(ModItems.POTION_FLASK), 1000, 200, 2, new ItemStack(Items.POTIONITEM), Items.NETHER_WART, Items.REDSTONE, Items.GLOWSTONE_DUST); - AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.CATALYST_LENGTH_1), 1000, 100, 2, Items.GUNPOWDER, Items.NETHER_WART, "gemLapis"); - AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.CATALYST_POWER_1), 1000, 100, 2, Items.GUNPOWDER, Items.NETHER_WART, "dustRedstone"); + AlchemyTableRecipeRegistry.registerRecipe(new ItemStack(ModItems.POTION_FLASK), 1000, 200, 2, new ItemStack(Items.POTIONITEM), "cropNetherWart", "dustRedstone", "dustGlowstone"); + AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.CATALYST_LENGTH_1), 1000, 100, 2, "gunpowder", "cropNetherWart", "gemLapis"); + AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.CATALYST_POWER_1), 1000, 100, 2, "gunpowder", "cropNetherWart", "dustRedstone"); } public static void addOreDoublingAlchemyRecipes() @@ -491,7 +491,7 @@ public class ModRecipes addPotionRecipe(1000, 1, new ItemStack(Items.BEETROOT), new PotionEffect(ModPotions.deafness, 450)); // AlchemyTableRecipeRegistry.registerRecipe(new AlchemyTablePotionRecipe(5000, 100, 4, new ItemStack(Blocks.SLIME_BLOCK), new PotionEffect(ModPotions.bounce, 15 * 60 * 20))); -// AlchemyTableRecipeRegistry.registerRecipe(new AlchemyTablePotionRecipe(5000, 100, 4, new ItemStack(Items.STRING), new PotionEffect(ModPotions.bounce, 15 * 60 * 20))); +// AlchemyTableRecipeRegistry.registerRecipe(new AlchemyTablePotionRecipe(5000, 100, 4, new ItemStack("string"), new PotionEffect(ModPotions.bounce, 15 * 60 * 20))); } static ItemStack mundaneLengtheningStack = ItemComponent.getStack(ItemComponent.CATALYST_LENGTH_1); @@ -547,10 +547,10 @@ public class ModRecipes LivingArmourDowngradeRecipeRegistry.registerDialog(keyStack, textMap); } - LivingArmourDowngradeRecipeRegistry.registerRecipe(new LivingArmourUpgradeStormTrooper(0), bowStack, Items.ARROW, Items.STRING, "ingotIron", "ingotIron"); + LivingArmourDowngradeRecipeRegistry.registerRecipe(new LivingArmourUpgradeStormTrooper(0), bowStack, Items.ARROW, "string", "ingotIron", "ingotIron"); LivingArmourDowngradeRecipeRegistry.registerRecipe(new LivingArmourUpgradeStormTrooper(1), bowStack, Items.SPECTRAL_ARROW, "ingotGold", "dustRedstone", "dustGlowstone", "gemLapis"); - LivingArmourDowngradeRecipeRegistry.registerRecipe(new LivingArmourUpgradeStormTrooper(2), bowStack, "gemDiamond", Items.FIRE_CHARGE, Items.BLAZE_ROD, Items.FEATHER); - LivingArmourDowngradeRecipeRegistry.registerRecipe(new LivingArmourUpgradeStormTrooper(3), bowStack, Items.PRISMARINE_SHARD, Items.BLAZE_ROD, Items.FEATHER, Items.FEATHER); + LivingArmourDowngradeRecipeRegistry.registerRecipe(new LivingArmourUpgradeStormTrooper(2), bowStack, "gemDiamond", Items.FIRE_CHARGE, Items.BLAZE_ROD, "feather"); + LivingArmourDowngradeRecipeRegistry.registerRecipe(new LivingArmourUpgradeStormTrooper(3), bowStack, Items.PRISMARINE_SHARD, Items.BLAZE_ROD, "feather", "feather"); LivingArmourDowngradeRecipeRegistry.registerRecipe(new LivingArmourUpgradeStormTrooper(4), bowStack, new ItemStack(Items.TIPPED_ARROW, 1, OreDictionary.WILDCARD_VALUE), new ItemStack(Items.TIPPED_ARROW, 1, OreDictionary.WILDCARD_VALUE), new ItemStack(Items.TIPPED_ARROW, 1, OreDictionary.WILDCARD_VALUE)); // LivingArmourDowngradeRecipeRegistry.registerDialog(bowStack, bowMap); LivingArmourDowngradeRecipeRegistry.registerRecipe(new LivingArmourUpgradeQuenched(0), bottleStack, Items.DRAGON_BREATH); From c607a1ccad547f1fc253e44789cf58c5618d4354 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Tue, 14 Mar 2017 20:17:57 -0700 Subject: [PATCH 56/82] Rewrite the placer ritual Includes a slight nerf: Instead of placing the entire 25x25 at the same time, it now places 1 block at a time. This was brought on by 30 minutes of debugging an intended feature that was mistaken for a bug in #1103 TODO: Rewrite most of the rituals to get rid of any remaining legacy code (cherry picked from commit a5a47c4) --- .../bloodmagic/ritual/RitualPlacer.java | 63 ++++++------------- 1 file changed, 18 insertions(+), 45 deletions(-) diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualPlacer.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualPlacer.java index a37bf73d..e587fce9 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualPlacer.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualPlacer.java @@ -3,8 +3,9 @@ package WayofTime.bloodmagic.ritual; import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.ritual.*; import net.minecraft.block.Block; -import net.minecraft.inventory.IInventory; +import net.minecraft.block.state.IBlockState; import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.util.EnumFacing; @@ -46,64 +47,36 @@ public class RitualPlacer extends Ritual } AreaDescriptor areaDescriptor = getBlockRange(PLACER_RANGE); - IInventory iInventory; if (tileEntity != null) { - // Using the new Forge inventory system if (tileEntity.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, EnumFacing.DOWN)) { - IItemHandler iItemHandler = tileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, EnumFacing.DOWN); + IItemHandler itemHandler = tileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, EnumFacing.DOWN); - if (iItemHandler.getSlots() <= 0) + if (itemHandler.getSlots() <= 0) { return; } + posLoop: for (BlockPos blockPos : areaDescriptor.getContainedPositions(masterRitualStone.getBlockPos())) { - for (int inv = 0; inv < iItemHandler.getSlots(); inv++) - { - if (world.getBlockState(blockPos).getBlock().isReplaceable(world, blockPos) && iItemHandler.getStackInSlot(inv) != null && iItemHandler.getStackInSlot(inv).stackSize != 0) - { - if (iItemHandler.getStackInSlot(inv).getItem() instanceof ItemBlock && world.getBlockState(blockPos.down()) != null) - { - if (iItemHandler.extractItem(inv, 1, true) != null) - { - world.setBlockState(blockPos, Block.getBlockFromItem(iItemHandler.getStackInSlot(inv).getItem()).getStateFromMeta(iItemHandler.getStackInSlot(inv).getItemDamage())); - iItemHandler.extractItem(inv, 1, false); - tileEntity.markDirty(); - masterRitualStone.getOwnerNetwork().syphon(getRefreshCost()); - } - } - } - } - } - //Compatibility with the old system, as it still exists - } else if (tileEntity instanceof IInventory) - { - iInventory = (IInventory) tileEntity; + if (!world.getBlockState(blockPos).getBlock().isReplaceable(world, blockPos)) + continue; - if (iInventory.getSizeInventory() <= 0) - { - return; - } - - for (BlockPos blockPos : areaDescriptor.getContainedPositions(masterRitualStone.getBlockPos())) - { - for (int inv = 0; inv < iInventory.getSizeInventory(); inv++) + for (int invSlot = 0; invSlot < itemHandler.getSlots(); invSlot++) { - if (world.getBlockState(blockPos).getBlock().isReplaceable(world, blockPos) && iInventory.getStackInSlot(inv) != null && iInventory.getStackInSlot(inv).stackSize != 0) - { - if (iInventory.getStackInSlot(inv).getItem() instanceof ItemBlock && world.getBlockState(blockPos.down()) != null) - { - world.setBlockState(blockPos, Block.getBlockFromItem(iInventory.getStackInSlot(inv).getItem()).getStateFromMeta(iInventory.getStackInSlot(inv).getItemDamage())); - iInventory.decrStackSize(inv, 1); - iInventory.markDirty(); - masterRitualStone.getOwnerNetwork().syphon(getRefreshCost()); - break; - } - } + ItemStack stack = itemHandler.extractItem(invSlot, 1, true); + if (stack == null || !(stack.getItem() instanceof ItemBlock)) + continue; + + IBlockState placeState = Block.getBlockFromItem(itemHandler.getStackInSlot(invSlot).getItem()).getStateFromMeta(itemHandler.getStackInSlot(invSlot).getItemDamage()); + world.setBlockState(blockPos, placeState); + itemHandler.extractItem(invSlot, 1, false); + tileEntity.markDirty(); + masterRitualStone.getOwnerNetwork().syphon(getRefreshCost()); + break posLoop; // Break instead of return in case we add things later } } } From ad4674587969639908af330ff04ac5c1c0667dc9 Mon Sep 17 00:00:00 2001 From: "Urey. Xue" Date: Sun, 19 Mar 2017 12:54:40 -0400 Subject: [PATCH 57/82] Update zh_CN.lang (#1052) * Simp. Chinese translation for SANGVINE SCIENTIEM, round I * Simp. Chinese translation for SANGVINE SCIENTIEM, round I Also contains update for main language file * Amendment I * Amendment II * use "/cut" to trick String.split(), so that we could manually split page * Minor improvements on translation * Amendment III * Amendment IV * Amendment V * Amendment VI --- .../assets/bloodmagic/lang/zh_CN.lang | 531 +++++++++--------- .../assets/bloodmagicguide/lang/zh_CN.lang | 258 +++++++++ 2 files changed, 527 insertions(+), 262 deletions(-) create mode 100644 src/main/resources/assets/bloodmagicguide/lang/zh_CN.lang diff --git a/src/main/resources/assets/bloodmagic/lang/zh_CN.lang b/src/main/resources/assets/bloodmagic/lang/zh_CN.lang index d77a4201..fcdb70d5 100644 --- a/src/main/resources/assets/bloodmagic/lang/zh_CN.lang +++ b/src/main/resources/assets/bloodmagic/lang/zh_CN.lang @@ -1,6 +1,6 @@ #Creative Tab itemGroup.BloodMagic.creativeTab=血魔法 -itemGroup.BloodMagic.creativeTabTome=血魔法强化手册 +itemGroup.BloodMagic.creativeTabTome=血魔法|手册 #Items item.BloodMagic.activationCrystal.weak.name=[虚弱]激活水晶 @@ -22,12 +22,12 @@ item.BloodMagic.bound.shovel.name=束缚之锹 item.BloodMagic.bucket.lifeEssence.name=生命源质桶 -item.BloodMagic.scribe.water.name=元素铭文工具: 水 -item.BloodMagic.scribe.fire.name=元素铭文工具: 火 -item.BloodMagic.scribe.earth.name=元素铭文工具: 土 -item.BloodMagic.scribe.air.name=元素铭文工具: 风 -item.BloodMagic.scribe.dusk.name=元素铭文工具: 薄暮 -item.BloodMagic.scribe.dawn.name=元素铭文工具: 破晓 +item.BloodMagic.scribe.water.name=元素铭文工具:水 +item.BloodMagic.scribe.fire.name=元素铭文工具:火 +item.BloodMagic.scribe.earth.name=元素铭文工具:土 +item.BloodMagic.scribe.air.name=元素铭文工具:风 +item.BloodMagic.scribe.dusk.name=元素铭文工具:薄暮 +item.BloodMagic.scribe.dawn.name=元素铭文工具:破晓 item.BloodMagic.focus.weak.name=传送核心 item.BloodMagic.focus.enhanced.name=[加强]传送核心 @@ -111,13 +111,13 @@ item.BloodMagic.demonCrystal.crystalDefault.name=恶魔意志晶体 item.BloodMagic.demonCrystal.crystalCorrosive.name=腐蚀意志晶体 item.BloodMagic.demonCrystal.crystalDestructive.name=破坏意志晶体 item.BloodMagic.demonCrystal.crystalVengeful.name=复仇意志晶体 -item.BloodMagic.demonCrystal.crystalSteadfast.name=坚定意志晶体 +item.BloodMagic.demonCrystal.crystalSteadfast.name=坚毅意志晶体 item.BloodMagic.monsterSoul.base.name=[原生]恶魔意志 item.BloodMagic.monsterSoul.corrosive.name=[腐蚀]恶魔意志 item.BloodMagic.monsterSoul.destructive.name=[破坏]恶魔意志 item.BloodMagic.monsterSoul.vengeful.name=[复仇]恶魔意志 -item.BloodMagic.monsterSoul.steadfast.name=[坚定]恶魔意志 +item.BloodMagic.monsterSoul.steadfast.name=[坚毅]恶魔意志 item.BloodMagic.sigil.air.name=风之印记 item.BloodMagic.sigil.bloodLight.name=血光印记 @@ -137,6 +137,7 @@ item.BloodMagic.sigil.phantomBridge.name=影桥印记 item.BloodMagic.sigil.whirlwind.name=旋风印记 item.BloodMagic.sigil.enderSeverance.name=绝影印记 item.BloodMagic.sigil.holding.name=集持印记 +item.BloodMagic.sigil.holding.display=&r%s:&o&n%s item.BloodMagic.sigil.teleposition.name=传送印记 item.BloodMagic.sigil.transposition.name=移位印记 item.BloodMagic.sigil.claw.name=爪之印记 @@ -161,14 +162,15 @@ item.BloodMagic.ritualReader.name=仪式调整钳 item.BloodMagic.arcaneAshes.name=奥术粉灰 item.BloodMagic.upgradeTome.name=束灵盔甲强化手册 +item.BloodMagic.downgradeTome.name=束灵盔甲降级手册 item.BloodMagic.upgradeTrainer.name=束灵盔甲训练手镯 item.BloodMagic.sentientSword.name=感知之剑 -item.BloodMagic.soulGem.petty.name=[微小]塔尔塔宝石 -item.BloodMagic.soulGem.lesser.name=[细块]塔尔塔宝石 -item.BloodMagic.soulGem.common.name=[普通]塔尔塔宝石 -item.BloodMagic.soulGem.greater.name=[较大]塔尔塔宝石 -item.BloodMagic.soulGem.grand.name=[精制]塔尔塔宝石 +item.BloodMagic.soulGem.petty.name=[微小]地狱魂石 +item.BloodMagic.soulGem.lesser.name=[细块]地狱魂石 +item.BloodMagic.soulGem.common.name=[普通]地狱魂石 +item.BloodMagic.soulGem.greater.name=[较大]地狱魂石 +item.BloodMagic.soulGem.grand.name=[精制]地狱魂石 item.BloodMagic.soulSnare.base.name=原始投网 item.BloodMagic.sentientBow.name=感知之弓 item.BloodMagic.sentientArmourGem.name=感知盔甲宝石 @@ -181,13 +183,14 @@ item.BloodMagic.itemFilter.exact.name=精确物品筛选器 item.BloodMagic.itemFilter.ignoreNBT.name=NBT物品筛选器 item.BloodMagic.itemFilter.modItems.name=Mod物品筛选器 item.BloodMagic.itemFilter.oreDict.name=矿物物品筛选器 +item.BloodMagic.fluidFilter.exact.name=精确液体筛选器 item.BloodMagic.experienceTome.name=经验手册 item.BloodMagic.sanguineBook.name=指示之书 item.BloodMagic.livingPointUpgrade.draftAngelus.name=祷告之始 -item.BloodMagic.willGauge.name=灵域测量器 +item.BloodMagic.willGauge.name=灵域测量仪 item.BloodMagic.potionFlask.name=药剂瓶 # Blocks @@ -195,6 +198,7 @@ tile.BloodMagic.fluid.lifeEssence.name=生命源质 tile.BloodMagic.stone.ritual.master.name=主仪式石 tile.BloodMagic.stone.ritual.imperfect.name=不完善的仪式石 +tile.BloodMagic.stone.ritual.inverted.name=反转的主仪式石 tile.BloodMagic.altar.name=血之祭坛 tile.BloodMagic.alchemyArray.name=&r&f炼金矩阵 @@ -251,13 +255,13 @@ tile.BloodMagic.path.obsidian.name=黑曜石砖路面 tile.BloodMagic.path.obsidiantile.name=黑曜石瓦路面 tile.BloodMagic.dimensionalPortal.name=空间传送门 -tile.BloodMagic.bloodTank.name=血液槽 +tile.BloodMagic.bloodTank.name=血法师的储罐 tile.BloodMagic.demonCrystal.default.name=[原生]意志晶簇 tile.BloodMagic.demonCrystal.corrosive.name=[腐蚀]意志晶簇 tile.BloodMagic.demonCrystal.destructive.name=[破坏]意志晶簇 tile.BloodMagic.demonCrystal.vengeful.name=[复仇]意志晶簇 -tile.BloodMagic.demonCrystal.steadfast.name=[坚定]意志晶簇 +tile.BloodMagic.demonCrystal.steadfast.name=[坚毅]意志晶簇 tile.BloodMagic.mimic.nohitbox.name=[悬幽]拟态方块 tile.BloodMagic.mimic.solidopaque.name=拟态方块 @@ -269,115 +273,115 @@ tile.BloodMagic.bricks1.brick1_raw.name=原生石砖 tile.BloodMagic.bricks1.brick1_corrosive.name=腐蚀石砖 tile.BloodMagic.bricks1.brick1_destructive.name=破坏石砖 tile.BloodMagic.bricks1.brick1_vengeful.name=复仇石砖 -tile.BloodMagic.bricks1.brick1_steadfast.name=坚定石砖 +tile.BloodMagic.bricks1.brick1_steadfast.name=坚毅石砖 tile.BloodMagic.bricks2.smallbrick_raw.name=小原生石砖 tile.BloodMagic.bricks2.smallbrick_corrosive.name=小腐蚀石砖 tile.BloodMagic.bricks2.smallbrick_destructive.name=小破坏石砖 tile.BloodMagic.bricks2.smallbrick_vengeful.name=小复仇石砖 -tile.BloodMagic.bricks2.smallbrick_steadfast.name=小坚定石砖 +tile.BloodMagic.bricks2.smallbrick_steadfast.name=小坚毅石砖 tile.BloodMagic.bricks2.tile_raw.name=原生石瓦 tile.BloodMagic.bricks2.tile_corrosive.name=腐蚀石瓦 tile.BloodMagic.bricks2.tile_destructive.name=破坏石瓦 tile.BloodMagic.bricks2.tile_vengeful.name=复仇石瓦 -tile.BloodMagic.bricks2.tile_steadfast.name=坚定石瓦 +tile.BloodMagic.bricks2.tile_steadfast.name=坚毅石瓦 tile.BloodMagic.bricks2.tilespecial_raw.name=二重原生石瓦 tile.BloodMagic.bricks2.tilespecial_corrosive.name=二重腐蚀石瓦 tile.BloodMagic.bricks2.tilespecial_destructive.name=二重破坏石瓦 tile.BloodMagic.bricks2.tilespecial_vengeful.name=二重复仇石瓦 -tile.BloodMagic.bricks2.tilespecial_steadfast.name=二重坚定石瓦 +tile.BloodMagic.bricks2.tilespecial_steadfast.name=二重坚毅石瓦 tile.BloodMagic.inversionpillar.raw.name=[原生]反转柱 tile.BloodMagic.inversionpillar.corrosive.name=[腐蚀]反转柱 tile.BloodMagic.inversionpillar.destructive.name=[破坏]反转柱 tile.BloodMagic.inversionpillar.vengeful.name=[复仇]反转柱 -tile.BloodMagic.inversionpillar.steadfast.name=[坚定]反转柱 +tile.BloodMagic.inversionpillar.steadfast.name=[坚毅]反转柱 tile.BloodMagic.inversionpillarend.raw_bottom.name=[原生]反转柱基 tile.BloodMagic.inversionpillarend.corrosive_bottom.name=[腐蚀]反转柱基 tile.BloodMagic.inversionpillarend.destructive_bottom.name=[破坏]反转柱基 tile.BloodMagic.inversionpillarend.vengeful_bottom.name=[复仇]反转柱基 -tile.BloodMagic.inversionpillarend.steadfast_bottom.name=[坚定]反转柱基 +tile.BloodMagic.inversionpillarend.steadfast_bottom.name=[坚毅]反转柱基 tile.BloodMagic.inversionpillarend.raw_top.name=[原生]反转柱顶盖 tile.BloodMagic.inversionpillarend.corrosive_top.name=[腐蚀]反转柱顶盖 tile.BloodMagic.inversionpillarend.destructive_top.name=[破坏]反转柱顶盖 tile.BloodMagic.inversionpillarend.vengeful_top.name=[复仇]反转柱顶盖 -tile.BloodMagic.inversionpillarend.steadfast_top.name=[坚定]反转柱顶盖 +tile.BloodMagic.inversionpillarend.steadfast_top.name=[坚毅]反转柱顶盖 tile.BloodMagic.demonlight.raw.name=[原生]意志之瞳 tile.BloodMagic.demonlight.corrosive.name=[腐蚀]意志之瞳 tile.BloodMagic.demonlight.destructive.name=[破坏]意志之瞳 tile.BloodMagic.demonlight.vengeful.name=[复仇]意志之瞳 -tile.BloodMagic.demonlight.steadfast.name=[坚定]意志之瞳 +tile.BloodMagic.demonlight.steadfast.name=[坚毅]意志之瞳 tile.BloodMagic.extras.stone_raw.name=原生石头 tile.BloodMagic.extras.stone_corrosive.name=腐蚀石头 tile.BloodMagic.extras.stone_destructive.name=破坏石头 tile.BloodMagic.extras.stone_vengeful.name=复仇石头 -tile.BloodMagic.extras.stone_steadfast.name=坚定石头 +tile.BloodMagic.extras.stone_steadfast.name=坚毅石头 tile.BloodMagic.extras.polished_raw.name=磨制原生石 tile.BloodMagic.extras.polished_corrosive.name=磨制腐蚀石 tile.BloodMagic.extras.polished_destructive.name=磨制破坏石 tile.BloodMagic.extras.polished_vengeful.name=磨制复仇石 -tile.BloodMagic.extras.polished_steadfast.name=磨制坚定石 +tile.BloodMagic.extras.polished_steadfast.name=磨制坚毅石 tile.BloodMagic.extras.metal_raw.name=原生意志合金 tile.BloodMagic.extras.metal_corrosive.name=腐蚀意志合金 tile.BloodMagic.extras.metal_destructive.name=破坏意志合金 tile.BloodMagic.extras.metal_vengeful.name=复仇意志合金 -tile.BloodMagic.extras.metal_steadfast.name=坚定意志合金 +tile.BloodMagic.extras.metal_steadfast.name=坚毅意志合金 tile.BloodMagic.pillar1.raw.name=原生石柱 tile.BloodMagic.pillar1.corrosive.name=腐蚀石柱 tile.BloodMagic.pillar1.destructive.name=破坏石柱 tile.BloodMagic.pillar1.vengeful.name=复仇石柱 -tile.BloodMagic.pillar1.steadfast.name=坚定石柱 +tile.BloodMagic.pillar1.steadfast.name=坚毅石柱 tile.BloodMagic.pillar2.raw.name=二重原生石柱 tile.BloodMagic.pillar2.corrosive.name=二重腐蚀石柱 tile.BloodMagic.pillar2.destructive.name=二重破坏石柱 tile.BloodMagic.pillar2.vengeful.name=二重复仇石柱 -tile.BloodMagic.pillar2.steadfast.name=二重坚定石柱 +tile.BloodMagic.pillar2.steadfast.name=二重坚毅石柱 tile.BloodMagic.pillarCap1.raw.name=原生顶柱 tile.BloodMagic.pillarCap1.corrosive.name=腐蚀顶柱 tile.BloodMagic.pillarCap2.destructive.name=破坏顶柱 tile.BloodMagic.pillarCap2.vengeful.name=复仇顶柱 -tile.BloodMagic.pillarCap3.steadfast.name=坚定顶柱 +tile.BloodMagic.pillarCap3.steadfast.name=坚毅顶柱 tile.BloodMagic.wall1.brick_raw.name=原生石砖墙 tile.BloodMagic.wall1.brick_corrosive.name=腐蚀石砖墙 tile.BloodMagic.wall1.brick_destructive.name=破坏石砖墙 tile.BloodMagic.wall1.brick_vengeful.name=复仇石砖墙 -tile.BloodMagic.wall1.brick_steadfast.name=坚定石砖墙 +tile.BloodMagic.wall1.brick_steadfast.name=坚毅石砖墙 tile.BloodMagic.wall1.smallbrick_raw.name=小原生石砖墙 tile.BloodMagic.wall1.smallbrick_corrosive.name=小腐蚀石砖墙 tile.BloodMagic.wall1.smallbrick_destructive.name=小破坏石砖墙 tile.BloodMagic.wall1.smallbrick_vengeful.name=小复仇石砖墙 -tile.BloodMagic.wall1.smallbrick_steadfast.name=小坚定石砖墙 +tile.BloodMagic.wall1.smallbrick_steadfast.name=小坚毅石砖墙 tile.BloodMagic.wall1.large_raw.name=原生石墙 tile.BloodMagic.wall1.large_corrosive.name=腐蚀石墙 tile.BloodMagic.wall1.large_destructive.name=破坏石墙 tile.BloodMagic.wall1.large_vengeful.name=复仇石墙 -tile.BloodMagic.wall1.large_steadfast.name=坚定石墙 +tile.BloodMagic.wall1.large_steadfast.name=坚毅石墙 tile.BloodMagic.stairs1.raw.name=原生石楼梯 tile.BloodMagic.stairs1.corrosive.name=腐蚀石楼梯 tile.BloodMagic.stairs2.destructive.name=破坏石楼梯 tile.BloodMagic.stairs2.vengeful.name=复仇石楼梯 -tile.BloodMagic.stairs3.steadfast.name=坚定石楼梯 +tile.BloodMagic.stairs3.steadfast.name=坚毅石楼梯 # Fluids fluid.lifeEssence=生命源质 # Tooltips -tooltip.BloodMagic.extraInfo=&9-按住 shift 了解更多信息- +tooltip.BloodMagic.extraInfo=&9-按住 Shift 了解更多信息- tooltip.BloodMagic.orb.desc=储存原生的生命源质 -tooltip.BloodMagic.orb.owner=来源: %s -tooltip.BloodMagic.currentOwner=当前所有者: %s -tooltip.BloodMagic.currentTier=当前层级: %d +tooltip.BloodMagic.orb.owner=来源:%s +tooltip.BloodMagic.currentOwner=当前所有者:%s +tooltip.BloodMagic.currentTier=当前层级:%d tooltip.BloodMagic.config.disabled=于配置信息中禁用 tooltip.BloodMagic.tier=层级 %d @@ -389,12 +393,12 @@ tooltip.BloodMagic.sigil.bloodLight.desc=&o我看见了一束光明! tooltip.BloodMagic.sigil.compression.desc=&o钻石之手 tooltip.BloodMagic.sigil.divination.desc=&o窥视灵魂 tooltip.BloodMagic.sigil.divination.otherNetwork=窥视 %s 的灵魂 -tooltip.BloodMagic.sigil.divination.currentAltarTier=当前层级: %d -tooltip.BloodMagic.sigil.divination.currentEssence=当前源质: %d LP -tooltip.BloodMagic.sigil.divination.currentAltarCapacity=当前容量: %d LP -tooltip.BloodMagic.sigil.divination.currentTranquility=当前静谧: %d -tooltip.BloodMagic.sigil.divination.currentInversion=当前反转: %d -tooltip.BloodMagic.sigil.divination.currentBonus=当前效益: +%d%% +tooltip.BloodMagic.sigil.divination.currentAltarTier=当前层级:%d +tooltip.BloodMagic.sigil.divination.currentEssence=当前源质:%d LP +tooltip.BloodMagic.sigil.divination.currentAltarCapacity=当前容量:%d LP +tooltip.BloodMagic.sigil.divination.currentTranquility=当前静谧:%d +tooltip.BloodMagic.sigil.divination.currentInversion=当前反转:%d +tooltip.BloodMagic.sigil.divination.currentBonus=当前效益:+%d%% tooltip.BloodMagic.sigil.water.desc=&o无限水源? tooltip.BloodMagic.sigil.lava.desc=&o噢好烫! 不要吃 tooltip.BloodMagic.sigil.void.desc=&o胜过速易洁®! @@ -405,25 +409,25 @@ tooltip.BloodMagic.sigil.haste.desc=&o42继咖啡因后... tooltip.BloodMagic.sigil.fastMiner.desc=&o继续挖, 继续挖... tooltip.BloodMagic.sigil.elementalAffinity.desc=&o落入焰中的鱼儿! tooltip.BloodMagic.sigil.seer.desc=&o当看到的一切还不足够 -tooltip.BloodMagic.sigil.seer.currentAltarProgress=当前进度: %d LP/ %s LP -tooltip.BloodMagic.sigil.seer.currentAltarProgress.percent=当前进度: %s -tooltip.BloodMagic.sigil.seer.currentAltarConsumptionRate=消耗率: %d LP -tooltip.BloodMagic.sigil.seer.currentAltarTier=当前层级: %d -tooltip.BloodMagic.sigil.seer.currentEssence=当前源质: %d LP -tooltip.BloodMagic.sigil.seer.currentAltarCapacity=当前容量: %d LP -tooltip.BloodMagic.sigil.seer.currentCharge=当前储能: %d -tooltip.BloodMagic.sigil.seer.currentTranquility=当前静谧: %d -tooltip.BloodMagic.sigil.seer.currentBonus=当前效益: +%d%% +tooltip.BloodMagic.sigil.seer.currentAltarProgress=当前进度:%d LP/ %s LP +tooltip.BloodMagic.sigil.seer.currentAltarProgress.percent=当前进度:%s +tooltip.BloodMagic.sigil.seer.currentAltarConsumptionRate=消耗率:%d LP +tooltip.BloodMagic.sigil.seer.currentAltarTier=当前层级:%d +tooltip.BloodMagic.sigil.seer.currentEssence=当前源质:%d LP +tooltip.BloodMagic.sigil.seer.currentAltarCapacity=当前容量:%d LP +tooltip.BloodMagic.sigil.seer.currentCharge=当前储能:%d +tooltip.BloodMagic.sigil.seer.currentTranquility=当前静谧:%d +tooltip.BloodMagic.sigil.seer.currentBonus=当前效益:+%d%% tooltip.BloodMagic.sigil.phantomBridge.desc=&o御气于青空之上... tooltip.BloodMagic.sigil.whirlwind.desc=&o最好不要穿裙子 -tooltip.BloodMagic.sigil.enderSeverance.desc=&o使末影人遇上一个严峻形势! -tooltip.BloodMagic.sigil.teleposition.desc=随时可以脱离这里. -tooltip.BloodMagic.sigil.transposition.desc=感受原力的力量, 我年轻的学徒. -tooltip.BloodMagic.sigil.holding.press=按下 &o%s&r&7 修改 +tooltip.BloodMagic.sigil.enderSeverance.desc=&o使末影人遇上一个严峻形势! +tooltip.BloodMagic.sigil.teleposition.desc=随时可以脱离这里。 +tooltip.BloodMagic.sigil.transposition.desc=感受原力的力量,我年轻的学徒。 +tooltip.BloodMagic.sigil.holding.press=按下&o%s&r&7修改 tooltip.BloodMagic.sigil.holding.desc=印记掌控 -tooltip.BloodMagic.sigil.holding.sigilInSlot=印记 %d: %s +tooltip.BloodMagic.sigil.holding.sigilInSlot=印记 %d:%s -tooltip.BloodMagic.livingArmourPointsUpgrade.desc=提升感知盔甲的最大点数至 %d. +tooltip.BloodMagic.livingArmourPointsUpgrade.desc=提升感知盔甲的最大点数至 %d。 tooltip.BloodMagic.bound.sword.desc=&o屠杀幼弱之生灵 tooltip.BloodMagic.bound.pickaxe.desc=&o无情地凿通大地 @@ -437,37 +441,37 @@ tooltip.BloodMagic.inscriber.desc=在墙面上的文字... tooltip.BloodMagic.pack.selfSacrifice.desc=相当不舒适的背包... tooltip.BloodMagic.pack.sacrifice.desc=描述 -tooltip.BloodMagic.pack.stored=储存: %d LP +tooltip.BloodMagic.pack.stored=储存:%d LP tooltip.BloodMagic.activationCrystal.weak=激活低等仪式 tooltip.BloodMagic.activationCrystal.awakened=激活更强大的仪式 tooltip.BloodMagic.activationCrystal.creative=创造模式 - 激活任何仪式 -tooltip.BloodMagic.diviner.currentRitual=当前仪式: -tooltip.BloodMagic.diviner.blankRune=空白仪式石: %d -tooltip.BloodMagic.diviner.waterRune=水之仪式石: %d -tooltip.BloodMagic.diviner.airRune=风之仪式石: %d -tooltip.BloodMagic.diviner.fireRune=火之仪式石: %d -tooltip.BloodMagic.diviner.earthRune=土之仪式石: %d -tooltip.BloodMagic.diviner.duskRune=薄暮仪式石: %d -tooltip.BloodMagic.diviner.dawnRune=破晓仪式石: %d -tooltip.BloodMagic.diviner.totalRune=仪式石总数: %d -tooltip.BloodMagic.diviner.extraInfo=&9-按 shift 了解详细信息- -tooltip.BloodMagic.diviner.extraExtraInfo=&9-按住 shift + M 展开更多信息- -tooltip.BloodMagic.diviner.currentDirection=当前朝向: %s +tooltip.BloodMagic.diviner.currentRitual=当前仪式: +tooltip.BloodMagic.diviner.blankRune=空白仪式石:%d +tooltip.BloodMagic.diviner.waterRune=水之仪式石:%d +tooltip.BloodMagic.diviner.airRune=风之仪式石:%d +tooltip.BloodMagic.diviner.fireRune=火之仪式石:%d +tooltip.BloodMagic.diviner.earthRune=土之仪式石:%d +tooltip.BloodMagic.diviner.duskRune=薄暮仪式石:%d +tooltip.BloodMagic.diviner.dawnRune=破晓仪式石:%d +tooltip.BloodMagic.diviner.totalRune=仪式石总数:%d +tooltip.BloodMagic.diviner.extraInfo=&9-按 Shift 了解详细信息- +tooltip.BloodMagic.diviner.extraExtraInfo=&9-按住 Shift + M 展开更多信息- +tooltip.BloodMagic.diviner.currentDirection=当前朝向:%s -tooltip.BloodMagic.ritualReader.currentState=当前模式: %s +tooltip.BloodMagic.ritualReader.currentState=当前模式:%s tooltip.BloodMagic.ritualReader.set_area=定义区域 tooltip.BloodMagic.ritualReader.information=信息 tooltip.BloodMagic.ritualReader.set_will_types=设置意志消耗 -tooltip.BloodMagic.ritualReader.desc.set_area=右击已激活仪式的主仪式石, 选至你想更改的区域, 随后分别右击新区域角落的两个方块. -tooltip.BloodMagic.ritualReader.desc.information=右击已激活仪式的主仪式石了解仪式的基本信息. +tooltip.BloodMagic.ritualReader.desc.set_area=右击已激活仪式的主仪式石,选至你想更改的区域,随后分别右击新区域角落的两个方块。 +tooltip.BloodMagic.ritualReader.desc.information=右击已激活仪式的主仪式石了解仪式的基本信息。 tooltip.BloodMagic.ritualReader.desc.set_will_types=设置仪式将消耗的恶魔意志类型, 工具栏中存放该类晶体右击主仪式石. tooltip.BloodMagic.arcaneAshes=用于绘制炼金矩阵的粉灰 -tooltip.BloodMagic.telepositionFocus.coords=当前坐标: (%d, %d, %d) -tooltip.BloodMagic.telepositionFocus.dimension=世界ID: %d +tooltip.BloodMagic.telepositionFocus.coords=当前坐标:(%d, %d, %d) +tooltip.BloodMagic.telepositionFocus.dimension=世界ID:%d tooltip.BloodMagic.telepositionFocus.weak=用于在世界中转移区域 tooltip.BloodMagic.telepositionFocus.enhanced=用于在世界中转移区域 tooltip.BloodMagic.telepositionFocus.reinforced=用于在世界中转移区域 @@ -508,70 +512,75 @@ tooltip.BloodMagic.livingArmour.upgrade.meleeDecrease=钝拙之刃 tooltip.BloodMagic.livingArmour.upgrade.digSlowdown=弱化挖掘 tooltip.BloodMagic.livingArmour.upgrade.stormTrooper=风暴骑兵 tooltip.BloodMagic.livingArmour.upgrade.slowHeal=愈合延缓 -tooltip.BloodMagic.livingArmour.upgrade.level=%s (等级 %d) -tooltip.BloodMagic.livingArmour.upgrade.points=&6强化点数: %s / %s +tooltip.BloodMagic.livingArmour.upgrade.disoriented=平衡失调 -tooltip.BloodMagic.livingArmour.extraExtraInfo=&9-按住 shift + M 查看进展信息- +tooltip.BloodMagic.livingArmour.upgrade.level=%s(等级 %d) +tooltip.BloodMagic.livingArmour.upgrade.progress=%s(%d/100) +tooltip.BloodMagic.livingArmour.upgrade.points=&6强化点数:%s / %s -tooltip.BloodMagic.will=意志质量: %1$,.2f -tooltip.BloodMagic.sentientSword.desc=以恶魔意志唤起其最大潜能. -tooltip.BloodMagic.sentientAxe.desc=以恶魔意志唤起其最大潜能. -tooltip.BloodMagic.sentientPickaxe.desc=以恶魔意志唤起其最大潜能. -tooltip.BloodMagic.sentientShovel.desc=以恶魔意志唤起其最大潜能. -tooltip.BloodMagic.soulGem.petty=用于存储微量意志的晶石 -tooltip.BloodMagic.soulGem.lesser=用于存储少量意志的晶石 -tooltip.BloodMagic.soulGem.common=用于存储更多意志的晶石 -tooltip.BloodMagic.soulGem.greater=用于存储大量意志的晶石 -tooltip.BloodMagic.soulGem.grand=用于存储极大数额意志的晶石 +tooltip.BloodMagic.livingArmour.extraExtraInfo=&9-按住 Shift + M 查看进展信息- + +tooltip.BloodMagic.will=意志质量:%1$,.2f +tooltip.BloodMagic.sentientSword.desc=以恶魔意志唤起其最大潜能。 +tooltip.BloodMagic.sentientAxe.desc=以恶魔意志唤起其最大潜能。 +tooltip.BloodMagic.sentientPickaxe.desc=以恶魔意志唤起其最大潜能。 +tooltip.BloodMagic.sentientShovel.desc=以恶魔意志唤起其最大潜能。 +tooltip.BloodMagic.soulGem.petty=用于存储微量意志的宝石 +tooltip.BloodMagic.soulGem.lesser=用于存储少量意志的宝石 +tooltip.BloodMagic.soulGem.common=用于存储更多意志的宝石 +tooltip.BloodMagic.soulGem.greater=用于存储大量意志的宝石 +tooltip.BloodMagic.soulGem.grand=用于存储极大数额意志的宝石 tooltip.BloodMagic.soulSnare.desc=投掷向怪物并消灭它们来获取附于其身的恶魔意志 -tooltip.BloodMagic.itemFilter.exact=将确保物品精确匹配 +tooltip.BloodMagic.itemFilter.exact=精确匹配物品 tooltip.BloodMagic.itemFilter.ignoreNBT=忽视筛选的NBT tooltip.BloodMagic.itemFilter.modItems=同Mod的物品全部匹配 -tooltip.BloodMagic.itemFilter.oreDict=凭借矿物辞典筛选 +tooltip.BloodMagic.itemFilter.oreDict=按矿物辞典筛选 -tooltip.BloodMagic.fluid.type=所含液体 -tooltip.BloodMagic.fluid.amount=数量 -tooltip.BloodMagic.fluid.capacity=容量 +tooltip.BloodMagic.itemFilter.exact=精确匹配液体 + +tooltip.BloodMagic.fluid.type=所含液体:%s +tooltip.BloodMagic.fluid.amount=数量:%d / %d mB +tooltip.BloodMagic.fluid.capacity=容量:%d mB tooltip.BloodMagic.ghost.everything=任何物品 -tooltip.BloodMagic.ghost.amount=幽灵物品数量: %d +tooltip.BloodMagic.ghost.amount=幽灵物品数量:%d -tooltip.BloodMagic.currentType.default=蕴含: 原生意志 -tooltip.BloodMagic.currentType.corrosive=蕴含: 腐蚀意志 -tooltip.BloodMagic.currentType.destructive=蕴含: 破坏意志 -tooltip.BloodMagic.currentType.vengeful=蕴含: 复仇意志 -tooltip.BloodMagic.currentType.steadfast=蕴含: 坚定意志 +tooltip.BloodMagic.currentType.default=蕴含:原生意志 +tooltip.BloodMagic.currentType.corrosive=蕴含:腐蚀意志 +tooltip.BloodMagic.currentType.destructive=蕴含:破坏意志 +tooltip.BloodMagic.currentType.vengeful=蕴含:复仇意志 +tooltip.BloodMagic.currentType.steadfast=蕴含:坚毅意志 tooltip.BloodMagic.currentBaseType.default=原生 tooltip.BloodMagic.currentBaseType.corrosive=腐蚀 tooltip.BloodMagic.currentBaseType.destructive=破坏 tooltip.BloodMagic.currentBaseType.vengeful=复仇 -tooltip.BloodMagic.currentBaseType.steadfast=坚定 +tooltip.BloodMagic.currentBaseType.steadfast=坚毅 tooltip.BloodMagic.experienceTome=用于储存经验的书 -tooltip.BloodMagic.experienceTome.exp=经验值: %0.3f -tooltip.BloodMagic.experienceTome.expLevel=等级: %d +tooltip.BloodMagic.experienceTome.exp=经验值:%0.3f +tooltip.BloodMagic.experienceTome.expLevel=等级:%d tooltip.BloodMagic.decoration.safe=安全装潢 tooltip.BloodMagic.decoration.notSafe=危险装潢 tooltip.BloodMagic.cuttingFluidRatio=%d/%d 所剩可用 -tooltip.BloodMagic.potion.uses=%d 使用剩余 +tooltip.BloodMagic.potion.uses=剩余使用次数:%d tooltip.BloodMagic.book.shifting=这些符号似乎... &o在变换着... -tooltip.BloodMagic.willGauge=一个奇怪的装置, 可以测量恶魔灵域中的恶魔意志. +tooltip.BloodMagic.willGauge=一个奇怪的装置,可以测量恶魔灵域中的恶魔意志。 # Ritual -ritual.BloodMagic.blockRange.tooBig=提供的方块范围过大! 最多不超过 %s 个方块. -ritual.BloodMagic.blockRange.tooFar=提供的方块范围太远! 需要在垂直距离 %s , 水平距离 %s 之内. -ritual.BloodMagic.blockRange.inactive=该仪式石目前无活动, 没有可修改的范围. -ritual.BloodMagic.blockRange.noRange=范围选择不恰当. -ritual.BloodMagic.blockRange.firstBlock=记录新范围的第一个方块. -ritual.BloodMagic.blockRange.success=新范围设置成功! -ritual.BloodMagic.willConfig.set=该仪式将使用这类恶魔意志类型: %s +ritual.BloodMagic.blockRange.tooBig=提供的方块范围过大!最多不超过 %s 个方块。 +ritual.BloodMagic.blockRange.tooFar=提供的方块范围太远!需要在垂直距离 %s , 水平距离 %s 之内。 +ritual.BloodMagic.blockRange.inactive=该仪式石目前无活动,没有可修改的范围。 +ritual.BloodMagic.blockRange.noRange=范围选择不恰当。 +ritual.BloodMagic.blockRange.firstBlock=记录新范围的第一个方块。 +ritual.BloodMagic.blockRange.success=新范围设置成功! +ritual.BloodMagic.willConfig.set=该仪式将使用这类恶魔意志类型:%s ritual.BloodMagic.willConfig.void=该仪式不再会使用恶魔意志 ritual.BloodMagic.testRitual=测试仪式 @@ -609,105 +618,108 @@ ritual.BloodMagic.downgradeRitual=沉重灵魂的忏悔 ritual.BloodMagic.waterRitual.info=通过主仪式石生成一个水源方块 ritual.BloodMagic.lavaRitual.info=通过主仪式石生成一个岩浆源方块 -ritual.BloodMagic.lavaRitual.default.info=(原生) 降低生成岩浆的LP消耗,并将岩浆导入连接的容器内 -ritual.BloodMagic.lavaRitual.corrosive.info=(腐蚀) 范围内免疫火焰伤害的实体将受到伤害 -ritual.BloodMagic.lavaRitual.destructive.info=(破坏) 岩浆的放置范围根据意志的总量增加 -ritual.BloodMagic.lavaRitual.vengeful.info=(复仇) 给予范围内实体缓燃引线效果(上天) -ritual.BloodMagic.lavaRitual.steadfast.info=(坚定) 给予范围内的玩家防火效果 +ritual.BloodMagic.lavaRitual.default.info=[原生]降低生成岩浆的LP消耗,并将岩浆导入连接的容器内 +ritual.BloodMagic.lavaRitual.corrosive.info=[腐蚀]范围内免疫火焰伤害的实体将受到伤害 +ritual.BloodMagic.lavaRitual.destructive.info=[破坏]岩浆的放置范围根据意志的总量增加 +ritual.BloodMagic.lavaRitual.vengeful.info=[复仇]给予范围内实体缓燃引线效果(上天) +ritual.BloodMagic.lavaRitual.steadfast.info=[坚毅]给予范围内的玩家防火效果 ritual.BloodMagic.greenGroveRitual.info=在其范围内种植农作物 ritual.BloodMagic.jumpRitual.info=使实体跃向高空 -ritual.BloodMagic.wellOfSufferingRitual.info=攻击其伤害范围内的生物, 并将所获LP储入邻近的血之祭坛 -ritual.BloodMagic.featheredKnifeRitual.info=扣除其范围内的玩家生命值, 并将所获LP储入邻近的血之祭坛 +ritual.BloodMagic.wellOfSufferingRitual.info=攻击其伤害范围内的生物,并将所获LP储入邻近的血之祭坛 +ritual.BloodMagic.featheredKnifeRitual.info=扣除其范围内的玩家生命值,并将所获LP储入邻近的血之祭坛 ritual.BloodMagic.regenerationRitual.info=治疗其范围内失去生命值的实体 -ritual.BloodMagic.regenerationRitual.default.info=(原生) -ritual.BloodMagic.regenerationRitual.corrosive.info=(腐蚀) 从非玩家的实体身上汲取鲜血以治疗玩家 -ritual.BloodMagic.regenerationRitual.destructive.info=(破坏) -ritual.BloodMagic.regenerationRitual.vengeful.info=(复仇) -ritual.BloodMagic.regenerationRitual.steadfast.info=(坚定) -ritual.BloodMagic.harvestRitual.info=收割其范围内的植物, 产物掉落于地上 +ritual.BloodMagic.regenerationRitual.default.info=[原生] +ritual.BloodMagic.regenerationRitual.corrosive.info=[腐蚀]从非玩家的实体身上汲取鲜血以治疗玩家 +ritual.BloodMagic.regenerationRitual.destructive.info=[破坏] +ritual.BloodMagic.regenerationRitual.vengeful.info=[复仇] +ritual.BloodMagic.regenerationRitual.steadfast.info=[坚毅] +ritual.BloodMagic.harvestRitual.info=收割其范围内的植物,产物掉落于地上 ritual.BloodMagic.magneticRitual.info=将地底的矿石传送至其放置区域 -ritual.BloodMagic.crushingRitual.info=破坏其挖掘范围内的方块, 并将掉落物放置于所连接的箱子 -ritual.BloodMagic.crushingRitual.destructive.info=(破坏) 强力的破坏方块: 所有方块破坏受 时运III 影响 -ritual.BloodMagic.crushingRitual.steadfast.info=(坚定) 以 精准采集 获取被破坏方块. 适用情况下覆盖时运 -ritual.BloodMagic.crushingRitual.corrosive.info=(腐蚀) 所有被破坏方块将以基础切削油的形式处理. 适用情况下覆盖精准采集 -ritual.BloodMagic.crushingRitual.vengeful.info=(复仇) 压缩库存内的物品(如将煤炭压缩成煤炭块),目前每次操作仅执行一次压缩 -ritual.BloodMagic.crushingRitual.default.info=(原生) 根据意志总量增加仪式的运行速度 -ritual.BloodMagic.greenGroveRitual.corrosive.info=(腐蚀) 范围内的实体将被附近的植物攻击, 蚕食掉他们的生命 -ritual.BloodMagic.greenGroveRitual.default.info=(原生) 根据灵域内意志的总量加快所有的仪式运作速度 -ritual.BloodMagic.greenGroveRitual.vengeful.info=(复仇) 增加生长刻成功的速率 -ritual.BloodMagic.greenGroveRitual.steadfast.info=(坚定) 在水合范围内, 种子会被再次种植且方块会被润湿 -ritual.BloodMagic.greenGroveRitual.destructive.info=(破坏) 促进作物生长的范围根据意志的总量增加 -ritual.BloodMagic.featheredKnifeRitual.default.info=(原生) 根据灵域内意志的总量增加仪式的运行速度 -ritual.BloodMagic.featheredKnifeRitual.destructive.info=(破坏) 根据意志总量增加仪式的产出的LP -ritual.BloodMagic.featheredKnifeRitual.vengeful.info=(复仇) 将牺牲的最小生命值设为10%%.覆盖(坚定)的效果 -ritual.BloodMagic.featheredKnifeRitual.corrosive.info=(腐蚀) 使用玩家的“熏香”来提高收益 -ritual.BloodMagic.featheredKnifeRitual.steadfast.info=(坚定) 将牺牲的最小生命值设为30%%到70%% -ritual.BloodMagic.speedRitual.default.info=(原生) 根据意志总量增加仪式产生的移动速度 -ritual.BloodMagic.speedRitual.vengeful.info=(复仇) 防止玩家与成年动物被运输,如果与(破坏)配合,则运输玩家 -ritual.BloodMagic.speedRitual.destructive.info=(破坏) 防止玩家与幼年动物被运输,如果与(复仇)配合,则运输玩家 -ritual.BloodMagic.animalGrowthRitual.vengeful.info=(复仇) 减少成年动物繁殖的间隔时间 -ritual.BloodMagic.animalGrowthRitual.steadfast.info=(坚定) 使用箱子内的物品饲养区域内的动物 -ritual.BloodMagic.animalGrowthRitual.default.info=(原生) 根据灵域内意志的总量增加仪式的运行速度 -ritual.BloodMagic.animalGrowthRitual.destructive.info=(破坏)让最近没有繁殖后代的成年动物冲向怪物自爆 +ritual.BloodMagic.crushingRitual.info=破坏其挖掘范围内的方块,并将掉落物放置于所连接的箱子 +ritual.BloodMagic.crushingRitual.destructive.info=[破坏]强力的破坏方块:所有方块破坏受 时运III 影响 +ritual.BloodMagic.crushingRitual.steadfast.info=[坚毅]以 精准采集 获取被破坏方块。适用情况下覆盖时运 +ritual.BloodMagic.crushingRitual.corrosive.info=[腐蚀]所有被破坏方块将以基础切削油的形式处理。适用情况下覆盖精准采集 +ritual.BloodMagic.crushingRitual.vengeful.info=[复仇]压缩库存内的物品(如将煤炭压缩成煤炭块),目前每次操作仅执行一次压缩 +ritual.BloodMagic.crushingRitual.default.info=[原生]根据意志总量增加仪式的运行速度 +ritual.BloodMagic.greenGroveRitual.corrosive.info=[腐蚀]范围内的实体将被附近的植物攻击, 蚕食掉他们的生命 +ritual.BloodMagic.greenGroveRitual.default.info=[原生]根据灵域内意志的总量加快所有的仪式运作速度 +ritual.BloodMagic.greenGroveRitual.vengeful.info=[复仇]增加生长刻成功的速率 +ritual.BloodMagic.greenGroveRitual.steadfast.info=[坚毅]在水合范围内, 种子会被再次种植且方块会被润湿 +ritual.BloodMagic.greenGroveRitual.destructive.info=[破坏] 促进作物生长的范围根据意志的总量增加 +ritual.BloodMagic.featheredKnifeRitual.default.info=[原生] 根据灵域内意志的总量增加仪式的运行速度 +ritual.BloodMagic.featheredKnifeRitual.destructive.info=[破坏] 根据意志总量增加仪式的产出的LP +ritual.BloodMagic.featheredKnifeRitual.vengeful.info=[复仇] 将牺牲的最小生命值设为10%%.覆盖[坚毅]的效果 +ritual.BloodMagic.featheredKnifeRitual.corrosive.info=[腐蚀] 使用玩家的“熏香”来提高收益 +ritual.BloodMagic.featheredKnifeRitual.steadfast.info=[坚毅] 将牺牲的最小生命值设为30%%到70%% +ritual.BloodMagic.speedRitual.default.info=[原生] 根据意志总量增加仪式产生的移动速度 +ritual.BloodMagic.speedRitual.vengeful.info=[复仇] 防止玩家与成年动物被运输,如果与[破坏]配合,则运输玩家 +ritual.BloodMagic.speedRitual.destructive.info=[破坏] 防止玩家与幼年动物被运输,如果与[复仇]配合,则运输玩家 +ritual.BloodMagic.animalGrowthRitual.vengeful.info=[复仇] 减少成年动物繁殖的间隔时间 +ritual.BloodMagic.animalGrowthRitual.steadfast.info=[坚毅] 使用箱子内的物品饲养区域内的动物 +ritual.BloodMagic.animalGrowthRitual.default.info=[原生] 根据灵域内意志的总量增加仪式的运行速度 +ritual.BloodMagic.animalGrowthRitual.destructive.info=[破坏]让最近没有繁殖后代的成年动物冲向怪物自爆 +ritual.BloodMagic.animalGrowthRitual.corrosive.info=[腐蚀] 暂无特殊效果 -ritual.BloodMagic.fullStomachRitual.info=从连接的箱子中获取食物, 来补充玩家的饥饿值. -ritual.BloodMagic.interdictionRitual.info=使其范围内的所有生物推离于主仪式石. -ritual.BloodMagic.containmentRitual.info=使其范围内的所有生物牵引向主仪式石. -ritual.BloodMagic.speedRitual.info=将其范围内的玩家以仪式方向抛射出去. -ritual.BloodMagic.suppressionRitual.info=抑制其范围内的液体 - 停用仪式时恢复. -ritual.BloodMagic.expulsionRitual.info=驱逐其范围内, 非激活者或主仪式石上方箱子中无绑定血宝珠的玩家, 离开该区域. -ritual.BloodMagic.zephyrRitual.info=拾取其范围内的掉落物, 并放入所连接的箱子. -ritual.BloodMagic.animalGrowthRitual.info=加快其范围内的幼年动物的生长速度. -ritual.BloodMagic.forsakenSoulRitual.info=对其伤害范围内的生物造成伤害, 当生物死亡时, 其晶体范围内的恶魔晶簇将生长. -ritual.BloodMagic.crystalHarvestRitual.info=破坏范围内的恶魔意志晶簇, 掉落物丢于晶簇顶部. -ritual.BloodMagic.placerRitual.info=取出所连接的容器中的方块, 并放置于世界中. -ritual.BloodMagic.fellingRitual.info=一个伐木设施, 该仪式将砍伐其范围内所有树与叶子, 并收集掉落物. -ritual.BloodMagic.pumpRitual.info=从规定范围获取液体. 只有当所连接的液体容器至少有一桶量的相同液体时, 移入液体. -ritual.BloodMagic.altarBuilderRitual.info=将所连接的容器中的祭坛部件搭建出来. -ritual.BloodMagic.portalRitual.info=创建一个传送门网络, 以激活者及直接接触方块为基础, 两者相同的两个传送门达成连接. 激活后未修改传送网络的情况下方块可以变更. -ritual.BloodMagic.meteorRitual.info=消耗其物品范围内的一个物品, 从天空中召唤一个充满资源的流星, 直接坠向仪式. +ritual.BloodMagic.fullStomachRitual.info=从连接的箱子中获取食物,来补充玩家的饥饿值。 +ritual.BloodMagic.interdictionRitual.info=使其范围内的所有生物推离于主仪式石。 +ritual.BloodMagic.containmentRitual.info=使其范围内的所有生物牵引向主仪式石。 +ritual.BloodMagic.speedRitual.info=将其范围内的玩家以仪式方向抛射出去。 +ritual.BloodMagic.suppressionRitual.info=抑制其范围内的液体;停用仪式时恢复。 +ritual.BloodMagic.expulsionRitual.info=驱逐其范围内,非激活者或主仪式石上方箱子中无绑定血宝珠的玩家,离开该区域。 +ritual.BloodMagic.zephyrRitual.info=拾取其范围内的掉落物,并放入所连接的箱子。 +ritual.BloodMagic.upgradeRemoveRitual.info=没有记载。 +ritual.BloodMagic.armourEvolveRitual.info=没有记载。 +ritual.BloodMagic.animalGrowthRitual.info=加快其范围内的幼年动物的生长速度。 +ritual.BloodMagic.forsakenSoulRitual.info=对其伤害范围内的生物造成伤害,当生物死亡时,其晶体范围内的恶魔晶簇将生长。 +ritual.BloodMagic.crystalHarvestRitual.info=破坏范围内的恶魔意志晶簇,掉落物丢于晶簇顶部。 +ritual.BloodMagic.placerRitual.info=取出所连接的容器中的方块,并放置于世界中。 +ritual.BloodMagic.fellingRitual.info=一个伐木设施,该仪式将砍伐其范围内所有树与叶子,并收集掉落物。 +ritual.BloodMagic.pumpRitual.info=从规定范围获取液体。只有当所连接的液体容器至少有一桶量的相同液体时,移入液体。 +ritual.BloodMagic.altarBuilderRitual.info=将所连接的容器中的祭坛部件搭建出来。 +ritual.BloodMagic.portalRitual.info=创建一个传送门网络,以激活者及直接接触方块为基础,两者相同的两个传送门达成连接。激活后未修改传送网络的情况下方块可以变更。 +ritual.BloodMagic.meteorRitual.info=消耗其物品范围内的一个物品,从天空中召唤一个充满资源的流星,直接坠向仪式。 -ritual.BloodMagic.waterRitual.waterRange.info=(水源) 仪式放置水源方块的区域. -ritual.BloodMagic.lavaRitual.lavaRange.info=(岩浆) 仪式放置岩浆方块的区域. -ritual.BloodMagic.lavaRitual.lavaTank.info=(原生) 仪式将岩浆导入其中的储罐 -ritual.BloodMagic.lavaRitual.fireFuse.info=(复仇) 在这个区域内的实体将遭受缓燃引线效果 -ritual.BloodMagic.lavaRitual.fireResist.info=(坚定) 玩家在此区域内可获得防火buff -ritual.BloodMagic.lavaRitual.fireDamage.info=(腐蚀) 该区域内免疫火焰伤害的实体将受到伤害,伤害量与意志的量相关 -ritual.BloodMagic.greenGroveRitual.growing.info=(生长) 仪式加快植物生长的区域. -ritual.BloodMagic.greenGroveRitual.leech.info=(腐蚀) 区域内实体的生命将流失于滋养附近的农作物. -ritual.BloodMagic.greenGroveRitual.hydrate.info=(坚定) 区域内的方块将被润湿为耕地, 且区域内的种子将被就近种植. -ritual.BloodMagic.jumpRitual.jumpRange.info=(跳跃) 在这个区域内的实体将跃向高空. -ritual.BloodMagic.wellOfSufferingRitual.altar.info=(祭坛) 规定仪式检测血之祭坛的区域. 该项修改为添加或撤销一个坐标. -ritual.BloodMagic.wellOfSufferingRitual.damage.info=(伤害) 规定仪式伤害生物的区域. 该区域内所有生物(除了玩家)将持续受到伤害. -ritual.BloodMagic.featheredKnifeRitual.altar.info=(祭坛) 规定仪式检测血之祭坛的区域. 该项修改为添加或撤销一个坐标. -ritual.BloodMagic.featheredKnifeRitual.damage.info=(伤害) 规定仪式伤害玩家的区域. 该区域内的玩家将持续受到伤害直至设定的生命值下限. -ritual.BloodMagic.regenerationRitual.heal.info=(治愈) 该区域内的生物将获得 生命恢复buff. +ritual.BloodMagic.waterRitual.waterRange.info=(水源) 仪式放置水源方块的区域。 +ritual.BloodMagic.lavaRitual.lavaRange.info=(岩浆) 仪式放置岩浆方块的区域。 +ritual.BloodMagic.lavaRitual.lavaTank.info=[原生] 仪式将岩浆导入其中的储罐 +ritual.BloodMagic.lavaRitual.fireFuse.info=[复仇] 在这个区域内的实体将遭受缓燃引线效果 +ritual.BloodMagic.lavaRitual.fireResist.info=[坚毅] 玩家在此区域内可获得防火buff +ritual.BloodMagic.lavaRitual.fireDamage.info=[腐蚀] 该区域内免疫火焰伤害的实体将受到伤害,伤害量与意志的量相关 +ritual.BloodMagic.greenGroveRitual.growing.info=(生长) 仪式加快植物生长的区域。 +ritual.BloodMagic.greenGroveRitual.leech.info=[腐蚀] 区域内实体的生命将流失于滋养附近的农作物。 +ritual.BloodMagic.greenGroveRitual.hydrate.info=[坚毅] 区域内的方块将被润湿为耕地,且区域内的种子将被就近种植。 +ritual.BloodMagic.jumpRitual.jumpRange.info=(跳跃) 在这个区域内的实体将跃向高空。 +ritual.BloodMagic.wellOfSufferingRitual.altar.info=(祭坛) 规定仪式检测血之祭坛的区域。该项修改为添加或撤销一个坐标。 +ritual.BloodMagic.wellOfSufferingRitual.damage.info=(伤害) 规定仪式伤害生物的区域。该区域内所有生物(除了玩家)将持续受到伤害。 +ritual.BloodMagic.featheredKnifeRitual.altar.info=(祭坛) 规定仪式检测血之祭坛的区域。该项修改为添加或撤销一个坐标。 +ritual.BloodMagic.featheredKnifeRitual.damage.info=(伤害) 规定仪式伤害玩家的区域。该区域内的玩家将持续受到伤害直至设定的生命值下限。 +ritual.BloodMagic.regenerationRitual.heal.info=(治愈) 该区域内的生物将获得生命恢复buff。 ritual.BloodMagic.regenerationRitual.vampire.info=(血蛭) 汲取区域内怪物的生命来治愈玩家 -ritual.BloodMagic.harvestRitual.harvestRange.info=(收割) 该区域内的植物将被收割. -ritual.BloodMagic.magneticRitual.placementRange.info=(放置) 仪式将把获取的矿石放置于该区域内. -ritual.BloodMagic.crushingRitual.crushingRange.info=(挖掘) 该区域的方块将被破坏. -ritual.BloodMagic.crushingRitual.chest.info=(箱子) 箱子位置, 仪式将把破坏的方块放入其中. -ritual.BloodMagic.fullStomachRitual.fillRange.info=(喂食) 仪式将会喂食该区域内的玩家. -ritual.BloodMagic.fullStomachRitual.chest.info=(箱子) 箱子位置, 仪式将提取其中的食物来喂食区域内的玩家. -ritual.BloodMagic.interdictionRitual.interdictionRange.info=(推离) 仪式推离生物的区域. 无论该区域位于何处, 所有生物将被推离于主仪式石. -ritual.BloodMagic.containmentRitual.containmentRange.info=(牵引) 仪式牵引生物的区域. 无论该区域位于何处, 所有生物将被牵引向主仪式石. -ritual.BloodMagic.speedRitual.sanicRange.info=(速度) 所有位于该区域内的实体, 将被抛射向仪式摆相成的箭头方向. -ritual.BloodMagic.suppressionRitual.suppressionRange.info=(抑液) 该区域内所有液体将被仪式抑制. -ritual.BloodMagic.expulsionRitual.expulsionRange.info=(驱逐) -ritual.BloodMagic.zephyrRitual.zephyrRange.info=(拾取) 该区域内的物品将被拾取储入所连接箱子. -ritual.BloodMagic.zephyrRitual.chest.info=(箱子) 箱子位置, 仪式将把拾取的物品放入其中. -ritual.BloodMagic.animalGrowthRitual.growing.info=(成长) 该区域内的动物将成长得更快. +ritual.BloodMagic.harvestRitual.harvestRange.info=(收割) 该区域内的植物将被收割。 +ritual.BloodMagic.magneticRitual.placementRange.info=(放置) 仪式将把获取的矿石放置于该区域内。 +ritual.BloodMagic.crushingRitual.crushingRange.info=(挖掘) 该区域的方块将被破坏。 +ritual.BloodMagic.crushingRitual.chest.info=(箱子) 箱子位置,仪式将把破坏的方块放入其中。 +ritual.BloodMagic.fullStomachRitual.fillRange.info=(喂食) 仪式将会喂食该区域内的玩家。 +ritual.BloodMagic.fullStomachRitual.chest.info=(箱子) 箱子位置, 仪式将提取其中的食物来喂食区域内的玩家。 +ritual.BloodMagic.interdictionRitual.interdictionRange.info=(推离) 仪式推离生物的区域。无论该区域位于何处,所有生物将被推离于主仪式石。 +ritual.BloodMagic.containmentRitual.containmentRange.info=(牵引) 仪式牵引生物的区域。无论该区域位于何处,所有生物将被牵引向主仪式石。 +ritual.BloodMagic.speedRitual.sanicRange.info=(速度) 所有位于该区域内的实体,将被抛射向仪式摆相成的箭头方向。 +ritual.BloodMagic.suppressionRitual.suppressionRange.info=(抑液) 该区域内所有液体将被仪式抑制。 +ritual.BloodMagic.expulsionRitual.expulsionRange.info=(驱逐) +ritual.BloodMagic.zephyrRitual.zephyrRange.info=(拾取) 该区域内的物品将被拾取储入所连接箱子。 +ritual.BloodMagic.zephyrRitual.chest.info=(箱子) 箱子位置, 仪式将把拾取的物品放入其中。 +ritual.BloodMagic.animalGrowthRitual.growing.info=(成长) 该区域内的动物将成长得更快。 ritual.BloodMagic.animalGrowthRitual.chest.info=(箱子) 用于存放喂养动物物品的箱子 -ritual.BloodMagic.forsakenSoulRitual.crystal.info=(晶体) 当有生物因仪式死亡时, 该区域内的晶簇生长速度将加快. -ritual.BloodMagic.forsakenSoulRitual.damage.info=(伤害) 该区域内的生物将缓慢的收到伤害, 当死亡时晶簇将生长. -ritual.BloodMagic.crystalHarvestRitual.crystal.info=(晶体) 晶簇将被破坏成仅留单晶的晶簇, 被破坏的晶体将掉落于世界. +ritual.BloodMagic.forsakenSoulRitual.crystal.info=(晶体) 当有生物因仪式死亡时,该区域内的晶簇生长速度将加快。 +ritual.BloodMagic.forsakenSoulRitual.damage.info=(伤害) 该区域内的生物将缓慢的收到伤害,当死亡时晶簇将生长。 +ritual.BloodMagic.crystalHarvestRitual.crystal.info=(晶体) 晶簇将被破坏成仅留单晶的晶簇,被破坏的晶体将掉落于世界。 -ritual.BloodMagic.placerRitual.placerRange.info=(放置) 仪式将放置方块的区域. -ritual.BloodMagic.placerRitual.chest.info=(箱子) 箱子位置, 仪式将提取其中的方块放置于世界中. -ritual.BloodMagic.fellingRitual.fellingRange.info=(砍伐) 仪式将搜寻原木和树叶并进行砍伐的区域. -ritual.BloodMagic.fellingRitual.chest.info=(箱子) 箱子位置, 仪式将把掉落物放入其中. -ritual.BloodMagic.pumpRitual.pumpRange.info=(引水) 仪式于世界中获取液体的区域. +ritual.BloodMagic.placerRitual.placerRange.info=(放置) 仪式将放置方块的区域。 +ritual.BloodMagic.placerRitual.chest.info=(箱子) 箱子位置, 仪式将提取其中的方块放置于世界中。 +ritual.BloodMagic.fellingRitual.fellingRange.info=(砍伐) 仪式将搜寻原木和树叶并进行砍伐的区域。 +ritual.BloodMagic.fellingRitual.chest.info=(箱子) 箱子位置, 仪式将把掉落物放入其中。 +ritual.BloodMagic.pumpRitual.pumpRange.info=(引水) 仪式于世界中获取液体的区域。 ritual.BloodMagic.downgradeRitual.dialogue.bow.1=那么,少年,你渴望力量么...? ritual.BloodMagic.downgradeRitual.dialogue.bow.100=当然了,没有不需要代价的交易...我也不会轻易地给予你力量,而不求任何回报 @@ -728,10 +740,10 @@ ritual.BloodMagic.downgradeRitual.dialogue.slowHeal.300=伤口总会愈合。如 ritual.BloodMagic.downgradeRitual.dialogue.slowHeal.500=好了,赶紧考虑吧。你或许会后悔,因为哪怕你的杯子空了,它也很难在被填满... # Chat -chat.BloodMagic.altarMaker.setTier=层级设置: %d +chat.BloodMagic.altarMaker.setTier=层级设置:%d chat.BloodMagic.altarMaker.building=铺设一个 %d 层祭坛 chat.BloodMagic.altarMaker.destroy=消除一个 %d 层祭坛 -chat.BloodMagic.altarMaker.creativeOnly=该物品仅限创造模式. +chat.BloodMagic.altarMaker.creativeOnly=该物品仅限创造模式。 chat.BloodMagic.damageSource=%s 的灵魂开始变得虚弱 @@ -740,14 +752,14 @@ chat.BloodMagic.ritual.prevent=仪式在积极的抵抗你! chat.BloodMagic.ritual.activate=一股能量流经这个仪式! chat.BloodMagic.ritual.notValid=这些仪式石似乎有些摆放不得当... -chat.BloodMagic.livingArmour.upgrade.poisonRemove=你感到已经好多了! -chat.BloodMagic.livingArmour.upgrade.fireRemove=&6火焰抵抗随一股清凉感附着于你. -chat.BloodMagic.livingArmour.upgrade.grimReaper=&6朦胧中一股能量使你脱离死亡边缘! -chat.BloodMagic.livingArmour.newUpgrade=&4强化完成! +chat.BloodMagic.livingArmour.upgrade.poisonRemove=你感到已经好多了! +chat.BloodMagic.livingArmour.upgrade.fireRemove=&6火焰抵抗随一股清凉感附着于你。 +chat.BloodMagic.livingArmour.upgrade.grimReaper=&6朦胧中一股能量使你脱离死亡边缘! +chat.BloodMagic.livingArmour.newUpgrade=&4强化完成! chat.BloodMagic.routing.remove=移出记录位置 chat.BloodMagic.routing.set=设置节点位置 -chat.BloodMagic.routing.link.master=连接到主节点! +chat.BloodMagic.routing.link.master=连接到主节点! chat.BloodMagic.routing.link=节点连接完成 chat.BloodMagic.altar.comp.glowstone=一个萤石块 @@ -757,33 +769,28 @@ chat.BloodMagic.altar.comp.bloodrune=一个气血符文 chat.BloodMagic.altar.comp.crystal=一个无效物品 chat.BloodMagic.altar.comp.notair=一个实心方块 -chat.BloodMagic.altar.nextTier=下一层级的血之祭坛缺失 %s 在 %s. +chat.BloodMagic.altar.nextTier=下一层级的血之祭坛缺失%s,对应坐标为 %s 。 chat.BloodMagic.mimic.potionSet=药剂陷阱已设置. chat.BloodMagic.mimic.potionRemove=药剂陷阱已移除. -chat.BloodMagic.mimic.potionInterval.up=药剂时间间隔已增加至: %d 刻. -chat.BloodMagic.mimic.potionInterval.down=药剂时间间隔已减少至: %d 刻. -chat.BloodMagic.mimic.detectRadius.up=玩家检测半径已增加至: %d 格方块. -chat.BloodMagic.mimic.detectRadius.down=玩家检测半径已减少至: %d 格方块. -chat.BloodMagic.mimic.potionSpawnRadius.up=药剂生成半径已增加至: % 格方块. -chat.BloodMagic.mimic.potionSpawnRadius.down=药剂生成半径已减少至: % 格方块. +chat.BloodMagic.mimic.potionInterval.up=药剂时间间隔已增加至:%d 刻。 +chat.BloodMagic.mimic.potionInterval.down=药剂时间间隔已减少至:%d 刻。 +chat.BloodMagic.mimic.detectRadius.up=玩家检测半径已增加至:%d 格方块。 +chat.BloodMagic.mimic.detectRadius.down=玩家检测半径已减少至:%d 格方块。 +chat.BloodMagic.mimic.potionSpawnRadius.up=药剂生成半径已增加至:%d 格方块。 +chat.BloodMagic.mimic.potionSpawnRadius.down=药剂生成半径已减少至:%d 格方块。 # entity entity.BloodMagic.SentientSpecter.name=感知之灵 entity.BloodMagic.Mimic.name=拟态 -# sekrit - -secret.BloodMagic.bread.bloody=&r&c血腥面包 -secret.BloodMagic.bread.bloody.desc=唯有 &o可怕 &r&7紧急情况 - # Commands commands.error.arg.invalid=无效参数 commands.error.arg.missing=参数不足 -commands.error.arg.player.missing=你必须指定一个玩家来执行该命令. -commands.error.404=命令未找到! -commands.error.unknown=未知的命令! -commands.error.perm=你没有使用该命令的权限. +commands.error.arg.player.missing=你必须指定一个玩家来执行该命令。 +commands.error.404=命令未找到! +commands.error.unknown=未知的命令! +commands.error.perm=你没有使用该命令的权限。 commands.success=成功执行 @@ -791,49 +798,49 @@ commands.format.help=%s - %s commands.format.error=%s - %s commands.help.usage=/bloodmagic help -commands.help.help=使用"/bloodmagic help"命令显示指令列表. +commands.help.help=使用"/bloodmagic help"命令显示指令列表。 commands.network.usage=/bloodmagic network [吸取(syphon)|添加(add)|查看(get)|填充(fill)|填满(cap)] <玩家> [数量] commands.network.help=灵魂网络实用工具 -commands.network.syphon.help=从指定玩家的灵魂网络中移出指定的LP值. -commands.network.syphon.success=成功从 %s 吸取出 %dLP . -commands.network.add.help=添加指定的LP值到指定玩家的灵魂网络中. 服从标准的LP增加规则. -commands.network.add.success=成功添加 %dLP 到 %s 的灵魂网络. -commands.network.set.help=将指定玩家的LP设置为所给数值. -commands.network.set.success=成功将 %s 灵魂网络中的LP设置为 %d . -commands.network.get.help=返还指定玩家灵魂网络中的LP值. -commands.network.fill.help=将指定玩家的LP填充为 %d. -commands.network.fill.success=成功填充 %s 的灵魂网络. -commands.network.cap.help=填充指定玩家的灵魂网络至其所持有的最高阶气血宝珠容量的最大值. -commands.network.cap.success=成功填满 %s 的灵魂网络. +commands.network.syphon.help=从指定玩家的灵魂网络中移出指定的LP值。 +commands.network.syphon.success=成功从 %s 吸取出 %dLP。 +commands.network.add.help=添加指定的LP值到指定玩家的灵魂网络中。服从标准的LP增加规则。 +commands.network.add.success=成功添加 %dLP 到 %s 的灵魂网络。 +commands.network.set.help=将指定玩家的LP设置为所给数值。 +commands.network.set.success=成功将 %s 灵魂网络中的LP设置为 %d。 +commands.network.get.help=返还指定玩家灵魂网络中的LP值。 +commands.network.fill.help=将指定玩家的LP填充为 %d。 +commands.network.fill.success=成功填充 %s 的灵魂网络。 +commands.network.cap.help=填充指定玩家的灵魂网络至其所持有的最高阶气血宝珠容量的最大值。 +commands.network.cap.success=成功填满 %s 的灵魂网络。 commands.bind.usage=/bind <玩家> -commands.bind.help=用于设置/解除对手持物品的绑定情况. -commands.bind.success=物品成功绑定! +commands.bind.help=用于设置/解除对手持物品的绑定情况。 +commands.bind.success=物品成功绑定! commands.bind.remove.success=解除绑定成功 commands.orb.usage=/bloodmagic orb [设置(set)|查看(get)] <玩家> [等级] commands.orb.help=用于设置或查看玩家的最高血宝珠等级. commands.bind.usage=/bind <玩家> -commands.bind.success=物品成功绑定! +commands.bind.success=物品成功绑定! commands.bind.failed.noPlayer=没有指定玩家 -commands.bind.failed.alreadyBound=物品已经被绑定; 使用 /unbind 来解除绑定 +commands.bind.failed.alreadyBound=物品已经被绑定;使用 /unbind 来解除绑定 commands.bind.failed.notBindable=物品无法被绑定 commands.unbind.usage=/unbind -commands.unbind.success=物品成功解除绑定! +commands.unbind.success=物品成功解除绑定! commands.unbind.failed.notBindable=物品无法解除绑定 commands.soulnetwork.usage=/soulnetwork <玩家> <添加(add)|减去(subtract)|填满(fill)|清空(empty)|查看(get)> [数量] -commands.soulnetwork.add.success=成功添加 %dLP 到 %s 的灵魂网络! -commands.soulnetwork.subtract.success=成功从 %s 的灵魂网络中减去 %dLP ! -commands.soulnetwork.fill.success=成功填满 %s 的灵魂网络! -commands.soulnetwork.empty.success=成功清空 %s 的灵魂网络! -commands.soulnetwork.get.success=%s 的灵魂网络中有 %dLP ! +commands.soulnetwork.add.success=成功添加 %dLP 到 %s 的灵魂网络! +commands.soulnetwork.subtract.success=成功从 %s 的灵魂网络中减去 %dLP! +commands.soulnetwork.fill.success=成功填满 %s 的灵魂网络! +commands.soulnetwork.empty.success=成功清空 %s 的灵魂网络! +commands.soulnetwork.get.success=%s 的灵魂网络中有 %dLP! commands.soulnetwork.noPlayer=没有指定玩家 commands.soulnetwork.noCommand=这不符命令规定 commands.soulnetwork.notACommand=这不是有效的命令 -commands.soulnetwork.fillMax.success=成功将 %s 的灵魂网络填满至其宝珠的最大值! -commands.soulnetwork.create.success=创建 %s 的灵魂网络成功 (宝珠等级: %d) +commands.soulnetwork.fillMax.success=成功将 %s 的灵魂网络填满至其宝珠的最大值! +commands.soulnetwork.create.success=创建 %s 的灵魂网络成功(宝珠等级:%d) # GUI tile.BloodMagic.inputNode.name=输入节点 @@ -852,21 +859,21 @@ jei.BloodMagic.recipe.soulForge=狱火熔炉 jei.BloodMagic.recipe.alchemyTable=炼金术桌 jei.BloodMagic.recipe.armourDowngrade=祭品 (仪式:沉重灵魂的忏悔) jei.BloodMagic.recipe.requiredLP=LP: %d -jei.BloodMagic.recipe.requiredTier=层级: %d -jei.BloodMagic.recipe.consumptionRate=消耗率: %d LP/t -jei.BloodMagic.recipe.drainRate=消耗率: %d LP/t -jei.BloodMagic.recipe.minimumSouls=最小值: %1$,.2f Will -jei.BloodMagic.recipe.soulsDrained=消耗: %1$,.2f Will -jei.BloodMagic.recipe.lpDrained=消耗: %,d LP -jei.BloodMagic.recipe.ticksRequired=时间: %,d 刻 +jei.BloodMagic.recipe.requiredTier=层级:%d +jei.BloodMagic.recipe.consumptionRate=消耗率:%d LP/t +jei.BloodMagic.recipe.drainRate=消耗率:%d LP/t +jei.BloodMagic.recipe.minimumSouls=最小值:%1$,.2f Will +jei.BloodMagic.recipe.soulsDrained=消耗:%1$,.2f Will +jei.BloodMagic.recipe.lpDrained=消耗:%,d LP +jei.BloodMagic.recipe.ticksRequired=时间:%,d 刻 -jei.BloodMagic.desc.altarBuilder=该物品仅限创造模式,用于调试测试.\n\nShift + 右键 改变层级. 右键祭坛开始搭建.\n\n手持破坏祭坛时将全部移除. -jei.BloodMagic.desc.demonicWill=附身于生物的恶魔意志之体现.\n\n可以通过用感知武器杀死生物掉落, 或是对着生物抛掷原始投网, 当它出现白色颗粒时杀了它. +jei.BloodMagic.desc.altarBuilder=该物品仅限创造模式,用于调试测试.\n\nShift + 右键 改变层级。右键祭坛开始搭建。\n\n手持破坏祭坛时将全部移除。 +jei.BloodMagic.desc.demonicWill=附身于生物的恶魔意志之体现.\n\n可以通过用感知武器杀死生物掉落,或是对着生物抛掷原始投网。当它出现白色颗粒时杀了它。 # WAILA waila.BloodMagic.sneak=&o潜行查看信息 -waila.BloodMagic.array.reagent=试剂: %s -waila.BloodMagic.array.catalyst=石板: %s +waila.BloodMagic.array.reagent=试剂:%s +waila.BloodMagic.array.catalyst=石板:%s option.BloodMagic.bypassSneak=潜行 option.BloodMagic.bloodAltar=血之祭坛 option.BloodMagic.ritualController=仪式石 @@ -879,7 +886,7 @@ tc.research_category.BLOODMAGIC=血红奥术 # Thaumcraft Research bloodmagic.research_name.BLOODMAGIC=血魔法 bloodmagic.research_text.BLOODMAGIC=血红奥术 -bloodmagic.research_page.BLOODMAGIC.1=血魔法的领域总是似乎有些孤立且像是"个人"艺术, 同众所周知的喜爱隐居有时还有点疯癫的血魔法师. 然而, 自我牺牲与生命源质的力量甚至拥有超出一般血魔法师所见的用途, 事实上, 这种力量显然终究能应用于神秘学. +bloodmagic.research_page.BLOODMAGIC.1=血魔法的领域总是似乎有些孤立且像是“个人”艺术,同众所周知的喜爱隐居有时还有点疯癫的血魔法师。然而,自我牺牲与生命源质的力量甚至拥有超出一般血魔法师所见的用途,事实上,这种力量显然终究能应用于神秘学。 # Buttons button.bloodmagic.tooltip.fill=填充网络 diff --git a/src/main/resources/assets/bloodmagicguide/lang/zh_CN.lang b/src/main/resources/assets/bloodmagicguide/lang/zh_CN.lang new file mode 100644 index 00000000..a30d160f --- /dev/null +++ b/src/main/resources/assets/bloodmagicguide/lang/zh_CN.lang @@ -0,0 +1,258 @@ +# Book Information +guide.BloodMagic.title=血染知书 +guide.BloodMagic.display=血染知书 +guide.BloodMagic.author=血魔法 +guide.BloodMagic.welcome=血魔法 + +# Page Information +guide.BloodMagic.page.bloodAltar=血之祭坛合成 +guide.BloodMagic.page.soulForge=狱火熔炉合成 +guide.BloodMagic.page.tier=层级:%d +guide.BloodMagic.page.lp=LP: %d +guide.BloodMagic.page.minimumWill=启动所需意志:%f +guide.BloodMagic.page.drainedWill=合成消耗意志:%f +guide.BloodMagic.shapelessOrb=无序宝珠合成 +guide.BloodMagic.shapedOrb=有序宝珠合成 +guide.BloodMagic.page.alchemyArray=炼金法阵 + + +# Categories +guide.BloodMagic.category.architect=缔造者 +guide.BloodMagic.category.ritual=仪式大师 +guide.BloodMagic.category.demon=恶魔使者 +guide.BloodMagic.category.spell=战法师 +guide.BloodMagic.category.alchemy=炼金术士 + +# Ritual Master Entries +guide.BloodMagic.entry.ritual.intro=序 +guide.BloodMagic.entry.ritual.basics=仪式入门 +guide.BloodMagic.entry.ritual.ritualStone=仪式石 +guide.BloodMagic.entry.ritual.masterRitualStone=主仪式石 +guide.BloodMagic.entry.ritual.activationCrystal=激活水晶 +guide.BloodMagic.entry.ritual.diviner=仪式推测杖 +guide.BloodMagic.entry.ritual.fullSpring=涌泉仪式 +guide.BloodMagic.entry.ritual.lava=下界夜曲 +guide.BloodMagic.entry.ritual.greenGrove=绿丛仪式 +guide.BloodMagic.entry.ritual.magnetism=磁力仪式 +guide.BloodMagic.entry.ritual.crusher=挖掘仪式 +guide.BloodMagic.entry.ritual.highJump=高跳仪式 +guide.BloodMagic.entry.ritual.speed=速移仪式 +guide.BloodMagic.entry.ritual.wellOfSuffering=苦难之井 +guide.BloodMagic.entry.ritual.featheredKnife=羽刀仪式 +guide.BloodMagic.entry.ritual.regen=重生仪式 +guide.BloodMagic.entry.ritual.harvest=满月收割 +guide.BloodMagic.entry.ritual.interdiction=禁止仪式 +guide.BloodMagic.entry.ritual.containment=牵制仪式 +guide.BloodMagic.entry.ritual.suppression=抑液仪式 +guide.BloodMagic.entry.ritual.expulsion=驱逐氛场 +guide.BloodMagic.entry.ritual.zephyr=和风之唤 +guide.BloodMagic.entry.ritual.laying=铺设仪式 +guide.BloodMagic.entry.ritual.timberman=伐林仪式 +guide.BloodMagic.entry.ritual.meteor=坠星标位 +guide.BloodMagic.entry.ritual.downgrade=沉重灵魂的忏悔 + +# Ritual Master Entry Text +guide.BloodMagic.entry.ritual.intro.info=晚上好,我就是马格斯·阿尔卡纳。在外人看来我有很多身份:盗贼、自警团、巫师、战士、吟游诗人、甚至政治家。而现在,只有少数人清楚地知道我的头衔——只需提及一下,那臆想中的残暴图景就可以令人闻风丧胆——纵使这个说法有一半是误导,但这个说法有一半的确是真相。诚然,我说的便是作为职业存在的血法师。我的朋友一般都直呼我的名,而我的敌人一般称我为仪式大师。\n\t/cut现在呢,我的学生们,为了让我把毕生所学传播给下一代有志者们,缠在我身边已有数月了。我一直在坚守秘密,但提比略对此的评论更为精辟:“尽管你自己还看不到你自己的潜力,但不论是在什么魔法领域中,那些已臻化境的大师们的故事总是对下一代人有好处的。然而,重现奇迹的细节其实并没有那么重要。若是没有对魔法能量的绝对自信,即便是金沙,也不过是一堆硫磺粉而已。”当然你可以认为/cut他已经触碰到了炼金术的真谛,但他毕竟是我的第一个学生,我有时候也会认真思考他的想法。\n\t所以呢,那些仍在苦苦寻找前进的道路的年轻血法师们,且听我一言:血魔法的领域之广阔不是常人可以理解的,若不加思考地前进,很快你就会遇到瓶颈。因此,请务必时常翻阅这本书——这本书上有我的魔法,只要我写下来新的内容,你们就能立刻看到。\n\t/cut诸位请坐。不要紧张,试着去感受老一辈血法师的教诲。或许会比你讨价还价求到的东西还要有用。 +guide.BloodMagic.entry.ritual.basics.info=现在的魔法仪式已经和几百年前大不一样了。曾几何时,人们用粉末在地上组成魔法阵,并在旁边起舞,直到获得想要的东西。我甚至记得有一位从她自家花园中收集魔法能量的隐士。我一直都在嘲笑这种魔法,直到她把她的猫头鹰丢过来监视我。\n\t而血魔法师的仪式呢,需要用到一种带特殊标记的石头,并且需要按指定方式精确摆放,方能转化注入的能量。有一/cut天,我的学徒提比略在他的新房间里翻找我过去的仪式资料。那里有一罐从未开封过的液态Etherium(我好像说过很多次要把它取回来但每次说完就忘了),以及一个透过镜片看时总像是在说“星期二”的水晶球。当有一个标有“符文尘埃”的箱子被打翻后,一颗小小的红色宝石滚了出来,滚到了提比略的脚下。霎那间,它发出的明亮的红宝石的光芒和他抱着的箱子里的粉末发生了反应。\n\t/cut——自然地,瞬间爆炸。提比略不小心释放出的没有聚焦的能量激活了符文尘埃和周围的仪式石,在没有容纳能量的装置的情况下,它们只能向外扩散。在几天的治疗后,提比略和我又开始了工作。\n\t在经历了数个不眠之夜,和高效的咖啡因的帮助下(啊,感谢Player先生的咖啡,感谢他给我带来的更加精神的明天!),我们终于找出了所有仪式所需的关键材料。\n\t/cut根据实验,我们需要至少四种材料:按照一定样式摆放的仪式石;若干种不同的墨水,用于刻画仪式细节;置于仪式中央的特殊仪式石,用于传递能量;以及用于激活仪式的水晶。我觉得有必要将各个仪式全部详细地解说一遍。 +guide.BloodMagic.entry.ritual.ritualStone.info.1=仪式石便是魔法能量的容器:根据石头的不同,可将能量塑造为各种形状,或导向不同的地方。仪式石分五种:空白(没有任何铭文)、水、火、风和土。每个仪式都会用到若干不同种类的仪式石,每个仪式所需的布局也不尽相同。 +guide.BloodMagic.entry.ritual.ritualStone.info.2=为仪式石画上正确的铭文需要一些工具。我早已研究出一种快速建造正确仪式的办法,但如果有人想自己动手搭建的话还是可以用这些工具的。手持合适的工具右击仪式石便可为其画上铭文。一开始你只能制作出其中四种工具,随着修行的深入你会得到更高级的工具的制作方法的。 +guide.BloodMagic.entry.ritual.masterRitualStone.info=和大部分魔法一样,仪式需要引导,否则其力量会变得无法控制,或者仪式本身会彻底失效。有鉴于此,仪式需要由主仪式石控制(我的笔记中通常会以缩写"MRS"表记,但也只能这样写写而已。试想:你喊一声“麻烦一下,我需要更多的MRS”...然后尴尬症就犯了。)主仪式石会从其主人的灵魂网络中抽取能量,并扩散至每一块仪式石上,从而启动仪式。\n\t把灵魂网络和一块大石头绑一块有点麻烦。我曾经成功/cut过一次:在主仪式石顶上盘腿打坐,将能量聚集于石头上并尽力将灵魂网络和仪式连在一起。虽说成功持续了几分钟,但我的裤子却因为水在仪式石上冷凝而湿透了。于是我得到了一个教训:不要试图在实验中进行任何冥想。 +guide.BloodMagic.entry.ritual.activationCrystal.info.1=于是我们停止了冥想,转而去研究那颗从箱子里滚出的红色宝石。提比略确信它有“将我们所在的肉体世界和主宰灵魂网络的精神世界连接在一起”的能力。我一直在想到底要不要收他作学徒,但我的确能看出他对于那些晦涩难懂的魔法的理解。啊,我想我有必要翻译一下,他想表达的是:我们可以用这水晶将灵魂网络和主仪式石连在一起,以给仪式提供能量。 +guide.BloodMagic.entry.ritual.activationCrystal.info.2=于是我们得到了虚弱激活水晶,以及复制它的办法。它的原料是另一种可以与灵魂网络链接的水晶:熔岩水晶。只需要迅速在上面刻好必须的图案,血之祭坛就可以将它变成激活水晶。自然地,它也需要和使用者的灵魂网络绑定。在仪式正确摆放后,只需手持熔岩水晶右击主仪式石就可以开始了。当然,这需要有足够多的LP作为支撑。如果没有足够多的LP,仪式不会发动,也不会因此消耗LP。 +guide.BloodMagic.entry.ritual.diviner.info.1=在不断发现新的仪式过程中,我愈发感到建造仪式的枯燥。这也是为什么我制作出这样一个工具的原因——这样所有人都可以通过简单的手势和动作来快速部署仪式了。按时间顺序来说这个应该放在诸仪式的后面来讲,但我决定提到前面,因为我觉得先学习这个的使用会更好。没人会想在临阵时才发现仪式石没带够,抑或原本只是想变出一瓶水结果却召唤了陨石吧。 +guide.BloodMagic.entry.ritual.diviner.info.2=仪式推测杖的本质是本仪式的百科全书。你可以通过一些操作(按住Shift左击或右击)来在不同仪式间切换,仔细看的话你还会得知一些基础信息。在你带着仪式石的时候,手持推测杖右击主仪式石,便可在正确位置放置一块仪式石。只需要不断右击就可以完成仪式了! +guide.BloodMagic.entry.ritual.fullSpring.info=几年前,有一个旅行商人路过我附近的一个村子,并向众人兜售他的各种小东西。那个村子大概有很长时间没下雨了,庄稼也快旱死了,商人见此便掏出了一个镶有蓝色宝石的银制护符。“看这个!”,他的声音中带着几分激动,“这个东西可以让河流永不干涸!我可以用炼金术从空气中变出水!”\n\t然而村民们觉得那宝石好像只是普通的蓝宝石而已。等他们反应过来上当受骗时那/cut个商人已经消失得无影无踪了。我起初并不打算干涉此事——因为他们似乎并不喜欢我的魔法——但这次我破了个例。在和“炼金术士”进行了愉快的交流后,我在灌溉渠旁打坐了数小时。我成功通过冷却空气中水蒸气的办法给庄稼们带来了足够多的水——足够撑到下一个旱季。自然这个方法并不靠谱,因为我自己已经被打坐给榨干了,不得不靠自己造出来的水来重新调整。\n\t/cut我再次想起了这个事,并按照同样的方法制作了涌泉仪式。给仪式灌注少量能量,仪式便可将附近空气中的水分聚集起来,并在主仪式石上方产生一个水源。激活仪式需要的能量并不多,维持其运转的能量更是可以忽略不计。\n\t水的范围和放置的位置都是可以用仪式调整钳调整的,所以那些对美观表示担忧的魔法师们不要担心了。这便是魔法的力量! +guide.BloodMagic.entry.ritual.lava.info=熔岩——恐怕是最普通的能量来源了吧。我平日的研究中很少使用熔岩,因为它其实并非是普通的铁桶就能装起来的东西!\n\t有一天,当地的一名铁匠找到我,并向我打听附近的能量源的事情。他说他们最近新造了一个大家伙,需要大量能量来运转。我回答道,“有倒是有,但它们并非无主之物。”我决定去亲眼看一下这个所谓的大家伙到底是何方神圣。\n\t/cut那是...一个至少五公尺(5米)见方的冶炼炉,上面还连着几个空空如也的储罐。虽然我不知道这玩意儿到底是怎么工作的,但我的直觉告诉我,熔岩的热量用在这里正合适——电力是绝对不行的,绝对不行。除此之外,我只知道这不是沉浸工业公司的产品。\n\t在经过短暂的讨价还价后,铁匠付了一笔费用,我便开始叫他们稍微让开一下,以便准备搭建仪式。按我的想法,我将/cut四块火之仪式石和主仪式石摆成十字,脑海中不断想象整个过程的同时,我用力将激活水晶推向了主仪式石。理论上这个过程应该十分简单:仪式不断地将大地深处的石头挖出来,在巨大的压力下熔融成熔岩。这样制成的熔岩可以直接从仪式石中提取出来,然后仪式本身还可以自维持这种类似挤压的过程。\n\t然而这只是理论。说起来容易做起来难:当时我使用的简/cut易网络完全不适合拿来为这个仪式供应魔力,不仅挤压熔岩需要的压力巨大(需要20000LP启动仪式),抽取熔岩的开支也不小(每产生一格熔岩需要500LP)。\n\t我摇摇晃晃地走出了铁匠们的基地,脸上带着一丝欣慰。那些储罐里的熔岩足够铁匠们用到他们找到新的岩浆来源了。当然,我也没忘记带走我的仪式石。\n\t---------------\n\t/cut在没有外力影响下,这个仪式会不断尝试在主仪式石上方生成一格熔岩,并消耗500LP。一般情况下,熔岩生成的范围可以扩展到仪式本身三格开外。\n\t在原生意志的影响下,LP消耗和大气中意志的浓度成反比,同时会不断消耗意志,意志的消耗速度与节约的LP数量成正比。使用原生意志还可以让仪式自动将熔岩放置进各式液体容器中,速度大抵保持不变。\n\t/cut腐蚀意志会反转火焰免疫的效果。换言之,那些平时对火焰免疫的生物,在这个仪式的影响下会失去火焰免疫的属性;而那些无法抵抗火焰的生物则会对火焰免疫。\n\t复仇意志会令此仪式释放出一种挥发性气体,这种气体会影响任何不是玩家的生物。在这种气体的作用范围内的生物都会获得“缓燃引线”的效果。当这个效果的倒计时归零时,这个生物会爆炸,强行将生物赶回空气当中。\n\t/cut破坏意志可以强化这个仪式的各种属性。大气中这种意志的含量越多,仪式能放置的岩浆源数量也就越多。更喜人的是这个仪式并不会消耗破坏意志。然而,当大气中的意志数量下降,而且仪式的最大范围小于你设定的范围时,仪式就会停止工作,必须进行手动修复。\n\t最后,坚毅意志会令仪式范围内的玩家获得火焰抗性,时效和空气中意志的浓度成正比。另外有一点要注意,腐蚀意/cut志的反转效果会抵消掉坚毅意志所带来的火焰抗性。 +guide.BloodMagic.entry.ritual.greenGrove.info=上星期我开始为提比略讲授跨领域的魔法。除了血之魔法外,我的每个学徒都学过一些其它形式的魔法。其实,学什么魔法都没有关系,只要它不浪费资源就好——我曾经使用过来自遥远的东方的Ars部落的魔法,但是因为Etherium之源几乎被榨干了,所以这个计划也就夭折了。\n\t提比略决定学习神秘学,一门利用世界本身的魔法来创造属于自己的魔法的魔法。它/cut正好和血之魔法相抗衡——后者使用的是生命本身具有的魔法。为了解释清楚,我决定用作物生长为例子,展示两门魔法之间的差别。\n\t“在神秘学中,魔法师会使用以Herba源质炼成的生长催化剂,”我一边这样说着,一边指着教室墙上挂着的一幅源质合成图;诚然这节课其实只有提比略一个学生,但人总还是需要点乐趣的,“一小股灵气和源质混合在一起可以刺激植物的/cut光合作用,从而令植物吸收更多的光能,以此加速其生长。然而,这需要保证作物生长在肥沃的土地上,否则作物最终只能枯萎死亡。“\n\t然后我找来了土仪式石和水仪式石各四块,摆出一个圆形,并在圆心处放置主仪式石。“血魔法与之正好相反,”我一边说着,一边激活了主仪式石,并在上面盖上了一层泥土。“你可以用你自己的生命力,或者别的动物的生命力,来加速作/cut物的生长,从而节约一般肥料的使用。本质上来讲,这个仪式会不断给予植物养分,从而使其养分保持在一个较高水平。”\n\t我向土中撒了几粒种子,小心翼翼地用土盖好,然后从贴身法袍中掏出一个水瓶,拔开瓶塞然后将水洒在了泥土上。“这个过程不需要阳光,因为它用到了另一种形式的能量。尽管如此,阳光还是很有用的——毕竟作物一开始不是这样生/cut长的嘛!”\n\t在我解释的时候,有几点绿色的东西就已经冒出了土堆。每有一片新叶长出,我都会感受到一丝压力,虽然不大,但会不断积累。下课后,我开始清理实验用的土堆,然后决定去村子里走一圈:我现在有几斗小麦要卖。\n\t---------------\n\t绿丛仪式,正如其名,以血法师之血为养料,加速仪式附近之植物,诸如小麦、胡萝卜之类,/cut的生长。默认,仪式只在3x3范围内寻找合适的目标,每秒大概只有30%%的概率成功催生。用仪式调整钳调整后可寻找5x5范围内的至多81棵作物。\n\t另外,恶魔意志对这个仪式也有效果。原生意志会加快其工作速度,效果取决于浓度,但每次催生会多消耗0.05点意志。\n\t若辅以复仇意志,仪式依旧会在每次催生时多消耗0.05点意志,但会增加催生成功的概率。/cut之前提到默认概率是30%%,但若是你有100点复仇意志,这个概率会上升至80%%。\n\t破坏意志可以提高仪式的工作范围,这意味着你的一个仪式可以覆盖到更多的作物上。而且这个仪式不会消耗破坏意志!然而,若是意志的浓度下降,而你设定的范围比仪式最大的工作范围还大,那仪式就会停止工作,需要手动修复。\n\t/cut坚毅意志会让仪式在催熟作物的同时保证耕地已经过翻整且保持湿润。另外,若是仪式的工作范围内有掉在地上的种子,坚毅意志会让仪式自动用那些种子来补种。自然地,这个效果会消耗意志,但消耗速度是固定的。\n\t腐蚀意志的效果则完全反转了这个仪式的工作原理——植物会在这种意志的影响下转而去主动吸血,就像水蛭那样。具体来说:每一刻,若植物附/cut近若有怪物,那么植物和怪物都会受到伤害,且两者伤害成正比。事实上直接用怪物当作植物的养料是有效的!另外,每个怪物上每有10秒中的负面效果,就会消耗0.2点腐蚀意志。 +guide.BloodMagic.entry.ritual.magnetism.info=磁力仪式可谓是采石场必备。这个仪式会制造出一旋转的磁场,将深埋地下的丰富矿藏吸到地面上。这个仪式并不会吸走石头,所以地面上也不会因此出现大洞,前提是地下并非全是矿石。这个仪式每2秒就会试着吸一个矿石,每成功吸取一个矿石便消耗50LP。\n\t/cut默认,这个仪式的工作范围是以主仪式石为中心的7x7正方形区域(即半径为3)。目前,意志还不能影响这个仪式的工作,所以你只能通过在主仪式石正下方放置某种价值高昂的方块来提高其工作范围。一个铁块可以让半径增加到7。金块则是增加到15。钻石效果最好,可以将其工作范围拓展为63x63,届时你只需要看着仪式慢悠悠地把矿石吸到主仪式石上方3x3的空间里就好了。 +guide.BloodMagic.entry.ritual.crusher.info=挖掘仪式的运行十分简单:只需要将箱子之类的东西放在主仪式石正上方,它就可以消耗LP并不断挖掘主仪式石正下方3x3x3范围内的方块了。仪式每2秒会尝试挖掘,如果成功,会消耗7LP。挖下来的方块会放进与仪式链接的容器中,如果容器已满,就会掉在那个容器的上面。\n\t若以原生意志驱动仪式,仪式将会工作得更快,但每次成功挖掘时都会多消耗0.05点原生意志。\n\t/cut破坏意志会令仪式在挖掘方块时拥有时运的效果。目前来看,不论提供多少意志,时运的等级永远是三,并且每次成功挖掘都会多消耗0.2点此种意志。\n\t坚毅意志会令仪式在挖掘方块时拥有精准采集的效果。每次成功挖掘都会多消耗0.2点此种意志。\n\t腐蚀意志会令仪式在挖掘方块时经过某种液体的浸洗。/cut这种液体带有粉碎的效果,换言之——此时你挖掘的铁矿时会变成两堆铁砂。目前这种液体可以是基础切削油或爆炸火药。根据所有液体的不同,仪式消耗的意志数量也不同。这个效果会覆盖精准采集的效果。\n\t/cut复仇意志的效果和压挤印记差不多,即会压缩挖下来的东西。举例:箱子里现在有65红石,一次挖掘后会将其中9个红石压缩为一红石块,留下56红/cut石。仅当压缩成功时仪式才会消耗0.2点复仇意志。 +guide.BloodMagic.entry.ritual.highJump.info=这个仪式会用强大的气流将走在上面的人送上天。另外,这个仪式还会令摔下来的人免受掉落伤害。潜行即可规避仪式的效果。\n\t每次成功产生气流时,仪式都会以5LP/tick的速度消耗LP;若没能产生气流,则不会消耗LP。 +guide.BloodMagic.entry.ritual.speed.info=仪式如其名,速移仪式可用来加速移动。仪式本身可以指向任意方向,而在仪式的生效范围内的实体都会朝仪式所指的方向加速。仪式的指向由那块薄暮仪式石的位置确定。默认,工作范围是半径二格见方,但可以用仪式调整钳调整。水平方向上的速度加成是3方块/tick,垂直方向上则是1.2方块/tick。\n\t以原生意志驱动的速移仪式会使生物获得更快的速度。/cut当周围充满原生意志(即100点)时,速度会翻一番。每次加成都会消耗0.1点意志。\n\t复仇意志将会迫使仪式对成年动物无效,而破坏意志会迫使仪式对幼年动物无效。复仇和破坏意志都会令仪式对玩家无效。若同时使用这两种意志,则仪式只会对玩家有效。这些特性对于动物农场,甚至是过滤小僵尸都是十分有用的。仪式只有在成功加速时消耗0.05点意志。换言之,/cut对于幼年动物来说,仪式不会消耗破坏意志,也不会消耗LP——因为这时的仪式不会对幼年动物有效。 +guide.BloodMagic.entry.ritual.wellOfSuffering.info=对于那些不想用自己的血来补充LP供应的血法师,苦难之井便是他们的选择:这个仪式会将方圆十格范围内的非玩家实体的生命聚集到血之祭坛里。苦难之井只会在上下十格、水平方向上方圆五格的范围内寻找血之祭坛。如果找不套祭坛,仪式不会工作。仪式每消耗1LP便可从怪物上抽出25LP;若是针对非敌对的生物,则可抽出100LP;具体数量会受到献祭符文的增幅的影响。 +guide.BloodMagic.entry.ritual.featheredKnife.info=羽刀仪式像是一把直插使用者身上的刀,抽取其血液,并为附近的血之祭坛补充能量。一般,羽刀仪式首先会在以主仪式石为中心的11x11x21的范围内寻找一座祭坛——若找不到祭坛,仪式不会工作;找到祭坛后仪式会记下这个祭坛的位置。当有玩家进入仪式的范围(默认为31x31x41)后,仪式会每秒对玩家造成一点伤害,并将其转化为LP送入祭坛中。这个过程会受到血之符文的影响。伤害玩家的速度可/cut以调整。不要担心,这个仪式也有安全保护机制:它不会攻击那些只剩下百分之三十不到的生命值的玩家。\n\t有数种恶魔意志可以影响这个仪式的工作。比如,原生意志——它可以提高仪式的工作速度,准确地说是一秒攻击玩家两次。但每次攻击时会多消耗0.05点原生意志。\n\t若周围的灵域中有至少十点坚毅意志,仪式会将安全阈值/cut从百分之三十提高到百分之七十。这层保护不会多消耗意志。\n\t若周围的灵域中有至少十点复仇意志,仪式会逐步降低安全阈值至百分之十。若同时有至少十点坚毅意志,那么后者的百分之七十的阈值将只对仪式的主人有效果。和坚毅意志一样,这个效果不会多消耗意志。\n\t/cut若仪式附近的灵域中有破坏意志,这个仪式的生命值转LP的效率会有所提高。转化率的增幅与破坏意志的含量成正比,最高为五分之一,对应100点破坏意志。这个效果可以与符文、束灵护甲升级和熏香叠加。每转化一点HP,会多消耗0.05点破坏意志。\n\t说到熏香——腐蚀意志会令熏香的效果与此仪式叠加。若你身上没有“魂飞魄散”效果,并且你正好处在熏香的效果/cut范围内,你的生命值会被直接扣至安全阈值,并将转化出的LP一次性注入祭坛中,并给予你魂飞魄散的效果。此效果可与破坏意志叠加。 +guide.BloodMagic.entry.ritual.regen.info=虽然仍有争议,但这重生仪式对于那些想用自己的血来驱动魔法的血法师们来说,仍然是一个不错的选择,因为它会利用血法师的魔法在仪式范围内产生治疗光环的效果,藉由此治愈仪式范围内的生物,包括血法师他们自己。仪式每2.5秒会给15格范围内的生物附加生命回复I的效果;对于玩家来说它会消耗100LP,对于其它生物来说是10LP。\n\t/cut腐蚀意志会给仪式再加上一个“吸血鬼范围”。此时,仪式会对所有非玩家生物随机造成伤害,并藉由此治疗玩家。每一个工作的tick中它都会消耗0.04点腐蚀意志并将1点生命值转移到玩家身上。 +guide.BloodMagic.entry.ritual.harvest.info=这个仪式可以收获默认以仪式石上方9x9x5范围内的所有作物,并将收获到的种子补种回去。所有收获到的物品都会掉落在原地。仪式工作频率为5tick尝试一次,每次成功收获都会消耗20LP。\n\t可以收获的作物包括但不限于:南瓜、小麦、胡萝卜、土豆、地狱疣、仙人掌、甘蔗等。时刻记住,这个仪式并不会对它正在收割的作物作任何假设——只要它被认为是一/cut种可以收割的作物,这个仪式就可以收割。(译注:更精确地说,是指有对应的HarvestHandler支持的作物。) +guide.BloodMagic.entry.ritual.interdiction.info=在传说中的古代炼金术设备的基础上,我们研发出了这个仪式,可将任何不是玩家的生物赶出仪式所覆盖的范围。默认,任何距离此仪式的主仪式石不超过两格的非玩家生物的移动速度都会被此仪式干涉到。要注意的是,尽管仪式范围内的生物不会被掉落伤害影响,但一旦超出了仪式的覆盖范围,保护就会失效。 +guide.BloodMagic.entry.ritual.containment.info=和禁止仪式正好相反,牵制仪式会试图将所有生物全部拉进仪式上方的范围中,并困住它们,使其无法移动。默认范围是水平方向上3格见方,从最低的仪式石到最高的仪式石为止。这个范围可以调整。\n\t/cut默认,仪式的消耗是每个生物每tick1LP。没有在拉生物时不会消耗LP。 +guide.BloodMagic.entry.ritual.suppression.info=抑液仪式会压制其影响范围内的所有液体——换言之,将范围内的液体全替换为空气。它的工作范围大约是半径10格的上半球。工作时,LP消耗速度为2LP/tick。仪式停止工作时会将所有被替换的液体全部放置回去。 +guide.BloodMagic.entry.ritual.expulsion.info=假如你在玩服务器时,你发现,出于种种理由,你需要拒绝某些玩家的造访,然后你发现力场护盾和杀人不眨眼的巨型转子根本不能阻挡他们。那么就是这个仪式出场的时刻了!在传送魔法的帮助下这个仪式会大大缓解你的问题!\n\t若有玩家进入此仪式的范围内,并且这个玩家并不是仪式的主人,那么这个玩家就会被随机传送到半径100格的范围中的某个地方。当然这个仪/cut式还有一种类似白名单的功能:在主仪式石上放一个箱子,然后将那些与不想被传送的玩家绑定的物品放进箱子里,这些玩家就不会被传送走了。\n\t每传送成功一次会消耗2000LP。 +guide.BloodMagic.entry.ritual.zephyr.info=和风之唤——以一把古剑的名字命名——可以藉由风的力量将附近的物品卷起来并送入与之链接的箱子里(默认,只需要把箱子放在主仪式石正上方即可)。这个过程大概一瞬间就可以完成,所以你不用担心有什么奇怪的吸力问题!\n\t默认的工作范围是主仪式石方圆5格之内的方形。 +guide.BloodMagic.entry.ritual.laying.info=很多时候,自动化任务需要某种自动放置方块的手段。这个仪式便可以从附近的箱子中(默认,是主仪式石正上方)取出方块并放置在仪式的内部。具体来说,是放置在距离主仪式石两格远的地方,且高度相同。十分适合在建造树场时用于自动种树苗。每放置一个方块消耗50LP。 +guide.BloodMagic.entry.ritual.timberman.info=种了一堆树?想必你需要这个仪式。伐林仪式会将仪式持有者的LP用来驱使一个无形的幽灵,以砍伐附近的树木,并将砍下来的木头放入附近的箱子里。默认,它的工作范围是主仪式石往上30格,每个水平方向上各延伸10格形成的长方体。每砍掉一块木头需要消耗10LP。 +guide.BloodMagic.entry.ritual.meteor.info=就目前来说,这个仪式是所有仪式中最强大的仪式之一。激活此仪式需要消耗一百万LP,并且还有一段冷却时间。然而它的效果也十分强大——只需提供合适的祭品,它就可以从宇宙中召唤一颗陨石并直接砸向地面。诚然,这样一个大家伙会在地面上造成大爆炸,但因为它来自宇宙中,所以可能会包含大量稀有矿石。 \n\t/cut可用的祭品包括铁块、金块和钻石。(事实上,可用的祭品是可以被整合作者或用户控制的) +guide.BloodMagic.entry.ritual.downgrade.info=为了获得更强大的力量,你或许需要献祭某种东西作为交换。而这“沉重灵魂的忏悔”的任务正是如此——将一些物品献祭给一个虚无缥缈的实体,你便可以以束灵护甲的属性下降为代价,来换取更多的升级点数。仪式落成后,你需要在最高的空白仪式石挂一个面朝主仪式石的物品展示框,然后在薄暮仪式石上放一个能装东西的方块(例如箱子)。要献祭的物品需要放入那个装东西的地方,而核心物品/cut应挂入物品展示框内。仪式激活后,你便可以蹲在主仪式石上并获得降级后的物品。\n\t举例,对于淬火降级来说,核心物品是个水瓶,需要献祭的物品是龙息。\n\t所有可用的降级都可以通过JEI查询到——查询主仪式石的用途即可。另外,对于一个特定的降级来说,核心物品是一定的,所以你也可以选择查询某个物品来定位某个降级所需的祭品。 + +# Architect Entries +guide.BloodMagic.entry.architect.intro=前言 +guide.BloodMagic.entry.architect.bloodaltar=血之祭坛 +guide.BloodMagic.entry.architect.ash=奥术粉灰 +guide.BloodMagic.entry.architect.divination=占卜印记 +guide.BloodMagic.entry.architect.soulnetwork=灵魂网络 +guide.BloodMagic.entry.architect.weakorb=虚弱气血宝珠 +guide.BloodMagic.entry.architect.incense=熏香祭坛 +guide.BloodMagic.entry.architect.bloodrune=祭坛升级 +guide.BloodMagic.entry.architect.inspectoris=指示之书 +guide.BloodMagic.entry.architect.runeSpeed=速度符文 +guide.BloodMagic.entry.architect.water=水之印记 +guide.BloodMagic.entry.architect.lava=熔岩印记 +guide.BloodMagic.entry.architect.lavaCrystal=熔岩水晶 +guide.BloodMagic.entry.architect.apprenticeorb=学徒气血宝珠 +guide.BloodMagic.entry.architect.dagger=牺牲匕首 +guide.BloodMagic.entry.architect.runeSacrifice=献祭符文 +guide.BloodMagic.entry.architect.runeSelfSacrifice=牺牲符文 +guide.BloodMagic.entry.architect.holding=集持印记 +guide.BloodMagic.entry.architect.air=风之印记 +guide.BloodMagic.entry.architect.void=虚空印记 +guide.BloodMagic.entry.architect.greenGrove=绿丛印记 +guide.BloodMagic.entry.architect.fastMiner=速掘印记 +guide.BloodMagic.entry.architect.seer=见解印记 +guide.BloodMagic.entry.architect.magicianOrb=法师气血宝珠 +guide.BloodMagic.entry.architect.capacity=增容符文 +guide.BloodMagic.entry.architect.displacement=转位符文 +guide.BloodMagic.entry.architect.affinity=元素印记 +guide.BloodMagic.entry.architect.lamp=血光印记 +guide.BloodMagic.entry.architect.magnetism=磁引印记 +guide.BloodMagic.entry.architect.peritia=经验之书 +guide.BloodMagic.entry.architect.livingArmour=束灵护甲 +guide.BloodMagic.entry.architect.upgradeTome=束灵护甲升级之书 +guide.BloodMagic.entry.architect.teleposer=传送器 +guide.BloodMagic.entry.architect.boundBlade=束缚之剑 +guide.BloodMagic.entry.architect.boundTool=束缚工具 +guide.BloodMagic.entry.architect.weakShard=虚弱气血碎片 +guide.BloodMagic.entry.architect.masterOrb=导师气血宝珠 +guide.BloodMagic.entry.architect.runeOrb=宝珠符文 +guide.BloodMagic.entry.architect.suppression=抑液印记 +guide.BloodMagic.entry.architect.haste=急速印记 +guide.BloodMagic.entry.architect.severance=绝影印记 +guide.BloodMagic.entry.architect.teleposition=传送印记 +guide.BloodMagic.entry.architect.compression=压挤印记 +guide.BloodMagic.entry.architect.bridge=影桥印记 +guide.BloodMagic.entry.architect.mimic=拟态 +guide.BloodMagic.entry.architect.downgrade=束灵护甲降级 + +guide.BloodMagic.entry.architect.augmentedCapacity=超容符文 +guide.BloodMagic.entry.architect.charging=充能符文 +guide.BloodMagic.entry.architect.acceleration=促进符文 + +# Architect Entry Texts +guide.BloodMagic.entry.architect.intro.info=大家好,我叫提比略。你或许已经发现这本书并不完整了,但很不幸你是对的。因为1.7.10->1.8.9->1.9.4及以上的更新,血魔法也发生了巨大的变化。因此,这本书不得不重写。这本书的最终目标是一本研究笔记,或者说是一本真正的书,所以距离这本书真正完成还有一段距离。有鉴于此,我会定期填补这本书中的空白。当然了,一开始这本书里将全是读起来味同嚼蜡的文字(嘛...肯定不是那种引人入胜的字/cut啦,好啦不要在意细节),但这个情况会随着时间的推移而得到改善的,等待着你的将会是一部血法师们的心路历程。\n\t但不好意思我想我得赶紧重新切入角色当中去了。*咳嗽声*\n\t我名提比略,一名血法师,同时也以“缔造者”的名字闻名于世。这本书中包含了我对名为“灵魂网络”的自然现象的研究,以及我对血魔法师需/cut要适应的一些设备的物理特性的描述。从搭建强大的血之祭坛的技艺,到为增强法力而进行的生命献祭的种种细节,再到各种拥有强大力量的魔法符文和印记,我不断地发现新的魔法,不断地总结并找到强化自己的全新方式。\n\t来吧,新入门的魔法师们,全新的领域在等待着你!\n\t...啊马格斯说我有时候有点浮夸,但那又如何? +guide.BloodMagic.entry.architect.bloodaltar.info.1=血之祭坛便是血魔法中最核心的设备之一。它有两个主要用途:合成某些物品,或将生命源质转移到宝珠中去。然而这两个用途都需要消耗祭坛中的生命源质。自然地,也有两种补充生命源质的方式:以玩家的血提供生命源质,或以别的动物或怪物的血提供生命源质。 +guide.BloodMagic.entry.architect.bloodaltar.info.2=你需要一把牺牲匕首才能将你的血转化为生命源质并注入祭坛中。具体操作如下:首先,站在祭坛旁;然后,使用匕首伤害自己(即右击),你会损失一颗心的生命值,祭坛中会多出 200 LP。LP 是生命源质的 单位,称为生命点数(Life Point, 缩写 LP),用于刻画某种任 务需要消耗的生命力——不,和游戏王不一样。默认,普通的血之祭坛容量仅为一万。你还可以把物品放入祭坛中(右击即可),若如此做,合适的/cut物品便会触发合成进程。\n\t祭坛合成不仅需要消耗 LP,还需要一定的层级。满足 这些条件后,祭坛便会开始自动抽取 LP 用于合成,并开 始散发红色粒子效果。若合成还未完成,但此时 LP 已被 抽干,红色的粒子效果会转为灰色,合成进度也会开始倒退,所以尽量避免这种情况的出现!最后还有一点,如果你放进祭坛里的东西是气血宝珠,那么它 会散发紫色的粒子效果,表明它在向某个宝珠中灌输 LP。\n\t事实上,祭坛中有三个存储 LP 的容器:之前提到的一万容积指的是其主容器;除此之外,祭坛还有输入容器和输出容器各一,容积均为主容器容积的十分之一。默认,输入容器中的生命源质会以每秒 20 LP 的速度转移至主容器中,而主容器中的生命源质也会以同样的速度转移到输出容器中。如此一来,输入容器和输出/cut容器在祭坛中扮演的便是缓冲区的角色——它们是用来限制将生命源质输入祭坛,和从祭坛中将生命源质抽取出来的速度的。 +guide.BloodMagic.entry.architect.ash.info=尽管奥术粉灰并不是这一卷的核心,但它确实贯穿了本卷提到的很多道具的合成之中。合成奥术粉灰需要用到狱火熔炉和恶魔意志,关于这些东西的细节可以参考《恶魔使者》卷。简单来说,它是一种二元合成工具:你需要一种可充当催化剂的反应试剂,以及某种物品作为次要合成材料。\n\t一份奥术粉灰可使用二十次。对着地面或者墙壁使用便/cut可画出一个圆形的法阵(如果是墙壁,你只能在一个方向上看到法阵)。然后,对法阵中央使用合适的催化剂即可改变其形状,当然也会消耗催化剂(即,右击使用)。如果法阵没有变形,那么你肯定有什么地方搞错了。\n\t在观察到法阵变形后,你便可以放入次要物品了。合适的次要物品会启动法阵,届时你会看到法阵开始旋转,并开始产生各种变化,具体变化随法/cut阵不同而不同——但正确启动的法阵最终都会产生一种新的物品。\n\t所有用到奥术粉灰的合成——我一般管这叫炼金阵列——都可以在JEI中查询到。注意,左侧的物品一定是催化剂,而右侧的物品一定是一个次要物品。 +guide.BloodMagic.entry.architect.divination.info=占卜印记是血法师最常用的工具之一,因为它能解决你很多麻烦,具体来说是能给你一些关键数据。它的合成也很简单:只需要在炼金阵列中以红石为催化剂,以石板为次要物品合成即可。\n\t对血之祭坛使用此印记便可看到祭坛主容器中的LP数量,以及容量上限。短时间内反复使用并不会导致刷屏,只会覆盖之前的提示。\n\t/cut对着空气使用此印记的话,则能看到你的灵魂网络中的LP数量。尽管这功能看上去很普通,但你以后就会发现,你一刻也不想让这玩意离手。 +guide.BloodMagic.entry.architect.soulnetwork.info=灵魂网络(Soul Network,缩写 SN)是指玩家和各种物品以 及结构之间的灵魂上的链接。随着血法师能力的提升,灵魂网络的强度也会随之提高。就存在来说,它们是灵魂织成的一张无形的网,但最强大的血魔法师们是可以看到其物理的具现的。然而,时至今日,仍无人可达此化境...\n\t在游戏中,网络是直接与玩家绑定在一块的。玩家所在的世界早已记录下了这一切——/cut这意味着,玩家的 LP 并非是 记录在某颗气血宝珠中,而是被世界记录着;每个玩家之间的网络互相独立,互不影响。\n\t绑定的过程通常在第一次使用某个物品时就已经完成了。就目前的科技来说,一旦绑定,即便是物品的主人也无法解除。需要消耗LP的物品会直接消耗其主人灵魂网络中的LP。但,如果主人的灵魂网络中没有足够的 LP,它会从 当前使用者,而不是其主人,的身上抽取生命值以填补空缺。因此,在快没有LP的时候要小心——因为这通常会致人于死地。 +guide.BloodMagic.entry.architect.weakorb.info.1=没了魔法来源的魔法师和咸鱼有什么区别?气血宝珠便是这样一个魔法源:它可以将物理形式的生命转化成LP并输入到其主人的灵魂网络中去。它本身并非电池,相反它倒像是一根导管,可将生命力转化成血魔法师需要的魔法。 +guide.BloodMagic.entry.architect.weakorb.info.2=虚弱气血宝珠便是你能制作的第一种宝珠——只需向一粒钻石中灌注两千LP的生命力即可完成。将已绑定的宝珠放入祭坛,它就可以不断地从祭坛中抽取LP,直接输入灵魂网络中。另外,不论什么宝珠,其容量上限都只能通过一些高级符文来提升;这里注意一点,这个容量提升的效果只有在宝珠在祭坛上时才有效。对于虚弱气血宝珠,最高只能提升到五千。\n\t/cut玩家还可以通过简单地使用气血宝珠来获得LP——每一次使用都会对玩家造成一颗心的伤害并提供200LP。此法不能令网络中的LP数量突破容量上限。\n\t祭坛只可能为与自己级别相当,或者比自己级别低的气血宝珠提供LP。举例,三级的宝珠只可能在三级或更高级的祭坛中获得LP,一级的祭坛是无法胜任的。 +guide.BloodMagic.entry.architect.incense.info.1=血法师会经常发现,它们的LP产能时常跟不上消耗。当然,有特殊的符文可以提高自我献祭所产生的生命源质的数量,但这个过程依旧是如此缓慢。只有这一条路可以走了吗?\n\t下面介绍熏香祭坛。熏香祭坛本身可以以自身为中心,标记出一片静谧的土地,在这范围内,它可以借助祭坛本身散发出的余力来安抚惊扰到的灵魂。当然你不是很清楚这/cut股熏香的气息从何而来,但好像又没什么不对?先不管了。\n\t熏香祭坛的作用就是如此:利用静谧的环境来提升单颗心所创造出的生命源质的数量。在你距离熏香祭坛只有约莫五格远的地方时,它会散发出火焰颗粒以证明其已经创造出静谧区域。在它的影响范围下,你的牺牲匕首也会发生变化,以证明熏香已经发挥其效果。整个过程大约持续五秒钟,你可以通过观察火焰/cut粒子的存在来判断是否结束。此时,使用牺牲匕首献祭自己将会一次性献祭你生命值上限的百分之九十,并将对应数量的LP输入血之祭坛之中。LP数量和献祭的生命值依旧成正比,但此时它的转化率会根据附近的静谧值而有所上升;默认,增幅是百分之二十。\n\t另外,占卜印记可以揭示附近的静谧值,以及静谧所带来的具体增幅水平。 +guide.BloodMagic.entry.architect.incense.info.2=自然,百分之二十的增幅已经够多了,但熏香祭坛作用的范围还是可以继续扩展的。你只需要在熏香祭坛某个基础方向(即,正东、正西、正南、正北)两格远的地方排出一列三块高度一样木质路面即可定义一个“范围”。在此“范围”中的任意方块都有助于让这片区域更加静谧。木质路面还可以继续扩展,惟需遵守以下规则:一,每一列木质路面必须水平,即构成新一列路面的方块必须高度相同;二,新的路面必须位于上一列路面的上/cut下五格范围内。简单来说,金字塔、倒金字塔等阶梯式结构都是可以的。\n\t然而,这个范围并非可以无节制地扩张。木质路面只能叠加三列;不过不用担心,还有一种可以叠加五列的石质路面;甚至还有可以叠加九列的碎石路面和黑曜石路面。自然地,你在叠加三列木路面后就需要用石头的;然而你完全可以一开始就用石头的,只要你不是只用木路面就好。\n\t/cut回到静谧程度的问题上来。事实上只有一部分方块可以让这片区域更加静谧,而根据实验,这些方块被分成了若干种。举个例子,你在这片区域中种了土豆,土豆属于“作物”分类,然后这片区域便平静了一些。不论是你接着种土豆,或者你种起了胡萝卜,它们的效果都会随着你种的数量的增多而降低,甚至还会抵消一开始的效果,因为它们都属于“作物”。为了最好的效果,你需要尽可能使用多种不同类型的方块。/cut有助于平静的方块有这么几类:作物、原木、树叶、熔岩、地狱岩、耕地、水、生命源质、以及其他东西(原文如此)。 +guide.BloodMagic.entry.architect.bloodrune.info.1=随着你逐渐深入血魔法,你会发现你那普普通通的血之祭坛已无法满足你的需要了。但你还可以通过放置一种名为气血符文的特殊方块来提升祭坛的整体属性,进而解锁更多的合成。\n\t将血之祭坛升到2级的方法很简单:在祭坛本身往下一层放置八个一圈的气血符文。如果你实在搞不清楚具体的位置,指示之书可以帮到你——它可以以一种类似全息投影的/cut方式指明你需要放置气血符文的位置。\n\t尽管只需要空白气血符文就可以完成祭坛升级,我仍然推荐你对使用带有特殊强化的气血符文。这些带有特殊强化的气血符文可以提高祭坛的合成速度、容量以及效率,而且,除了二级祭坛的四个角上的符文必须是空白符文外,其他位置的空白符文都可以替换。有关这些特殊的气血/cut符文的资料可以在后面的章节找到。 +guide.BloodMagic.entry.architect.inspectoris.info.1=Inspectoris Scandalum 在拉丁 语中大概的意思是“方块读取器”。事实上,它的用途是,潜行时对着某个方块使用,便可解读那些复杂结构的信息,并将其显示在你眼前。目前,它只能给出血之祭坛的相关信息:它可以给出升级祭坛所需的方块的种类,以及具体摆放位置。\n\t若你觉得一次一次查询不适合你,你可以试着潜行时对着空气使用此物以切换目标层/cut级。这样,再次按前文所述的方式使用此物,它就可以以一种类似全息投影的方式将升级所需的方块的位置投影出来。设定级别为1时可以关闭这个类全息投影的效果。 +guide.BloodMagic.entry.architect.runeSpeed.info.1=速度符文可以提高祭坛内的压力,藉由此加速嬗变过程,从而提高合成速度。每块速度符文都会提高20%%的祭坛的LP消耗速度。它同时也会影响灌注气血宝珠的速度。 +guide.BloodMagic.entry.architect.water.info.1=顾名思义,水之印记是一块可凝聚空气中水分,并将其集中于一点上的印记。除此之外,对着任何能装水的设备使用水之印记都可以向设备里面装一桶水。总而言之,它便是一个移动的无限水源。每次使用都会消耗50点LP。 +guide.BloodMagic.entry.architect.lava.info.1=若说水之印记属阴,那么,属阳的便是熔岩印记。熔岩印记可以将一片区域内的石头熔化成岩浆。若是对某个可接受流体岩浆的设备使用,这设备里就会多出一桶岩浆。尽管你拿着这个印记不会让你自燃,但这不等于你可以开始洗熔岩浴了!记得每次使用时会消耗1000LP。 +guide.BloodMagic.entry.architect.lavaCrystal.info.1=熔岩晶体是块里面存储了一团永不冷却的熔岩的石头。若将其放入熔炉中当燃料使用,它会释放出热量,这些热量正好可以烧炼一个物品,然后消耗50LP。若是它没有这么多LP可以抽取,它也不会因此损坏,还会因此给网络的主人追加一个反胃效果。\n\t这块晶体理论上在任何支持标准固态燃料的设备中都可以工作。 +guide.BloodMagic.entry.architect.apprenticeorb.info.1=随着你的新玩具越来越多,你会发现灵魂网络的五千LP上限已经开始捉襟见肘了。是时候做一颗更强大的气血宝珠了。\n\t学徒气血宝珠的制作需要二级血之祭坛,可提供2.5万LP的容量。同时,它也是合成很多更高级的物品和符文的必须。 +guide.BloodMagic.entry.architect.dagger.info.1=在不断地通过献祭自己来强化自己后,你可以开始试着献祭别的活物了。若是用这把牺牲匕首,在血之祭坛附近击中一只普通的生物(不能是BOSS,也不能是玩家),那么这个可怜的家伙就会立刻被献祭,并根据质量的不同,转化成数量不等的生命源质。一般情况下,那些敌对怪物给予的生命源质要比那些平和的动物们要多。 +guide.BloodMagic.entry.architect.runeSacrifice.info.1=献祭符文,正如其名,可提高献祭活物时获得的生命源质的数量,准确地说,是每块符文增加十分之一。 +guide.BloodMagic.entry.architect.runeSelfSacrifice.info.1=牺牲符文和献祭符文差不多,但牺牲符文是针对玩家自己的。增幅和献祭符文一样,都是百分之十。 +guide.BloodMagic.entry.architect.holding.info.1=你逐渐开始发现你有一堆各式各样的印记要带在身上了:有的需要手动开关,有的只需要放在背包里就可以一直有效果。有鉴于你的背包空间开始逐渐缩水,你可能需要一块集持印记的帮助。\n\t这集持印记的作用,便是将五个其他印记“压缩”成一个;但是你并不能在集持印记里放集持印记。默认,按下"Holding"键(默认为'H')可打开其界面,用于调整顺序。滚轮可在选中/cut的印记之间循环切换。被选中的印记可直接借助集持印记使用,毋需取出。\n\t自然地,你可以身上带若干集持印记,这些集持印记互不影响。但为了一眼就能区分,你可以考虑在炼金术桌中为其染色。染色的方式有两种:1.直接使用染料在炼金术桌中染色;2.使用十六进制数命名的命名牌,比如这样:0xFFFFFF。 +guide.BloodMagic.entry.architect.air.info.1=风之印记,简单地将水蒸气分成数股,产生强大的气流,驱使玩家前进。简单来说,你可以用这印记推动你前进。另外,这个印记可以免除掉落伤害,但只有你使用时才可以免除,所以如果你想硬着陆的话,记得要在即将摔到地上的一瞬间使用! +guide.BloodMagic.entry.architect.void.info.1=顾名思义,虚空印记会制造真空,并将附近的液体全部吸进去,并彻底销毁。建议搭配水之印记和熔岩印记使用。 +guide.BloodMagic.entry.architect.greenGrove.info.1=绿丛印记可以将你的血转化成植物生长的催化剂,进而加速附近植物的生长。激活印记的方式很简单:潜行时对着空气使用(右击)即可;相同的方式可以停止其工作(可以通过其信息提示看出它是否已被激活)。要记住,它每隔几秒钟就会抽取一次LP以补充养料。\n\t直接对作物使用的效果和骨粉无异。这样一来,这个印记也可以像骨粉一样,用于制造草丛。 +guide.BloodMagic.entry.architect.fastMiner.info.1=大部分血法师都应该注意到了,血中含有丰富的铁元素。经验丰富的血法师完全可以在不抽血的情况下直接改变其体内血液的组成——然而,需要注意的是,只有那些最顶尖的血法师才可以抵抗由此产生的排斥反应。\n\t这样一个技能有个经典的用途,提高身体的灵活性,以提高其运动速度。这速掘印记,通过用磁铁影响血液里的铁元素,可大幅提升使用者的挖掘/cut速度。其实这个效果就是急迫II的效果。虽然只能影响使用者自身,但对于挖黑曜石来说的确是好用。 +guide.BloodMagic.entry.architect.seer.info.1=你在修理血之祭坛时,时常会发觉自己早已迷失在了那些占卜印记无法察觉的细节中。所以这就是轮到见解印记登场的时刻了。见解印记实际上是占卜印记的升级版,它能看到很多占卜印记所看不到的细节,诸如祭坛的合成速度、当前的LP储量、合成进度、甚至玩家自己的灵魂网络的很多信息,这里就不作赘述了。 +guide.BloodMagic.entry.architect.magicianOrb.info.1=新的祭坛,新的宝珠。这次,为了你的新玩具,你需要一颗法师气血宝珠。不过有一点要注意,合成法师气血宝珠需要2.5万LP,但你的祭坛只有一万容量。换言之,在合成这颗宝珠时,你需要不断地补充生命源质。所以,在合成这颗气血宝珠前,请务必做好万全的准备! +guide.BloodMagic.entry.architect.capacity.info.1=虽然你并不知道具体原理,但这增容符文的确能给血之祭坛提供两千的额外容量。也许,是某种共振导致容积下降,然后你便可以往里面装入更多的容器?这样一想你倒是想到了进一步改进的方法...\n\t这里有必要再重复一遍,祭坛本身还有用于缓冲的输入和输出容器,容积均为主容器的110%%。增容符文的效果对这两个缓冲容器也有效。 +guide.BloodMagic.entry.architect.displacement.info.1=默认,血之祭坛的缓冲区和主容器之间的LP转移速度是最高20LP/s。对于那些需要频繁转移LP的祭坛来说这个速度可以说是巨大的瓶颈。这也是为什么会有转位符文的原因。\n\t转位符文可提升LP转移的速度。每个符文都可以将速度提高至原来的1.2倍,多个转位符文可以叠加。换言之,一个转位符文可以将速度提高至一次24LP,两个则为28.8LP,三个/cut则为34.56LP,而20个则会达到767LP,足以在13秒内清空一座标准祭坛里所有的生命源质。 +guide.BloodMagic.entry.architect.affinity.info.1=表面上看,元素印记不过是一个能免疫火焰、溺水和摔落伤害的印记。事实上,它的工作方式并非如此——激活此印记后,它会消耗汗水(如有必要,会是血),然后在使用者身上形成一格保护层,进而抵挡意外伤害。\n\t这层空气护盾可以缓冲火焰和熔岩的热量,也可以在必要时提供空气以防溺水,同时还可以在不慎摔落时充当无形的气垫使用。 +guide.BloodMagic.entry.architect.lamp.info.1=人和动物的血液中还是有“杂质”的。只需要收集一些稀有气体,然后辅以合适的热源,就可以在地面上产生一团明亮的光球,照耀着远处的大地。\n\t血光印记的用途有两个:或直接对着方块使用,产生一个光球;或对着空气使用,将光球发射到远处。这些光球和火把一样,可以空手打碎。 +guide.BloodMagic.entry.architect.magnetism.info.1=磁引印记可将血液中的铁元素转化为磁铁,进而将小件物品吸引到身上,免除原地打转收集物品的麻烦。就原理来看,它是真正的物品磁铁,因为它并非是把物品吸过来,而是真正直接捡起远处的物品。幸好这磁铁的磁力并不大,不然当你意外地将爬行者以3马赫的速度吸过来的时候一切就都结束了。 + +guide.BloodMagic.entry.architect.peritia.info.1=在这世界上,有某些行为可以累积一个人的经验:击杀怪物、采掘矿石、冶炼金属、烹饪食物... 同时,一些特殊的奥法设备可以直接吸收这些经验,并作为其动力使用。因此,若是有一种能存储经验的媒介,那就再好不过了。\n\t尽管有很多设备都可以将这经验转化成物理形态储存,但这本经验之书却是以书写知识的方式,将你过去所积累下/cut的经验保存下来,以供日后使用的。需要的时候,只需要手持这本书就能自动吸收书页中的知识,并将其转化为经验。\n\t具体来说,这本书是这样用的:潜行时右击即可将一级经验存入书中(若有零头,则先吸收零头)。平时右击一次可直接获得一整级经验。它所存储的经验数量可在其信息提示中找到。 +guide.BloodMagic.entry.architect.livingArmour.info.1=在这Minecraft的世界中,所有人,尤其是那些新生的人(译注:应该是指死亡后刚刚重生的玩家?),都清楚一套好的护甲的重要性。通常,护甲的属性是确定的——护甲的保护性能、飞行的能力、跳跃或跑步的增幅、诸如此类,不胜枚举。诚然有这些属性的护甲是好的,但你从未真正遇到过一套为你量身打造的护甲。至少,现在所有人都这么认为。\n\t而这束灵护甲,实际上是一/cut个被镶入铁甲中的,经过特殊改造后的活物。穿在身上时,它便会与穿戴者共生——他们将一起移动、一起攻击、甚至吃东西时它也会有所感觉。和普通的人体一样,它也会生长,也会不断地强化自己,当然也需要接受训练。\n\t先举个例子吧。当你穿上束灵护甲,并长途奔袭一段时间后,你会注意到束灵胸甲上多了一个名为“迅捷双足”的升级。这个升级可以提高你的/cut移动速度,虽然目前只有等级1,但毕竟还是可以升级的。你还会注意到它拥有了“强化点数”,目前可能是“3/100”这样子。每个升级都需要一定的强化点数,但护甲可用的强化点数有限。换言之,若是拿不出某个升级需要的点数,你是不可能获得这个升级的。\n\t记住一点,只有全套束灵护甲才能接受训练,也只有全套束灵护甲才能发挥其应有的效果。\n\t/cut束灵护甲的强化点数还是可以被人为修改的。有一种方法是利用炼金术增强穿戴者和护甲本身之间的链接,藉此大幅提升强化点数的上限,典型代表便是“祷告之始”,可将上限提升至200。关于这些炼金术的产物以及制造过程,建议参阅本书《炼金术士》一卷。 +guide.BloodMagic.entry.architect.upgradeTome.info.1=若是束灵护甲上有你不想要的升级怎么办呢?你可以使用名为“净灵之音”的仪式来清洗这些升级,并获得对应的“强化手册”。关于仪式的细节可参阅本书《仪式大师》卷。这“强化手册”的用途便是,在你身着全套束灵护甲时,直接给予护甲对应的升级。\n\t当然,这强化手册也可以在铁砧中融合——在铁砧中将两本一模一样的手册融合在一起可以获得更高一级的手册。/cut比方说,两本迅捷双足II可以融合出一本迅捷双足III。对于束灵护甲本身来说,也有类似的机制,这里不作赘述。 +guide.BloodMagic.entry.architect.teleposer.info.1=传送器,顾名思义,可以将某个物体传送至另一个地点,但这个传送器不仅可以传送生物,还能传送方块。完整的传送装置需要两个传送器和一个传送核心。其中,一个传送器充当目的地,另一个传送器充当出发地。\n\t在使用传送器之前需要一些配置。首先,你需要右击传送核心将你与其绑定。然后,手持核心右击充当目的地的传送器以记录相关信息。最终,/cut把这个记录了目的地信息的传送核心透过其GUI放入充当始发地的传送器即可。\n\t然后,给予始发地的传送器一个红石信号(准确地说,是强充能),这个传送器就会将实体和方块(如果是箱子这样带特殊数据的方块,一并保留)一股脑全部传送过去——这个过程中我们假定目的地是有传送器的。\n\t当然,你可以只让一个传送器/cut有核心,抑或两个传送器互相链接,或者更多传送器形成一条链,藉此形成更复杂的系统。\n\t不过要记住一点,传送器只传送其上方的方块,不过传送的范围是由传送核心决定的——T1的传送核心只能传送一个方块,而T2传送核心则能传送3x3x3的方块,以此类推。 +guide.BloodMagic.entry.architect.boundBlade.info.1=束缚之剑是一把用制作束灵护甲的方式制作出来的剑,可以说已有很长历史了。不过有一点要注意,包括束缚之剑在内的各种束缚工具的设定,在未来都有可能有变动。\n\t这把剑有激活模式和抑制模式,潜行时右击即可切换。在抑制状态下它并不会造成任何伤害,但是在激活模式下它是会消耗LP的。同样的,你对怪物造成伤害时,也会消耗LP。所以,在你杀死怪物的时候,/cut这把剑也有可能杀死你!\n\t然而,用这把剑杀死怪物时,会有那么一点概率获得虚弱气血碎片——这个碎片便是将祭坛升级至四级的关键。 +guide.BloodMagic.entry.architect.boundTool.info.1=和束缚之剑一样,束缚工具(包括镐、斧和锹)的属性在未来也会有所变动。和束缚之剑一样,束缚工具有两个模式,切换方式同束缚之剑,也是潜行时右击。\n\t和束缚之剑不同,束缚工具拥有“野兽模式”。手持工具右键按住不动即可蓄力,蓄力结束后工具会放出一股巨大的能量,大范围破坏方块,最高可达11x11x11,但同时也有惊人的消耗:一万LP。因此,使用时一/cut定要小心谨慎,因为搞不好这就是你最后一次使用这些工具! +guide.BloodMagic.entry.architect.weakShard.info.1=任何有生命的东西,都有一层看不见,摸不着的链接,这个现象被称作灵魂网络。实践证明,诸如印记和仪式这样的东西也是可以有链接的,然而这些链接的来源便是拥有最强链接的生物——人类。\n\t用束缚之剑攻击生物时,那些可怜生物的一部分灵魂网络会直接硬化,在它们死后也可保持其形状。这部分灵魂网络便以虚弱气血碎片的形式现身于世,它们因其颜色与虚/cut弱气血宝珠相近而得名。\n\t虽然,至今仍未找到存在更强的气血碎片的证据,但是你至少知道,这些碎片对于增强你自己的灵魂网络肯定有帮助。 +guide.BloodMagic.entry.architect.masterOrb.info.1=如何利用这种对灵魂网络十分亲和的特性呢?答案是:用虚弱气血碎片打造全新的气血宝珠——导师气血宝珠。它可以提供一百万LP的上限,它可以彻底解放你对血魔法的想象力。也许,就算是陨石,也无法阻挡你的前进了吧... +guide.BloodMagic.entry.architect.runeOrb.info.1=看上去这个符文并没什么用途。但是,这宝珠符文可以提高那些放入血之祭坛中填充的宝珠的容量上限,每块符文都可以提升百分之二。对于虚弱气血宝珠,这是微不足道的100LP。而对于导师气血宝珠,这是两万LP的增幅,效果十分显著!如果你的祭坛上还有空位的话,这个符文兴许就是你的首选。 +guide.BloodMagic.entry.architect.suppression.info.1=抑液印记,采用和传送器一样的传送科技,可以让一定范围内的液体瞬间消失。准确地说,是送入另一个迷你维度中。不幸的事,因为传送科技的限制,液体还是会回来的——比如说,在使用者走过本是液体的区域后。不过这无伤大雅,毕竟不论是在水下行走,还是在下界的熔岩之海上漫步,这印记都是十分好用的。 +guide.BloodMagic.entry.architect.haste.info.1=人体能消化的物质中有两种十分有趣:糖和咖啡因。前者是能量储备,后者可以令人保持清醒。这急速印记,便可以通过模拟化学反应的方式,释放更多的化学能,进而提升印记使用者的移动能力。\n\t印记激活后,使用者会跑得更快,跳得更高,同时还会令玩家在不用跳跃的情况下跨越比较高的障碍(实际上是个改良版本的自动跳跃)。 +guide.BloodMagic.entry.architect.severance.info.1=人们至今无法解释传送的机制。多数情况下,传送被认为是时空扭曲的一种表现形式,物体可通过两个不同时空的链接来实现瞬间移动。而这绝影印记可以阻止时空扭曲的产生,从而阻止启动此印记的玩家附近的生物发动传送技能。当然这个印记并不能阻止诸如传送门之类的东西,但阻止类似末影人这样的生物还是可以的。 +guide.BloodMagic.entry.architect.teleposition.info.1=传送印记实际上是个自带传送核心的传送器。对某个传送器使用此印记,印记会记下这个传送器的位置,再次使用印记就可以直接传送到那里去了。然而它好像没给你返程票... +guide.BloodMagic.entry.architect.compression.info.1=矿工经常面对的一个情况便是,它的背包中充满了红石粉、青金石、以及各种乱七八糟的东西。虽然可以压缩,但是并非所有矿工都会随身携带工作台。\n\t压挤印记所创造的小型压缩力场可以将各种物品压缩起来,进而节约背包空间。具体来说是这样:如果你有63份红石粉,印记不会有效果;但如果你有64份红石粉,它就会将其中63份压缩成7个红石块。虽/cut然并没腾出新的格子,但是别忘了那个占了一个格子的红石粉是可以接着放红石的。这个印记对其他Mod的类似东西也是有效果的。 +guide.BloodMagic.entry.architect.bridge.info.1=影桥印记可以将使用者脚下的空气固化成可以行走的道路,或者说,幻化出一座幻影之桥。若是你不慎踩空,影桥会直接在你脚下出现,避免严重的摔伤。尽管在使用前需要一些测量工作,同时影桥出现也会造成延迟,它仍不失为一种“飞行”的好方法。 +guide.BloodMagic.entry.architect.mimic.info.1=拟态是一种可以模仿任意给定结构的魔法结构。它本身可以根据其碰到的方块,改变自身的分子结构,从而使其本身看起来都是如假包换一样。但,并非所有的属性都可以复制:比如说,普通的拟态方块变成萤石后不能发光。\n\t一般,拟态方块有两种用法。第一种,先放置拟态方块,然后手持要伪装的方块对着拟态方块右击。这样,被伪装的方块就直接进入拟态方块的内/cut部,拟态方块也就可以伪装了。不过,这个方法只能伪装一个方块的“默认”形状。举个例子,此法伪装的楼梯都是朝同一个方向的。\n\t第二种,直接对着某个方块使用拟态方块。若如此做,拟态方块便可以做到精确伪装。还是刚才楼梯的例子,这样伪装的楼梯就会很自然,因为方向被保留了下来。\n\t事实上,拟态方块的变种有很/cut多。默认的不透明拟态方块可以模仿形状和方块的大多数属性,但光是无法照过去的。悬幽拟态方块没有碰撞箱,适合制作隐藏门。清透拟态方块可以解决玻璃的拟态问题:光线可以无视被伪装的方块的属性,穿透这种拟态方块。最后,还有一种光亮拟态方块,不论何时它都会发光。终于不用火把了!\n\t其实还有一种特殊的拟态方块:感知拟态方块。如果有玩/cut家接近,它们就会向其发动猛烈攻击。这种方块可在很多地方找到,尤其是地牢中。所以说,如果有一个感知拟态方块伪装成了箱子,请记住:它们会咬人。\n\t***创造模式限定内容***\n\t在创造模式下,拟态方块会多出来一些有趣特性。用药水或药剂瓶右击拟态方块后,可令其在有玩家在附近时产生对应的药水效果。如果这是/cut普通的拟态方块,那么:点击东面/西面可以加/减药水效果的覆盖范围;点击北面/南面可以加/减玩家的检测范围;点击上面/下面可以提高/降低药水生成间隔,即每隔多久生成一次药水效果。\n\t如果你在面对一个感知拟态方块,你可以随意点击这个拟态方块,以改变其检测玩家的范围——如果玩家在检测范围中,并且可以看到这个拟态方块,拟态方块会直接出现在玩/cut家眼前。\n\t另外,如果玩家在创造模式下将要伪装的方块放入拟态方块中,这个方块不会在拟态方块被破坏后掉落。\n\t最后的最后,如果拟态方块伪装的是一个装着东西的箱子或别的什么容器:对于感知拟态方块,在它败北后会把箱子连同内容一块放回来;对于其他拟态方块,它会在被击溃时把物品撒一地。 +guide.BloodMagic.entry.architect.downgrade.info=就护甲降级的内容,我建议你阅读《仪式大师》卷的“沉重灵魂的忏悔”一章,在那里你可以得到更详细的解释。 + +guide.BloodMagic.entry.architect.augmentedCapacity.info=和增容符文类似,超容符文也可以提升祭坛的容量。但和增容符文不同,多块超容符文会之间的共鸣会让容积呈指数级增长。具体来说,是做乘法:每一块超容符文都会给予额外10%%的容积;换言之,两块即21%%的增长,三块即33.1%%的增长,以此类推。\n\t然而,超容符文的效果不与增容符文叠加,换言之,不论有多少超容符文,每块增容符文都只提供两千LP容量。 +guide.BloodMagic.entry.architect.charging.info=有那么一些东西对于合成很有帮助,而这充能符文便是其中之一:它可以吸收 LP,并将 其转化为“充能点数”,具体数量可用见解印记看到。若是合成某些物品正好需要一定量的充能点数,那么这充能符文就可以以消耗充能点数为代价,将物品立刻合成出来。若没有足够的充能点数,它就只会按一比一的比例直接将充能点数转化为 LP 以加速 其合成。\n\t/cut血之祭坛最多可存储的充能点数数量是充能符文的数量乘以祭坛的容积,其中容积需要至少为两万才有效果。血之祭坛充能的速度也是和充能符文数量以及其本身的速度成正比的(即,充能速度=符文数量*祭坛本身合成速度),每一秒它都会将一定量 LP 转化为充能点数。所以,如果你的祭坛中有这块符文,合理的设计将会使你事半功倍。 +guide.BloodMagic.entry.architect.acceleration.info=和大多数符文不同,促进符文需要和别的符文搭配使用,而且它的效果不是无限制增长的。这个符文的效果是,它可以让某些符文的工作频率变高,比如说,转位符文和充能符文。具体来说,每有一个这个符文,距离下一次工作的等待时间就减一刻。换言之:如果有10块促进符文,转位符文会每10刻就转移一次液体,而默认值却是每20刻。\n\t显然,你的祭坛中只可能有19/cut块促进符文——在这种情况下,转位符文和充能符文就会一刻不停地工作。非常非常非常非常非常非常非常好! + +# Demon Kin Entries +guide.BloodMagic.entry.demon.intro=贝拉·海泊恩 +guide.BloodMagic.entry.demon.snare=恶魔意志与投网 +guide.BloodMagic.entry.demon.forge=狱火熔炉 +guide.BloodMagic.entry.demon.petty=微小的地狱魂石 +guide.BloodMagic.entry.demon.sword=感知之剑 +guide.BloodMagic.entry.demon.lesser=小型地狱魂石 +guide.BloodMagic.entry.demon.reactions=意料之外的反应 +guide.BloodMagic.entry.demon.sentientGem=感知护甲 +guide.BloodMagic.entry.demon.routing=物品路由 +guide.BloodMagic.entry.demon.aura=恶魔灵域 +guide.BloodMagic.entry.demon.types=不同种类的意志 +guide.BloodMagic.entry.demon.crucible=恶魔坩埚 +guide.BloodMagic.entry.demon.crystallizer=恶魔结晶坛 +guide.BloodMagic.entry.demon.cluster=恶魔晶簇 +guide.BloodMagic.entry.demon.pylon=恶魔导能塔 +guide.BloodMagic.entry.demon.gauge=灵域测量仪 + +# Demon Kin Entry Texts +guide.BloodMagic.entry.demon.intro.info=我的名字叫贝拉·海泊恩,以恶魔使者的身份被知晓。数个月前我的家乡被一群恶魔侵袭,其他村民全部被杀,房屋全被破坏。我无法记起袭击时的多少细节,除了我所认识的每一个,伴随着痛苦的惨叫而前往一个更美好的世界的人们。庆幸那些恶魔没有听到,那在不容易察觉的教堂的地下室里,畏缩于果篮下的我绝望地避免着自己的尖叫声加入众人的合声。\n\t/cut可怕的瞬间,在我不慎撞倒堂的熏香祭坛时,一只恶魔突然闯入圣所,或许是这圣地的原由又镇静下来。这是只体型庞大的四足怪物,弯曲的獠牙倒悬在突出的嘴上,唾液滴在带有锯齿的剑状爪子。它环顾了四周,我发誓有那么一会它的眼睛和我对上了,但之后它就这么离开这里,仿佛完全没有看到或者听到什么。之后发生的事记忆全都模糊不清。\n\t/cut直到第二天才有人经过看到这一切。这一商队看到远处的浓烟,决定绕一大段路好避开这些恶魔。商队中许多人觉得我独自一人毫发无损地生还兴许是个坏兆头,有些甚至不愿多看我一眼。但有一对兄弟同情我的遭遇,并尽力说服商队其他成员也带上我。我卖掉了女祭司之仗与一条盒式挂坠,藉此换到了跟着前往一个远离恶魔破坏路径上的一个安全村庄的许可。 +guide.BloodMagic.entry.demon.snare.info.1=曾有一天,马格斯曾对我讲述道,世间生灵皆有灵魂:人类,鸡,羊,甚至是爬行者也存在这种给予躯体生之意志的生命力量。似乎马格斯早已在这方面做过大量实验,甚至有闻一个强大的法师,可以将获取这些灵魂并注入一个空的躯体,比如僵尸。但这也让我感到好奇:如果僵尸与骷髅并不拥有灵魂,它们如何拥有这生的意志?是什么,给予他们生气,使他们会去追捕并杀害生灵?\n\t/cut每每钻研最终还是回到了意志的问题上。任何“活物”都必须拥有使之生存下去的意志,但这不意味着那必须是它们自己的。当我把这个想法告诉马格斯的时候他考虑了一会,接着拿出一个黑板和粉笔(从哪?谁知道呢),开始速写并注上一些关于其他形式魔法的注解。“在神秘学中,”他画出一只稻草人的形态并说道,“分配于执行许多简单操作的傀儡被赋予了生气。它们活着,呼吸着,甚至可以死于不/cut再需要它们的主人。几个世纪以来,伴随着神秘学的进化,这门艺术已经有过数个版本,法师会将他们的意志注入那无生命的创造物中,给他们带来生气。\n\t“那么,贝拉,傀儡是如何运作的呢:通过意志的灌输。”\n\t所以如果可以通过他人将其意志注入一个空壳可以使傀儡获得生命,那么就有可能有什么把他们的意志注入亡者/cut的躯体,使得有了僵尸和骷髅的存在。想到这我打了个哆嗦,脑中闪过故乡的遭遇。只有恶魔会做到这么残忍的事。但要检验这个假设,我需要更多证据。 +guide.BloodMagic.entry.demon.snare.info.2=在马格斯的指引,和提比略百忙之中抽出时间为我提供的帮助下,我用铁、线和一点红石便做出了原始投网。身兼神秘使的提比略说这玩意可以切断控制生物的意志。“我拿这玩意在傀儡上瞎搞”,他带着微笑这样说道。我们都知道结果是什么样的。\n\t“红石似乎切断了我的意志和傀儡之间的联系。理论上来说,如果僵尸和骷髅身上也有意志,那这投网也可以切断。”\n\t/cut他说我只需要瞄准目标把投网丢过去就可以——如果奏效,我就能在目标生物上看到一些白色的颗粒。“然后你需要把那个可怜的目标杀死才能看到真相。但记住,大概只有四分之一的投网会对目标有效果。所以记得多备一些!”\n\t我制作了十六个投网,然后我选择在深夜出发。事实上,这项工作相当棘手:要同时追踪几个僵尸,还要闪避它们的重击,还要瞄准它们丢出投网。/cut当我看到白色的颗粒时,我迅速将僵尸们悉数斩杀,并清点了它们留下的物品。沙地上一些蓝色的粘稠液体吸引了我的注意。我捡起来看了一下,这似乎是一种超凡脱俗的存在...在快速收集好样本后我决定先返回再作进一步研究。\n\t每一份收集到的“恶魔意志”的形状和大小都不尽相同,似乎取决于它们的来源。抛开单位不谈,只做粗略的定/cut量分析的话,它们的品质可以按0到5来划分。我并不是很清楚这些物质可以用来干什么,但毫无疑问它们引起了我的注意。我也不是很清楚这究竟是恶魔的印记,抑或仅是它们身上掉落的某种晶体。我需要进一步的研究。 +guide.BloodMagic.entry.demon.forge.info.1=我已在恶魔意志上投入了数星期的时间。虽然有所进展,但情况依旧时好时坏。但有一天,提比略问我能否借用一点恶魔意志来做实验;他解释说,这很有可能是他一直在寻找的新一代血之祭坛的材料——马格斯原本的祭坛已经破旧不堪,但按古法制作的祭坛却怎么也无法使用...总而言之,他觉得我能帮上忙。\n\t事实证明他是对的。我查阅了很多讨论“等价交换”以及/cut物质嬗变的炼金术书籍;同时我还咨询了一些途经我们这里的炼金术师,他们也慷慨地给了我一些解构物质和能量的方法,以便进行深入研究。(啊,我必须承认我十分喜欢那些炼金术师的暗紫色盔甲——区区看一眼就会让人感觉要被一个质量巨大的东西拉过去一样。啊我没在说提比略!)我利用仅有的简易炼金阵列以及极少量样本便成功从恶魔意志中抽取到了能量。剩下的事情就只有合适的构造了。 +guide.BloodMagic.entry.demon.forge.info.2=就在今天,我成功制成了一种可将原生意志注入物品中的结构。我现在管这个东西叫“狱火熔炉”,实际上它只是个镶入玻璃顶层中的简易炼金术阵列,可最多同时将四个物品和原生意志融合于一体。恶魔意志需要放在右手边,显而易见的圆圈则是为物品准备的。目前来说我已掌握了若干种“配方”,但使用这炉子仍然有一些要求。\n\t对于初次使用狱火熔炉的人/cut来说,他们需要注意一些事情:一,物品融合需要提供一定数量的恶魔意志,如果数量不够,什么事都不会发生;二,前面说到物品融合需要提供一定数量的恶魔意志,但大部分配方实际都消耗不了那么多;三,有些物品的融合需要大量意志来启动,但却消耗不了多少,甚至根本不消耗;四,有些配方的产量巨大,有些...并不怎么高。 +guide.BloodMagic.entry.demon.petty.info.1=又是新一个夜晚,我又开始了日常的收割工作。但是很快我意识到了一个问题:我的背包每天都会被各种样本塞满!原因不是很清楚,也许是因为每份样本的最终来源都不一样,因此无法压缩在一起吧。至少,从它们物理表现形式来说是这样的。\n\t也因此我又回到了被丢在屋子一角的狱火熔炉旁开始为我的实验准备材料,将提比略的那些令人窒息的实验抛之/cut脑后。我这几天在为提比略准备他的熔炉,因为我已经放弃抵抗那些因为他的“奥法实验”而产生的,笼罩在我的工作室里的粉灰了。我管你是不是在“填补灵魂网络那无形的网状结构与石板的物理结构的空白”,赶快让你那些天杀的东西滚出去! +guide.BloodMagic.entry.demon.petty.info.2=不论如何,寻找合适的存储恶魔意志的材料的确费了我一番功夫。青金石似乎是一种很容易就能找到的能量导体,可以充当传导意志的通道。然后我为了避免空气中的电场的影响,加了一层红石充当“护盾”(至少,马格斯说过,将两种能量混在一起会产生灾难性后果);然后加上一些黄金充当抑性剂;并以玻璃制成外壳。最终我得到了一块“地狱魂石”。这个名字的含义便是“来自地下世界——塔尔塔罗斯 (Τάρταρος, Tartarus) ——的宝石”。\n\t经过近一步测试,我发现这个宝石的容量是64。(当我把这个结果拿给马格斯看时,他觉得这个数字是个十分完美的整数。)这样,我再试图捡起恶魔意志时它就可以自动将其收集起来了。但...这样一来意志它本身似乎就消失了。在拯救了我的背包的同时也给我带来了新的谜团呢。同时我还发现,若是我手持宝石并将精神集中于此(右击),约有/cut容量上限十分之一的意志就会流入我身上的另一个宝石中。我觉得这个性质会在我得到更强大的地狱魂石后大显身手。 +guide.BloodMagic.entry.demon.sword.info.1=我的网又出问题了。\n\t不论我怎么努力改进,这投网似乎就是不能完美工作。多数时候会打结。但即便我成功投中了僵尸,它还是有很高概率不工作。为了避免自己的头发被网缠住的命运,我决定立刻回到我的狱火熔炉旁开工。\n\t但,并非立刻开工——我首先得清理下上面的灰尘。 +guide.BloodMagic.entry.demon.sword.info.2=我将那微小的地狱魂石存储恶魔意志的能力成功注入到了铁剑里,并得到了一柄...伤害比我的拳头还低的剑。我对这个结果感到十分失望,因为我为了让以地狱魂石驱动的炼狱熔炉不过热而在一旁摆弄了很久很久。\n\t然而,当我再次拿起地狱魂石时,剑开始散发出了一种新的能量。似乎,我身上的恶魔意志越多,剑的伤害也就越高,获得的恶魔意志也就越多;倘若/cut没有地狱魂石...这剑就如同废铁一般。\n\t经过测试我又发现了一件事:击杀不同的目标获得的意志数量不一样。具体的数量和目标生物的生命上限成正比——以蜘蛛为例,它最多只有8颗心,因此杀死蜘蛛能获得的意志数量便是僵尸的百分之八十,因为僵尸最多有十颗心。或许是因为生命越多的生物动起来时需要的意志越多吧。我觉得这个事情得好好记住,以备不时之需。 +guide.BloodMagic.entry.demon.lesser.info.1=今天在和提比略聊天,聊到了最近他的一些工程。不得不承认,一旦说起他的研究,他就会说个没完没了!不管了。提比略说他最近一直在研究印记,目前他已经利用我给他造的狱火熔炉成功制成了水之印记和熔岩印记。我不是很清楚他是怎么做的——我只知道他以地狱魂石作为催化剂,将多种材料在熔炉中炼成印记,但我没亲眼目睹过他的实验过程。不过我今天总算知道了他那漫天飞舞的灰尘是/cut怎么回事。\n\t我来试着按他的方式复述一下。呃,“利用魂石中的意志来嬗变平时根本不会反应的若干原料时,发生了反应。利用这种增幅效应,我便可以刻出我所需要的铭文,以引导能量的流动,从而完成我需要完成的工作。”虽说白纸黑字难以想象,但我扶了扶眼镜后重新回想起了当时的景象...我不确定他是不是平时也这样,但我发誓,一旦跟我解释东西,他就会变成...科学家。\n\t/cut不论如何,他为我展示了水之印记的制作方式。在电光火石般的演示后,他终于进入了正题。“我在试图用更高级的材料重复相同的过程,但反应物似乎总会在我放进去的一瞬间...爆炸。看上去很不稳定。我觉得是因为他们没有正确地融合在一起——或许是能量不够吧。”\n\t我在思索了几分钟后便开始了工作——正如前文所说,我觉得我会需要更强大的地狱魂/cut石的,但我仍然在思考如何以优雅的方式完成这个工作。所以,我决定:诉诸暴力! +guide.BloodMagic.entry.demon.lesser.info.2=我找来一整块青金石、一整块红石、一颗钻石、以及一块空的地狱魂石——啊这块魂石是我在地上发现的,应该是以前某个进展不顺的实验中用的。我只记得马格斯可以让水泥墙上的洞瞬间消失。然后我将这四个物品放入狱火熔炉,并以一块满的地狱魂石供能——最终结果显示我需要至少大约60点意志。经过一系列优化,我终于确定了配方,并开始观察生长中的地狱魂石。\n\t/cut另外还有一点,我试过用金块代替钻石,但结果似乎只说明另一种水晶结构更有用。\n\t最终,我得到了全新的“小型地狱魂石”,它拥有256点容量,比微小的地狱魂石大多了。希望这颗新魂石可以满足提比略的需求吧。哎呀这玩意的容量这么高不就意味着我得花更多时间来收集恶魔意志吗?啊!又是一个漫漫长夜...! +guide.BloodMagic.entry.demon.reactions.info=我今天一早醒来发现自己躺在医院的病床上,身上有什么东西疼痛欲裂。我睁开双眼,却看到了满眼的暗洋红色——那是,Veteres——距离我们村庄最近的大城市——的一家医院的天花板。我对现在的环境倒不是怎么奇怪,因为我的目光落在了一大片擦伤和淤青上,以及我左腿上的石膏...什么人肯定对我下了名为"Ossa-Fracta"的诅咒——因为那只能是根坏掉的骨头!\n\t/cut当马格斯和一名紧绷着脸的护士走进来的时候,我就立刻明白了:我遭遇的事情比想象中的还严重。显然,我针对新制的小型地狱魂石的实验发生了反弹并引起了爆炸,虽然规模不大,但仍有杀伤力。不过我也就只能想到这点事情了:我左小腿上覆盖的黑曜石、铁和钻石制成的护甲,现在变成了某种完全无法拆除的护甲——更准确地说,是某种淡蓝的,类似符文矩阵的魔法护甲。\n\t/cut我冷静下来,并问马格斯怎么看,虽然我已然知道发生了什么。“我觉得吧,”,他说,并在认真聆听的护士看我之前瞥了护士一眼,“那是某种钻石残留物,这也是为什么我们没办法拆掉它的原因。同时,它还被某种...异域的能量束缚着,这也是为什么你现在会躺在这里,而不是当地诊所,的原因——共聚会自从上次邪术事件以来就一直对袭击人类的不明能量高度重视,我们必须保证不招惹是非。”\n\t/cut“我知道了...”平日里,马格斯是不会去操心诸如就未知能量事件照会共聚会这种正式的事情的——我已经着手研究恶魔意志多时了,也不见共聚会上门来为新的魔法能量办相关手续。我对政治不感兴趣,我也不打算透露太多消息,但我知道马格斯对此事非常谨慎——这意味着,在接下来一段时间内,马格斯都会为这意志所蕴含的能量担忧,说不定还会牵扯出陈年旧账也说不定...?\n\/cut“够了,话题到此为止,”马格斯说罢便披上了他的长袍,“我原本打算一开始就将之公之于众的,但那时它的威力还不明显,但现在...”\n\t我感受到左腿有一股热浪,就像要把我的腿烧起来一样,同时为看到马格斯捧成杯状的手盖在了蓝色的壳上,散发出耀眼的红光。几秒钟后——虽然我感觉这像是经过了永恒的时间——壳开始碎裂并脱落。说实话这个结局有些令人扫兴。\n\t/cut我试图起身,但马格斯一把把我按回床上:“贝拉,你需要休息。魂石的事情可以先放一放。”对此,一开始我是拒绝的,但我后来转而开始思考这次事故。马格斯不早点这么做的理由只能是地狱魂石在爆炸后仍留在我身上。换言之,我腿上不论发生什么,都和恶魔意志有关;只要拿去魂石,那层壳也就能被移除。我开始了沉思... +guide.BloodMagic.entry.demon.sentientGem.info.1=几天后,马格斯强制执行的“休养生息”结束了。我决定在我现有的基础上继续研究感知护甲。然而,还有很多关于感知之剑和恶魔意志的疑问没有解答。诚然,我们有一些理论上的猜想,但毕竟是马格斯和我提出的理论,我们也不知道究竟有多准确。\n\t为此我需要一点大胆的设想。马格斯告诉我说,我们在学习血之魔法时,也有必要学习另一门魔法的艺术。提比略/cut建议我去学习花之魔法,但我对此嗤之以鼻——“一堆花也能帮我击退恶魔?!” +guide.BloodMagic.entry.demon.sentientGem.info.2=感知护甲宝石是块可以让你穿卸感知护甲的工具。确保身上有16点恶魔意志,使用这块宝石(右击),便会将你身上的护甲悉数替换成一套全新的感知护甲,同时还会继承你本来护甲上的附魔效果;再次使用这块宝石就可以脱下感知护甲并换回你本来的护甲。当然,即便你身上没有护甲,这块宝石也是可以用的。\n\t感知护甲的效果一般与普通铁护甲无异,除此之外没有别/cut的效果。但,和感知工具一样,当你身上持有恶魔意志时,感知护甲的保护能力就会上升,上升幅度与意志数量成正比。也正是因为此,当你身上有海量恶魔意志时它的保护能力就会变得十分强大。但有一点需要注意,就是你每受到一次伤害,都会消耗地狱魂石中的恶魔意志,如果意志数量太低,感知护甲就可能会被打回原形。说不定是个弱点呢! +guide.BloodMagic.entry.demon.routing.info=血魔法的物品传送是以恶魔意志编织成的网的形式出现的,整张网构成了物品传输的通路,连接着每一个储存点。让我来先讲解一下每一个物品都是干什么的。\n\t每一个路由系统都有一个主控路由节点,相当于整个系统的中枢。输入节点用于将物品输入路由网络,输出节点将物品从网络中提取出来,而标准的路由节点没有任何特殊功能。\n\t/cut网络的搭建方法如下:首先,你需要在潜行时手持节点连接工具右击一个节点,然后以同样的方法右击另一个你想与之连接的节点。只要两个节点之间能找到某种通路,抑或都连接在主节点上,它们就可以互相“通信”。\n\t物品路由第一原则:物品总是从最近的输入节点进入网络,从最近的输出节点离开网络。你需要筛选器来限制物品的流向。在节点的操作界面/cut上有一个按钮可以让你进行过滤设置,可以精确到面(界面中的N指北方,以此类推)。最左边的格子还可以指定物品数量和种类。对于输入节点来说,筛选器的存在会使它们只提取筛选器指定的物品;如果你指定了数量,它们还会留下指定数量的物品,而非全部提取出来。对于输出节点来说,筛选器则让它们只接受并输出指定的物品;如果你指定了数量,那么它们最多只会输出那么多物品。\n\t/cut有四种不同类型的筛选器:\n\t精确匹配——物品的NBT和元数据必须完全匹配。\n\t按模组匹配——若物品来自指定Mod则匹配成功。\n\t忽略NBT——筛选器不比较NBT标签。\n\t矿物字典——若物品带有相同矿物字典条目则匹配成功。\n\t/cut在将筛选器放入路由节点后,你可以在路由节点上看到两个数字:数量和优先级。点击筛选器中的任何物品后即可看到其名字,正下方则会显示数量。如前文所述,这便是指定数量的地方了。若你将数量设定为0,那么就意味着“所有”——对于输入节点来说,那就是抽取所有物品;对于输出节点来说,就是提供所有物品。\n\t第二个数字便是优先级,可用一旁的箭头调整。数字越小,/cut优先级越高,物品将会首先试图前往优先级高的节点。 +guide.BloodMagic.entry.demon.aura.info=生物被杀死后,其灵魂会日渐消退,最终回归创世之神。使用投网,可以将其束缚于现世,但也有一些难度。我们现在,出于种种理由,对这些意志加以干扰并冻结其一切活性。若我们燃烧意志,它就会回归虚无。但若是我们直接将意志释放到空气中,我们便可以以更灵活的方式驾驭这股力量。有些方式十分普通,而有些方式则显得十分强大。\n\t在将恶魔意志释放到空气中/cut后,它会一直待在释放出来的那片土地上(即,那个区块),不会轻易离开。每一片土地上的不同种类的意志(关于意志的种类,后文有详述)互不影响。这些意志的存在还可以用其他的方块和物品来调整。 +guide.BloodMagic.entry.demon.types.info=到目前为止,每当我们讨论恶魔意志时,都是讨论的原生意志。这也就意味着这是天然的意志,但这并不等于它是纯的。事实上,恶魔意志有若干类型;除开原生意志,还有腐蚀、破坏、复仇以及坚毅四种意志。原生意志实质是这四种意志的混合物,也许还有一些至今没有识别的意志,但有一点可以确定,即分离后的意志很难再融合为一体。\n\t四种不同的意志的真正来源/cut至今仍然不明,但我们已经掌握了产生这四种意志的方法。将意志释放到空气中后,相同种类的意志就会开始聚集在一起。据此,只需要有一种可以收集特定种类意志的设备就可以完成任务了。接下来的几个章节中将会讲述其中一种设备——恶魔结晶坛。\n\t四种意志代表了人的四种欲望。当然我们仍然可以假定存在更多种意志,但也许它们/cut的纯度还不够,也许根本不能存在,总而言之我们目前还没发现新的意志种类。\n\t腐蚀——代表了藉由各种方式——酸液、蛮力、等等——破坏万物的欲望。掌握了这种力量的人,将能自由地驱使各种疾病(换言之,各种负面效果)的力量,并令自身免受剧毒的侵蚀。\n\t恶意——可看作是——一种孜孜不倦寻找对手的欲望。通常,驾/cut驭恶意能量的人,只要锁定了目标,移动速度就会上升,使得可怜的猎物无处躲藏,只得坐以待毙。\n\t破坏——你或许已经猜到了——其实就是纯粹的力量。正确地使用这种力量可以令使用者的身体素质在短时间内获得快速提升;同时还可以用来粉碎或碾磨其他物品。\n\t坚毅——无数的观察表明——这是抵御攻击,使自身免遭伤害的/cut欲望。大多数情况下,操纵这种欲望的人,都是团队中的铜墙铁壁——任何攻击都不会伤他分毫。如果你想藉由你的护甲或仪式来保障你的存活概率,这股力量绝对是你的第一选择。 +guide.BloodMagic.entry.demon.crucible.info=恶魔坩埚可将地狱魂石中的恶魔意志散布到当地(即当前区块)的大气之中。这口坩埚有若干用途:最简单的一个就是直接将地狱魂石放入其中(右击放入)。坩埚会自动从魂石中抽取恶魔意志并散布到空气中,直到饱和(每种意志大约都会在达到100点时饱和)或者魂石本身被抽干了。\n\t此外,它还可以抽取空气中的恶魔意志并灌输进魂石中。操作方式和散布恶魔意志无/cut异,只是坩埚需要一个强的红石信号(即强充能)。\n\t最后,直接往里面投入一块恶魔意志也是可以的,不论什么形式,只要有容纳意志的空间就可以进行转化。举个例子,将晶化恶魔意志投入坩埚可产生50点意志。 +guide.BloodMagic.entry.demon.crystallizer.info=正如之前所提到的那样,恶魔灵气——通常我们会简单以“大气”指代之——是恶魔意志的空灵的存在形式,而击杀怪物获得的物质则是恶魔意志物理形式的具现。而这恶魔结晶坛,则像是一个锚点,让漂浮在大气中的恶魔意志以晶体的形态重现。\n\t你也许会问,为什么不直接用地狱魂石培养一块晶体呢?这是因为在我们将恶魔意志释放到空气中时,它身上的禁锢/cut就已经被解除了——记住,当我们杀死一个怪物时,它身上的意志也就随之被我们禁锢了。再次释放自然会令其重新恢复活力,而这结晶坛就是直接吸收这活的恶魔意志。不要太想当然啦。\n\t结晶过程需要比较高的恶魔灵气的浓度(大概是80点),并且需要一段时间。在这之后,结晶坛的上方便会长出只有一根尖的恶魔晶簇。结晶坛有两种工作方式:它既可以吸收/cut特定的一种意志然后产生对应的晶体;也可以直接吸收原生意志来产生晶体。\n\t这其中的区别在于,使用原生意志时,有大约40%%概率会获得任意一种特定类型的晶体。而这将是你获得特定类型的意志的第一步。 +guide.BloodMagic.entry.demon.cluster.info=恶魔晶簇既可以使用恶魔结晶坛培养,也可在狱火熔炉中用恶魔结晶制作。晶簇可以在各种地方生长——地板、墙壁、甚至天花板上。完全长成的晶簇应该有七个尖,打掉后每一个尖都会变成一块结晶。然而,如果你使用含有至少1024点意志的地狱魂石来收获(右击),你便能只收获一块结晶而不影响到整棵晶簇。\n\t晶簇生长的过程中,会吸收同种恶魔灵气。虽然慢,但的确/cut是有收益的。\n\t有两种和晶簇的种植和收获相关的仪式:孤魂集会和碎晶裂纹。具体用法可以参阅《仪式大师》一卷。 +guide.BloodMagic.entry.demon.pylon.info=你或许已经发现了,在没有外力的影响下,恶魔灵气只会待在它被释放出来的那个地方(即当前区块)。而这恶魔导能塔,则为那些灵域中的意志亮起了一盏灯——一盏指引方向的灯。附近的意志在这灯的指引下会逐渐向灯靠拢,直至这些地方的意志数量保持均匀。(注:这里所谓的“附近”不含对角线上的区块,即只有与塔所在的区块相邻的四个区块会受到影响)。另外要注意的是,意志只会从多的地方流/cut向少的地方。若是什么地方的意志的浓度比附近的地方浓度低了,它就不会继续流动了。 +guide.BloodMagic.entry.demon.gauge.info=你需要一个测量仪来测定灵域中的恶魔意志浓度。只需要一直放在你的背包中,测量仪便可将浓度以五个指示器的形式显示出来(在屏幕左上角)。潜行时你还能得知具体数量,但这个结果是经过四舍五入的。 + + + +# Alchemy Entries +guide.BloodMagic.entry.alchemy.intro=序 +guide.BloodMagic.entry.alchemy.ash=奥术粉灰 +guide.BloodMagic.entry.alchemy.speed=法阵:敏捷 +guide.BloodMagic.entry.alchemy.updraft=法阵:升腾 +guide.BloodMagic.entry.alchemy.bounce=法阵:弹跳 +guide.BloodMagic.entry.alchemy.turret=法阵:骷髅炮塔 +guide.BloodMagic.entry.alchemy.buff=增益法阵 +guide.BloodMagic.entry.alchemy.fastMiner=法阵:速掘 + + + + +# Alchemy Entry Texts +guide.BloodMagic.entry.alchemy.intro.info=我叫弗拉德·海泊恩,是一名血法师。我一直致力于研究炼金术的细节以及所有魔法中共同的原则——“等价交换”。简单来说,你不能无中生有,虽然很多人一直在致力于寻找那个可以无视此原则的石头。很显然,石头的寻找之旅并不顺利,因为人们总是会在惊讶声中发现石头是假货。当然,我不只是个炼金术师,我主要还是在跟仪式大师和缔造者学习血之魔法,这二位在圈内业已是颇具声望的人物了。/cut马格斯和提比略这几年来一直在记录他们的成果,但是我一直不知道马格斯是否真的记录下了他的毕生所学——既不能证明,也不能证伪。\n\t我的这本书将记录血魔法中的炼金术。从奥术粉尘,到复杂的炼金台桌,你将会在这本书中找到世间各种复杂的元素的线索。当然,为了读懂这本书,你还需要阅读其余的几本书,以对血魔法有清楚的了解。\n\t/cut就现在来说呢,我衷心希望面前的读者阅读愉快。这些书页的内容,都是如假包换的真才实学。 +guide.BloodMagic.entry.alchemy.ash.info=奥术粉尘便是炼金法阵的基础,而炼金法阵(为简便,下简称法阵)——一种圆形法阵——则拥有多种强大的功能。合成奥术粉尘需要用到狱火熔炉和恶魔意志,关于这两样东西的细节可以参考本书《恶魔使者》一卷。\n\t/cut一份奥术粉尘可使用二十次。对着地面或者墙壁使用便可画出一个圆形的法阵(如果是墙壁,你只能在一个方向上看到法阵)。然后,对法阵中央使用合适的催化剂即可改变其形状,当然也会消耗催化剂(即,右击使用)。如果法阵没有变形,那么你肯定有什么地方搞错了。\n\t在观察到法阵变形后,你便可以放入次要物品了。合适的次要物品会启动法阵,届时你会看到法阵开始旋转,并开始/cut产生各种变化,具体变化随法阵不同而不同。\n\t所有非合成的法阵用途都可以在本书中查阅到,即便合成被他人强行更改过也可以。对于需要的物品,它们都已经过排序,按照本书给出的顺序放置即可。 +guide.BloodMagic.entry.alchemy.speed.info=法阵:敏捷可以制造若干气旋,并用法力加热。此后,一旦有生物走入其中,它们就会被风的力量推向前方。此外,它还可以免除所有因此产生的掉落伤害。只需要做些运动就好了。\n\t漩涡推进的方向是阵列上箭头的方向。\n\t另外,相比于直接走入阵列中,从高处掉入阵列的效果会更好。这要归功于你掉下来时周围空气产生的流动。 +guide.BloodMagic.entry.alchemy.updraft.info=这个阵列使用和法阵:敏捷一样的原理,不过这次的方向是朝上了。自然地,使用阵列时务必小心:再下来就不是易事了! +guide.BloodMagic.entry.alchemy.bounce.info=阵列会将接近中心的热量集中到下面,进而软化地面,并最终转化为一种由碳和氢组成的橡胶状物质。这种物质会将生物弹至空中,同时也能避免掉落伤害。潜行即可避免这种神奇材料的影响,当然这不会影响摔落保护的功能。 +guide.BloodMagic.entry.alchemy.turret.info=利用那些仍然控制着怪物的恶魔意志,你可以控制一个骷髅的心智。只要有骷髅进入了这个阵列的覆盖范围,这骷髅就会化身哨兵,并向所有敌对生物开火。不过这个法阵仍在实验当中,它有时候会不管用。 +guide.BloodMagic.entry.alchemy.buff.info=经过严密的研究,你发现法阵拥有强大的应用潜力。迄今,你已成功制造了数种阵列,从加速移动,到初级的传送,应有尽有。但唯有一种阵列,你至今仍然没有着手去研究,那便是提供强大的正面增益的阵列。\n\t增益阵列实际上是指一系列可以提供范围增益效果的阵列。这些阵列产生的增益效果通常都有很大的固定覆盖范围,不受外力影响。然而,因/cut为法阵不会牵扯到灵魂网络,阵列需要别的方式来传播这种效果,通常是直接用血。换言之,当有玩家展开阵列时,玩家就会立刻受到伤害(损失生命),藉由此启动阵列。\n\t因为使用了直接献祭,前期使用这种阵列会比使用其他获取增益的手段更经济一些。距离,如果某个印记可消耗100LP并换取10秒的效果,阵列可以以1点生命的代价换来30秒同样的效果(1点生命对于一级/cut祭坛来说是100LP)。尽管到了后期,这种阵列就不会再有效率上的优势,但因为它们的位置是固定的,相比于印记,它们通常会给予更强大的效果,所以它们到了后期仍有它们的价值。 +guide.BloodMagic.entry.alchemy.fastMiner.info=遇到大范围的雕刻任务,有时候还是自己动手更划算一些。对于这种情况,这个阵列便是你的不二选择。这个阵列可为10格内的玩家提供急迫 III的效果,消耗则是每30秒1点生命值(半颗心)。因为是普通的急迫效果,所以它也可以提高你的攻击速度,不过要记住,别的玩家同样会被阵列覆盖到! From 692c69865a63f3d89a3b64432f4948255e23dc60 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Tue, 28 Mar 2017 18:32:08 -0700 Subject: [PATCH 58/82] Fix README (cherry picked from commit 07e025d) --- README.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 743d18a3..61f510ae 100644 --- a/README.md +++ b/README.md @@ -1,28 +1,28 @@ -#Blood Magic: Alchemical Wizardry [![](http://cf.way2muchnoise.eu/full_blood-magic_downloads.svg)](https://minecraft.curseforge.com/projects/blood-magic) +# Blood Magic: Alchemical Wizardry [![](http://cf.way2muchnoise.eu/full_blood-magic_downloads.svg)](https://minecraft.curseforge.com/projects/blood-magic) -###Gruesome? Probably. Worth it? Definitely! -###[Downloads](http://minecraft.curseforge.com/mc-mods/224791-blood-magic/files) +### Gruesome? Probably. Worth it? Definitely! +### [Downloads](http://minecraft.curseforge.com/projects/blood-magic/files) -##Information +## Information Have you ever picked up a magic mod for Minecraft, and thought that it was too tame? Was there not enough danger involved when creating your next high-tech gadget? Bored with all of those peaceful animals just staring at you without a care in the world? Well then, I am glad you came here! Blood Magic is an arcane art that is practiced by mages who attempt to gather a vast amount of power through utilizing a forbidden material: blood. Even though it does grant a huge amount of power, every single action that is performed with this volatile magic can prove deadly. You have been warned. -##Links +## Links * Twitter: [@WayofTime](https://twitter.com/WayofTime) * Wiki: Found at [FTBWiki](http://ftbwiki.org/Blood_Magic) * [Minecraft Forum Thread](http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/1290532-bm) -* [Curseforge](http://minecraft.curseforge.com/mc-mods/224791-blood-magic) +* [Curseforge](http://minecraft.curseforge.com/projects/blood-magic) * [Donate](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=J7SNY7L82PQ82) * [Patreon](https://www.patreon.com/BloodMagic) -##Development Setup +## Development Setup 1. Fork this project to your own Github repository and clone it to your desktop. 2. Navigate to the directory you cloned to. Follow the [Forge Documentation](http://mcforge.readthedocs.io/en/latest/gettingstarted/#from-zero-to-modding) (start at step 4) to setup your workspace. If you use IDEA, follow [this set](http://mcforge.readthedocs.io/en/latest/gettingstarted/#terminal-free-intellij-idea-configuration) of steps. -####IntelliJ IDEA extra steps +#### IntelliJ IDEA extra steps 1. Navigate to `File > Settings > Plugins > Browse repositories...`. Search for Lombok and install the plugin. 2. Navigate to `File > Settings > Build, Execution, Deployment > Compiler > Annotation Processors`. Check `Enable annotation processing`. @@ -30,7 +30,7 @@ Blood Magic is an arcane art that is practiced by mages who attempt to gather a [Setup video](https://www.youtube.com/watch?v=8VEdtQLuLO0&feature=youtu.be) by LexManos. For more information, refer to the [Forge Forums](http://www.minecraftforge.net/forum/index.php/topic,14048.0.html). -##Developing Addons +## Developing Addons Add to your build.gradle: @@ -46,23 +46,23 @@ Add to your build.gradle: `` can be found on CurseForge (or via the Maven itself), check the file name of the version you want. -##Custom Builds +## Custom Builds **Custom builds are *unsupported*. If you have an issue while using an unofficial build, it is not guaranteed that you will get support.** -####How to make a custom build: +#### How to make a custom build: 1. Clone directly from this repository to your desktop. 2. Navigate to the directory you cloned to. Open a command window there and run `gradlew build` 3. Once it completes, your new build will be found at `../build/libs/BloodMagic-*.jar`. You can ignore the `deobf`, `sources`, and `javadoc` jars. -##License +## License ![CCA4.0](https://licensebuttons.net/l/by/4.0/88x31.png) Blood Magic: AlchemicalWizardry by WayofTime is licensed under a [Creative Commons Attribution 4.0 International License](http://creativecommons.org/licenses/by/4.0/). -##Installation Instructions +## Installation Instructions This mod requires "Minecraft Forge" in order to operate. It is incredibly easy to download and set up, so might as well get to it! @@ -72,7 +72,7 @@ This mod requires "Minecraft Forge" in order to operate. It is incredibly easy t 3. Place the mod in the **mods** folder of your .minecraft. If you are unsure of where that is located, it is here: `../Users/you/AppData/roaming/.minecraft`. -##FAQ +## FAQ **Q**: My weak blood orb doesn't show my current LP! Fix it please. From dd2c6915f33e3d76bff774d7e149bf64c8dd37a8 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Tue, 28 Mar 2017 18:40:24 -0700 Subject: [PATCH 59/82] Fix bound tools not checking if they're bound (#1114) (cherry picked from commit 3134f6b) --- src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java | 5 +++++ src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java index 4664a5b3..3b260e78 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java @@ -73,6 +73,11 @@ public class ItemBoundSword extends ItemSword implements IBindable, IActivatable @Override public void onUpdate(ItemStack stack, World world, Entity entity, int itemSlot, boolean isSelected) { + if (Strings.isNullOrEmpty(getOwnerUUID(stack))) { + setActivatedState(stack, false); + return; + } + if (entity instanceof EntityPlayer && getActivated(stack) && world.getTotalWorldTime() % 80 == 0) NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage((EntityPlayer) entity, 20); } diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java index 7bcb7232..300c8722 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java @@ -89,6 +89,11 @@ public class ItemBoundTool extends ItemTool implements IBindable, IActivatable @Override public void onUpdate(ItemStack stack, World world, Entity entity, int itemSlot, boolean isSelected) { + if (Strings.isNullOrEmpty(getOwnerUUID(stack))) { + setActivatedState(stack, false); + return; + } + if (entity instanceof EntityPlayer && getActivated(stack) && isSelected && getBeingHeldDown(stack) && stack == ((EntityPlayer) entity).getActiveItemStack()) { EntityPlayer player = (EntityPlayer) entity; From 0b0ec65ece80e1ac842601a0c8485962098042a8 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Tue, 28 Mar 2017 19:32:34 -0700 Subject: [PATCH 60/82] Update changelog + version --- changelog.txt | 12 ++++++++++++ gradle.properties | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/changelog.txt b/changelog.txt index 823daa58..bdd790e0 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,15 @@ +------------------------------------------------------ +Version 2.1.8 +------------------------------------------------------ + +- Fixed crash when activing Bound Tools + - https://github.com/WayofTime/BloodMagic/issues/1114 +- Updated the Chinese localization + - https://github.com/WayofTime/BloodMagic/pull/1052 +- Placer Ritual is now much more performant +- Many recipes have been moved over to support the Ore Dictionary + - https://github.com/WayofTime/BloodMagic/issues/1101 + ------------------------------------------------------ Version 2.1.7 ------------------------------------------------------ diff --git a/gradle.properties b/gradle.properties index d54119ae..8ccfe375 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_name=BloodMagic package_group=com.wayoftime.bloodmagic -mod_version=2.1.7 +mod_version=2.1.8 mc_version=1.10.2 forge_version=12.18.3.2221 curse_id=224791 From f44ad3a449197d15688562d9fcf1b09df0ae68c5 Mon Sep 17 00:00:00 2001 From: NatsuArashi Date: Mon, 3 Apr 2017 19:09:44 -0500 Subject: [PATCH 61/82] Traditional Chinese update. (#1116) * Update zh_TW.lang * Create zh_TW.lang * Update zh_TW.lang --- .../assets/bloodmagic/lang/zh_TW.lang | 1058 ++++++++++++----- .../assets/bloodmagicguide/lang/zh_TW.lang | 258 ++++ 2 files changed, 1031 insertions(+), 285 deletions(-) create mode 100644 src/main/resources/assets/bloodmagicguide/lang/zh_TW.lang diff --git a/src/main/resources/assets/bloodmagic/lang/zh_TW.lang b/src/main/resources/assets/bloodmagic/lang/zh_TW.lang index 39490692..0f6da67b 100644 --- a/src/main/resources/assets/bloodmagic/lang/zh_TW.lang +++ b/src/main/resources/assets/bloodmagic/lang/zh_TW.lang @@ -1,97 +1,127 @@ #Creative Tab -itemGroup.BloodMagic.creativeTab=血魔法 -itemGroup.BloodMagic.creativeTabTome=血魔法強化經文 +itemGroup.BloodMagic.creativeTab=Blood Magic +itemGroup.BloodMagic.creativeTabTome=Blood Magic | Tomes #Items -item.BloodMagic.activationCrystal.weak.name=[虛弱]激活水晶 -item.BloodMagic.activationCrystal.awakened.name=[覺醒]激活水晶 -item.BloodMagic.activationCrystal.creative.name=[創造模式]激活水晶 +item.BloodMagic.activationCrystal.weak.name=[虛弱]驅動水晶 +item.BloodMagic.activationCrystal.awakened.name=[覺醒]驅動水晶 +item.BloodMagic.activationCrystal.creative.name=[創造]驅動水晶 item.BloodMagic.sacrificialDagger.normal.name=犧牲匕首 -item.BloodMagic.sacrificialDagger.creative.name=創造模式犧牲匕首 -item.BloodMagic.pack.selfSacrifice.name=血文背包 -item.BloodMagic.pack.sacrifice.name=紋章血甲 +item.BloodMagic.sacrificialDagger.creative.name=[創造]犧牲匕首 +item.BloodMagic.pack.selfSacrifice.name=血液背包 +item.BloodMagic.pack.sacrifice.name=鬥士鎧衣 item.BloodMagic.daggerOfSacrifice.name=獻祭刀 item.BloodMagic.lavaCrystal.name=熔岩晶體 -item.BloodMagic.bound.sword.name=約束之劍 -item.BloodMagic.bound.pickaxe.name=約束之鎬 -item.BloodMagic.bound.axe.name=約束之斧 -item.BloodMagic.bound.shovel.name=約束之鍬 +item.BloodMagic.bound.sword.name=束縛之劍 +item.BloodMagic.bound.pickaxe.name=束縛之鎬 +item.BloodMagic.bound.axe.name=束縛之斧 +item.BloodMagic.bound.shovel.name=束縛之鍬 -item.BloodMagic.bucket.lifeEssence.name=生命之桶 +item.BloodMagic.bucket.lifeEssence.name=生命精華桶 -item.BloodMagic.scribe.water.name=元素銘文:水 -item.BloodMagic.scribe.fire.name=元素銘文:火 -item.BloodMagic.scribe.earth.name=元素銘文:地 -item.BloodMagic.scribe.air.name=元素銘文:風 -item.BloodMagic.scribe.dusk.name=元素銘文:黃昏 -item.BloodMagic.scribe.dawn.name=元素銘文:黎明 +item.BloodMagic.scribe.water.name=元素銘文工具:水 +item.BloodMagic.scribe.fire.name=元素銘文工具:火 +item.BloodMagic.scribe.earth.name=元素銘文工具:土 +item.BloodMagic.scribe.air.name=元素銘文工具:風 +item.BloodMagic.scribe.dusk.name=元素銘文工具:薄暮 +item.BloodMagic.scribe.dawn.name=元素銘文工具:破曉 -item.BloodMagic.focus.weak.name=傳送方位核心 -item.BloodMagic.focus.enhanced.name=強化傳送方位核心 -item.BloodMagic.focus.reinforced.name=力之傳送方位核心 -item.BloodMagic.focus.demonic.name=惡魔傳送方位核心 +item.BloodMagic.focus.weak.name=傳送核心 +item.BloodMagic.focus.enhanced.name=[加強]傳送核心 +item.BloodMagic.focus.reinforced.name=[強化]傳送核心 +item.BloodMagic.focus.demonic.name=[惡魔]傳送核心 item.BloodMagic.slate.blank.name=空白石板 -item.BloodMagic.slate.reinforced.name=力之石板 +item.BloodMagic.slate.reinforced.name=強化石板 item.BloodMagic.slate.imbued.name=灌輸石板 item.BloodMagic.slate.demonic.name=惡魔石板 -item.BloodMagic.slate.ethereal.name=玄幽石板 +item.BloodMagic.slate.ethereal.name=懸幽石板 -item.BloodMagic.orb.weak.name=虛弱氣血寶珠 -item.BloodMagic.orb.apprentice.name=學徒氣血寶珠 -item.BloodMagic.orb.magician.name=魔法使氣血寶珠 -item.BloodMagic.orb.master.name=魔導師氣血寶珠 -item.BloodMagic.orb.archmage.name=大賢者氣血寶珠 -item.BloodMagic.orb.transcendent.name=超越者氣血寶珠 +item.BloodMagic.orb.weak.name=[虛弱]氣血寶珠 +item.BloodMagic.orb.apprentice.name=[學徒]氣血寶珠 +item.BloodMagic.orb.magician.name=[法師]氣血寶珠 +item.BloodMagic.orb.master.name=[導師]氣血寶珠 +item.BloodMagic.orb.archmage.name=[賢者]氣血寶珠 +item.BloodMagic.orb.transcendent.name=[卓越]氣血寶珠 -item.BloodMagic.reagent.incendium.name=火焰粉末 -item.BloodMagic.reagent.magicales.name=魔法粉末 -item.BloodMagic.reagent.sanctus.name=神聖粉末 +item.BloodMagic.reagent.incendium.name=烈焰元素 +item.BloodMagic.reagent.magicales.name=魔法元素 +item.BloodMagic.reagent.sanctus.name=神聖元素 item.BloodMagic.reagent.aether.name=以太元素 -item.BloodMagic.reagent.crepitous.name=爆破粉末 -item.BloodMagic.reagent.crystallos.name=冰晶粉末 -item.BloodMagic.reagent.terrae.name=泥土粉末 -item.BloodMagic.reagent.aquasalus.name=液之粉末 -item.BloodMagic.reagent.tennebrae.name=暗黑粉末 -item.BloodMagic.reagent.offensa.name=攻勢粉末 -item.BloodMagic.reagent.praesidium.name=防守粉末 -item.BloodMagic.reagent.orbisterrae.name=環境粉末 -item.BloodMagic.reagent.virtus.name=力量粉末 -item.BloodMagic.reagent.reductus.name=代價粉末 -item.BloodMagic.reagent.potentia.name=效能粉末 +item.BloodMagic.reagent.crepitous.name=爆破元素 +item.BloodMagic.reagent.crystallos.name=冰晶元素 +item.BloodMagic.reagent.terrae.name=大地元素 +item.BloodMagic.reagent.aquasalus.name=液之元素 +item.BloodMagic.reagent.tennebrae.name=暗黑元素 +item.BloodMagic.reagent.offensa.name=攻勢元素 +item.BloodMagic.reagent.praesidium.name=守護元素 +item.BloodMagic.reagent.orbisterrae.name=奧土元素 +item.BloodMagic.reagent.virtus.name=力量元素 +item.BloodMagic.reagent.reductus.name=代價元素 +item.BloodMagic.reagent.potentia.name=效能元素 -item.BloodMagic.bloodShard.weak.name=虛弱氣血碎片 -item.BloodMagic.bloodShard.demon.name=惡魔氣血碎片 +item.BloodMagic.bloodShard.weak.name=[虛弱]氣血碎片 +item.BloodMagic.bloodShard.demon.name=[惡魔]氣血碎片 item.BloodMagic.baseComponent.reagentWater.name=水之試劑 item.BloodMagic.baseComponent.reagentLava.name=熔岩試劑 -item.BloodMagic.baseComponent.reagentAir.name=空之試劑 -item.BloodMagic.baseComponent.reagentFastMiner.name=礦之試劑 +item.BloodMagic.baseComponent.reagentAir.name=風之試劑 +item.BloodMagic.baseComponent.reagentFastMiner.name=採掘試劑 item.BloodMagic.baseComponent.reagentVoid.name=虛空試劑 -item.BloodMagic.baseComponent.reagentGrowth.name=成長試劑 -item.BloodMagic.baseComponent.reagentAffinity.name=元素親和力試劑 -item.BloodMagic.baseComponent.reagentSight.name=視之試劑 -item.BloodMagic.baseComponent.reagentBinding.name=約束試劑 -item.BloodMagic.baseComponent.reagentSuppression.name=抑制試劑 -item.BloodMagic.baseComponent.frameParts.name=框架部件 +item.BloodMagic.baseComponent.reagentGrowth.name=促生試劑 +item.BloodMagic.baseComponent.reagentAffinity.name=元素試劑 +item.BloodMagic.baseComponent.reagentSight.name=見解試劑 +item.BloodMagic.baseComponent.reagentBinding.name=束縛試劑 +item.BloodMagic.baseComponent.reagentSuppression.name=抑液試劑 +item.BloodMagic.baseComponent.frameParts.name=框架零件 item.BloodMagic.baseComponent.reagentBloodLight.name=血光試劑 item.BloodMagic.baseComponent.reagentMagnetism.name=磁引試劑 item.BloodMagic.baseComponent.reagentHaste.name=急速試劑 item.BloodMagic.baseComponent.reagentBridge.name=影橋試劑 -item.BloodMagic.baseComponent.reagentCompression.name=壓縮試劑 -item.BloodMagic.baseComponent.reagentSeverance.name=驅散試劑 +item.BloodMagic.baseComponent.reagentCompression.name=壓擠試劑 +item.BloodMagic.baseComponent.reagentSeverance.name=隔絕試劑 +item.BloodMagic.baseComponent.reagentHolding.name=集持試劑 +item.BloodMagic.baseComponent.reagentClaw.name=爪之試劑 +item.BloodMagic.baseComponent.reagentBounce.name=彈性試劑 +item.BloodMagic.baseComponent.reagentFrost.name=霜之試劑 -item.BloodMagic.baseComponent.reagentTeleposition.name=轉送試劑 +item.BloodMagic.baseComponent.reagentTeleposition.name=傳送試劑 item.BloodMagic.baseComponent.reagentTransposition.name=移位試劑 -item.BloodMagic.monsterSoul.base.name=惡魔慾望 +item.BloodMagic.baseComponent.ironSand.name=鐵礦砂 +item.BloodMagic.baseComponent.goldSand.name=金礦砂 +item.BloodMagic.baseComponent.coalSand.name=煤礦砂 +item.BloodMagic.baseComponent.plantOil.name=植物油 +item.BloodMagic.baseComponent.sulfur.name=硫磺 +item.BloodMagic.baseComponent.saltpeter.name=硝石 +item.BloodMagic.baseComponent.neurotoxin.name=神經毒素 +item.BloodMagic.baseComponent.antiseptic.name=防腐劑 -item.BloodMagic.sigil.air.name=空氣印記 +item.BloodMagic.cuttingFluid.basicCuttingFluid.name=基礎切削油 +item.BloodMagic.cuttingFluid.explosive.name=爆炸火藥 + +item.BloodMagic.baseComponent.mundaneLength.name=簡單的延時催化劑 +item.BloodMagic.baseComponent.mundanePower.name=簡單的功效催化劑 + + +item.BloodMagic.demonCrystal.crystalDefault.name=惡魔意志晶體 +item.BloodMagic.demonCrystal.crystalCorrosive.name=腐蝕意志晶體 +item.BloodMagic.demonCrystal.crystalDestructive.name=破壞意志晶體 +item.BloodMagic.demonCrystal.crystalVengeful.name=復仇意志晶體 +item.BloodMagic.demonCrystal.crystalSteadfast.name=堅毅意志晶體 + +item.BloodMagic.monsterSoul.base.name=[原生]惡魔意志 +item.BloodMagic.monsterSoul.corrosive.name=[腐蝕]惡魔意志 +item.BloodMagic.monsterSoul.destructive.name=[破壞]惡魔意志 +item.BloodMagic.monsterSoul.vengeful.name=[復仇]惡魔意志 +item.BloodMagic.monsterSoul.steadfast.name=[堅毅]惡魔意志 + +item.BloodMagic.sigil.air.name=風之印記 item.BloodMagic.sigil.bloodLight.name=血光印記 -item.BloodMagic.sigil.compression.name=壓縮印記 +item.BloodMagic.sigil.compression.name=壓擠印記 item.BloodMagic.sigil.divination.name=占卜印記 item.BloodMagic.sigil.water.name=水之印記 item.BloodMagic.sigil.lava.name=熔岩印記 @@ -99,306 +129,764 @@ item.BloodMagic.sigil.void.name=虛空印記 item.BloodMagic.sigil.greenGrove.name=綠叢印記 item.BloodMagic.sigil.elementalAffinity.name=元素印記 item.BloodMagic.sigil.haste.name=急速印記 -item.BloodMagic.sigil.suppression.name=抑制印記 +item.BloodMagic.sigil.suppression.name=抑液印記 item.BloodMagic.sigil.magnetism.name=磁引印記 item.BloodMagic.sigil.fastMiner.name=速掘印記 -item.BloodMagic.sigil.seer.name=搜索印記 +item.BloodMagic.sigil.seer.name=見解印記 item.BloodMagic.sigil.phantomBridge.name=影橋印記 item.BloodMagic.sigil.whirlwind.name=旋風印記 -item.BloodMagic.sigil.enderSeverance.name=終末印記 - -item.BloodMagic.sigil.teleposition.name=轉送印記 +item.BloodMagic.sigil.enderSeverance.name=絕影印記 +item.BloodMagic.sigil.holding.name=集持印記 +item.BloodMagic.sigil.holding.display=&r%s:&o&n%s +item.BloodMagic.sigil.teleposition.name=傳送印記 item.BloodMagic.sigil.transposition.name=移位印記 +item.BloodMagic.sigil.claw.name=爪之印記 +item.BloodMagic.sigil.bounce.name=彈性印記 +item.BloodMagic.sigil.frost.name=冰霜印記 -item.BloodMagic.livingArmour.helmet.name=生命頭盔 -item.BloodMagic.livingArmour.chest.name=生命胸甲 -item.BloodMagic.livingArmour.legs.name=生命護腿 -item.BloodMagic.livingArmour.boots.name=生命長靴 +item.BloodMagic.livingArmour.helmet.name=束靈頭盔 +item.BloodMagic.livingArmour.chest.name=束靈胸甲 +item.BloodMagic.livingArmour.legs.name=束靈護腿 +item.BloodMagic.livingArmour.boots.name=束靈靴子 item.BloodMagic.sentientArmour.helmet.name=感知頭盔 item.BloodMagic.sentientArmour.chest.name=感知胸甲 item.BloodMagic.sentientArmour.legs.name=感知護腿 -item.BloodMagic.sentientArmour.boots.name=感知長靴 +item.BloodMagic.sentientArmour.boots.name=感知靴子 -item.BloodMagic.altarMaker.name=祭壇產生器 +item.BloodMagic.altarMaker.name=祭壇搭建工具 -item.BloodMagic.ritualDivinernormal.name=儀式占杖 -item.BloodMagic.ritualDivinerdusk.name=儀式占杖[黃昏] -item.BloodMagic.ritualDivinerdawn.name=儀式占杖[黎明] +item.BloodMagic.ritualDivinernormal.name=儀式推測仗 +item.BloodMagic.ritualDivinerdusk.name=儀式推測仗 [薄暮] +item.BloodMagic.ritualDivinerdawn.name=儀式推測仗 [破曉] +item.BloodMagic.ritualReader.name=儀式調整鉗 -item.BloodMagic.arcaneAshes.name=奧法灰燼 -item.BloodMagic.upgradeTome.name=生命護甲升級經文 -item.BloodMagic.upgradeTrainer.name=生命護甲培養環 +item.BloodMagic.arcaneAshes.name=奧術粉灰 +item.BloodMagic.upgradeTome.name=束靈盔甲強化手冊 +item.BloodMagic.downgradeTome.name=束靈盔甲降級手冊 +item.BloodMagic.upgradeTrainer.name=束靈盔甲訓練手鐲 -item.BloodMagic.sentientSword.name=感知劍 -item.BloodMagic.soulGem.petty.name=貧脊酒石晶 -item.BloodMagic.soulGem.lesser.name=次級酒石晶 -item.BloodMagic.soulGem.common.name=普通酒石晶 -item.BloodMagic.soulGem.greater.name=上等酒石晶 -item.BloodMagic.soulGem.grand.name=稀世酒石晶 -item.BloodMagic.soulSnare.base.name=簡易套索 -item.BloodMagic.sentientBow.name=感知弓 -item.BloodMagic.sentientArmourGem.name=感知護甲寶石 +item.BloodMagic.sentientSword.name=感知之劍 +item.BloodMagic.soulGem.petty.name=[微小]地獄魂石 +item.BloodMagic.soulGem.lesser.name=[細塊]地獄魂石 +item.BloodMagic.soulGem.common.name=[普通]地獄魂石 +item.BloodMagic.soulGem.greater.name=[較大]地獄魂石 +item.BloodMagic.soulGem.grand.name=[精製]地獄魂石 +item.BloodMagic.soulSnare.base.name=原始投網 +item.BloodMagic.sentientBow.name=感知之弓 +item.BloodMagic.sentientArmourGem.name=感知盔甲寶石 +item.BloodMagic.sentientAxe.name=感知之斧 +item.BloodMagic.sentientPickaxe.name=感知之鎬 +item.BloodMagic.sentientShovel.name=感知之鍬 -item.BloodMagic.nodeRouter.name=節點路由 +item.BloodMagic.nodeRouter.name=節點連接工具 item.BloodMagic.itemFilter.exact.name=精確物品篩選器 item.BloodMagic.itemFilter.ignoreNBT.name=NBT物品篩選器 -item.BloodMagic.itemFilter.modItems.name=模組物品篩選器 -item.BloodMagic.itemFilter.oreDict.name=礦物辭典物品篩選器 +item.BloodMagic.itemFilter.modItems.name=Mod物品篩選器 +item.BloodMagic.itemFilter.oreDict.name=礦物物品篩選器 +item.BloodMagic.fluidFilter.exact.name=精確液體篩選器 + +item.BloodMagic.experienceTome.name=經驗手冊 +item.BloodMagic.sanguineBook.name=指示之書 + +item.BloodMagic.livingPointUpgrade.draftAngelus.name=禱告之始 + +item.BloodMagic.willGauge.name=靈域測量儀 +item.BloodMagic.potionFlask.name=藥劑瓶 # Blocks tile.BloodMagic.fluid.lifeEssence.name=生命精華 -tile.BloodMagic.stone.ritual.master.name=魔導師儀式石 -tile.BloodMagic.stone.ritual.imperfect.name=次級儀式石 +tile.BloodMagic.stone.ritual.master.name=主儀式石 +tile.BloodMagic.stone.ritual.imperfect.name=不完善的儀式石 +tile.BloodMagic.stone.ritual.inverted.name=反轉的主儀式石 -tile.BloodMagic.altar.name=血祭壇 +tile.BloodMagic.altar.name=血之祭壇 tile.BloodMagic.alchemyArray.name=&r&f煉金矩陣 -tile.BloodMagic.rune.blank.name=空白符文石 -tile.BloodMagic.rune.speed.name=速度符文石 -tile.BloodMagic.rune.efficiency.name=效益符文石 -tile.BloodMagic.rune.sacrifice.name=犧牲符文石 -tile.BloodMagic.rune.selfSacrifice.name=獻祭符文石 -tile.BloodMagic.rune.displacement.name=移位符文石 -tile.BloodMagic.rune.capacity.name=容納符文石 -tile.BloodMagic.rune.augCapacity.name=增容符文石 -tile.BloodMagic.rune.orb.name=珠之符文石 -tile.BloodMagic.rune.acceleration.name=促進符文石 -tile.BloodMagic.rune.charging.name=充能符文石 +tile.BloodMagic.rune.blank.name=空白符文 +tile.BloodMagic.rune.speed.name=速度符文 +tile.BloodMagic.rune.efficiency.name=效率符文 +tile.BloodMagic.rune.sacrifice.name=獻祭符文 +tile.BloodMagic.rune.selfsacrifice.name=犧牲符文 +tile.BloodMagic.rune.displacement.name=轉位符文 +tile.BloodMagic.rune.capacity.name=增容符文 +tile.BloodMagic.rune.augcapacity.name=超容符文 +tile.BloodMagic.rune.orb.name=寶珠符文 +tile.BloodMagic.rune.acceleration.name=促進符文 +tile.BloodMagic.rune.charging.name=充能符文 tile.BloodMagic.ritualStone.blank.name=儀式石 tile.BloodMagic.ritualStone.water.name=水之儀式石 tile.BloodMagic.ritualStone.fire.name=火之儀式石 -tile.BloodMagic.ritualStone.earth.name=地之儀式石 +tile.BloodMagic.ritualStone.earth.name=土之儀式石 tile.BloodMagic.ritualStone.air.name=風之儀式石 -tile.BloodMagic.ritualStone.dusk.name=黃昏儀式石 -tile.BloodMagic.ritualStone.dawn.name=黎明之儀式石 +tile.BloodMagic.ritualStone.dusk.name=薄暮儀式石 +tile.BloodMagic.ritualStone.dawn.name=破曉儀式石 tile.BloodMagic.bloodstonebrick.large.name=大血石磚 tile.BloodMagic.bloodstonebrick.brick.name=血石磚 -tile.BloodMagic.crystal.large.name=晶簇方塊 +tile.BloodMagic.crystal.large.name=晶簇塊 tile.BloodMagic.crystal.brick.name=晶簇磚 -tile.BloodMagic.bloodLight.name=血光 -tile.BloodMagic.spectralBlock.name=波譜方塊 -tile.BloodMagic.phantom.name=幻象方塊 -tile.BloodMagic.incenseAltar.name=香壇 +tile.BloodMagic.bloodLight.name=血之光源 +tile.BloodMagic.spectralBlock.name=幽靈方塊 +tile.BloodMagic.phantom.name=影橋方塊 +tile.BloodMagic.incenseAltar.name=熏香祭壇 -tile.BloodMagic.teleposer.name=轉送器 -tile.BloodMagic.soulForge.name=獄炎融爐 +tile.BloodMagic.teleposer.name=傳送器 +tile.BloodMagic.soulForge.name=獄火熔爐 +tile.BloodMagic.alchemyTable.name=煉金術桌 tile.BloodMagic.demonCrucible.name=惡魔坩堝 +tile.BloodMagic.demonPylon.name=惡魔導能塔 +tile.BloodMagic.demonCrystallizer.name=惡魔結晶壇 -tile.BloodMagic.masterRouting.name=魔導師路由節點 +tile.BloodMagic.masterRouting.name=主控路由節點 tile.BloodMagic.outputRouting.name=輸出路由節點 tile.BloodMagic.inputRouting.name=輸入路由節點 tile.BloodMagic.itemRouting.name=路由節點 -tile.BloodMagic.path.wood.name=木材通路 -tile.BloodMagic.path.woodTile.name=平滑木通路 -tile.BloodMagic.path.stone.name=石磚通路 -tile.BloodMagic.path.stoneTile.name=平滑石通路 -tile.BloodMagic.path.wornstone.name=裂石磚通路 -tile.BloodMagic.path.wornstoneTile.name=平滑裂石通路 -tile.BloodMagic.path.obsidian.name=黑曜石通路 -tile.BloodMagic.path.obsidianTile.name=平滑黑曜石通路 +tile.BloodMagic.path.wood.name=木製路面 +tile.BloodMagic.path.woodtile.name=木瓦路面 +tile.BloodMagic.path.stone.name=石磚路面 +tile.BloodMagic.path.stonetile.name=石瓦路面 +tile.BloodMagic.path.wornstone.name=碎石磚路面 +tile.BloodMagic.path.wornstonetile.name=碎石路面 +tile.BloodMagic.path.obsidian.name=黑曜石磚路面 +tile.BloodMagic.path.obsidiantile.name=黑曜石瓦路面 -tile.BloodMagic.dimensionalPortal.name=維度傳送門 -tile.BloodMagic.bloodTank.name=血槽 +tile.BloodMagic.dimensionalPortal.name=空間傳送門 +tile.BloodMagic.bloodTank.name=血法師的儲罐 -# 工具提示 -tooltip.BloodMagic.orb.desc=儲存生命精華 -tooltip.BloodMagic.orb.owner=Added by: %s -tooltip.BloodMagic.currentOwner=Current owner: %s -tooltip.BloodMagic.currentTier=Current tier: %d -tooltip.BloodMagic.config.disabled=Currently disabled in the Config +tile.BloodMagic.demonCrystal.default.name=[原生]意志晶簇 +tile.BloodMagic.demonCrystal.corrosive.name=[腐蝕]意志晶簇 +tile.BloodMagic.demonCrystal.destructive.name=[破壞]意志晶簇 +tile.BloodMagic.demonCrystal.vengeful.name=[復仇]意志晶簇 +tile.BloodMagic.demonCrystal.steadfast.name=[堅毅]意志晶簇 -tooltip.BloodMagic.activated=啟用 -tooltip.BloodMagic.deactivated=未啟用 +tile.BloodMagic.mimic.nohitbox.name=[懸幽]擬態方塊 +tile.BloodMagic.mimic.solidopaque.name=擬態方塊 +tile.BloodMagic.mimic.solidclear.name=[清透]擬態方塊 +tile.BloodMagic.mimic.solidlight.name=[光亮]擬態方塊 +tile.BloodMagic.mimic.sentient.name=[感知]擬態方塊 -tooltip.BloodMagic.sigil.air.desc=&oI feel lighter already... -tooltip.BloodMagic.sigil.bloodLight.desc=&oI see a light! -tooltip.BloodMagic.sigil.compression.desc=&oHands of diamonds -tooltip.BloodMagic.sigil.divination.desc=&oPeer into the soul -tooltip.BloodMagic.sigil.divination.otherNetwork=Peering into the soul of %s -tooltip.BloodMagic.sigil.divination.currentAltarTier=Current Tier: %d -tooltip.BloodMagic.sigil.divination.currentEssence=Current Essence: %,d LP -tooltip.BloodMagic.sigil.divination.currentAltarCapacity=Current Capacity: %,d LP -tooltip.BloodMagic.sigil.divination.currentTranquility=Current Tranquility: %,d -tooltip.BloodMagic.sigil.divination.currentBonus=Current Bonus: +%,d%% -tooltip.BloodMagic.sigil.water.desc=&oInfinite water, anyone? -tooltip.BloodMagic.sigil.lava.desc=&oHOT! DO NOT EAT -tooltip.BloodMagic.sigil.void.desc=&oBetter than a Swiffer®! -tooltip.BloodMagic.sigil.greenGrove.desc=&oEnvironmentally friendly -tooltip.BloodMagic.sigil.magnetism.desc=&oI have a very magnetic personality -tooltip.BloodMagic.sigil.suppression.desc=&oBetter than telekinesis... -tooltip.BloodMagic.sigil.haste.desc=&o42 doses of caffeine later... -tooltip.BloodMagic.sigil.fastMiner.desc=&oKeep mining, and mining... -tooltip.BloodMagic.sigil.elementalAffinity.desc=&oFalling fire fishes! -tooltip.BloodMagic.sigil.seer.desc=&oWhen seeing all is not enough -tooltip.BloodMagic.sigil.seer.currentAltarProgress=Current Progress: %,d LP/ %s LP -tooltip.BloodMagic.sigil.seer.currentAltarProgress.percent=Current Progress: %s -tooltip.BloodMagic.sigil.seer.currentAltarConsumptionRate=Consumption Rate: %,d LP -tooltip.BloodMagic.sigil.seer.currentAltarTier=Current Tier: %d -tooltip.BloodMagic.sigil.seer.currentEssence=Current Essence: %,d LP -tooltip.BloodMagic.sigil.seer.currentAltarCapacity=Current Capacity: %,d LP -tooltip.BloodMagic.sigil.seer.currentCharge=Current Charge: %,d -tooltip.BloodMagic.sigil.seer.currentTranquility=Current Tranquility: %,d -tooltip.BloodMagic.sigil.seer.currentBonus=Current Bonus: +%,d%% -tooltip.BloodMagic.sigil.phantomBridge.desc=&oWalking on thin air... -tooltip.BloodMagic.sigil.whirlwind.desc=&oBest not to wear a skirt -tooltip.BloodMagic.sigil.enderSeverance.desc=&oPutting Endermen in Dire situations! +tile.BloodMagic.bricks1.brick1_raw.name=原生石磚 +tile.BloodMagic.bricks1.brick1_corrosive.name=腐蝕石磚 +tile.BloodMagic.bricks1.brick1_destructive.name=破壞石磚 +tile.BloodMagic.bricks1.brick1_vengeful.name=復仇石磚 +tile.BloodMagic.bricks1.brick1_steadfast.name=堅毅石磚 -tooltip.BloodMagic.sigil.teleposition.desc=I am very close to being moved by this. -tooltip.BloodMagic.sigil.transposition.desc=Feel the power of the Force, my young apprentice. +tile.BloodMagic.bricks2.smallbrick_raw.name=小原生石磚 +tile.BloodMagic.bricks2.smallbrick_corrosive.name=小腐蝕石磚 +tile.BloodMagic.bricks2.smallbrick_destructive.name=小破壞石磚 +tile.BloodMagic.bricks2.smallbrick_vengeful.name=小復仇石磚 +tile.BloodMagic.bricks2.smallbrick_steadfast.name=小堅毅石磚 +tile.BloodMagic.bricks2.tile_raw.name=原生石瓦 +tile.BloodMagic.bricks2.tile_corrosive.name=腐蝕石瓦 +tile.BloodMagic.bricks2.tile_destructive.name=破壞石瓦 +tile.BloodMagic.bricks2.tile_vengeful.name=復仇石瓦 +tile.BloodMagic.bricks2.tile_steadfast.name=堅毅石瓦 +tile.BloodMagic.bricks2.tilespecial_raw.name=二重原生石瓦 +tile.BloodMagic.bricks2.tilespecial_corrosive.name=二重腐蝕石瓦 +tile.BloodMagic.bricks2.tilespecial_destructive.name=二重破壞石瓦 +tile.BloodMagic.bricks2.tilespecial_vengeful.name=二重複仇石瓦 +tile.BloodMagic.bricks2.tilespecial_steadfast.name=二重堅毅石瓦 -tooltip.BloodMagic.bound.sword.desc=&oCulling the weak -tooltip.BloodMagic.bound.pickaxe.desc=&oDestroying stone without mercy -tooltip.BloodMagic.bound.axe.desc=&oDemonic deforestation -tooltip.BloodMagic.bound.shovel.desc=&oScrubs floors clean of dirt +tile.BloodMagic.inversionpillar.raw.name=[原生]反轉柱 +tile.BloodMagic.inversionpillar.corrosive.name=[腐蝕]反轉柱 +tile.BloodMagic.inversionpillar.destructive.name=[破壞]反轉柱 +tile.BloodMagic.inversionpillar.vengeful.name=[復仇]反轉柱 +tile.BloodMagic.inversionpillar.steadfast.name=[堅毅]反轉柱 -tooltip.BloodMagic.sacrificialDagger.desc=Just a prick of the finger will suffice... -tooltip.BloodMagic.slate.desc=Infused stone inside of a Blood Altar -tooltip.BloodMagic.inscriber.desc=The writing is on the wall... +tile.BloodMagic.inversionpillarend.raw_bottom.name=[原生]反轉柱基 +tile.BloodMagic.inversionpillarend.corrosive_bottom.name=[腐蝕]反轉柱基 +tile.BloodMagic.inversionpillarend.destructive_bottom.name=[破壞]反轉柱基 +tile.BloodMagic.inversionpillarend.vengeful_bottom.name=[復仇]反轉柱基 +tile.BloodMagic.inversionpillarend.steadfast_bottom.name=[堅毅]反轉柱基 +tile.BloodMagic.inversionpillarend.raw_top.name=[原生]反轉柱頂蓋 +tile.BloodMagic.inversionpillarend.corrosive_top.name=[腐蝕]反轉柱頂蓋 +tile.BloodMagic.inversionpillarend.destructive_top.name=[破壞]反轉柱頂蓋 +tile.BloodMagic.inversionpillarend.vengeful_top.name=[復仇]反轉柱頂蓋 +tile.BloodMagic.inversionpillarend.steadfast_top.name=[堅毅]反轉柱頂蓋 -tooltip.BloodMagic.pack.selfSacrifice.desc=這背包戴起來好痛… -tooltip.BloodMagic.pack.sacrifice.desc=Description -tooltip.BloodMagic.pack.stored=Stored: %,d LP +tile.BloodMagic.demonlight.raw.name=[原生]意志之瞳 +tile.BloodMagic.demonlight.corrosive.name=[腐蝕]意志之瞳 +tile.BloodMagic.demonlight.destructive.name=[破壞]意志之瞳 +tile.BloodMagic.demonlight.vengeful.name=[復仇]意志之瞳 +tile.BloodMagic.demonlight.steadfast.name=[堅毅]意志之瞳 -tooltip.BloodMagic.activationCrystal.weak=居動低階儀式 +tile.BloodMagic.extras.stone_raw.name=原生石頭 +tile.BloodMagic.extras.stone_corrosive.name=腐蝕石頭 +tile.BloodMagic.extras.stone_destructive.name=破壞石頭 +tile.BloodMagic.extras.stone_vengeful.name=復仇石頭 +tile.BloodMagic.extras.stone_steadfast.name=堅毅石頭 + +tile.BloodMagic.extras.polished_raw.name=磨製原生石 +tile.BloodMagic.extras.polished_corrosive.name=磨製腐蝕石 +tile.BloodMagic.extras.polished_destructive.name=磨製破壞石 +tile.BloodMagic.extras.polished_vengeful.name=磨製復仇石 +tile.BloodMagic.extras.polished_steadfast.name=磨製堅毅石 + +tile.BloodMagic.extras.metal_raw.name=原生意志合金 +tile.BloodMagic.extras.metal_corrosive.name=腐蝕意志合金 +tile.BloodMagic.extras.metal_destructive.name=破壞意志合金 +tile.BloodMagic.extras.metal_vengeful.name=復仇意志合金 +tile.BloodMagic.extras.metal_steadfast.name=堅毅意志合金 + +tile.BloodMagic.pillar1.raw.name=原生石柱 +tile.BloodMagic.pillar1.corrosive.name=腐蝕石柱 +tile.BloodMagic.pillar1.destructive.name=破壞石柱 +tile.BloodMagic.pillar1.vengeful.name=復仇石柱 +tile.BloodMagic.pillar1.steadfast.name=堅毅石柱 + +tile.BloodMagic.pillar2.raw.name=二重原生石柱 +tile.BloodMagic.pillar2.corrosive.name=二重腐蝕石柱 +tile.BloodMagic.pillar2.destructive.name=二重破壞石柱 +tile.BloodMagic.pillar2.vengeful.name=二重複仇石柱 +tile.BloodMagic.pillar2.steadfast.name=二重堅毅石柱 + +tile.BloodMagic.pillarCap1.raw.name=原生頂柱 +tile.BloodMagic.pillarCap1.corrosive.name=腐蝕頂柱 +tile.BloodMagic.pillarCap2.destructive.name=破壞頂柱 +tile.BloodMagic.pillarCap2.vengeful.name=復仇頂柱 +tile.BloodMagic.pillarCap3.steadfast.name=堅毅頂柱 + +tile.BloodMagic.wall1.brick_raw.name=原生石磚牆 +tile.BloodMagic.wall1.brick_corrosive.name=腐蝕石磚牆 +tile.BloodMagic.wall1.brick_destructive.name=破壞石磚牆 +tile.BloodMagic.wall1.brick_vengeful.name=復仇石磚牆 +tile.BloodMagic.wall1.brick_steadfast.name=堅毅石磚牆 +tile.BloodMagic.wall1.smallbrick_raw.name=小原生石磚牆 +tile.BloodMagic.wall1.smallbrick_corrosive.name=小腐蝕石磚牆 +tile.BloodMagic.wall1.smallbrick_destructive.name=小破壞石磚牆 +tile.BloodMagic.wall1.smallbrick_vengeful.name=小復仇石磚牆 +tile.BloodMagic.wall1.smallbrick_steadfast.name=小堅毅石磚牆 +tile.BloodMagic.wall1.large_raw.name=原生石牆 +tile.BloodMagic.wall1.large_corrosive.name=腐蝕石牆 +tile.BloodMagic.wall1.large_destructive.name=破壞石牆 +tile.BloodMagic.wall1.large_vengeful.name=復仇石牆 +tile.BloodMagic.wall1.large_steadfast.name=堅毅石牆 + +tile.BloodMagic.stairs1.raw.name=原生石樓梯 +tile.BloodMagic.stairs1.corrosive.name=腐蝕石樓梯 +tile.BloodMagic.stairs2.destructive.name=破壞石樓梯 +tile.BloodMagic.stairs2.vengeful.name=復仇石樓梯 +tile.BloodMagic.stairs3.steadfast.name=堅毅石樓梯 + +# Fluids +fluid.lifeEssence=生命精華 + +# Tooltips +tooltip.BloodMagic.extraInfo=&9-按住 Shift 瞭解更多信息- + +tooltip.BloodMagic.orb.desc=儲存原生的生命精華 +tooltip.BloodMagic.orb.owner=來源:%s +tooltip.BloodMagic.currentOwner=當前所有者:%s +tooltip.BloodMagic.currentTier=當前層級:%d +tooltip.BloodMagic.config.disabled=於配置信息中禁用 +tooltip.BloodMagic.tier=層級 %d + +tooltip.BloodMagic.activated=驅動 +tooltip.BloodMagic.deactivated=停用 + +tooltip.BloodMagic.sigil.air.desc=&o我感到輕鬆多了... +tooltip.BloodMagic.sigil.bloodLight.desc=&o我看見了一束光明! +tooltip.BloodMagic.sigil.compression.desc=&o鑽石之手 +tooltip.BloodMagic.sigil.divination.desc=&o窺視靈魂 +tooltip.BloodMagic.sigil.divination.otherNetwork=窺視 %s 的靈魂 +tooltip.BloodMagic.sigil.divination.currentAltarTier=當前層級:%d +tooltip.BloodMagic.sigil.divination.currentEssence=當前精華:%d LP +tooltip.BloodMagic.sigil.divination.currentAltarCapacity=當前容量:%d LP +tooltip.BloodMagic.sigil.divination.currentTranquility=當前靜謐:%d +tooltip.BloodMagic.sigil.divination.currentInversion=當前反轉:%d +tooltip.BloodMagic.sigil.divination.currentBonus=當前效益:+%d%% +tooltip.BloodMagic.sigil.water.desc=&o無限水源? +tooltip.BloodMagic.sigil.lava.desc=&o噢好燙! 不要吃 +tooltip.BloodMagic.sigil.void.desc=&o勝過速易潔®! +tooltip.BloodMagic.sigil.greenGrove.desc=&o綠色環保無污染 +tooltip.BloodMagic.sigil.magnetism.desc=&o我現在非常具有吸引力 +tooltip.BloodMagic.sigil.suppression.desc=&o比念力移動更好... +tooltip.BloodMagic.sigil.haste.desc=&o42繼咖啡因後... +tooltip.BloodMagic.sigil.fastMiner.desc=&o繼續挖, 繼續挖... +tooltip.BloodMagic.sigil.elementalAffinity.desc=&o落入焰中的魚兒! +tooltip.BloodMagic.sigil.seer.desc=&o當看到的一切還不足夠 +tooltip.BloodMagic.sigil.seer.currentAltarProgress=當前進度:%d LP/ %s LP +tooltip.BloodMagic.sigil.seer.currentAltarProgress.percent=當前進度:%s +tooltip.BloodMagic.sigil.seer.currentAltarConsumptionRate=消耗率:%d LP +tooltip.BloodMagic.sigil.seer.currentAltarTier=當前層級:%d +tooltip.BloodMagic.sigil.seer.currentEssence=當前精華:%d LP +tooltip.BloodMagic.sigil.seer.currentAltarCapacity=當前容量:%d LP +tooltip.BloodMagic.sigil.seer.currentCharge=當前儲能:%d +tooltip.BloodMagic.sigil.seer.currentTranquility=當前靜謐:%d +tooltip.BloodMagic.sigil.seer.currentBonus=當前效益:+%d%% +tooltip.BloodMagic.sigil.phantomBridge.desc=&o御氣於青空之上... +tooltip.BloodMagic.sigil.whirlwind.desc=&o最好不要穿裙子 +tooltip.BloodMagic.sigil.enderSeverance.desc=&o使末影人遇上一個嚴峻形勢! +tooltip.BloodMagic.sigil.teleposition.desc=隨時可以脫離這裡。 +tooltip.BloodMagic.sigil.transposition.desc=感受原力的力量,我年輕的學徒。 +tooltip.BloodMagic.sigil.holding.press=按下&o%s&r&7修改 +tooltip.BloodMagic.sigil.holding.desc=印記掌控 +tooltip.BloodMagic.sigil.holding.sigilInSlot=印記 %d:%s + +tooltip.BloodMagic.livingArmourPointsUpgrade.desc=提升感知盔甲的最大點數至 %d。 + +tooltip.BloodMagic.bound.sword.desc=&o屠殺幼弱之生靈 +tooltip.BloodMagic.bound.pickaxe.desc=&o無情地鑿通大地 +tooltip.BloodMagic.bound.axe.desc=&o惡魔般的濫砍濫伐 +tooltip.BloodMagic.bound.shovel.desc=&o洗掃大地除去塵土 + +tooltip.BloodMagic.sacrificialDagger.desc=只要輕輕劃過手指... +tooltip.BloodMagic.sacrificialDagger.creative=對著祭壇潛行右擊填滿 +tooltip.BloodMagic.slate.desc=在祭壇中將石頭轉化 +tooltip.BloodMagic.inscriber.desc=在牆面上的文字... + +tooltip.BloodMagic.pack.selfSacrifice.desc=相當不舒適的背包... +tooltip.BloodMagic.pack.sacrifice.desc=描述 +tooltip.BloodMagic.pack.stored=儲存:%d LP + +tooltip.BloodMagic.activationCrystal.weak=驅動低等儀式 tooltip.BloodMagic.activationCrystal.awakened=驅動更強大的儀式 -tooltip.BloodMagic.activationCrystal.creative=Creative Only - Activates any ritual +tooltip.BloodMagic.activationCrystal.creative=創造模式 - 驅動任何儀式 -tooltip.BloodMagic.diviner.currentRitual=Current Ritual: -tooltip.BloodMagic.diviner.blankRune=Blank Runes: %d -tooltip.BloodMagic.diviner.waterRune=Water Runes: %d -tooltip.BloodMagic.diviner.airRune=Air Runes: %d -tooltip.BloodMagic.diviner.fireRune=Fire Runes: %d -tooltip.BloodMagic.diviner.earthRune=Earth Runes: %d -tooltip.BloodMagic.diviner.duskRune=Dusk Runes: %d -tooltip.BloodMagic.diviner.dawnRune=Dawn Runes: %d -tooltip.BloodMagic.diviner.totalRune=Total Runes: %d -tooltip.BloodMagic.diviner.extraInfo=按shift顯示額外資訊 -tooltip.BloodMagic.diviner.currentDirection=Current Direction: %s +tooltip.BloodMagic.diviner.currentRitual=當前儀式: +tooltip.BloodMagic.diviner.blankRune=空白儀式石:%d +tooltip.BloodMagic.diviner.waterRune=水之儀式石:%d +tooltip.BloodMagic.diviner.airRune=風之儀式石:%d +tooltip.BloodMagic.diviner.fireRune=火之儀式石:%d +tooltip.BloodMagic.diviner.earthRune=土之儀式石:%d +tooltip.BloodMagic.diviner.duskRune=薄暮儀式石:%d +tooltip.BloodMagic.diviner.dawnRune=破曉儀式石:%d +tooltip.BloodMagic.diviner.totalRune=儀式石總數:%d +tooltip.BloodMagic.diviner.extraInfo=&9-按 Shift 瞭解詳細信息- +tooltip.BloodMagic.diviner.extraExtraInfo=&9-按住 Shift + M 展開更多信息- +tooltip.BloodMagic.diviner.currentDirection=當前朝向:%s -tooltip.BloodMagic.arcaneAshes=灑一個圈以用於煉金術 +tooltip.BloodMagic.ritualReader.currentState=當前模式:%s +tooltip.BloodMagic.ritualReader.set_area=定義區域 +tooltip.BloodMagic.ritualReader.information=信息 +tooltip.BloodMagic.ritualReader.set_will_types=設置意志消耗 +tooltip.BloodMagic.ritualReader.desc.set_area=右擊以驅動儀式的主儀式石,選至你想更改的區域,隨後分別右擊新區域角落的兩個方塊。 +tooltip.BloodMagic.ritualReader.desc.information=右擊以驅動儀式的主儀式石瞭解儀式的基本信息。 +tooltip.BloodMagic.ritualReader.desc.set_will_types=設置儀式將消耗的惡魔意志類型, 工具欄中存放該類晶體右擊主儀式石. -tooltip.BloodMagic.telepositionFocus.coords=Current coordinates: (%,d, %,d, %,d) -tooltip.BloodMagic.telepositionFocus.dimension=Dimension ID: %d -tooltip.BloodMagic.telepositionFocus.weak=Used to move blocks in the world -tooltip.BloodMagic.telepositionFocus.enhanced=Used to move blocks in the world -tooltip.BloodMagic.telepositionFocus.reinforced=Used to move blocks in the world -tooltip.BloodMagic.telepositionFocus.demonic=Used to move blocks in the world +tooltip.BloodMagic.arcaneAshes=用於繪製煉金矩陣的粉灰 -tooltip.BloodMagic.livingArmour.upgrade.speed=Quick Feet -tooltip.BloodMagic.livingArmour.upgrade.digging=Dwarven Might -tooltip.BloodMagic.livingArmour.upgrade.poisonResist=Poison Resistance -tooltip.BloodMagic.livingArmour.upgrade.selfSacrifice=Tough Palms -tooltip.BloodMagic.livingArmour.upgrade.knockback=Body Builder -tooltip.BloodMagic.livingArmour.upgrade.physicalProtect=Tough Skin -tooltip.BloodMagic.livingArmour.upgrade.health=Healthy -tooltip.BloodMagic.livingArmour.upgrade.meleeDamage=Fierce Strike -tooltip.BloodMagic.livingArmour.upgrade.arrowShot=Trick Shot -tooltip.BloodMagic.livingArmour.upgrade.stepAssist=Step Assist -tooltip.BloodMagic.livingArmour.upgrade.grimReaper=Grim Reaper's Sprint -tooltip.BloodMagic.livingArmour.upgrade.solarPowered=Solar Powered -tooltip.BloodMagic.livingArmour.upgrade.thaumRunicShielding=Runic Shielding -tooltip.BloodMagic.livingArmour.upgrade.revealing=Revealing -tooltip.BloodMagic.livingArmour.upgrade.level=%s (Level %d) -tooltip.BloodMagic.livingArmour.upgrade.points=&6Upgrade points: %s / %s +tooltip.BloodMagic.telepositionFocus.coords=當前坐標:(%d, %d, %d) +tooltip.BloodMagic.telepositionFocus.dimension=世界ID:%d +tooltip.BloodMagic.telepositionFocus.weak=用於在世界中轉移區域 +tooltip.BloodMagic.telepositionFocus.enhanced=用於在世界中轉移區域 +tooltip.BloodMagic.telepositionFocus.reinforced=用於在世界中轉移區域 +tooltip.BloodMagic.telepositionFocus.demonic=用於在世界中轉移區域 -tooltip.BloodMagic.will=Will Quality: %1$,.2f -tooltip.BloodMagic.sentientSword.desc=Uses demon will to unleash its full potential. -tooltip.BloodMagic.soulGem.petty=A gem used to contain a little will -tooltip.BloodMagic.soulGem.lesser=A gem used to contain some will -tooltip.BloodMagic.soulGem.common=A gem used to contain more will -tooltip.BloodMagic.soulGem.greater=A gem used to contain a greater amount of will -tooltip.BloodMagic.soulGem.grand=A gem used to contain a large amount of will -tooltip.BloodMagic.soulSnare.desc=Throw at a monster and then kill them to obtain their demonic will +tooltip.BloodMagic.livingArmour.upgrade.speed=迅捷雙足 +tooltip.BloodMagic.livingArmour.upgrade.digging=矮人力量 +tooltip.BloodMagic.livingArmour.upgrade.poisonResist=抗毒體質 +tooltip.BloodMagic.livingArmour.upgrade.fireResist=焰火之禮 +tooltip.BloodMagic.livingArmour.upgrade.selfSacrifice=結實手心 +tooltip.BloodMagic.livingArmour.upgrade.knockback=強勁身軀 +tooltip.BloodMagic.livingArmour.upgrade.physicalProtect=堅韌皮膚 +tooltip.BloodMagic.livingArmour.upgrade.health=健壯體質 +tooltip.BloodMagic.livingArmour.upgrade.meleeDamage=猛烈擊打 +tooltip.BloodMagic.livingArmour.upgrade.arrowShot=射擊訣竅 +tooltip.BloodMagic.livingArmour.upgrade.stepAssist=步伐補助 +tooltip.BloodMagic.livingArmour.upgrade.grimReaper=死神競跑 +tooltip.BloodMagic.livingArmour.upgrade.solarPowered=陽光能量 +tooltip.BloodMagic.livingArmour.upgrade.thaumRunicShielding=古碑守護 +tooltip.BloodMagic.livingArmour.upgrade.revealing=揭示 +tooltip.BloodMagic.livingArmour.upgrade.experienced=熟練 +tooltip.BloodMagic.livingArmour.upgrade.jump=壯實雙腿 +tooltip.BloodMagic.livingArmour.upgrade.fallProtect=柔和落葉 +tooltip.BloodMagic.livingArmour.upgrade.graveDigger=掘墓者 +tooltip.BloodMagic.livingArmour.upgrade.sprintAttack=衝撞擊打 +tooltip.BloodMagic.livingArmour.upgrade.criticalStrike=精準擊打 +tooltip.BloodMagic.livingArmour.upgrade.elytra=鞘翅 +tooltip.BloodMagic.livingArmour.upgrade.nightSight=夜行猛技 +tooltip.BloodMagic.livingArmour.upgrade.repair=修復 -tooltip.BloodMagic.itemFilter.exact=Will make sure the items match precisely -tooltip.BloodMagic.itemFilter.ignoreNBT=Ignores the NBT of the filter -tooltip.BloodMagic.itemFilter.modItems=Matches all items from the same mod -tooltip.BloodMagic.itemFilter.oreDict=Used to filter through the Ore Dictionary -tooltip.BloodMagic.fluid.type=Fluid Contained -tooltip.BloodMagic.fluid.amount=Amount -tooltip.BloodMagic.fluid.capacity=Capacity +tooltip.BloodMagic.livingArmour.upgrade.slowness=疲瘸之腿 +tooltip.BloodMagic.livingArmour.upgrade.crippledArm=殘廢手臂 +tooltip.BloodMagic.livingArmour.upgrade.slippery=如履寒冰 +tooltip.BloodMagic.livingArmour.upgrade.battleHunger=餓殍遍野 +tooltip.BloodMagic.livingArmour.upgrade.quenched=淬火 +tooltip.BloodMagic.livingArmour.upgrade.meleeDecrease=鈍拙之刃 +tooltip.BloodMagic.livingArmour.upgrade.digSlowdown=弱化挖掘 +tooltip.BloodMagic.livingArmour.upgrade.stormTrooper=風暴騎兵 +tooltip.BloodMagic.livingArmour.upgrade.slowHeal=癒合延緩 +tooltip.BloodMagic.livingArmour.upgrade.disoriented=平衡失調 -# 儀式 -ritual.BloodMagic.testRitual=Test Ritual -ritual.BloodMagic.waterRitual=Ritual of the Full Spring -ritual.BloodMagic.lavaRitual=Serenade of the Nether -ritual.BloodMagic.greenGroveRitual=Ritual of the Green Grove -ritual.BloodMagic.jumpRitual=Ritual of the High Jump -ritual.BloodMagic.wellOfSufferingRitual=Well of Suffering -ritual.BloodMagic.featheredKnifeRitual=Ritual of the Feathered Knife -ritual.BloodMagic.regenerationRitual=Ritual of Regeneration -ritual.BloodMagic.harvestRitual=Reap of the Harvest Moon -ritual.BloodMagic.magneticRitual=Ritual of Magnetism -ritual.BloodMagic.crushingRitual=Ritual of the Crusher -ritual.BloodMagic.fullStomachRitual=Ritual of the Satiated Stomach -ritual.BloodMagic.interdictionRitual=Ritual of Interdiction -ritual.BloodMagic.containmentRitual=Ritual of Containment -ritual.BloodMagic.speedRitual=Ritual of Speed -ritual.BloodMagic.suppressionRitual=Ritual of Suppression -ritual.BloodMagic.expulsionRitual=Aura of Expulsion -ritual.BloodMagic.zephyrRitual=Call of the Zephyr -ritual.BloodMagic.upgradeRemoveRitual=Sound of the Cleansing Soul -ritual.BloodMagic.armourEvolveRitual=Ritual of Living Evolution +tooltip.BloodMagic.livingArmour.upgrade.level=%s(等級 %d) +tooltip.BloodMagic.livingArmour.upgrade.progress=%s(%d/100) +tooltip.BloodMagic.livingArmour.upgrade.points=&6強化點數:%s / %s -ritual.BloodMagic.cobblestoneRitual=Le Vulcanos Frigius -ritual.BloodMagic.placerRitual=The Filler -ritual.BloodMagic.fellingRitual=The Timberman -ritual.BloodMagic.pumpRitual=Hymn of Siphoning -ritual.BloodMagic.altarBuilderRitual=The Assembly of the High Altar -ritual.BloodMagic.portalRitual=The Gate of the Fold +tooltip.BloodMagic.livingArmour.extraExtraInfo=&9-按住 Shift + M 查看進展信息- + +tooltip.BloodMagic.will=意志質量:%1$,.2f +tooltip.BloodMagic.sentientSword.desc=以惡魔意志喚起其最大潛能。 +tooltip.BloodMagic.sentientAxe.desc=以惡魔意志喚起其最大潛能。 +tooltip.BloodMagic.sentientPickaxe.desc=以惡魔意志喚起其最大潛能。 +tooltip.BloodMagic.sentientShovel.desc=以惡魔意志喚起其最大潛能。 +tooltip.BloodMagic.soulGem.petty=用於存儲微量意志的寶石 +tooltip.BloodMagic.soulGem.lesser=用於存儲少量意志的寶石 +tooltip.BloodMagic.soulGem.common=用於存儲更多意志的寶石 +tooltip.BloodMagic.soulGem.greater=用於存儲大量意志的寶石 +tooltip.BloodMagic.soulGem.grand=用於存儲極大數額意志的寶石 +tooltip.BloodMagic.soulSnare.desc=投擲向怪物並消滅它們來獲取附於其身的惡魔意志 + +tooltip.BloodMagic.itemFilter.exact=精確匹配物品 +tooltip.BloodMagic.itemFilter.ignoreNBT=忽視篩選的NBT +tooltip.BloodMagic.itemFilter.modItems=同Mod的物品全部匹配 +tooltip.BloodMagic.itemFilter.oreDict=按礦物辭典篩選 + +tooltip.BloodMagic.itemFilter.exact=精確匹配液體 + +tooltip.BloodMagic.fluid.type=所含液體:%s +tooltip.BloodMagic.fluid.amount=數量:%d / %d mB +tooltip.BloodMagic.fluid.capacity=容量:%d mB + +tooltip.BloodMagic.ghost.everything=任何物品 +tooltip.BloodMagic.ghost.amount=幽靈物品數量:%d + +tooltip.BloodMagic.currentType.default=蘊含:原生意志 +tooltip.BloodMagic.currentType.corrosive=蘊含:腐蝕意志 +tooltip.BloodMagic.currentType.destructive=蘊含:破壞意志 +tooltip.BloodMagic.currentType.vengeful=蘊含:復仇意志 +tooltip.BloodMagic.currentType.steadfast=蘊含:堅毅意志 + +tooltip.BloodMagic.currentBaseType.default=原生 +tooltip.BloodMagic.currentBaseType.corrosive=腐蝕 +tooltip.BloodMagic.currentBaseType.destructive=破壞 +tooltip.BloodMagic.currentBaseType.vengeful=復仇 +tooltip.BloodMagic.currentBaseType.steadfast=堅毅 + +tooltip.BloodMagic.experienceTome=用於儲存經驗的書 +tooltip.BloodMagic.experienceTome.exp=經驗值:%0.3f +tooltip.BloodMagic.experienceTome.expLevel=等級:%d + +tooltip.BloodMagic.decoration.safe=安全裝潢 +tooltip.BloodMagic.decoration.notSafe=危險裝潢 + +tooltip.BloodMagic.cuttingFluidRatio=%d/%d 所剩可用 + +tooltip.BloodMagic.potion.uses=剩餘使用次數:%d + +tooltip.BloodMagic.book.shifting=這些符號似乎... &o在變換著... + +tooltip.BloodMagic.willGauge=一個奇怪的裝置,可以測量惡魔靈域中的惡魔意志。 + +# Ritual +ritual.BloodMagic.blockRange.tooBig=提供的方塊範圍過大!最多不超過 %s 個方塊。 +ritual.BloodMagic.blockRange.tooFar=提供的方塊範圍太遠!需要在垂直距離 %s , 水平距離 %s 之內。 +ritual.BloodMagic.blockRange.inactive=該儀式石目前無活動,沒有可修改的範圍。 +ritual.BloodMagic.blockRange.noRange=範圍選擇不恰當。 +ritual.BloodMagic.blockRange.firstBlock=記錄新範圍的第一個方塊。 +ritual.BloodMagic.blockRange.success=新範圍設置成功! +ritual.BloodMagic.willConfig.set=該儀式將使用這類惡魔意志類型:%s +ritual.BloodMagic.willConfig.void=該儀式不再會使用惡魔意志 + +ritual.BloodMagic.testRitual=測試儀式 +ritual.BloodMagic.waterRitual=湧泉儀式 +ritual.BloodMagic.lavaRitual=下界夜曲 +ritual.BloodMagic.greenGroveRitual=綠叢儀式 +ritual.BloodMagic.jumpRitual=高跳儀式 +ritual.BloodMagic.wellOfSufferingRitual=苦難之井 +ritual.BloodMagic.featheredKnifeRitual=羽刀儀式 +ritual.BloodMagic.regenerationRitual=重生儀式 +ritual.BloodMagic.harvestRitual=豐收之月 +ritual.BloodMagic.magneticRitual=磁引儀式 +ritual.BloodMagic.crushingRitual=挖掘儀式 +ritual.BloodMagic.fullStomachRitual=盛宴之歌 +ritual.BloodMagic.interdictionRitual=制止儀式 +ritual.BloodMagic.containmentRitual=牽制儀式 +ritual.BloodMagic.speedRitual=速移儀式 +ritual.BloodMagic.suppressionRitual=抑液儀式 +ritual.BloodMagic.expulsionRitual=驅逐氛場 +ritual.BloodMagic.zephyrRitual=和風之喚 +ritual.BloodMagic.upgradeRemoveRitual=淨靈之音 +ritual.BloodMagic.armourEvolveRitual=束靈進化 +ritual.BloodMagic.animalGrowthRitual=牧養儀式 +ritual.BloodMagic.forsakenSoulRitual=孤魂集會 +ritual.BloodMagic.crystalHarvestRitual=碎晶裂紋 +ritual.BloodMagic.meteorRitual=墜星標位 + +ritual.BloodMagic.cobblestoneRitual=極寒火山 +ritual.BloodMagic.placerRitual=鋪設儀式 +ritual.BloodMagic.fellingRitual=伐林儀式 +ritual.BloodMagic.pumpRitual=虹吸聖曲 +ritual.BloodMagic.altarBuilderRitual=祭壇集結號 +ritual.BloodMagic.portalRitual=折域之門 +ritual.BloodMagic.downgradeRitual=沉重靈魂的懺悔 + +ritual.BloodMagic.waterRitual.info=通過主儀式石生成一個水源方塊 +ritual.BloodMagic.lavaRitual.info=通過主儀式石生成一個岩漿源方塊 +ritual.BloodMagic.lavaRitual.default.info=[原生]降低生成岩漿的LP消耗,並將岩漿導入連接的容器內 +ritual.BloodMagic.lavaRitual.corrosive.info=[腐蝕]範圍內免疫火焰傷害的實體將受到傷害 +ritual.BloodMagic.lavaRitual.destructive.info=[破壞]岩漿的放置範圍根據意志的總量增加 +ritual.BloodMagic.lavaRitual.vengeful.info=[復仇]給予範圍內實體緩燃引線效果(上天) +ritual.BloodMagic.lavaRitual.steadfast.info=[堅毅]給予範圍內的玩家防火效果 + +ritual.BloodMagic.greenGroveRitual.info=在其範圍內種植農作物 +ritual.BloodMagic.jumpRitual.info=使實體躍向高空 +ritual.BloodMagic.wellOfSufferingRitual.info=攻擊其傷害範圍內的生物,並將所獲LP儲入鄰近的血之祭壇 +ritual.BloodMagic.featheredKnifeRitual.info=扣除其範圍內的玩家生命值,並將所獲LP儲入鄰近的血之祭壇 +ritual.BloodMagic.regenerationRitual.info=治療其範圍內失去生命值的實體 +ritual.BloodMagic.regenerationRitual.default.info=[原生] +ritual.BloodMagic.regenerationRitual.corrosive.info=[腐蝕]從非玩家的實體身上汲取鮮血以治療玩家 +ritual.BloodMagic.regenerationRitual.destructive.info=[破壞] +ritual.BloodMagic.regenerationRitual.vengeful.info=[復仇] +ritual.BloodMagic.regenerationRitual.steadfast.info=[堅毅] +ritual.BloodMagic.harvestRitual.info=收割其範圍內的植物,產物掉落於地上 +ritual.BloodMagic.magneticRitual.info=將地底的礦石傳送至其放置區域 +ritual.BloodMagic.crushingRitual.info=破壞其挖掘範圍內的方塊,並將掉落物放置於所連接的箱子 +ritual.BloodMagic.crushingRitual.destructive.info=[破壞]強力的破壞方塊:所有方塊破壞受 時運III 影響 +ritual.BloodMagic.crushingRitual.steadfast.info=[堅毅]以 精準採集 獲取被破壞方塊。適用情況下覆蓋時運 +ritual.BloodMagic.crushingRitual.corrosive.info=[腐蝕]所有被破壞方塊將以基礎切削油的形式處理。適用情況下覆蓋精準採集 +ritual.BloodMagic.crushingRitual.vengeful.info=[復仇]壓縮庫存內的物品(如將煤炭壓縮成煤炭塊),目前每次操作僅執行一次壓縮 +ritual.BloodMagic.crushingRitual.default.info=[原生]根據意志總量增加儀式的運行速度 +ritual.BloodMagic.greenGroveRitual.corrosive.info=[腐蝕]範圍內的實體將被附近的植物攻擊, 蠶食掉他們的生命 +ritual.BloodMagic.greenGroveRitual.default.info=[原生]根據靈域內意志的總量加快所有的儀式運作速度 +ritual.BloodMagic.greenGroveRitual.vengeful.info=[復仇]增加生長刻成功的速率 +ritual.BloodMagic.greenGroveRitual.steadfast.info=[堅毅]在水合範圍內, 種子會被再次種植且方塊會被潤濕 +ritual.BloodMagic.greenGroveRitual.destructive.info=[破壞] 促進作物生長的範圍根據意志的總量增加 +ritual.BloodMagic.featheredKnifeRitual.default.info=[原生] 根據靈域內意志的總量增加儀式的運行速度 +ritual.BloodMagic.featheredKnifeRitual.destructive.info=[破壞] 根據意志總量增加儀式的產出的LP +ritual.BloodMagic.featheredKnifeRitual.vengeful.info=[復仇] 將犧牲的最小生命值設為10%%.覆蓋[堅毅]的效果 +ritual.BloodMagic.featheredKnifeRitual.corrosive.info=[腐蝕] 使用玩家的「熏香」來提高收益 +ritual.BloodMagic.featheredKnifeRitual.steadfast.info=[堅毅] 將犧牲的最小生命值設為30%%到70%% +ritual.BloodMagic.speedRitual.default.info=[原生] 根據意志總量增加儀式產生的移動速度 +ritual.BloodMagic.speedRitual.vengeful.info=[復仇] 防止玩家與成年動物被運輸,如果與[破壞]配合,則運輸玩家 +ritual.BloodMagic.speedRitual.destructive.info=[破壞] 防止玩家與幼年動物被運輸,如果與[復仇]配合,則運輸玩家 +ritual.BloodMagic.animalGrowthRitual.vengeful.info=[復仇] 減少成年動物繁殖的間隔時間 +ritual.BloodMagic.animalGrowthRitual.steadfast.info=[堅毅] 使用箱子內的物品飼養區域內的動物 +ritual.BloodMagic.animalGrowthRitual.default.info=[原生] 根據靈域內意志的總量增加儀式的運行速度 +ritual.BloodMagic.animalGrowthRitual.destructive.info=[破壞]讓最近沒有繁殖後代的成年動物衝向怪物自爆 +ritual.BloodMagic.animalGrowthRitual.corrosive.info=[腐蝕] 暫無特殊效果 + +ritual.BloodMagic.fullStomachRitual.info=從連接的箱子中獲取食物,來補充玩家的飢餓值。 +ritual.BloodMagic.interdictionRitual.info=使其範圍內的所有生物推離於主儀式石。 +ritual.BloodMagic.containmentRitual.info=使其範圍內的所有生物牽引向主儀式石。 +ritual.BloodMagic.speedRitual.info=將其範圍內的玩家以儀式方向拋射出去。 +ritual.BloodMagic.suppressionRitual.info=抑制其範圍內的液體;停用儀式時恢復。 +ritual.BloodMagic.expulsionRitual.info=驅逐其範圍內,非驅動者或主儀式石上方箱子中無綁定血寶珠的玩家,離開該區域。 +ritual.BloodMagic.zephyrRitual.info=拾取其範圍內的掉落物,並放入所連接的箱子。 +ritual.BloodMagic.upgradeRemoveRitual.info=沒有記載。 +ritual.BloodMagic.armourEvolveRitual.info=沒有記載。 +ritual.BloodMagic.animalGrowthRitual.info=加快其範圍內的幼年動物的生長速度。 +ritual.BloodMagic.forsakenSoulRitual.info=對其傷害範圍內的生物造成傷害,當生物死亡時,其晶體範圍內的惡魔晶簇將生長。 +ritual.BloodMagic.crystalHarvestRitual.info=破壞範圍內的惡魔意志晶簇,掉落物丟於晶簇頂部。 +ritual.BloodMagic.placerRitual.info=取出所連接的容器中的方塊,並放置於世界中。 +ritual.BloodMagic.fellingRitual.info=一個伐木設施,該儀式將砍伐其範圍內所有樹與葉子,並收集掉落物。 +ritual.BloodMagic.pumpRitual.info=從規定範圍獲取液體。只有當所連接的液體容器至少有一桶量的相同液體時,移入液體。 +ritual.BloodMagic.altarBuilderRitual.info=將所連接的容器中的祭壇部件搭建出來。 +ritual.BloodMagic.portalRitual.info=創建一個傳送門網絡,以驅動者及直接接觸方塊為基礎,兩者相同的兩個傳送門達成連接。驅動後未修改傳送網絡的情況下方塊可以變更。 +ritual.BloodMagic.meteorRitual.info=消耗其物品範圍內的一個物品,從天空中召喚一個充滿資源的流星,直接墜向儀式。 + +ritual.BloodMagic.waterRitual.waterRange.info=(水源) 儀式放置水源方塊的區域。 +ritual.BloodMagic.lavaRitual.lavaRange.info=(岩漿) 儀式放置岩漿方塊的區域。 +ritual.BloodMagic.lavaRitual.lavaTank.info=[原生] 儀式將岩漿導入其中的儲罐 +ritual.BloodMagic.lavaRitual.fireFuse.info=[復仇] 在這個區域內的實體將遭受緩燃引線效果 +ritual.BloodMagic.lavaRitual.fireResist.info=[堅毅] 玩家在此區域內可獲得防火buff +ritual.BloodMagic.lavaRitual.fireDamage.info=[腐蝕] 該區域內免疫火焰傷害的實體將受到傷害,傷害量與意志的量相關 +ritual.BloodMagic.greenGroveRitual.growing.info=(生長) 儀式加快植物生長的區域。 +ritual.BloodMagic.greenGroveRitual.leech.info=[腐蝕] 區域內實體的生命將流失於滋養附近的農作物。 +ritual.BloodMagic.greenGroveRitual.hydrate.info=[堅毅] 區域內的方塊將被潤濕為耕地,且區域內的種子將被就近種植。 +ritual.BloodMagic.jumpRitual.jumpRange.info=(跳躍) 在這個區域內的實體將躍向高空。 +ritual.BloodMagic.wellOfSufferingRitual.altar.info=(祭壇) 規定儀式檢測血之祭壇的區域。該項修改為添加或撤銷一個坐標。 +ritual.BloodMagic.wellOfSufferingRitual.damage.info=(傷害) 規定儀式傷害生物的區域。該區域內所有生物(除了玩家)將持續受到傷害。 +ritual.BloodMagic.featheredKnifeRitual.altar.info=(祭壇) 規定儀式檢測血之祭壇的區域。該項修改為添加或撤銷一個坐標。 +ritual.BloodMagic.featheredKnifeRitual.damage.info=(傷害) 規定儀式傷害玩家的區域。該區域內的玩家將持續受到傷害直至設定的生命值下限。 +ritual.BloodMagic.regenerationRitual.heal.info=(治癒) 該區域內的生物將獲得生命恢復buff。 +ritual.BloodMagic.regenerationRitual.vampire.info=(血蛭) 汲取區域內怪物的生命來治癒玩家 +ritual.BloodMagic.harvestRitual.harvestRange.info=(收割) 該區域內的植物將被收割。 +ritual.BloodMagic.magneticRitual.placementRange.info=(放置) 儀式將把獲取的礦石放置於該區域內。 +ritual.BloodMagic.crushingRitual.crushingRange.info=(挖掘) 該區域的方塊將被破壞。 +ritual.BloodMagic.crushingRitual.chest.info=(箱子) 箱子位置,儀式將把破壞的方塊放入其中。 +ritual.BloodMagic.fullStomachRitual.fillRange.info=(餵食) 儀式將會餵食該區域內的玩家。 +ritual.BloodMagic.fullStomachRitual.chest.info=(箱子) 箱子位置, 儀式將提取其中的食物來餵食區域內的玩家。 +ritual.BloodMagic.interdictionRitual.interdictionRange.info=(推離) 儀式推離生物的區域。無論該區域位於何處,所有生物將被推離於主儀式石。 +ritual.BloodMagic.containmentRitual.containmentRange.info=(牽引) 儀式牽引生物的區域。無論該區域位於何處,所有生物將被牽引向主儀式石。 +ritual.BloodMagic.speedRitual.sanicRange.info=(速度) 所有位於該區域內的實體,將被拋射向儀式擺相成的箭頭方向。 +ritual.BloodMagic.suppressionRitual.suppressionRange.info=(抑液) 該區域內所有液體將被儀式抑制。 +ritual.BloodMagic.expulsionRitual.expulsionRange.info=(驅逐) +ritual.BloodMagic.zephyrRitual.zephyrRange.info=(拾取) 該區域內的物品將被拾取儲入所連接箱子。 +ritual.BloodMagic.zephyrRitual.chest.info=(箱子) 箱子位置, 儀式將把拾取的物品放入其中。 +ritual.BloodMagic.animalGrowthRitual.growing.info=(成長) 該區域內的動物將成長得更快。 +ritual.BloodMagic.animalGrowthRitual.chest.info=(箱子) 用於存放餵養動物物品的箱子 +ritual.BloodMagic.forsakenSoulRitual.crystal.info=(晶體) 當有生物因儀式死亡時,該區域內的晶簇生長速度將加快。 +ritual.BloodMagic.forsakenSoulRitual.damage.info=(傷害) 該區域內的生物將緩慢的收到傷害,當死亡時晶簇將生長。 +ritual.BloodMagic.crystalHarvestRitual.crystal.info=(晶體) 晶簇將被破壞成僅留單晶的晶簇,被破壞的晶體將掉落於世界。 + +ritual.BloodMagic.placerRitual.placerRange.info=(放置) 儀式將放置方塊的區域。 +ritual.BloodMagic.placerRitual.chest.info=(箱子) 箱子位置, 儀式將提取其中的方塊放置於世界中。 +ritual.BloodMagic.fellingRitual.fellingRange.info=(砍伐) 儀式將搜尋原木和樹葉並進行砍伐的區域。 +ritual.BloodMagic.fellingRitual.chest.info=(箱子) 箱子位置, 儀式將把掉落物放入其中。 +ritual.BloodMagic.pumpRitual.pumpRange.info=(引水) 儀式於世界中獲取液體的區域。 + +ritual.BloodMagic.downgradeRitual.dialogue.bow.1=那麼,少年,你渴望力量麼...? +ritual.BloodMagic.downgradeRitual.dialogue.bow.100=當然了,沒有不需要代價的交易...我也不會輕易地給予你力量,而不求任何回報 +ritual.BloodMagic.downgradeRitual.dialogue.bow.300=那麼就獻祭自身,拋棄自我,放棄那百步穿楊的精準。記住,箭矢將不再是你獲勝的憑依 +ritual.BloodMagic.downgradeRitual.dialogue.bow.500=我會幫你解開盔甲的封印以作回報,這樣它們就能進一步地強化下去...而你所要做的就是在這儀式前叩拜 +ritual.BloodMagic.downgradeRitual.dialogue.quenched.1=霍霍霍...你好,凡人,從你眼神中我看到了渴望,對力量的渴望 +ritual.BloodMagic.downgradeRitual.dialogue.quenched.100=謹記!當杯子裝滿時,想要裝下更多就必須先將她倒空 +ritual.BloodMagic.downgradeRitual.dialogue.quenched.300=那麼,我們做個交易吧:忘卻那杜康的美味,我將給予你變得更有潛力的機會。相信我,你完全不需要考慮這麼做是否值得... +ritual.BloodMagic.downgradeRitual.dialogue.quenched.500=跪下吧!凡人。飲下這杯酒。這或許會是你此生最後一次 +ritual.BloodMagic.downgradeRitual.dialogue.dulledBlade.1=嗯...你究竟想要得到什麼? +ritual.BloodMagic.downgradeRitual.dialogue.dulledBlade.100=想要超脫凡人的力量?我無法滿足你的要求——不過,我這裡有另外一項交易... +ritual.BloodMagic.downgradeRitual.dialogue.dulledBlade.300=我可以幫你改良你的盔甲,使它可以獲得更多的強化機會。但是,作為交換,你將失去自身戰鬥的能力 +ritual.BloodMagic.downgradeRitual.dialogue.dulledBlade.500=如果願意,就別再揮動手中的劍刃,它將永遠失去昨日的榮耀 +ritual.BloodMagic.downgradeRitual.dialogue.dulledBlade.700=那麼,你的選擇是什麼,是跪在儀式前,還是繼續揮動手中的劍刃? +ritual.BloodMagic.downgradeRitual.dialogue.slowHeal.1=當心你腳下的大地,凡人! +ritual.BloodMagic.downgradeRitual.dialogue.slowHeal.100=和我的夥伴不同,我只有殘酷的交易。如果你想成為魔法師,那麼就用你的身體來交換 +ritual.BloodMagic.downgradeRitual.dialogue.slowHeal.300=傷口總會癒合。如果答應了我的條件,那麼你身上的傷口將更難癒合,直到戰鬥的烙印或作無形的瘟疫 +ritual.BloodMagic.downgradeRitual.dialogue.slowHeal.500=好了,趕緊考慮吧。你或許會後悔,因為哪怕你的杯子空了,它也很難在被填滿... # Chat -chat.BloodMagic.altarMaker.setTier=Set Tier to: %d -chat.BloodMagic.altarMaker.building=Building a Tier %d Altar -chat.BloodMagic.altarMaker.destroy=Destroyed a Tier %d Altar -chat.BloodMagic.altarMaker.creativeOnly=This is a creative only item. +chat.BloodMagic.altarMaker.setTier=層級設置:%d +chat.BloodMagic.altarMaker.building=鋪設一個 %d 層祭壇 +chat.BloodMagic.altarMaker.destroy=消除一個 %d 層祭壇 +chat.BloodMagic.altarMaker.creativeOnly=該物品僅限創造模式。 -chat.BloodMagic.damageSource=%s的靈魂變得過於虛弱 +chat.BloodMagic.damageSource=%s 的靈魂開始變得虛弱 -chat.BloodMagic.ritual.weak=你感到一股力量,但是過於微弱,不足以驅動儀式。 -chat.BloodMagic.ritual.prevent=你受到儀式劇烈的抗拒! -chat.BloodMagic.ritual.activate=能量快速的在儀式中流竄! -chat.BloodMagic.ritual.notValid=你感覺這些符文的配置似乎不大正確… +chat.BloodMagic.ritual.weak=你感到有股力量,但不足以完成這個儀式。 +chat.BloodMagic.ritual.prevent=儀式在積極的抵抗你! +chat.BloodMagic.ritual.activate=一股能量流經這個儀式! +chat.BloodMagic.ritual.notValid=這些儀式石似乎有些擺放不得當... -chat.BloodMagic.livingArmour.upgrade.poisonRemove=你的狀態已好轉! -chat.BloodMagic.livingArmour.upgrade.grimReaper=&6一股陰暗的力量將你從死亡邊緣拉回! -chat.BloodMagic.livingArmour.newUpgrade=&4取得升級! +chat.BloodMagic.livingArmour.upgrade.poisonRemove=你感到已經好多了! +chat.BloodMagic.livingArmour.upgrade.fireRemove=&6火焰抵抗隨一股清涼感附著於你。 +chat.BloodMagic.livingArmour.upgrade.grimReaper=&6朦朧中一股能量使你脫離死亡邊緣! +chat.BloodMagic.livingArmour.newUpgrade=&4強化完成! + +chat.BloodMagic.routing.remove=移出記錄位置 +chat.BloodMagic.routing.set=設置節點位置 +chat.BloodMagic.routing.link.master=連接到主節點! +chat.BloodMagic.routing.link=節點連接完成 + +chat.BloodMagic.altar.comp.glowstone=一個螢石塊 +chat.BloodMagic.altar.comp.bloodstone=一個大血石磚 +chat.BloodMagic.altar.comp.beacon=一個信標 +chat.BloodMagic.altar.comp.bloodrune=一個氣血符文 +chat.BloodMagic.altar.comp.crystal=一個無效物品 +chat.BloodMagic.altar.comp.notair=一個實心方塊 + +chat.BloodMagic.altar.nextTier=下一層級的血之祭壇缺失%s,對應坐標為 %s 。 + +chat.BloodMagic.mimic.potionSet=藥劑陷阱已設置。 +chat.BloodMagic.mimic.potionRemove=藥劑陷阱已移除。 +chat.BloodMagic.mimic.potionInterval.up=藥劑時間間隔已增加至:%d 刻。 +chat.BloodMagic.mimic.potionInterval.down=藥劑時間間隔已減少至:%d 刻。 +chat.BloodMagic.mimic.detectRadius.up=玩家檢測半徑已增加至:%d 格方塊。 +chat.BloodMagic.mimic.detectRadius.down=玩家檢測半徑已減少至:%d 格方塊。 +chat.BloodMagic.mimic.potionSpawnRadius.up=藥劑生成半徑已增加至:%d 格方塊。 +chat.BloodMagic.mimic.potionSpawnRadius.down=藥劑生成半徑已減少至:%d 格方塊。 + +# entity +entity.BloodMagic.SentientSpecter.name=感知之靈 +entity.BloodMagic.Mimic.name=擬態 + +# Commands +commands.error.arg.invalid=無效參數 +commands.error.arg.missing=參數不足 +commands.error.arg.player.missing=你必須指定一個玩家來執行該命令。 +commands.error.404=命令未找到! +commands.error.unknown=未知的命令! +commands.error.perm=你沒有使用該命令的權限。 + +commands.success=成功執行 + +commands.format.help=%s - %s +commands.format.error=%s - %s + +commands.help.usage=/bloodmagic help +commands.help.help=使用"/bloodmagic help"命令顯示指令列表。 + +commands.network.usage=/bloodmagic network [吸取(syphon)|添加(add)|查看(get)|填充(fill)|填滿(cap)] <玩家> [數量] +commands.network.help=靈魂網絡實用工具 +commands.network.syphon.help=從指定玩家的靈魂網絡中移出指定的LP值。 +commands.network.syphon.success=成功從 %s 吸取出 %dLP。 +commands.network.add.help=添加指定的LP值到指定玩家的靈魂網絡中。服從標準的LP增加規則。 +commands.network.add.success=成功添加 %dLP 到 %s 的靈魂網絡。 +commands.network.set.help=將指定玩家的LP設置為所給數值。 +commands.network.set.success=成功將 %s 靈魂網絡中的LP設置為 %d。 +commands.network.get.help=返還指定玩家靈魂網絡中的LP值。 +commands.network.fill.help=將指定玩家的LP填充為 %d。 +commands.network.fill.success=成功填充 %s 的靈魂網絡。 +commands.network.cap.help=填充指定玩家的靈魂網絡至其所持有的最高階氣血寶珠容量的最大值。 +commands.network.cap.success=成功填滿 %s 的靈魂網絡。 + +commands.bind.usage=/bind <玩家> +commands.bind.help=用於設置/解除對手持物品的綁定情況。 +commands.bind.success=物品成功綁定! +commands.bind.remove.success=解除綁定成功 + +commands.orb.usage=/bloodmagic orb [設置(set)|查看(get)] <玩家> [等級] +commands.orb.help=用於設置或查看玩家的最高血寶珠等級。 +commands.bind.usage=/bind <玩家> +commands.bind.success=物品成功綁定! +commands.bind.failed.noPlayer=沒有指定玩家 +commands.bind.failed.alreadyBound=物品已經被綁定;使用 /unbind 來解除綁定 +commands.bind.failed.notBindable=物品無法被綁定 +commands.unbind.usage=/unbind +commands.unbind.success=物品成功解除綁定! +commands.unbind.failed.notBindable=物品無法解除綁定 +commands.soulnetwork.usage=/soulnetwork <玩家> <添加(add)|減去(subtract)|填滿(fill)|清空(empty)|查看(get)> [數量] +commands.soulnetwork.add.success=成功添加 %dLP 到 %s 的靈魂網絡! +commands.soulnetwork.subtract.success=成功從 %s 的靈魂網絡中減去 %dLP! +commands.soulnetwork.fill.success=成功填滿 %s 的靈魂網絡! +commands.soulnetwork.empty.success=成功清空 %s 的靈魂網絡! +commands.soulnetwork.get.success=%s 的靈魂網絡中有 %dLP! +commands.soulnetwork.noPlayer=沒有指定玩家 +commands.soulnetwork.noCommand=這不符命令規定 +commands.soulnetwork.notACommand=這不是有效的命令 +commands.soulnetwork.fillMax.success=成功將 %s 的靈魂網絡填滿至其寶珠的最大值! +commands.soulnetwork.create.success=創建 %s 的靈魂網絡成功(寶珠等級:%d) + +# GUI +tile.BloodMagic.inputNode.name=輸入節點 +tile.BloodMagic.outputNode.name=輸出節點 + +# Keybinds +BloodMagic.keybind.open_holding=打開集持印記 +BloodMagic.keybind.cycle_holding_pos=循環選擇印記 (+) +BloodMagic.keybind.cycle_holding_neg=循環選擇印記 (-) # JustEnoughItems -jei.BloodMagic.recipe.altar=血祭壇 -jei.BloodMagic.recipe.binding=Alchemy Array (Binding) +jei.BloodMagic.recipe.altar=血之祭壇 +jei.BloodMagic.recipe.binding=煉金矩陣 (綁定) jei.BloodMagic.recipe.alchemyArrayCrafting=煉金矩陣 -jei.BloodMagic.recipe.soulForge=獄炎融爐 -jei.BloodMagic.recipe.requiredLP=LP: %,d -jei.BloodMagic.recipe.requiredTier=Tier: %d -jei.BloodMagic.recipe.consumptionRate=Consumption: %,d LP/t -jei.BloodMagic.recipe.drainRate=Drain: %,d LP/t -jei.BloodMagic.recipe.minimumSouls=Minimum: %1$,.2f Will -jei.BloodMagic.recipe.soulsDrained=Drained: %1$,.2f Will +jei.BloodMagic.recipe.soulForge=獄火熔爐 +jei.BloodMagic.recipe.alchemyTable=煉金術桌 +jei.BloodMagic.recipe.armourDowngrade=祭品 (儀式:沉重靈魂的懺悔) +jei.BloodMagic.recipe.requiredLP=LP: %d +jei.BloodMagic.recipe.requiredTier=層級:%d +jei.BloodMagic.recipe.consumptionRate=消耗率:%d LP/t +jei.BloodMagic.recipe.drainRate=消耗率:%d LP/t +jei.BloodMagic.recipe.minimumSouls=最小值:%1$,.2f Will +jei.BloodMagic.recipe.soulsDrained=消耗:%1$,.2f Will +jei.BloodMagic.recipe.lpDrained=消耗:%d LP +jei.BloodMagic.recipe.ticksRequired=時間:%d 刻 -jei.BloodMagic.desc.altarBuilder=A creative-only item for use in debugging and testing.\n\nShift + Right click to change the tier to build. Right click an Altar to initiate the build.\n\nBreak an Altar while holding to dismantle it. -jei.BloodMagic.desc.demonicWill=惡魔憑依在生物身上而產生的印記。\n\n透過持感知武器殺死敵人獲得。或以簡易套索擲向敵人,使其顯現出白光後殺死以取得。 +jei.BloodMagic.desc.altarBuilder=該物品僅限創造模式,用於調整測試。\n\nShift+右鍵 以改變層級。右鍵祭壇開始搭建。\n\n手持破壞祭壇時將全部移除。 +jei.BloodMagic.desc.demonicWill=附身於生物的惡魔意志之體現。\n\n可以通過用感知武器殺死生物掉落,或是對著生物拋擲原始投網。當它出現白色顆粒時殺了它。 # WAILA -waila.BloodMagic.sneak=&o潛行展開詳細資訊 -waila.BloodMagic.array.reagent=Reagent: %s -waila.BloodMagic.array.catalyst=Catalyst: %s -option.BloodMagic.bypassSneak=Bypass Sneak -option.BloodMagic.bloodAltar=血祭壇 +waila.BloodMagic.sneak=&o潛行查看信息 +waila.BloodMagic.array.reagent=試劑:%s +waila.BloodMagic.array.catalyst=石板:%s +option.BloodMagic.bypassSneak=潛行 +option.BloodMagic.bloodAltar=血之祭壇 option.BloodMagic.ritualController=儀式石 -option.BloodMagic.teleposer=轉送器 +option.BloodMagic.teleposer=傳送器 option.BloodMagic.array=煉金矩陣 # Thaumcraft tc.research_category.BLOODMAGIC=血儀術 + # Thaumcraft Research bloodmagic.research_name.BLOODMAGIC=血魔法 bloodmagic.research_text.BLOODMAGIC=血儀術 -bloodmagic.research_page.BLOODMAGIC.1=血魔法的領域一直令人感到孤僻, 而血術師的"獨門"祕法更是出名的悖離人群,常使人感到瘋狂。 然而自我犧牲與生命精華的力量甚至能擁有平凡血術師所難以估計的強大力量, 顯然秘術使可以把它作為某些用途! +bloodmagic.research_page.BLOODMAGIC.1=血魔法的領域一直令人感到孤僻,而血術師的"獨門"祕法更是出名的悖離人群,常使人感到瘋狂。 然而自我犧牲與生命精華的力量甚至能擁有平凡血術師所難以估計的強大力量,顯然秘術使可以把它作為某些用途! + +# Buttons +button.bloodmagic.tooltip.fill=填充網絡 diff --git a/src/main/resources/assets/bloodmagicguide/lang/zh_TW.lang b/src/main/resources/assets/bloodmagicguide/lang/zh_TW.lang new file mode 100644 index 00000000..d568239a --- /dev/null +++ b/src/main/resources/assets/bloodmagicguide/lang/zh_TW.lang @@ -0,0 +1,258 @@ +# Book Information +guide.BloodMagic.title=血染知書 +guide.BloodMagic.display=血染知書 +guide.BloodMagic.author=血魔法 +guide.BloodMagic.welcome=血魔法 + +# Page Information +guide.BloodMagic.page.bloodAltar=血之祭壇合成 +guide.BloodMagic.page.soulForge=獄火熔爐合成 +guide.BloodMagic.page.tier=層級:%d +guide.BloodMagic.page.lp=LP: %d +guide.BloodMagic.page.minimumWill=啟動所需意志:%f +guide.BloodMagic.page.drainedWill=合成消耗意志:%f +guide.BloodMagic.shapelessOrb=無序寶珠合成 +guide.BloodMagic.shapedOrb=有序寶珠合成 +guide.BloodMagic.page.alchemyArray=煉金法陣 + + +# Categories +guide.BloodMagic.category.architect=締造者 +guide.BloodMagic.category.ritual=儀式大師 +guide.BloodMagic.category.demon=惡魔使者 +guide.BloodMagic.category.spell=戰法師 +guide.BloodMagic.category.alchemy=煉金術士 + +# Ritual Master Entries +guide.BloodMagic.entry.ritual.intro=序 +guide.BloodMagic.entry.ritual.basics=儀式入門 +guide.BloodMagic.entry.ritual.ritualStone=儀式石 +guide.BloodMagic.entry.ritual.masterRitualStone=主儀式石 +guide.BloodMagic.entry.ritual.activationCrystal=驅動水晶 +guide.BloodMagic.entry.ritual.diviner=儀式推測杖 +guide.BloodMagic.entry.ritual.fullSpring=湧泉儀式 +guide.BloodMagic.entry.ritual.lava=下界夜曲 +guide.BloodMagic.entry.ritual.greenGrove=綠叢儀式 +guide.BloodMagic.entry.ritual.magnetism=磁力儀式 +guide.BloodMagic.entry.ritual.crusher=挖掘儀式 +guide.BloodMagic.entry.ritual.highJump=高跳儀式 +guide.BloodMagic.entry.ritual.speed=速移儀式 +guide.BloodMagic.entry.ritual.wellOfSuffering=苦難之井 +guide.BloodMagic.entry.ritual.featheredKnife=羽刀儀式 +guide.BloodMagic.entry.ritual.regen=重生儀式 +guide.BloodMagic.entry.ritual.harvest=滿月收割 +guide.BloodMagic.entry.ritual.interdiction=禁止儀式 +guide.BloodMagic.entry.ritual.containment=牽制儀式 +guide.BloodMagic.entry.ritual.suppression=抑液儀式 +guide.BloodMagic.entry.ritual.expulsion=驅逐氛場 +guide.BloodMagic.entry.ritual.zephyr=和風之喚 +guide.BloodMagic.entry.ritual.laying=鋪設儀式 +guide.BloodMagic.entry.ritual.timberman=伐林儀式 +guide.BloodMagic.entry.ritual.meteor=墜星標位 +guide.BloodMagic.entry.ritual.downgrade=沉重靈魂的懺悔 + +# Ritual Master Entry Text +guide.BloodMagic.entry.ritual.intro.info=晚上好,我就是馬格斯·阿爾卡納。在外人看來我有很多身份:盜賊、自警團、巫師、戰士、吟遊詩人、甚至政治家。而現在,只有少數人清楚地知道我的頭銜——只需提及一下,那臆想中的殘暴圖景就可以令人聞風喪膽——縱使這個說法有一半是誤導,但這個說法有一半的確是真相。誠然,我說的便是作為職業存在的血術士。我的朋友一般都直呼我的名,而我的敵人一般稱我為儀式大師。\n\t/cut現在呢,我的學生們,為了讓我把畢生所學傳播給下一代有志者們,纏在我身邊已有數月了。我一直在堅守秘密,但提比略對此的評論更為精闢:「儘管你自己還看不到你自己的潛力,但不論是在什麼魔法領域中,那些已臻化境的大師們的故事總是對下一代人有好處的。然而,重現奇跡的細節其實並沒有那麼重要。若是沒有對魔法能量的絕對自信,即便是金沙,也不過是一堆硫磺粉而已。」當然你可以認為/cut他已經觸碰到了煉金術的真諦,但他畢竟是我的第一個學生,我有時候也會認真思考他的想法。\n\t所以呢,那些仍在苦苦尋找前進的道路的年輕血術士們,且聽我一言:血魔法的領域之廣闊不是常人可以理解的,若不加思考地前進,很快你就會遇到瓶頸。因此,請務必時常翻閱這本書——這本書上有我的魔法,只要我寫下來新的內容,你們就能立刻看到。\n\t/cut諸位請坐。不要緊張,試著去感受老一輩血術士的教誨。或許會比你討價還價求到的東西還要有用。 +guide.BloodMagic.entry.ritual.basics.info=現在的魔法儀式已經和幾百年前大不一樣了。曾幾何時,人們用粉末在地上組成魔法陣,並在旁邊起舞,直到獲得想要的東西。我甚至記得有一位從她自家花園中收集魔法能量的隱士。我一直都在嘲笑這種魔法,直到她把她的貓頭鷹丟過來監視我。\n\t而血魔法師的儀式呢,需要用到一種帶特殊標記的石頭,並且需要按指定方式精確擺放,方能轉化注入的能量。有一/cut天,我的學徒提比略在他的新房間裡翻找我過去的儀式資料。那裡有一罐從未開封過的液態Etherium(我好像說過很多次要把它取回來但每次說完就忘了),以及一個透過鏡片看時總像是在說「星期二」的水晶球。當有一個標有「符文塵埃」的箱子被打翻後,一顆小小的紅色寶石滾了出來,滾到了提比略的腳下。霎那間,它發出的明亮的紅寶石的光芒和他抱著的箱子裡的粉末發生了反應。\n\t/cut——自然地,瞬間爆炸。提比略不小心釋放出的沒有聚焦的能量驅動了符文塵埃和周圍的儀式石,在沒有容納能量的裝置的情況下,它們只能向外擴散。在幾天的治療後,提比略和我又開始了工作。\n\t在經歷了數個不眠之夜,和高效的咖啡因的幫助下(啊,感謝Player先生的咖啡,感謝他給我帶來的更加精神的明天!),我們終於找出了所有儀式所需的關鍵材料。\n\t/cut根據實驗,我們需要至少四種材料:按照一定樣式擺放的儀式石;若干種不同的墨水,用於刻畫儀式細節;置於儀式中央的特殊儀式石,用於傳遞能量;以及用於驅動儀式的水晶。我覺得有必要將各個儀式全部詳細地解說一遍。 +guide.BloodMagic.entry.ritual.ritualStone.info.1=儀式石便是魔法能量的容器:根據石頭的不同,可將能量塑造為各種形狀,或導向不同的地方。儀式石分五種:空白(沒有任何銘文)、水、火、風和土。每個儀式都會用到若幹不同種類的儀式石,每個儀式所需的佈局也不盡相同。 +guide.BloodMagic.entry.ritual.ritualStone.info.2=為儀式石畫上正確的銘文需要一些工具。我早已研究出一種快速建造正確儀式的辦法,但如果有人想自己動手搭建的話還是可以用這些工具的。手持合適的工具右擊儀式石便可為其畫上銘文。一開始你只能製作出其中四種工具,隨著修行的深入你會得到更高級的工具的製作方法的。 +guide.BloodMagic.entry.ritual.masterRitualStone.info=和大部分魔法一樣,儀式需要引導,否則其力量會變得無法控制,或者儀式本身會徹底失效。有鑒於此,儀式需要由主儀式石控制(我的筆記中通常會以縮寫"MRS"表記,但也只能這樣寫寫而已。試想:你喊一聲「麻煩一下,我需要更多的MRS」...然後尷尬症就犯了。)主儀式石會從其主人的靈魂網絡中抽取能量,並擴散至每一塊儀式石上,從而啟動儀式。\n\t把靈魂網絡和一塊大石頭綁一塊有點麻煩。我曾經成功/cut過一次:在主儀式石頂上盤腿打坐,將能量聚集於石頭上並盡力將靈魂網絡和儀式連在一起。雖說成功持續了幾分鐘,但我的褲子卻因為水在儀式石上冷凝而濕透了。於是我得到了一個教訓:不要試圖在實驗中進行任何冥想。 +guide.BloodMagic.entry.ritual.activationCrystal.info.1=於是我們停止了冥想,轉而去研究那顆從箱子裡滾出的紅色寶石。提比略確信它有「將我們所在的肉體世界和主宰靈魂網絡的精神世界連接在一起」的能力。我一直在想到底要不要收他作學徒,但我的確能看出他對於那些晦澀難懂的魔法的理解。啊,我想我有必要翻譯一下,他想表達的是:我們可以用這水晶將靈魂網絡和主儀式石連在一起,以給儀式提供能量。 +guide.BloodMagic.entry.ritual.activationCrystal.info.2=於是我們得到了虛弱驅動水晶,以及複製它的辦法。它的原料是另一種可以與靈魂網絡鏈接的水晶:熔岩水晶。只需要迅速在上面刻好必須的圖案,血之祭壇就可以將它變成驅動水晶。自然地,它也需要和使用者的靈魂網絡綁定。在儀式正確擺放後,只需手持熔岩水晶右擊主儀式石就可以開始了。當然,這需要有足夠多的LP作為支撐。如果沒有足夠多的LP,儀式不會發動,也不會因此消耗LP。 +guide.BloodMagic.entry.ritual.diviner.info.1=在不斷發現新的儀式過程中,我愈發感到建造儀式的枯燥。這也是為什麼我製作出這樣一個工具的原因——這樣所有人都可以通過簡單的手勢和動作來快速部署儀式了。按時間順序來說這個應該放在諸儀式的後面來講,但我決定提到前面,因為我覺得先學習這個的使用會更好。沒人會想在臨陣時才發現儀式石沒帶夠,抑或原本只是想變出一瓶水結果卻召喚了隕石吧。 +guide.BloodMagic.entry.ritual.diviner.info.2=儀式推測杖的本質是本儀式的百科全書。你可以通過一些操作(按住Shift左擊或右擊)來在不同儀式間切換,仔細看的話你還會得知一些基礎信息。在你帶著儀式石的時候,手持推測杖右擊主儀式石,便可在正確位置放置一塊儀式石。只需要不斷右擊就可以完成儀式了! +guide.BloodMagic.entry.ritual.fullSpring.info=幾年前,有一個旅行商人路過我附近的一個村子,並向眾人兜售他的各種小東西。那個村子大概有很長時間沒下雨了,莊稼也快旱死了,商人見此便掏出了一個鑲有藍色寶石的銀製護符。「看這個!」,他的聲音中帶著幾分激動,「這個東西可以讓河流永不乾涸!我可以用煉金術從空氣中變出水!」\n\t然而村民們覺得那寶石好像只是普通的藍寶石而已。等他們反應過來上當受騙時那/cut個商人已經消失得無影無蹤了。我起初並不打算干涉此事——因為他們似乎並不喜歡我的魔法——但這次我破了個例。在和「煉金術士」進行了愉快的交流後,我在灌溉渠旁打坐了數小時。我成功通過冷卻空氣中水蒸氣的辦法給莊稼們帶來了足夠多的水——足夠撐到下一個旱季。自然這個方法並不靠譜,因為我自己已經被打坐給搾乾了,不得不靠自己造出來的水來重新調整。\n\t/cut我再次想起了這個事,並按照同樣的方法製作了湧泉儀式。給儀式灌注少量能量,儀式便可將附近空氣中的水分聚集起來,並在主儀式石上方產生一個水源。驅動儀式需要的能量並不多,維持其運轉的能量更是可以忽略不計。\n\t水的範圍和放置的位置都是可以用儀式調整鉗調整的,所以那些對美觀表示擔憂的魔法師們不要擔心了。這便是魔法的力量! +guide.BloodMagic.entry.ritual.lava.info=熔岩——恐怕是最普通的能量來源了吧。我平日的研究中很少使用熔岩,因為它其實並非是普通的鐵桶就能裝起來的東西!\n\t有一天,當地的一名鐵匠找到我,並向我打聽附近的能量源的事情。他說他們最近新造了一個大傢伙,需要大量能量來運轉。我回答道,「有倒是有,但它們並非無主之物。」我決定去親眼看一下這個所謂的大傢伙到底是何方神聖。\n\t/cut那是...一個至少五公尺(5米)見方的冶煉爐,上面還連著幾個空空如也的儲罐。雖然我不知道這玩意兒到底是怎麼工作的,但我的直覺告訴我,熔岩的熱量用在這裡正合適——電力是絕對不行的,絕對不行。除此之外,我只知道這不是沉浸工業公司的產品。\n\t在經過短暫的討價還價後,鐵匠付了一筆費用,我便開始叫他們稍微讓開一下,以便準備搭建儀式。按我的想法,我將/cut四塊火之儀式石和主儀式石擺成十字,腦海中不斷想像整個過程的同時,我用力將驅動水晶推向了主儀式石。理論上這個過程應該十分簡單:儀式不斷地將大地深處的石頭挖出來,在巨大的壓力下熔融成熔岩。這樣製成的熔岩可以直接從儀式石中提取出來,然後儀式本身還可以自維持這種類似擠壓的過程。\n\t然而這只是理論。說起來容易做起來難:當時我使用的簡/cut易網絡完全不適合拿來為這個儀式供應魔力,不僅擠壓熔岩需要的壓力巨大(需要20000LP啟動儀式),抽取熔岩的開支也不小(每產生一格熔岩需要500LP)。\n\t我搖搖晃晃地走出了鐵匠們的基地,臉上帶著一絲欣慰。那些儲罐裡的熔岩足夠鐵匠們用到他們找到新的岩漿來源了。當然,我也沒忘記帶走我的儀式石。\n\t---------------\n\t/cut在沒有外力影響下,這個儀式會不斷嘗試在主儀式石上方生成一格熔岩,並消耗500LP。一般情況下,熔岩生成的範圍可以擴展到儀式本身三格開外。\n\t在原生意志的影響下,LP消耗和大氣中意志的濃度成反比,同時會不斷消耗意志,意志的消耗速度與節約的LP數量成正比。使用原生意志還可以讓儀式自動將熔岩放置進各式液體容器中,速度大抵保持不變。\n\t/cut腐蝕意志會反轉火焰免疫的效果。換言之,那些平時對火焰免疫的生物,在這個儀式的影響下會失去火焰免疫的屬性;而那些無法抵抗火焰的生物則會對火焰免疫。\n\t復仇意志會令此儀式釋放出一種揮發性氣體,這種氣體會影響任何不是玩家的生物。在這種氣體的作用範圍內的生物都會獲得「緩燃引線」的效果。當這個效果的倒計時歸零時,這個生物會爆炸,強行將生物趕回空氣當中。\n\t/cut破壞意志可以強化這個儀式的各種屬性。大氣中這種意志的含量越多,儀式能放置的岩漿源數量也就越多。更喜人的是這個儀式並不會消耗破壞意志。然而,當大氣中的意志數量下降,而且儀式的最大範圍小於你設定的範圍時,儀式就會停止工作,必須進行手動修復。\n\t最後,堅毅意志會令儀式範圍內的玩家獲得火焰抗性,時效和空氣中意志的濃度成正比。另外有一點要注意,腐蝕意/cut志的反轉效果會抵消掉堅毅意志所帶來的火焰抗性。 +guide.BloodMagic.entry.ritual.greenGrove.info=上星期我開始為提比略講授跨領域的魔法。除了血之魔法外,我的每個學徒都學過一些其它形式的魔法。其實,學什麼魔法都沒有關係,只要它不浪費資源就好——我曾經使用過來自遙遠的東方的Ars部落的魔法,但是因為Etherium之源幾乎被搾乾了,所以這個計劃也就夭折了。\n\t提比略決定學習秘術學,一門利用世界本身的魔法來創造屬於自己的魔法的魔法。它/cut正好和血之魔法相抗衡——後者使用的是生命本身具有的魔法。為了解釋清楚,我決定用作物生長為例子,展示兩門魔法之間的差別。\n\t「在秘術學中,魔法師會使用以Herba源質煉成的生長催化劑,」我一邊這樣說著,一邊指著教室牆上掛著的一幅源質合成圖;誠然這節課其實只有提比略一個學生,但人總還是需要點樂趣的,「一小股靈氣和源質混合在一起可以刺激植物的/cut光合作用,從而令植物吸收更多的光能,以此加速其生長。然而,這需要保證作物生長在肥沃的土地上,否則作物最終只能枯萎死亡。「\n\t然後我找來了土儀式石和水儀式石各四塊,擺出一個圓形,並在圓心處放置主儀式石。「血魔法與之正好相反,」我一邊說著,一邊驅動了主儀式石,並在上面蓋上了一層泥土。「你可以用你自己的生命力,或者別的動物的生命力,來加速作/cut物的生長,從而節約一般肥料的使用。本質上來講,這個儀式會不斷給予植物養分,從而使其養分保持在一個較高水平。」\n\t我向土中撒了幾粒種子,小心翼翼地用土蓋好,然後從貼身法袍中掏出一個水瓶,拔開瓶塞然後將水灑在了泥土上。「這個過程不需要陽光,因為它用到了另一種形式的能量。儘管如此,陽光還是很有用的——畢竟作物一開始不是這樣生/cut長的嘛!」\n\t在我解釋的時候,有幾點綠色的東西就已經冒出了土堆。每有一片新葉長出,我都會感受到一絲壓力,雖然不大,但會不斷積累。下課後,我開始清理實驗用的土堆,然後決定去村子裡走一圈:我現在有幾斗小麥要賣。\n\t---------------\n\t綠叢儀式,正如其名,以血術士之血為養料,加速儀式附近之植物,諸如小麥、胡蘿蔔之類,/cut的生長。默認,儀式只在3x3範圍內尋找合適的目標,每秒大概只有30%%的概率成功催生。用儀式調整鉗調整後可尋找5x5範圍內的至多81棵作物。\n\t另外,惡魔意志對這個儀式也有效果。原生意志會加快其工作速度,效果取決於濃度,但每次催生會多消耗0.05點意志。\n\t若輔以復仇意志,儀式依舊會在每次催生時多消耗0.05點意志,但會增加催生成功的概率。/cut之前提到默認概率是30%%,但若是你有100點復仇意志,這個概率會上升至80%%。\n\t破壞意志可以提高儀式的工作範圍,這意味著你的一個儀式可以覆蓋到更多的作物上。而且這個儀式不會消耗破壞意志!然而,若是意志的濃度下降,而你設定的範圍比儀式最大的工作範圍還大,那儀式就會停止工作,需要手動修復。\n\t/cut堅毅意志會讓儀式在催熟作物的同時保證耕地已經過翻整且保持濕潤。另外,若是儀式的工作範圍內有掉在地上的種子,堅毅意志會讓儀式自動用那些種子來補種。自然地,這個效果會消耗意志,但消耗速度是固定的。\n\t腐蝕意志的效果則完全反轉了這個儀式的工作原理——植物會在這種意志的影響下轉而去主動吸血,就像水蛭那樣。具體來說:每一刻,若植物附/cut近若有怪物,那麼植物和怪物都會受到傷害,且兩者傷害成正比。事實上直接用怪物當作植物的養料是有效的!另外,每個怪物上每有10秒中的負面效果,就會消耗0.2點腐蝕意志。 +guide.BloodMagic.entry.ritual.magnetism.info=磁力儀式可謂是採石場必備。這個儀式會製造出一旋轉的磁場,將深埋地下的豐富礦藏吸到地面上。這個儀式並不會吸走石頭,所以地面上也不會因此出現大洞,前提是地下並非全是礦石。這個儀式每2秒就會試著吸一個礦石,每成功吸取一個礦石便消耗50LP。\n\t/cut默認,這個儀式的工作範圍是以主儀式石為中心的7x7正方形區域(即半徑為3)。目前,意志還不能影響這個儀式的工作,所以你只能通過在主儀式石正下方放置某種價值高昂的方塊來提高其工作範圍。一個鐵塊可以讓半徑增加到7。金塊則是增加到15。鑽石效果最好,可以將其工作範圍拓展為63x63,屆時你只需要看著儀式慢悠悠地把礦石吸到主儀式石上方3x3的空間裡就好了。 +guide.BloodMagic.entry.ritual.crusher.info=挖掘儀式的運行十分簡單:只需要將箱子之類的東西放在主儀式石正上方,它就可以消耗LP並不斷挖掘主儀式石正下方3x3x3範圍內的方塊了。儀式每2秒會嘗試挖掘,如果成功,會消耗7LP。挖下來的方塊會放進與儀式鏈接的容器中,如果容器已滿,就會掉在那個容器的上面。\n\t若以原生意志驅動儀式,儀式將會工作得更快,但每次成功挖掘時都會多消耗0.05點原生意志。\n\t/cut破壞意志會令儀式在挖掘方塊時擁有時運的效果。目前來看,不論提供多少意志,時運的等級永遠是三,並且每次成功挖掘都會多消耗0.2點此種意志。\n\t堅毅意志會令儀式在挖掘方塊時擁有精準採集的效果。每次成功挖掘都會多消耗0.2點此種意志。\n\t腐蝕意志會令儀式在挖掘方塊時經過某種液體的浸洗。/cut這種液體帶有粉碎的效果,換言之——此時你挖掘的鐵礦時會變成兩堆鐵砂。目前這種液體可以是基礎切削油或爆炸火藥。根據所有液體的不同,儀式消耗的意志數量也不同。這個效果會覆蓋精準採集的效果。\n\t/cut復仇意志的效果和壓擠印記差不多,即會壓縮挖下來的東西。舉例:箱子裡現在有65紅石,一次挖掘後會將其中9個紅石壓縮為一紅石塊,留下56紅/cut石。僅當壓縮成功時儀式才會消耗0.2點復仇意志。 +guide.BloodMagic.entry.ritual.highJump.info=這個儀式會用強大的氣流將走在上面的人送上天。另外,這個儀式還會令摔下來的人免受掉落傷害。潛行即可規避儀式的效果。\n\t每次成功產生氣流時,儀式都會以5LP/tick的速度消耗LP;若沒能產生氣流,則不會消耗LP。 +guide.BloodMagic.entry.ritual.speed.info=儀式如其名,速移儀式可用來加速移動。儀式本身可以指向任意方向,而在儀式的生效範圍內的實體都會朝儀式所指的方向加速。儀式的指向由那塊薄暮儀式石的位置確定。默認,工作範圍是半徑二格見方,但可以用儀式調整鉗調整。水平方向上的速度加成是3方塊/tick,垂直方向上則是1.2方塊/tick。\n\t以原生意志驅動的速移儀式會使生物獲得更快的速度。/cut當周圍充滿原生意志(即100點)時,速度會翻一番。每次加成都會消耗0.1點意志。\n\t復仇意志將會迫使儀式對成年動物無效,而破壞意志會迫使儀式對幼年動物無效。復仇和破壞意志都會令儀式對玩家無效。若同時使用這兩種意志,則儀式只會對玩家有效。這些特性對於動物農場,甚至是過濾小殭屍都是十分有用的。儀式只有在成功加速時消耗0.05點意志。換言之,/cut對於幼年動物來說,儀式不會消耗破壞意志,也不會消耗LP——因為這時的儀式不會對幼年動物有效。 +guide.BloodMagic.entry.ritual.wellOfSuffering.info=對於那些不想用自己的血來補充LP供應的血術士,苦難之井便是他們的選擇:這個儀式會將方圓十格範圍內的非玩家實體的生命聚集到血之祭壇裡。苦難之井只會在上下十格、水平方向上方圓五格的範圍內尋找血之祭壇。如果找不套祭壇,儀式不會工作。儀式每消耗1LP便可從怪物上抽出25LP;若是針對非敵對的生物,則可抽出100LP;具體數量會受到獻祭符文的增幅的影響。 +guide.BloodMagic.entry.ritual.featheredKnife.info=羽刀儀式像是一把直插使用者身上的刀,抽取其血液,並為附近的血之祭壇補充能量。一般,羽刀儀式首先會在以主儀式石為中心的11x11x21的範圍內尋找一座祭壇——若找不到祭壇,儀式不會工作;找到祭壇後儀式會記下這個祭壇的位置。當有玩家進入儀式的範圍(默認為31x31x41)後,儀式會每秒對玩家造成一點傷害,並將其轉化為LP送入祭壇中。這個過程會受到血之符文的影響。傷害玩家的速度可/cut以調整。不要擔心,這個儀式也有安全保護機制:它不會攻擊那些只剩下百分之三十不到的生命值的玩家。\n\t有數種惡魔意志可以影響這個儀式的工作。比如,原生意志——它可以提高儀式的工作速度,準確地說是一秒攻擊玩家兩次。但每次攻擊時會多消耗0.05點原生意志。\n\t若周圍的靈域中有至少十點堅毅意志,儀式會將安全閾值/cut從百分之三十提高到百分之七十。這層保護不會多消耗意志。\n\t若周圍的靈域中有至少十點復仇意志,儀式會逐步降低安全閾值至百分之十。若同時有至少十點堅毅意志,那麼後者的百分之七十的閾值將只對儀式的主人有效果。和堅毅意志一樣,這個效果不會多消耗意志。\n\t/cut若儀式附近的靈域中有破壞意志,這個儀式的生命值轉LP的效率會有所提高。轉化率的增幅與破壞意志的含量成正比,最高為五分之一,對應100點破壞意志。這個效果可以與符文、束靈護甲升級和熏香疊加。每轉化一點HP,會多消耗0.05點破壞意志。\n\t說到熏香——腐蝕意志會令熏香的效果與此儀式疊加。若你身上沒有「魂飛魄散」效果,並且你正好處在熏香的效果/cut範圍內,你的生命值會被直接扣至安全閾值,並將轉化出的LP一次性注入祭壇中,並給予你魂飛魄散的效果。此效果可與破壞意志疊加。 +guide.BloodMagic.entry.ritual.regen.info=雖然仍有爭議,但這重生儀式對於那些想用自己的血來驅動魔法的血術士們來說,仍然是一個不錯的選擇,因為它會利用血術士的魔法在儀式範圍內產生治療光環的效果,藉由此治癒儀式範圍內的生物,包括血術士他們自己。儀式每2.5秒會給15格範圍內的生物附加生命回復I的效果;對於玩家來說它會消耗100LP,對於其它生物來說是10LP。\n\t/cut腐蝕意志會給儀式再加上一個「吸血鬼範圍」。此時,儀式會對所有非玩家生物隨機造成傷害,並藉由此治療玩家。每一個工作的tick中它都會消耗0.04點腐蝕意志並將1點生命值轉移到玩家身上。 +guide.BloodMagic.entry.ritual.harvest.info=這個儀式可以收穫默認以儀式石上方9x9x5範圍內的所有作物,並將收穫到的種子補種回去。所有收穫到的物品都會掉落在原地。儀式工作頻率為5tick嘗試一次,每次成功收穫都會消耗20LP。\n\t可以收穫的作物包括但不限於:南瓜、小麥、胡蘿蔔、土豆、地獄疣、仙人掌、甘蔗等。時刻記住,這個儀式並不會對它正在收割的作物作任何假設——只要它被認為是一/cut種可以收割的作物,這個儀式就可以收割。(譯註:更精確地說,是指有對應的HarvestHandler支持的作物。) +guide.BloodMagic.entry.ritual.interdiction.info=在傳說中的古代煉金術設備的基礎上,我們研發出了這個儀式,可將任何不是玩家的生物趕出儀式所覆蓋的範圍。默認,任何距離此儀式的主儀式石不超過兩格的非玩家生物的移動速度都會被此儀式干涉到。要注意的是,儘管儀式範圍內的生物不會被掉落傷害影響,但一旦超出了儀式的覆蓋範圍,保護就會失效。 +guide.BloodMagic.entry.ritual.containment.info=和禁止儀式正好相反,牽制儀式會試圖將所有生物全部拉進儀式上方的範圍中,並困住它們,使其無法移動。默認範圍是水平方向上3格見方,從最低的儀式石到最高的儀式石為止。這個範圍可以調整。\n\t/cut默認,儀式的消耗是每個生物每tick1LP。沒有在拉生物時不會消耗LP。 +guide.BloodMagic.entry.ritual.suppression.info=抑液儀式會壓制其影響範圍內的所有液體——換言之,將範圍內的液體全替換為空氣。它的工作範圍大約是半徑10格的上半球。工作時,LP消耗速度為2LP/tick。儀式停止工作時會將所有被替換的液體全部放置回去。 +guide.BloodMagic.entry.ritual.expulsion.info=假如你在玩服務器時,你發現,出於種種理由,你需要拒絕某些玩家的造訪,然後你發現力場護盾和殺人不眨眼的巨型轉子根本不能阻擋他們。那麼就是這個儀式出場的時刻了!在傳送魔法的幫助下這個儀式會大大緩解你的問題!\n\t若有玩家進入此儀式的範圍內,並且這個玩家並不是儀式的主人,那麼這個玩家就會被隨機傳送到半徑100格的範圍中的某個地方。當然這個儀/cut式還有一種類似白名單的功能:在主儀式石上放一個箱子,然後將那些與不想被傳送的玩家綁定的物品放進箱子裡,這些玩家就不會被傳送走了。\n\t每傳送成功一次會消耗2000LP。 +guide.BloodMagic.entry.ritual.zephyr.info=和風之喚——以一把古劍的名字命名——可以藉由風的力量將附近的物品捲起來並送入與之鏈接的箱子裡(默認,只需要把箱子放在主儀式石正上方即可)。這個過程大概一瞬間就可以完成,所以你不用擔心有什麼奇怪的吸力問題!\n\t默認的工作範圍是主儀式石方圓5格之內的方形。 +guide.BloodMagic.entry.ritual.laying.info=很多時候,自動化任務需要某種自動放置方塊的手段。這個儀式便可以從附近的箱子中(默認,是主儀式石正上方)取出方塊並放置在儀式的內部。具體來說,是放置在距離主儀式石兩格遠的地方,且高度相同。十分適合在建造樹場時用於自動種樹苗。每放置一個方塊消耗50LP。 +guide.BloodMagic.entry.ritual.timberman.info=種了一堆樹?想必你需要這個儀式。伐林儀式會將儀式持有者的LP用來驅使一個無形的幽靈,以砍伐附近的樹木,並將砍下來的木頭放入附近的箱子裡。默認,它的工作範圍是主儀式石往上30格,每個水平方向上各延伸10格形成的長方體。每砍掉一塊木頭需要消耗10LP。 +guide.BloodMagic.entry.ritual.meteor.info=就目前來說,這個儀式是所有儀式中最強大的儀式之一。驅動此儀式需要消耗一百萬LP,並且還有一段冷卻時間。然而它的效果也十分強大——只需提供合適的祭品,它就可以從宇宙中召喚一顆隕石並直接砸向地面。誠然,這樣一個大傢伙會在地面上造成大爆炸,但因為它來自宇宙中,所以可能會包含大量稀有礦石。 \n\t/cut可用的祭品包括鐵塊、金塊和鑽石。(事實上,可用的祭品是可以被整合作者或用戶控制的) +guide.BloodMagic.entry.ritual.downgrade.info=為了獲得更強大的力量,你或許需要獻祭某種東西作為交換。而這「沉重靈魂的懺悔」的任務正是如此——將一些物品獻祭給一個虛無縹緲的實體,你便可以以束靈護甲的屬性下降為代價,來換取更多的升級點數。儀式落成後,你需要在最高的空白儀式石掛一個面朝主儀式石的物品展示框,然後在薄暮儀式石上放一個能裝東西的方塊(例如箱子)。要獻祭的物品需要放入那個裝東西的地方,而核心物品/cut應掛入物品展示框內。儀式驅動後,你便可以蹲在主儀式石上並獲得降級後的物品。\n\t舉例,對於淬火降級來說,核心物品是個水瓶,需要獻祭的物品是龍息。\n\t所有可用的降級都可以通過JEI查詢到——查詢主儀式石的用途即可。另外,對於一個特定的降級來說,核心物品是一定的,所以你也可以選擇查詢某個物品來定位某個降級所需的祭品。 + +# Architect Entries +guide.BloodMagic.entry.architect.intro=前言 +guide.BloodMagic.entry.architect.bloodaltar=血之祭壇 +guide.BloodMagic.entry.architect.ash=奧術粉灰 +guide.BloodMagic.entry.architect.divination=占卜印記 +guide.BloodMagic.entry.architect.soulnetwork=靈魂網絡 +guide.BloodMagic.entry.architect.weakorb=虛弱氣血寶珠 +guide.BloodMagic.entry.architect.incense=熏香祭壇 +guide.BloodMagic.entry.architect.bloodrune=祭壇升級 +guide.BloodMagic.entry.architect.inspectoris=指示之書 +guide.BloodMagic.entry.architect.runeSpeed=速度符文 +guide.BloodMagic.entry.architect.water=水之印記 +guide.BloodMagic.entry.architect.lava=熔岩印記 +guide.BloodMagic.entry.architect.lavaCrystal=熔岩水晶 +guide.BloodMagic.entry.architect.apprenticeorb=學徒氣血寶珠 +guide.BloodMagic.entry.architect.dagger=犧牲匕首 +guide.BloodMagic.entry.architect.runeSacrifice=獻祭符文 +guide.BloodMagic.entry.architect.runeSelfSacrifice=犧牲符文 +guide.BloodMagic.entry.architect.holding=集持印記 +guide.BloodMagic.entry.architect.air=風之印記 +guide.BloodMagic.entry.architect.void=虛空印記 +guide.BloodMagic.entry.architect.greenGrove=綠叢印記 +guide.BloodMagic.entry.architect.fastMiner=速掘印記 +guide.BloodMagic.entry.architect.seer=見解印記 +guide.BloodMagic.entry.architect.magicianOrb=法師氣血寶珠 +guide.BloodMagic.entry.architect.capacity=增容符文 +guide.BloodMagic.entry.architect.displacement=轉位符文 +guide.BloodMagic.entry.architect.affinity=元素印記 +guide.BloodMagic.entry.architect.lamp=血光印記 +guide.BloodMagic.entry.architect.magnetism=磁引印記 +guide.BloodMagic.entry.architect.peritia=經驗之書 +guide.BloodMagic.entry.architect.livingArmour=束靈護甲 +guide.BloodMagic.entry.architect.upgradeTome=束靈護甲升級之書 +guide.BloodMagic.entry.architect.teleposer=傳送器 +guide.BloodMagic.entry.architect.boundBlade=束縛之劍 +guide.BloodMagic.entry.architect.boundTool=束縛工具 +guide.BloodMagic.entry.architect.weakShard=虛弱氣血碎片 +guide.BloodMagic.entry.architect.masterOrb=導師氣血寶珠 +guide.BloodMagic.entry.architect.runeOrb=寶珠符文 +guide.BloodMagic.entry.architect.suppression=抑液印記 +guide.BloodMagic.entry.architect.haste=急速印記 +guide.BloodMagic.entry.architect.severance=絕影印記 +guide.BloodMagic.entry.architect.teleposition=傳送印記 +guide.BloodMagic.entry.architect.compression=壓擠印記 +guide.BloodMagic.entry.architect.bridge=影橋印記 +guide.BloodMagic.entry.architect.mimic=擬態 +guide.BloodMagic.entry.architect.downgrade=束靈護甲降級 + +guide.BloodMagic.entry.architect.augmentedCapacity=超容符文 +guide.BloodMagic.entry.architect.charging=充能符文 +guide.BloodMagic.entry.architect.acceleration=促進符文 + +# Architect Entry Texts +guide.BloodMagic.entry.architect.intro.info=大家好,我叫提比略。你或許已經發現這本書並不完整了,但很不幸你是對的。因為1.7.10->1.8.9->1.9.4及以上的更新,血魔法也發生了巨大的變化。因此,這本書不得不重寫。這本書的最終目標是一本研究筆記,或者說是一本真正的書,所以距離這本書真正完成還有一段距離。有鑒於此,我會定期填補這本書中的空白。當然了,一開始這本書裡將全是讀起來味同嚼蠟的文字(嘛...肯定不是那種引人入勝的字/cut啦,好啦不要在意細節),但這個情況會隨著時間的推移而得到改善的,等待著你的將會是一部血術士們的心路歷程。\n\t但不好意思我想我得趕緊重新切入角色當中去了。*咳嗽聲*\n\t我名提比略,一名血術士,同時也以「締造者」的名字聞名於世。這本書中包含了我對名為「靈魂網絡」的自然現象的研究,以及我對血魔法師需/cut要適應的一些設備的物理特性的描述。從搭建強大的血之祭壇的技藝,到為增強法力而進行的生命獻祭的種種細節,再到各種擁有強大力量的魔法符文和印記,我不斷地發現新的魔法,不斷地總結並找到強化自己的全新方式。\n\t來吧,新入門的魔法師們,全新的領域在等待著你!\n\t...啊馬格斯說我有時候有點浮誇,但那又如何? +guide.BloodMagic.entry.architect.bloodaltar.info.1=血之祭壇便是血魔法中最核心的設備之一。它有兩個主要用途:合成某些物品,或將生命精華轉移到寶珠中去。然而這兩個用途都需要消耗祭壇中的生命精華。自然地,也有兩種補充生命精華的方式:以玩家的血提供生命精華,或以別的動物或怪物的血提供生命精華。 +guide.BloodMagic.entry.architect.bloodaltar.info.2=你需要一把犧牲匕首才能將你的血轉化為生命精華並注入祭壇中。具體操作如下:首先,站在祭壇旁;然後,使用匕首傷害自己(即右擊),你會損失一顆心的生命值,祭壇中會多出 200 LP。LP 是生命精華的 單位,稱為生命點數(Life Point, 縮寫 LP),用於刻畫某種任 務需要消耗的生命力——不,和遊戲王不一樣。默認,普通的血之祭壇容量僅為一萬。你還可以把物品放入祭壇中(右擊即可),若如此做,合適的/cut物品便會觸發合成進程。\n\t祭壇合成不僅需要消耗 LP,還需要一定的層級。滿足 這些條件後,祭壇便會開始自動抽取 LP 用於合成,並開 始散發紅色粒子效果。若合成還未完成,但此時 LP 已被 抽乾,紅色的粒子效果會轉為灰色,合成進度也會開始倒退,所以盡量避免這種情況的出現!最後還有一點,如果你放進祭壇裡的東西是氣血寶珠,那麼它 會散發紫色的粒子效果,表明它在向某個寶珠中灌輸 LP。\n\t事實上,祭壇中有三個存儲 LP 的容器:之前提到的一萬容積指的是其主容器;除此之外,祭壇還有輸入容器和輸出容器各一,容積均為主容器容積的十分之一。默認,輸入容器中的生命精華會以每秒 20 LP 的速度轉移至主容器中,而主容器中的生命精華也會以同樣的速度轉移到輸出容器中。如此一來,輸入容器和輸出/cut容器在祭壇中扮演的便是緩衝區的角色——它們是用來限制將生命精華輸入祭壇,和從祭壇中將生命精華抽取出來的速度的。 +guide.BloodMagic.entry.architect.ash.info=儘管奧術粉灰並不是這一卷的核心,但它確實貫穿了本卷提到的很多道具的合成之中。合成奧術粉灰需要用到獄火熔爐和惡魔意志,關於這些東西的細節可以參考《惡魔使者》卷。簡單來說,它是一種二元合成工具:你需要一種可充當催化劑的反應試劑,以及某種物品作為次要合成材料。\n\t一份奧術粉灰可使用二十次。對著地面或者牆壁使用便/cut可畫出一個圓形的法陣(如果是牆壁,你只能在一個方向上看到法陣)。然後,對法陣中央使用合適的催化劑即可改變其形狀,當然也會消耗催化劑(即,右擊使用)。如果法陣沒有變形,那麼你肯定有什麼地方搞錯了。\n\t在觀察到法陣變形後,你便可以放入次要物品了。合適的次要物品會啟動法陣,屆時你會看到法陣開始旋轉,並開始產生各種變化,具體變化隨法/cut陣不同而不同——但正確啟動的法陣最終都會產生一種新的物品。\n\t所有用到奧術粉灰的合成——我一般管這叫煉金陣列——都可以在JEI中查詢到。注意,左側的物品一定是催化劑,而右側的物品一定是一個次要物品。 +guide.BloodMagic.entry.architect.divination.info=占卜印記是血術士最常用的工具之一,因為它能解決你很多麻煩,具體來說是能給你一些關鍵數據。它的合成也很簡單:只需要在煉金陣列中以紅石為催化劑,以石板為次要物品合成即可。\n\t對血之祭壇使用此印記便可看到祭壇主容器中的LP數量,以及容量上限。短時間內反覆使用並不會導致刷屏,只會覆蓋之前的提示。\n\t/cut對著空氣使用此印記的話,則能看到你的靈魂網絡中的LP數量。儘管這功能看上去很普通,但你以後就會發現,你一刻也不想讓這玩意離手。 +guide.BloodMagic.entry.architect.soulnetwork.info=靈魂網絡(Soul Network,縮寫 SN)是指玩家和各種物品以 及結構之間的靈魂上的鏈接。隨著血術士能力的提升,靈魂網絡的強度也會隨之提高。就存在來說,它們是靈魂織成的一張無形的網,但最強大的血魔法師們是可以看到其物理的具現的。然而,時至今日,仍無人可達此化境...\n\t在遊戲中,網絡是直接與玩家綁定在一塊的。玩家所在的世界早已記錄下了這一切——/cut這意味著,玩家的 LP 並非是 記錄在某顆氣血寶珠中,而是被世界記錄著;每個玩家之間的網絡互相獨立,互不影響。\n\t綁定的過程通常在第一次使用某個物品時就已經完成了。就目前的科技來說,一旦綁定,即便是物品的主人也無法解除。需要消耗LP的物品會直接消耗其主人靈魂網絡中的LP。但,如果主人的靈魂網絡中沒有足夠的 LP,它會從 當前使用者,而不是其主人,的身上抽取生命值以填補空缺。因此,在快沒有LP的時候要小心——因為這通常會致人於死地。 +guide.BloodMagic.entry.architect.weakorb.info.1=沒了魔法來源的魔法師和鹹魚有什麼區別?氣血寶珠便是這樣一個魔法源:它可以將物理形式的生命轉化成LP並輸入到其主人的靈魂網絡中去。它本身並非電池,相反它倒像是一根導管,可將生命力轉化成血魔法師需要的魔法。 +guide.BloodMagic.entry.architect.weakorb.info.2=虛弱氣血寶珠便是你能製作的第一種寶珠——只需向一粒鑽石中灌注兩千LP的生命力即可完成。將已綁定的寶珠放入祭壇,它就可以不斷地從祭壇中抽取LP,直接輸入靈魂網絡中。另外,不論什麼寶珠,其容量上限都只能通過一些高級符文來提升;這裡注意一點,這個容量提升的效果只有在寶珠在祭壇上時才有效。對於虛弱氣血寶珠,最高只能提升到五千。\n\t/cut玩家還可以通過簡單地使用氣血寶珠來獲得LP——每一次使用都會對玩家造成一顆心的傷害並提供200LP。此法不能令網絡中的LP數量突破容量上限。\n\t祭壇只可能為與自己級別相當,或者比自己級別低的氣血寶珠提供LP。舉例,三級的寶珠只可能在三級或更高級的祭壇中獲得LP,一級的祭壇是無法勝任的。 +guide.BloodMagic.entry.architect.incense.info.1=血術士會經常發現,它們的LP產能時常跟不上消耗。當然,有特殊的符文可以提高自我獻祭所產生的生命精華的數量,但這個過程依舊是如此緩慢。只有這一條路可以走了嗎?\n\t下面介紹熏香祭壇。熏香祭壇本身可以以自身為中心,標記出一片靜謐的土地,在這範圍內,它可以借助祭壇本身散發出的餘力來安撫驚擾到的靈魂。當然你不是很清楚這/cut股熏香的氣息從何而來,但好像又沒什麼不對?先不管了。\n\t熏香祭壇的作用就是如此:利用靜謐的環境來提升單顆心所創造出的生命精華的數量。在你距離熏香祭壇只有約莫五格遠的地方時,它會散發出火焰顆粒以證明其已經創造出靜謐區域。在它的影響範圍下,你的犧牲匕首也會發生變化,以證明熏香已經發揮其效果。整個過程大約持續五秒鐘,你可以通過觀察火焰/cut粒子的存在來判斷是否結束。此時,使用犧牲匕首獻祭自己將會一次性獻祭你生命值上限的百分之九十,並將對應數量的LP輸入血之祭壇之中。LP數量和獻祭的生命值依舊成正比,但此時它的轉化率會根據附近的靜謐值而有所上升;默認,增幅是百分之二十。\n\t另外,占卜印記可以揭示附近的靜謐值,以及靜謐所帶來的具體增幅水平。 +guide.BloodMagic.entry.architect.incense.info.2=自然,百分之二十的增幅已經夠多了,但熏香祭壇作用的範圍還是可以繼續擴展的。你只需要在熏香祭壇某個基礎方向(即,正東、正西、正南、正北)兩格遠的地方排出一列三塊高度一樣木質路面即可定義一個「範圍」。在此「範圍」中的任意方塊都有助於讓這片區域更加靜謐。木質路面還可以繼續擴展,惟需遵守以下規則:一,每一列木質路面必須水平,即構成新一列路面的方塊必須高度相同;二,新的路面必須位於上一列路面的上/cut下五格範圍內。簡單來說,金字塔、倒金字塔等階梯式結構都是可以的。\n\t然而,這個範圍並非可以無節制地擴張。木質路面只能疊加三列;不過不用擔心,還有一種可以疊加五列的石質路面;甚至還有可以疊加九列的碎石路面和黑曜石路面。自然地,你在疊加三列木路面後就需要用石頭的;然而你完全可以一開始就用石頭的,只要你不是只用木路面就好。\n\t/cut回到靜謐程度的問題上來。事實上只有一部分方塊可以讓這片區域更加靜謐,而根據實驗,這些方塊被分成了若干種。舉個例子,你在這片區域中種了土豆,土豆屬於「作物」分類,然後這片區域便平靜了一些。不論是你接著種土豆,或者你種起了胡蘿蔔,它們的效果都會隨著你種的數量的增多而降低,甚至還會抵消一開始的效果,因為它們都屬於「作物」。為了最好的效果,你需要盡可能使用多種不同類型的方塊。/cut有助於平靜的方塊有這麼幾類:作物、原木、樹葉、熔岩、地獄巖、耕地、水、生命精華、以及其他東西(原文如此)。 +guide.BloodMagic.entry.architect.bloodrune.info.1=隨著你逐漸深入血魔法,你會發現你那普普通通的血之祭壇已無法滿足你的需要了。但你還可以通過放置一種名為氣血符文的特殊方塊來提升祭壇的整體屬性,進而解鎖更多的合成。\n\t將血之祭壇升到2級的方法很簡單:在祭壇本身往下一層放置八個一圈的氣血符文。如果你實在搞不清楚具體的位置,指示之書可以幫到你——它可以以一種類似全息投影的/cut方式指明你需要放置氣血符文的位置。\n\t儘管只需要空白氣血符文就可以完成祭壇升級,我仍然推薦你對使用帶有特殊強化的氣血符文。這些帶有特殊強化的氣血符文可以提高祭壇的合成速度、容量以及效率,而且,除了二級祭壇的四個角上的符文必須是空白符文外,其他位置的空白符文都可以替換。有關這些特殊的氣血/cut符文的資料可以在後面的章節找到。 +guide.BloodMagic.entry.architect.inspectoris.info.1=Inspectoris Scandalum 在拉丁 語中大概的意思是「方塊讀取器」。事實上,它的用途是,潛行時對著某個方塊使用,便可解讀那些複雜結構的信息,並將其顯示在你眼前。目前,它只能給出血之祭壇的相關信息:它可以給出升級祭壇所需的方塊的種類,以及具體擺放位置。\n\t若你覺得一次一次查詢不適合你,你可以試著潛行時對著空氣使用此物以切換目標層/cut級。這樣,再次按前文所述的方式使用此物,它就可以以一種類似全息投影的方式將升級所需的方塊的位置投影出來。設定級別為1時可以關閉這個類全息投影的效果。 +guide.BloodMagic.entry.architect.runeSpeed.info.1=速度符文可以提高祭壇內的壓力,藉由此加速嬗變過程,從而提高合成速度。每塊速度符文都會提高20%%的祭壇的LP消耗速度。它同時也會影響灌注氣血寶珠的速度。 +guide.BloodMagic.entry.architect.water.info.1=顧名思義,水之印記是一塊可凝聚空氣中水分,並將其集中於一點上的印記。除此之外,對著任何能裝水的設備使用水之印記都可以向設備裡面裝一桶水。總而言之,它便是一個移動的無限水源。每次使用都會消耗50點LP。 +guide.BloodMagic.entry.architect.lava.info.1=若說水之印記屬陰,那麼,屬陽的便是熔岩印記。熔岩印記可以將一片區域內的石頭熔化成岩漿。若是對某個可接受流體岩漿的設備使用,這設備裡就會多出一桶岩漿。儘管你拿著這個印記不會讓你自燃,但這不等於你可以開始洗熔岩浴了!記得每次使用時會消耗1000LP。 +guide.BloodMagic.entry.architect.lavaCrystal.info.1=熔岩晶體是塊裡面存儲了一團永不冷卻的熔岩的石頭。若將其放入熔爐中當燃料使用,它會釋放出熱量,這些熱量正好可以燒煉一個物品,然後消耗50LP。若是它沒有這麼多LP可以抽取,它也不會因此損壞,還會因此給網絡的主人追加一個反胃效果。\n\t這塊晶體理論上在任何支持標準固態燃料的設備中都可以工作。 +guide.BloodMagic.entry.architect.apprenticeorb.info.1=隨著你的新玩具越來越多,你會發現靈魂網絡的五千LP上限已經開始捉襟見肘了。是時候做一顆更強大的氣血寶珠了。\n\t學徒氣血寶珠的製作需要二級血之祭壇,可提供2.5萬LP的容量。同時,它也是合成很多更高級的物品和符文的必須。 +guide.BloodMagic.entry.architect.dagger.info.1=在不斷地通過獻祭自己來強化自己後,你可以開始試著獻祭別的活物了。若是用這把犧牲匕首,在血之祭壇附近擊中一隻普通的生物(不能是BOSS,也不能是玩家),那麼這個可憐的傢伙就會立刻被獻祭,並根據質量的不同,轉化成數量不等的生命精華。一般情況下,那些敵對怪物給予的生命精華要比那些平和的動物們要多。 +guide.BloodMagic.entry.architect.runeSacrifice.info.1=獻祭符文,正如其名,可提高獻祭活物時獲得的生命精華的數量,準確地說,是每塊符文增加十分之一。 +guide.BloodMagic.entry.architect.runeSelfSacrifice.info.1=犧牲符文和獻祭符文差不多,但犧牲符文是針對玩家自己的。增幅和獻祭符文一樣,都是百分之十。 +guide.BloodMagic.entry.architect.holding.info.1=你逐漸開始發現你有一堆各式各樣的印記要帶在身上了:有的需要手動開關,有的只需要放在背包裡就可以一直有效果。有鑒於你的背包空間開始逐漸縮水,你可能需要一塊集持印記的幫助。\n\t這集持印記的作用,便是將五個其他印記「壓縮」成一個;但是你並不能在集持印記裡放集持印記。默認,按下"Holding"鍵(默認為'H')可打開其界面,用於調整順序。滾輪可在選中/cut的印記之間循環切換。被選中的印記可直接借助集持印記使用,毋需取出。\n\t自然地,你可以身上帶若干集持印記,這些集持印記互不影響。但為了一眼就能區分,你可以考慮在煉金術桌中為其染色。染色的方式有兩種:1.直接使用染料在煉金術桌中染色;2.使用十六進制數命名的命名牌,比如這樣:0xFFFFFF。 +guide.BloodMagic.entry.architect.air.info.1=風之印記,簡單地將水蒸氣分成數股,產生強大的氣流,驅使玩家前進。簡單來說,你可以用這印記推動你前進。另外,這個印記可以免除掉落傷害,但只有你使用時才可以免除,所以如果你想硬著陸的話,記得要在即將摔到地上的一瞬間使用! +guide.BloodMagic.entry.architect.void.info.1=顧名思義,虛空印記會製造真空,並將附近的液體全部吸進去,並徹底銷毀。建議搭配水之印記和熔岩印記使用。 +guide.BloodMagic.entry.architect.greenGrove.info.1=綠叢印記可以將你的血轉化成植物生長的催化劑,進而加速附近植物的生長。驅動印記的方式很簡單:潛行時對著空氣使用(右擊)即可;相同的方式可以停止其工作(可以通過其信息提示看出它是否已被驅動)。要記住,它每隔幾秒鐘就會抽取一次LP以補充養料。\n\t直接對作物使用的效果和骨粉無異。這樣一來,這個印記也可以像骨粉一樣,用於製造草叢。 +guide.BloodMagic.entry.architect.fastMiner.info.1=大部分血術士都應該注意到了,血中含有豐富的鐵元素。經驗豐富的血術士完全可以在不抽血的情況下直接改變其體內血液的組成——然而,需要注意的是,只有那些最頂尖的血術士才可以抵抗由此產生的排斥反應。\n\t這樣一個技能有個經典的用途,提高身體的靈活性,以提高其運動速度。這速掘印記,通過用磁鐵影響血液裡的鐵元素,可大幅提升使用者的挖掘/cut速度。其實這個效果就是急迫II的效果。雖然只能影響使用者自身,但對於挖黑曜石來說的確是好用。 +guide.BloodMagic.entry.architect.seer.info.1=你在修理血之祭壇時,時常會發覺自己早已迷失在了那些占卜印記無法察覺的細節中。所以這就是輪到見解印記登場的時刻了。見解印記實際上是占卜印記的升級版,它能看到很多佔卜印記所看不到的細節,諸如祭壇的合成速度、當前的LP儲量、合成進度、甚至玩家自己的靈魂網絡的很多信息,這裡就不作贅述了。 +guide.BloodMagic.entry.architect.magicianOrb.info.1=新的祭壇,新的寶珠。這次,為了你的新玩具,你需要一顆法師氣血寶珠。不過有一點要注意,合成法師氣血寶珠需要2.5萬LP,但你的祭壇只有一萬容量。換言之,在合成這顆寶珠時,你需要不斷地補充生命精華。所以,在合成這顆氣血寶珠前,請務必做好萬全的準備! +guide.BloodMagic.entry.architect.capacity.info.1=雖然你並不知道具體原理,但這增容符文的確能給血之祭壇提供兩千的額外容量。也許,是某種共振導致容積下降,然後你便可以往裡面裝入更多的容器?這樣一想你倒是想到了進一步改進的方法...\n\t這裡有必要再重複一遍,祭壇本身還有用於緩衝的輸入和輸出容器,容積均為主容器的110%%。增容符文的效果對這兩個緩衝容器也有效。 +guide.BloodMagic.entry.architect.displacement.info.1=默認,血之祭壇的緩衝區和主容器之間的LP轉移速度是最高20LP/s。對於那些需要頻繁轉移LP的祭壇來說這個速度可以說是巨大的瓶頸。這也是為什麼會有轉位符文的原因。\n\t轉位符文可提升LP轉移的速度。每個符文都可以將速度提高至原來的1.2倍,多個轉位符文可以疊加。換言之,一個轉位符文可以將速度提高至一次24LP,兩個則為28.8LP,三個/cut則為34.56LP,而20個則會達到767LP,足以在13秒內清空一座標準祭壇裡所有的生命精華。 +guide.BloodMagic.entry.architect.affinity.info.1=表面上看,元素印記不過是一個能免疫火焰、溺水和摔落傷害的印記。事實上,它的工作方式並非如此——驅動此印記後,它會消耗汗水(如有必要,會是血),然後在使用者身上形成一格保護層,進而抵擋意外傷害。\n\t這層空氣護盾可以緩衝火焰和熔岩的熱量,也可以在必要時提供空氣以防溺水,同時還可以在不慎摔落時充當無形的氣墊使用。 +guide.BloodMagic.entry.architect.lamp.info.1=人和動物的血液中還是有「雜質」的。只需要收集一些稀有氣體,然後輔以合適的熱源,就可以在地面上產生一團明亮的光球,照耀著遠處的大地。\n\t血光印記的用途有兩個:或直接對著方塊使用,產生一個光球;或對著空氣使用,將光球發射到遠處。這些光球和火把一樣,可以空手打碎。 +guide.BloodMagic.entry.architect.magnetism.info.1=磁引印記可將血液中的鐵元素轉化為磁鐵,進而將小件物品吸引到身上,免除原地打轉收集物品的麻煩。就原理來看,它是真正的物品磁鐵,因為它並非是把物品吸過來,而是真正直接撿起遠處的物品。幸好這磁鐵的磁力並不大,不然當你意外地將爬行者以3馬赫的速度吸過來的時候一切就都結束了。 + +guide.BloodMagic.entry.architect.peritia.info.1=在這世界上,有某些行為可以累積一個人的經驗:擊殺怪物、採掘礦石、冶煉金屬、烹飪食物... 同時,一些特殊的奧法設備可以直接吸收這些經驗,並作為其動力使用。因此,若是有一種能存儲經驗的媒介,那就再好不過了。\n\t儘管有很多設備都可以將這經驗轉化成物理形態儲存,但這本經驗之書卻是以書寫知識的方式,將你過去所積累下/cut的經驗保存下來,以供日後使用的。需要的時候,只需要手持這本書就能自動吸收書頁中的知識,並將其轉化為經驗。\n\t具體來說,這本書是這樣用的:潛行時右擊即可將一級經驗存入書中(若有零頭,則先吸收零頭)。平時右擊一次可直接獲得一整級經驗。它所存儲的經驗數量可在其信息提示中找到。 +guide.BloodMagic.entry.architect.livingArmour.info.1=在這Minecraft的世界中,所有人,尤其是那些新生的人(譯註:應該是指死亡後剛剛重生的玩家?),都清楚一套好的護甲的重要性。通常,護甲的屬性是確定的——護甲的保護性能、飛行的能力、跳躍或跑步的增幅、諸如此類,不勝枚舉。誠然有這些屬性的護甲是好的,但你從未真正遇到過一套為你量身打造的護甲。至少,現在所有人都這麼認為。\n\t而這束靈護甲,實際上是一/cut個被鑲入鐵甲中的,經過特殊改造後的活物。穿在身上時,它便會與穿戴者共生——他們將一起移動、一起攻擊、甚至吃東西時它也會有所感覺。和普通的人體一樣,它也會生長,也會不斷地強化自己,當然也需要接受訓練。\n\t先舉個例子吧。當你穿上束靈護甲,並長途奔襲一段時間後,你會注意到束靈胸甲上多了一個名為「迅捷雙足」的升級。這個升級可以提高你的/cut移動速度,雖然目前只有等級1,但畢竟還是可以升級的。你還會注意到它擁有了「強化點數」,目前可能是「3/100」這樣子。每個升級都需要一定的強化點數,但護甲可用的強化點數有限。換言之,若是拿不出某個升級需要的點數,你是不可能獲得這個升級的。\n\t記住一點,只有全套束靈護甲才能接受訓練,也只有全套束靈護甲才能發揮其應有的效果。\n\t/cut束靈護甲的強化點數還是可以被人為修改的。有一種方法是利用煉金術增強穿戴者和護甲本身之間的鏈接,藉此大幅提升強化點數的上限,典型代表便是「禱告之始」,可將上限提升至200。關於這些煉金術的產物以及製造過程,建議參閱本書《煉金術士》一卷。 +guide.BloodMagic.entry.architect.upgradeTome.info.1=若是束靈護甲上有你不想要的升級怎麼辦呢?你可以使用名為「淨靈之音」的儀式來清洗這些升級,並獲得對應的「強化手冊」。關於儀式的細節可參閱本書《儀式大師》卷。這「強化手冊」的用途便是,在你身著全套束靈護甲時,直接給予護甲對應的升級。\n\t當然,這強化手冊也可以在鐵砧中融合——在鐵砧中將兩本一模一樣的手冊融合在一起可以獲得更高一級的手冊。/cut比方說,兩本迅捷雙足II可以融合出一本迅捷雙足III。對於束靈護甲本身來說,也有類似的機制,這裡不作贅述。 +guide.BloodMagic.entry.architect.teleposer.info.1=傳送器,顧名思義,可以將某個物體傳送至另一個地點,但這個傳送器不僅可以傳送生物,還能傳送方塊。完整的傳送裝置需要兩個傳送器和一個傳送核心。其中,一個傳送器充當目的地,另一個傳送器充當出發地。\n\t在使用傳送器之前需要一些配置。首先,你需要右擊傳送核心將你與其綁定。然後,手持核心右擊充當目的地的傳送器以記錄相關信息。最終,/cut把這個記錄了目的地信息的傳送核心透過其GUI放入充當始發地的傳送器即可。\n\t然後,給予始發地的傳送器一個紅石信號(準確地說,是強充能),這個傳送器就會將實體和方塊(如果是箱子這樣帶特殊數據的方塊,一併保留)一股腦全部傳送過去——這個過程中我們假定目的地是有傳送器的。\n\t當然,你可以只讓一個傳送器/cut有核心,抑或兩個傳送器互相鏈接,或者更多傳送器形成一條鏈,藉此形成更複雜的系統。\n\t不過要記住一點,傳送器只傳送其上方的方塊,不過傳送的範圍是由傳送核心決定的——T1的傳送核心只能傳送一個方塊,而T2傳送核心則能傳送3x3x3的方塊,以此類推。 +guide.BloodMagic.entry.architect.boundBlade.info.1=束縛之劍是一把用製作束靈護甲的方式製作出來的劍,可以說已有很長歷史了。不過有一點要注意,包括束縛之劍在內的各種束縛工具的設定,在未來都有可能有變動。\n\t這把劍有驅動模式和抑制模式,潛行時右擊即可切換。在抑制狀態下它並不會造成任何傷害,但是在驅動模式下它是會消耗LP的。同樣的,你對怪物造成傷害時,也會消耗LP。所以,在你殺死怪物的時候,/cut這把劍也有可能殺死你!\n\t然而,用這把劍殺死怪物時,會有那麼一點概率獲得虛弱氣血碎片——這個碎片便是將祭壇升級至四級的關鍵。 +guide.BloodMagic.entry.architect.boundTool.info.1=和束縛之劍一樣,束縛工具(包括鎬、斧和鍬)的屬性在未來也會有所變動。和束縛之劍一樣,束縛工具有兩個模式,切換方式同束縛之劍,也是潛行時右擊。\n\t和束縛之劍不同,束縛工具擁有「野獸模式」。手持工具右鍵按住不動即可蓄力,蓄力結束後工具會放出一股巨大的能量,大範圍破壞方塊,最高可達11x11x11,但同時也有驚人的消耗:一萬LP。因此,使用時一/cut定要小心謹慎,因為搞不好這就是你最後一次使用這些工具! +guide.BloodMagic.entry.architect.weakShard.info.1=任何有生命的東西,都有一層看不見,摸不著的鏈接,這個現象被稱作靈魂網絡。實踐證明,諸如印記和儀式這樣的東西也是可以有鏈接的,然而這些鏈接的來源便是擁有最強鏈接的生物——人類。\n\t用束縛之劍攻擊生物時,那些可憐生物的一部分靈魂網絡會直接硬化,在它們死後也可保持其形狀。這部分靈魂網絡便以虛弱氣血碎片的形式現身於世,它們因其顏色與虛/cut弱氣血寶珠相近而得名。\n\t雖然,至今仍未找到存在更強的氣血碎片的證據,但是你至少知道,這些碎片對於增強你自己的靈魂網絡肯定有幫助。 +guide.BloodMagic.entry.architect.masterOrb.info.1=如何利用這種對靈魂網絡十分親和的特性呢?答案是:用虛弱氣血碎片打造全新的氣血寶珠——導師氣血寶珠。它可以提供一百萬LP的上限,它可以徹底解放你對血魔法的想像力。也許,就算是隕石,也無法阻擋你的前進了吧... +guide.BloodMagic.entry.architect.runeOrb.info.1=看上去這個符文並沒什麼用途。但是,這寶珠符文可以提高那些放入血之祭壇中填充的寶珠的容量上限,每塊符文都可以提升百分之二。對於虛弱氣血寶珠,這是微不足道的100LP。而對於導師氣血寶珠,這是兩萬LP的增幅,效果十分顯著!如果你的祭壇上還有空位的話,這個符文興許就是你的首選。 +guide.BloodMagic.entry.architect.suppression.info.1=抑液印記,採用和傳送器一樣的傳送科技,可以讓一定範圍內的液體瞬間消失。準確地說,是送入另一個迷你維度中。不幸的事,因為傳送科技的限制,液體還是會回來的——比如說,在使用者走過本是液體的區域後。不過這無傷大雅,畢竟不論是在水下行走,還是在下界的熔岩之海上漫步,這印記都是十分好用的。 +guide.BloodMagic.entry.architect.haste.info.1=人體能消化的物質中有兩種十分有趣:糖和咖啡因。前者是能量儲備,後者可以令人保持清醒。這急速印記,便可以通過模擬化學反應的方式,釋放更多的化學能,進而提升印記使用者的移動能力。\n\t印記驅動後,使用者會跑得更快,跳得更高,同時還會令玩家在不用跳躍的情況下跨越比較高的障礙(實際上是個改良版本的自動跳躍)。 +guide.BloodMagic.entry.architect.severance.info.1=人們至今無法解釋傳送的機制。多數情況下,傳送被認為是時空扭曲的一種表現形式,物體可通過兩個不同時空的鏈接來實現瞬間移動。而這絕影印記可以阻止時空扭曲的產生,從而阻止啟動此印記的玩家附近的生物發動傳送技能。當然這個印記並不能阻止諸如傳送門之類的東西,但阻止類似末影人這樣的生物還是可以的。 +guide.BloodMagic.entry.architect.teleposition.info.1=傳送印記實際上是個自帶傳送核心的傳送器。對某個傳送器使用此印記,印記會記下這個傳送器的位置,再次使用印記就可以直接傳送到那裡去了。然而它好像沒給你返程票... +guide.BloodMagic.entry.architect.compression.info.1=礦工經常面對的一個情況便是,它的背包中充滿了紅石粉、青金石、以及各種亂七八糟的東西。雖然可以壓縮,但是並非所有礦工都會隨身攜帶工作台。\n\t壓擠印記所創造的小型壓縮力場可以將各種物品壓縮起來,進而節約背包空間。具體來說是這樣:如果你有63份紅石粉,印記不會有效果;但如果你有64份紅石粉,它就會將其中63份壓縮成7個紅石塊。雖/cut然並沒騰出新的格子,但是別忘了那個佔了一個格子的紅石粉是可以接著放紅石的。這個印記對其他Mod的類似東西也是有效果的。 +guide.BloodMagic.entry.architect.bridge.info.1=影橋印記可以將使用者腳下的空氣固化成可以行走的道路,或者說,幻化出一座幻影之橋。若是你不慎踩空,影橋會直接在你腳下出現,避免嚴重的摔傷。儘管在使用前需要一些測量工作,同時影橋出現也會造成延遲,它仍不失為一種「飛行」的好方法。 +guide.BloodMagic.entry.architect.mimic.info.1=擬態是一種可以模仿任意給定結構的魔法結構。它本身可以根據其碰到的方塊,改變自身的分子結構,從而使其本身看起來都是如假包換一樣。但,並非所有的屬性都可以複製:比如說,普通的擬態方塊變成螢石後不能發光。\n\t一般,擬態方塊有兩種用法。第一種,先放置擬態方塊,然後手持要偽裝的方塊對著擬態方塊右擊。這樣,被偽裝的方塊就直接進入擬態方塊的內/cut部,擬態方塊也就可以偽裝了。不過,這個方法只能偽裝一個方塊的「默認」形狀。舉個例子,此法偽裝的樓梯都是朝同一個方向的。\n\t第二種,直接對著某個方塊使用擬態方塊。若如此做,擬態方塊便可以做到精確偽裝。還是剛才樓梯的例子,這樣偽裝的樓梯就會很自然,因為方向被保留了下來。\n\t事實上,擬態方塊的變種有很/cut多。默認的不透明擬態方塊可以模仿形狀和方塊的大多數屬性,但光是無法照過去的。懸幽擬態方塊沒有碰撞箱,適合製作隱藏門。清透擬態方塊可以解決玻璃的擬態問題:光線可以無視被偽裝的方塊的屬性,穿透這種擬態方塊。最後,還有一種光亮擬態方塊,不論何時它都會發光。終於不用火把了!\n\t其實還有一種特殊的擬態方塊:感知擬態方塊。如果有玩/cut家接近,它們就會向其發動猛烈攻擊。這種方塊可在很多地方找到,尤其是地牢中。所以說,如果有一個感知擬態方塊偽裝成了箱子,請記住:它們會咬人。\n\t***創造模式限定內容***\n\t在創造模式下,擬態方塊會多出來一些有趣特性。用藥水或藥劑瓶右擊擬態方塊後,可令其在有玩家在附近時產生對應的藥水效果。如果這是/cut普通的擬態方塊,那麼:點擊東面/西面可以加/減藥水效果的覆蓋範圍;點擊北面/南面可以加/減玩家的檢測範圍;點擊上面/下面可以提高/降低藥水生成間隔,即每隔多久生成一次藥水效果。\n\t如果你在面對一個感知擬態方塊,你可以隨意點擊這個擬態方塊,以改變其檢測玩家的範圍——如果玩家在檢測範圍中,並且可以看到這個擬態方塊,擬態方塊會直接出現在玩/cut家眼前。\n\t另外,如果玩家在創造模式下將要偽裝的方塊放入擬態方塊中,這個方塊不會在擬態方塊被破壞後掉落。\n\t最後的最後,如果擬態方塊偽裝的是一個裝著東西的箱子或別的什麼容器:對於感知擬態方塊,在它敗北後會把箱子連同內容一塊放回來;對於其他擬態方塊,它會在被擊潰時把物品撒一地。 +guide.BloodMagic.entry.architect.downgrade.info=就護甲降級的內容,我建議你閱讀《儀式大師》卷的「沉重靈魂的懺悔」一章,在那裡你可以得到更詳細的解釋。 + +guide.BloodMagic.entry.architect.augmentedCapacity.info=和增容符文類似,超容符文也可以提升祭壇的容量。但和增容符文不同,多塊超容符文會之間的共鳴會讓容積呈指數級增長。具體來說,是做乘法:每一塊超容符文都會給予額外10%%的容積;換言之,兩塊即21%%的增長,三塊即33.1%%的增長,以此類推。\n\t然而,超容符文的效果不與增容符文疊加,換言之,不論有多少超容符文,每塊增容符文都只提供兩千LP容量。 +guide.BloodMagic.entry.architect.charging.info=有那麼一些東西對於合成很有幫助,而這充能符文便是其中之一:它可以吸收 LP,並將 其轉化為「充能點數」,具體數量可用見解印記看到。若是合成某些物品正好需要一定量的充能點數,那麼這充能符文就可以以消耗充能點數為代價,將物品立刻合成出來。若沒有足夠的充能點數,它就只會按一比一的比例直接將充能點數轉化為 LP 以加速 其合成。\n\t/cut血之祭壇最多可存儲的充能點數數量是充能符文的數量乘以祭壇的容積,其中容積需要至少為兩萬才有效果。血之祭壇充能的速度也是和充能符文數量以及其本身的速度成正比的(即,充能速度=符文數量*祭壇本身合成速度),每一秒它都會將一定量 LP 轉化為充能點數。所以,如果你的祭壇中有這塊符文,合理的設計將會使你事半功倍。 +guide.BloodMagic.entry.architect.acceleration.info=和大多數符文不同,促進符文需要和別的符文搭配使用,而且它的效果不是無限制增長的。這個符文的效果是,它可以讓某些符文的工作頻率變高,比如說,轉位符文和充能符文。具體來說,每有一個這個符文,距離下一次工作的等待時間就減一刻。換言之:如果有10塊促進符文,轉位符文會每10刻就轉移一次液體,而默認值卻是每20刻。\n\t顯然,你的祭壇中只可能有19/cut塊促進符文——在這種情況下,轉位符文和充能符文就會一刻不停地工作。非常非常非常非常非常非常非常好! + +# Demon Kin Entries +guide.BloodMagic.entry.demon.intro=貝拉·海泊恩 +guide.BloodMagic.entry.demon.snare=惡魔意志與投網 +guide.BloodMagic.entry.demon.forge=獄火熔爐 +guide.BloodMagic.entry.demon.petty=微小的地獄魂石 +guide.BloodMagic.entry.demon.sword=感知之劍 +guide.BloodMagic.entry.demon.lesser=小型地獄魂石 +guide.BloodMagic.entry.demon.reactions=意料之外的反應 +guide.BloodMagic.entry.demon.sentientGem=感知護甲 +guide.BloodMagic.entry.demon.routing=物品路由 +guide.BloodMagic.entry.demon.aura=惡魔靈域 +guide.BloodMagic.entry.demon.types=不同種類的意志 +guide.BloodMagic.entry.demon.crucible=惡魔坩堝 +guide.BloodMagic.entry.demon.crystallizer=惡魔結晶壇 +guide.BloodMagic.entry.demon.cluster=惡魔晶簇 +guide.BloodMagic.entry.demon.pylon=惡魔導能塔 +guide.BloodMagic.entry.demon.gauge=靈域測量儀 + +# Demon Kin Entry Texts +guide.BloodMagic.entry.demon.intro.info=我的名字叫貝拉·海泊恩,以惡魔使者的身份被知曉。數個月前我的家鄉被一群惡魔侵襲,其他村民全部被殺,房屋全被破壞。我無法記起襲擊時的多少細節,除了我所認識的每一個,伴隨著痛苦的慘叫而前往一個更美好的世界的人們。慶幸那些惡魔沒有聽到,那在不容易察覺的教堂的地下室裡,畏縮於果籃下的我絕望地避免著自己的尖叫聲加入眾人的合聲。\n\t/cut可怕的瞬間,在我不慎撞倒堂的熏香祭壇時,一隻惡魔突然闖入聖所,或許是這聖地的原由又鎮靜下來。這是只體型龐大的四足怪物,彎曲的獠牙倒懸在突出的嘴上,唾液滴在帶有鋸齒的劍狀爪子。它環顧了四周,我發誓有那麼一會它的眼睛和我對上了,但之後它就這麼離開這裡,彷彿完全沒有看到或者聽到什麼。之後發生的事記憶全都模糊不清。\n\t/cut直到第二天才有人經過看到這一切。這一商隊看到遠處的濃煙,決定繞一大段路好避開這些惡魔。商隊中許多人覺得我獨自一人毫髮無損地生還興許是個壞兆頭,有些甚至不願多看我一眼。但有一對兄弟同情我的遭遇,並盡力說服商隊其他成員也帶上我。我賣掉了女祭司之仗與一條盒式掛墜,藉此換到了跟著前往一個遠離惡魔破壞路徑上的一個安全村莊的許可。 +guide.BloodMagic.entry.demon.snare.info.1=曾有一天,馬格斯曾對我講述道,世間生靈皆有靈魂:人類,雞,羊,甚至是爬行者也存在這種給予軀體生之意志的生命力量。似乎馬格斯早已在這方面做過大量實驗,甚至有聞一個強大的法師,可以將獲取這些靈魂並注入一個空的軀體,比如殭屍。但這也讓我感到好奇:如果殭屍與骷髏並不擁有靈魂,它們如何擁有這生的意志?是什麼,給予他們生氣,使他們會去追捕並殺害生靈?\n\t/cut每每鑽研最終還是回到了意志的問題上。任何「活物」都必須擁有使之生存下去的意志,但這不意味著那必須是它們自己的。當我把這個想法告訴馬格斯的時候他考慮了一會,接著拿出一個黑板和粉筆(從哪?誰知道呢),開始速寫並注上一些關於其他形式魔法的註解。「在秘術學中,」他畫出一隻稻草人的形態並說道,「分配於執行許多簡單操作的傀儡被賦予了生氣。它們活著,呼吸著,甚至可以死於不/cut再需要它們的主人。幾個世紀以來,伴隨著秘術學的進化,這門藝術已經有過數個版本,法師會將他們的意志注入那無生命的創造物中,給他們帶來生氣。\n\t「那麼,貝拉,傀儡是如何運作的呢:通過意志的灌輸。」\n\t所以如果可以通過他人將其意志注入一個空殼可以使傀儡獲得生命,那麼就有可能有什麼把他們的意志注入亡者/cut的軀體,使得有了殭屍和骷髏的存在。想到這我打了個哆嗦,腦中閃過故鄉的遭遇。只有惡魔會做到這麼殘忍的事。但要檢驗這個假設,我需要更多證據。 +guide.BloodMagic.entry.demon.snare.info.2=在馬格斯的指引,和提比略百忙之中抽出時間為我提供的幫助下,我用鐵、線和一點紅石便做出了原始投網。身兼秘術使的提比略說這玩意可以切斷控制生物的意志。「我拿這玩意在傀儡上瞎搞」,他帶著微笑這樣說道。我們都知道結果是什麼樣的。\n\t「紅石似乎切斷了我的意志和傀儡之間的聯繫。理論上來說,如果殭屍和骷髏身上也有意志,那這投網也可以切斷。」\n\t/cut他說我只需要瞄準目標把投網丟過去就可以——如果奏效,我就能在目標生物上看到一些白色的顆粒。「然後你需要把那個可憐的目標殺死才能看到真相。但記住,大概只有四分之一的投網會對目標有效果。所以記得多備一些!」\n\t我製作了十六個投網,然後我選擇在深夜出發。事實上,這項工作相當棘手:要同時追蹤幾個殭屍,還要閃避它們的重擊,還要瞄準它們丟出投網。/cut當我看到白色的顆粒時,我迅速將殭屍們悉數斬殺,並清點了它們留下的物品。沙地上一些藍色的粘稠液體吸引了我的注意。我撿起來看了一下,這似乎是一種超凡脫俗的存在...在快速收集好樣本後我決定先返回再作進一步研究。\n\t每一份收集到的「惡魔意志」的形狀和大小都不盡相同,似乎取決於它們的來源。拋開單位不談,只做粗略的定/cut量分析的話,它們的品質可以按0到5來劃分。我並不是很清楚這些物質可以用來幹什麼,但毫無疑問它們引起了我的注意。我也不是很清楚這究竟是惡魔的印記,抑或僅是它們身上掉落的某種晶體。我需要進一步的研究。 +guide.BloodMagic.entry.demon.forge.info.1=我已在惡魔意志上投入了數星期的時間。雖然有所進展,但情況依舊時好時壞。但有一天,提比略問我能否借用一點惡魔意志來做實驗;他解釋說,這很有可能是他一直在尋找的新一代血之祭壇的材料——馬格斯原本的祭壇已經破舊不堪,但按古法製作的祭壇卻怎麼也無法使用...總而言之,他覺得我能幫上忙。\n\t事實證明他是對的。我查閱了很多討論「等價交換」以及/cut物質嬗變的煉金術書籍;同時我還咨詢了一些途經我們這裡的煉金術師,他們也慷慨地給了我一些解構物質和能量的方法,以便進行深入研究。(啊,我必須承認我十分喜歡那些煉金術師的暗紫色盔甲——區區看一眼就會讓人感覺要被一個質量巨大的東西拉過去一樣。啊我沒在說提比略!)我利用僅有的簡易煉金陣列以及極少量樣本便成功從惡魔意志中抽取到了能量。剩下的事情就只有合適的構造了。 +guide.BloodMagic.entry.demon.forge.info.2=就在今天,我成功製成了一種可將原生意志注入物品中的結構。我現在管這個東西叫「獄火熔爐」,實際上它只是個鑲入玻璃頂層中的簡易煉金術陣列,可最多同時將四個物品和原生意志融合於一體。惡魔意志需要放在右手邊,顯而易見的圓圈則是為物品準備的。目前來說我已掌握了若干種「配方」,但使用這爐子仍然有一些要求。\n\t對於初次使用獄火熔爐的人/cut來說,他們需要注意一些事情:一,物品融合需要提供一定數量的惡魔意志,如果數量不夠,什麼事都不會發生;二,前面說到物品融合需要提供一定數量的惡魔意志,但大部分配方實際都消耗不了那麼多;三,有些物品的融合需要大量意志來啟動,但卻消耗不了多少,甚至根本不消耗;四,有些配方的產量巨大,有些...並不怎麼高。 +guide.BloodMagic.entry.demon.petty.info.1=又是新一個夜晚,我又開始了日常的收割工作。但是很快我意識到了一個問題:我的背包每天都會被各種樣本塞滿!原因不是很清楚,也許是因為每份樣本的最終來源都不一樣,因此無法壓縮在一起吧。至少,從它們物理表現形式來說是這樣的。\n\t也因此我又回到了被丟在屋子一角的獄火熔爐旁開始為我的實驗準備材料,將提比略的那些令人窒息的實驗拋之/cut腦後。我這幾天在為提比略準備他的熔爐,因為我已經放棄抵抗那些因為他的「奧法實驗」而產生的,籠罩在我的工作室裡的粉灰了。我管你是不是在「填補靈魂網絡那無形的網狀結構與石板的物理結構的空白」,趕快讓你那些天殺的東西滾出去! +guide.BloodMagic.entry.demon.petty.info.2=不論如何,尋找合適的存儲惡魔意志的材料的確費了我一番功夫。青金石似乎是一種很容易就能找到的能量導體,可以充當傳導意志的通道。然後我為了避免空氣中的電場的影響,加了一層紅石充當「護盾」(至少,馬格斯說過,將兩種能量混在一起會產生災難性後果);然後加上一些黃金充當抑性劑;並以玻璃製成外殼。最終我得到了一塊「地獄魂石」。這個名字的含義便是「來自地下世界——塔爾塔羅斯 (Τάρταρος, Tartarus) ——的寶石」。\n\t經過近一步測試,我發現這個寶石的容量是64。(當我把這個結果拿給馬格斯看時,他覺得這個數字是個十分完美的整數。)這樣,我再試圖撿起惡魔意志時它就可以自動將其收集起來了。但...這樣一來意志它本身似乎就消失了。在拯救了我的背包的同時也給我帶來了新的謎團呢。同時我還發現,若是我手持寶石並將精神集中於此(右擊),約有/cut容量上限十分之一的意志就會流入我身上的另一個寶石中。我覺得這個性質會在我得到更強大的地獄魂石後大顯身手。 +guide.BloodMagic.entry.demon.sword.info.1=我的網又出問題了。\n\t不論我怎麼努力改進,這投網似乎就是不能完美工作。多數時候會打結。但即便我成功投中了殭屍,它還是有很高概率不工作。為了避免自己的頭髮被網纏住的命運,我決定立刻回到我的獄火熔爐旁開工。\n\t但,並非立刻開工——我首先得清理下上面的灰塵。 +guide.BloodMagic.entry.demon.sword.info.2=我將那微小的地獄魂石存儲惡魔意志的能力成功注入到了鐵劍裡,並得到了一柄...傷害比我的拳頭還低的劍。我對這個結果感到十分失望,因為我為了讓以地獄魂石驅動的煉獄熔爐不過熱而在一旁擺弄了很久很久。\n\t然而,當我再次拿起地獄魂石時,劍開始散發出了一種新的能量。似乎,我身上的惡魔意志越多,劍的傷害也就越高,獲得的惡魔意志也就越多;倘若/cut沒有地獄魂石...這劍就如同廢鐵一般。\n\t經過測試我又發現了一件事:擊殺不同的目標獲得的意志數量不一樣。具體的數量和目標生物的生命上限成正比——以蜘蛛為例,它最多只有8顆心,因此殺死蜘蛛能獲得的意志數量便是殭屍的百分之八十,因為殭屍最多有十顆心。或許是因為生命越多的生物動起來時需要的意志越多吧。我覺得這個事情得好好記住,以備不時之需。 +guide.BloodMagic.entry.demon.lesser.info.1=今天在和提比略聊天,聊到了最近他的一些工程。不得不承認,一旦說起他的研究,他就會說個沒完沒了!不管了。提比略說他最近一直在研究印記,目前他已經利用我給他造的獄火熔爐成功製成了水之印記和熔岩印記。我不是很清楚他是怎麼做的——我只知道他以地獄魂石作為催化劑,將多種材料在熔爐中煉成印記,但我沒親眼目睹過他的實驗過程。不過我今天總算知道了他那漫天飛舞的灰塵是/cut怎麼回事。\n\t我來試著按他的方式複述一下。呃,「利用魂石中的意志來嬗變平時根本不會反應的若干原料時,發生了反應。利用這種增幅效應,我便可以刻出我所需要的銘文,以引導能量的流動,從而完成我需要完成的工作。」雖說白紙黑字難以想像,但我扶了扶眼鏡後重新回想起了當時的景象...我不確定他是不是平時也這樣,但我發誓,一旦跟我解釋東西,他就會變成...科學家。\n\t/cut不論如何,他為我展示了水之印記的製作方式。在電光火石般的演示後,他終於進入了正題。「我在試圖用更高級的材料重複相同的過程,但反應物似乎總會在我放進去的一瞬間...爆炸。看上去很不穩定。我覺得是因為他們沒有正確地融合在一起——或許是能量不夠吧。」\n\t我在思索了幾分鐘後便開始了工作——正如前文所說,我覺得我會需要更強大的地獄魂/cut石的,但我仍然在思考如何以優雅的方式完成這個工作。所以,我決定:訴諸暴力! +guide.BloodMagic.entry.demon.lesser.info.2=我找來一整塊青金石、一整塊紅石、一顆鑽石、以及一塊空的地獄魂石——啊這塊魂石是我在地上發現的,應該是以前某個進展不順的實驗中用的。我只記得馬格斯可以讓水泥牆上的洞瞬間消失。然後我將這四個物品放入獄火熔爐,並以一塊滿的地獄魂石供能——最終結果顯示我需要至少大約60點意志。經過一系列優化,我終於確定了配方,並開始觀察生長中的地獄魂石。\n\t/cut另外還有一點,我試過用金塊代替鑽石,但結果似乎只說明另一種水晶結構更有用。\n\t最終,我得到了全新的「小型地獄魂石」,它擁有256點容量,比微小的地獄魂石大多了。希望這顆新魂石可以滿足提比略的需求吧。哎呀這玩意的容量這麼高不就意味著我得花更多時間來收集惡魔意志嗎?啊!又是一個漫漫長夜...! +guide.BloodMagic.entry.demon.reactions.info=我今天一早醒來發現自己躺在醫院的病床上,身上有什麼東西疼痛欲裂。我睜開雙眼,卻看到了滿眼的暗洋紅色——那是,Veteres——距離我們村莊最近的大城市——的一家醫院的天花板。我對現在的環境倒不是怎麼奇怪,因為我的目光落在了一大片擦傷和淤青上,以及我左腿上的石膏...什麼人肯定對我下了名為"Ossa-Fracta"的詛咒——因為那只能是根壞掉的骨頭!\n\t/cut當馬格斯和一名緊繃著臉的護士走進來的時候,我就立刻明白了:我遭遇的事情比想像中的還嚴重。顯然,我針對新制的小型地獄魂石的實驗發生了反彈並引起了爆炸,雖然規模不大,但仍有殺傷力。不過我也就只能想到這點事情了:我左小腿上覆蓋的黑曜石、鐵和鑽石製成的護甲,現在變成了某種完全無法拆除的護甲——更準確地說,是某種淡藍的,類似符文矩陣的魔法護甲。\n\t/cut我冷靜下來,並問馬格斯怎麼看,雖然我已然知道發生了什麼。「我覺得吧,」,他說,並在認真聆聽的護士看我之前瞥了護士一眼,「那是某種鑽石殘留物,這也是為什麼我們沒辦法拆掉它的原因。同時,它還被某種...異域的能量束縛著,這也是為什麼你現在會躺在這裡,而不是當地診所,的原因——共聚會自從上次邪術事件以來就一直對襲擊人類的不明能量高度重視,我們必須保證不招惹是非。」\n\t/cut「我知道了...」平日裡,馬格斯是不會去操心諸如就未知能量事件照會共聚會這種正式的事情的——我已經著手研究惡魔意志多時了,也不見共聚會上門來為新的魔法能量辦相關手續。我對政治不感興趣,我也不打算透露太多消息,但我知道馬格斯對此事非常謹慎——這意味著,在接下來一段時間內,馬格斯都會為這意志所蘊含的能量擔憂,說不定還會牽扯出陳年舊賬也說不定...?\n\/cut「夠了,話題到此為止,」馬格斯說罷便披上了他的長袍,「我原本打算一開始就將之公之於眾的,但那時它的威力還不明顯,但現在...」\n\t我感受到左腿有一股熱浪,就像要把我的腿燒起來一樣,同時為看到馬格斯捧成杯狀的手蓋在了藍色的殼上,散發出耀眼的紅光。幾秒鐘後——雖然我感覺這像是經過了永恆的時間——殼開始碎裂並脫落。說實話這個結局有些令人掃興。\n\t/cut我試圖起身,但馬格斯一把把我按回床上:「貝拉,你需要休息。魂石的事情可以先放一放。」對此,一開始我是拒絕的,但我後來轉而開始思考這次事故。馬格斯不早點這麼做的理由只能是地獄魂石在爆炸後仍留在我身上。換言之,我腿上不論發生什麼,都和惡魔意志有關;只要拿去魂石,那層殼也就能被移除。我開始了沉思... +guide.BloodMagic.entry.demon.sentientGem.info.1=幾天後,馬格斯強制執行的「休養生息」結束了。我決定在我現有的基礎上繼續研究感知護甲。然而,還有很多關於感知之劍和惡魔意志的疑問沒有解答。誠然,我們有一些理論上的猜想,但畢竟是馬格斯和我提出的理論,我們也不知道究竟有多準確。\n\t為此我需要一點大膽的設想。馬格斯告訴我說,我們在學習血之魔法時,也有必要學習另一門魔法的藝術。提比略/cut建議我去學習花之魔法,但我對此嗤之以鼻——「一堆花也能幫我擊退惡魔?!」 +guide.BloodMagic.entry.demon.sentientGem.info.2=感知護甲寶石是塊可以讓你穿卸感知護甲的工具。確保身上有16點惡魔意志,使用這塊寶石(右擊),便會將你身上的護甲悉數替換成一套全新的感知護甲,同時還會繼承你本來護甲上的附魔效果;再次使用這塊寶石就可以脫下感知護甲並換回你本來的護甲。當然,即便你身上沒有護甲,這塊寶石也是可以用的。\n\t感知護甲的效果一般與普通鐵護甲無異,除此之外沒有別/cut的效果。但,和感知工具一樣,當你身上持有惡魔意志時,感知護甲的保護能力就會上升,上升幅度與意志數量成正比。也正是因為此,當你身上有海量惡魔意志時它的保護能力就會變得十分強大。但有一點需要注意,就是你每受到一次傷害,都會消耗地獄魂石中的惡魔意志,如果意志數量太低,感知護甲就可能會被打回原形。說不定是個弱點呢! +guide.BloodMagic.entry.demon.routing.info=血魔法的物品傳送是以惡魔意志編織成的網的形式出現的,整張網構成了物品傳輸的通路,連接著每一個儲存點。讓我來先講解一下每一個物品都是幹什麼的。\n\t每一個路由系統都有一個主控路由節點,相當於整個系統的中樞。輸入節點用於將物品輸入路由網絡,輸出節點將物品從網絡中提取出來,而標準的路由節點沒有任何特殊功能。\n\t/cut網絡的搭建方法如下:首先,你需要在潛行時手持節點連接工具右擊一個節點,然後以同樣的方法右擊另一個你想與之連接的節點。只要兩個節點之間能找到某種通路,抑或都連接在主節點上,它們就可以互相「通信」。\n\t物品路由第一原則:物品總是從最近的輸入節點進入網絡,從最近的輸出節點離開網絡。你需要篩選器來限制物品的流向。在節點的操作界面/cut上有一個按鈕可以讓你進行過濾設置,可以精確到面(界面中的N指北方,以此類推)。最左邊的格子還可以指定物品數量和種類。對於輸入節點來說,篩選器的存在會使它們只提取篩選器指定的物品;如果你指定了數量,它們還會留下指定數量的物品,而非全部提取出來。對於輸出節點來說,篩選器則讓它們只接受並輸出指定的物品;如果你指定了數量,那麼它們最多只會輸出那麼多物品。\n\t/cut有四種不同類型的篩選器:\n\t精確匹配——物品的NBT和元數據必須完全匹配。\n\t按模組匹配——若物品來自指定Mod則匹配成功。\n\t忽略NBT——篩選器不比較NBT標籤。\n\t礦物字典——若物品帶有相同礦物字典條目則匹配成功。\n\t/cut在將篩選器放入路由節點後,你可以在路由節點上看到兩個數字:數量和優先級。點擊篩選器中的任何物品後即可看到其名字,正下方則會顯示數量。如前文所述,這便是指定數量的地方了。若你將數量設定為0,那麼就意味著「所有」——對於輸入節點來說,那就是抽取所有物品;對於輸出節點來說,就是提供所有物品。\n\t第二個數字便是優先級,可用一旁的箭頭調整。數字越小,/cut優先級越高,物品將會首先試圖前往優先級高的節點。 +guide.BloodMagic.entry.demon.aura.info=生物被殺死後,其靈魂會日漸消退,最終回歸創世之神。使用投網,可以將其束縛於現世,但也有一些難度。我們現在,出於種種理由,對這些意志加以干擾並凍結其一切活性。若我們燃燒意志,它就會回歸虛無。但若是我們直接將意志釋放到空氣中,我們便可以以更靈活的方式駕馭這股力量。有些方式十分普通,而有些方式則顯得十分強大。\n\t在將惡魔意志釋放到空氣中/cut後,它會一直待在釋放出來的那片土地上(即,那個區塊),不會輕易離開。每一片土地上的不同種類的意志(關於意志的種類,後文有詳述)互不影響。這些意志的存在還可以用其他的方塊和物品來調整。 +guide.BloodMagic.entry.demon.types.info=到目前為止,每當我們討論惡魔意志時,都是討論的原生意志。這也就意味著這是天然的意志,但這並不等於它是純的。事實上,惡魔意志有若干類型;除開原生意志,還有腐蝕、破壞、復仇以及堅毅四種意志。原生意志實質是這四種意志的混合物,也許還有一些至今沒有識別的意志,但有一點可以確定,即分離後的意志很難再融合為一體。\n\t四種不同的意志的真正來源/cut至今仍然不明,但我們已經掌握了產生這四種意志的方法。將意志釋放到空氣中後,相同種類的意志就會開始聚集在一起。據此,只需要有一種可以收集特定種類意志的設備就可以完成任務了。接下來的幾個章節中將會講述其中一種設備——惡魔結晶壇。\n\t四種意志代表了人的四種慾望。當然我們仍然可以假定存在更多種意志,但也許它們/cut的純度還不夠,也許根本不能存在,總而言之我們目前還沒發現新的意志種類。\n\t腐蝕——代表了藉由各種方式——酸液、蠻力、等等——破壞萬物的慾望。掌握了這種力量的人,將能自由地驅使各種疾病(換言之,各種負面效果)的力量,並令自身免受劇毒的侵蝕。\n\t惡意——可看作是——一種孜孜不倦尋找對手的慾望。通常,駕/cut馭惡意能量的人,只要鎖定了目標,移動速度就會上升,使得可憐的獵物無處躲藏,只得坐以待斃。\n\t破壞——你或許已經猜到了——其實就是純粹的力量。正確地使用這種力量可以令使用者的身體素質在短時間內獲得快速提升;同時還可以用來粉碎或碾磨其他物品。\n\t堅毅——無數的觀察表明——這是抵禦攻擊,使自身免遭傷害的/cut慾望。大多數情況下,操縱這種慾望的人,都是團隊中的銅牆鐵壁——任何攻擊都不會傷他分毫。如果你想藉由你的護甲或儀式來保障你的存活概率,這股力量絕對是你的第一選擇。 +guide.BloodMagic.entry.demon.crucible.info=惡魔坩堝可將地獄魂石中的惡魔意志散佈到當地(即當前區塊)的大氣之中。這口坩堝有若干用途:最簡單的一個就是直接將地獄魂石放入其中(右擊放入)。坩堝會自動從魂石中抽取惡魔意志並散佈到空氣中,直到飽和(每種意志大約都會在達到100點時飽和)或者魂石本身被抽乾了。\n\t此外,它還可以抽取空氣中的惡魔意志並灌輸進魂石中。操作方式和散佈惡魔意志無/cut異,只是坩堝需要一個強的紅石信號(即強充能)。\n\t最後,直接往裡面投入一塊惡魔意志也是可以的,不論什麼形式,只要有容納意志的空間就可以進行轉化。舉個例子,將晶化惡魔意志投入坩堝可產生50點意志。 +guide.BloodMagic.entry.demon.crystallizer.info=正如之前所提到的那樣,惡魔靈氣——通常我們會簡單以「大氣」指代之——是惡魔意志的空靈的存在形式,而擊殺怪物獲得的物質則是惡魔意志物理形式的具現。而這惡魔結晶壇,則像是一個錨點,讓漂浮在大氣中的惡魔意志以晶體的形態重現。\n\t你也許會問,為什麼不直接用地獄魂石培養一塊晶體呢?這是因為在我們將惡魔意志釋放到空氣中時,它身上的禁錮/cut就已經被解除了——記住,當我們殺死一個怪物時,它身上的意志也就隨之被我們禁錮了。再次釋放自然會令其重新恢復活力,而這結晶壇就是直接吸收這活的惡魔意志。不要太想當然啦。\n\t結晶過程需要比較高的惡魔靈氣的濃度(大概是80點),並且需要一段時間。在這之後,結晶壇的上方便會長出只有一根尖的惡魔晶簇。結晶壇有兩種工作方式:它既可以吸收/cut特定的一種意志然後產生對應的晶體;也可以直接吸收原生意志來產生晶體。\n\t這其中的區別在於,使用原生意志時,有大約40%%概率會獲得任意一種特定類型的晶體。而這將是你獲得特定類型的意志的第一步。 +guide.BloodMagic.entry.demon.cluster.info=惡魔晶簇既可以使用惡魔結晶壇培養,也可在獄火熔爐中用惡魔結晶製作。晶簇可以在各種地方生長——地板、牆壁、甚至天花板上。完全長成的晶簇應該有七個尖,打掉後每一個尖都會變成一塊結晶。然而,如果你使用含有至少1024點意志的地獄魂石來收穫(右擊),你便能只收穫一塊結晶而不影響到整棵晶簇。\n\t晶簇生長的過程中,會吸收同種惡魔靈氣。雖然慢,但的確/cut是有收益的。\n\t有兩種和晶簇的種植和收穫相關的儀式:孤魂集會和碎晶裂紋。具體用法可以參閱《儀式大師》一卷。 +guide.BloodMagic.entry.demon.pylon.info=你或許已經發現了,在沒有外力的影響下,惡魔靈氣只會待在它被釋放出來的那個地方(即當前區塊)。而這惡魔導能塔,則為那些靈域中的意志亮起了一盞燈——一盞指引方向的燈。附近的意志在這燈的指引下會逐漸向燈靠攏,直至這些地方的意志數量保持均勻。(註:這裡所謂的「附近」不含對角線上的區塊,即只有與塔所在的區塊相鄰的四個區塊會受到影響)。另外要注意的是,意志只會從多的地方流/cut向少的地方。若是什麼地方的意志的濃度比附近的地方濃度低了,它就不會繼續流動了。 +guide.BloodMagic.entry.demon.gauge.info=你需要一個測量儀來測定靈域中的惡魔意志濃度。只需要一直放在你的背包中,測量儀便可將濃度以五個指示器的形式顯示出來(在屏幕左上角)。潛行時你還能得知具體數量,但這個結果是經過四捨五入的。 + + + +# Alchemy Entries +guide.BloodMagic.entry.alchemy.intro=序 +guide.BloodMagic.entry.alchemy.ash=奧術粉灰 +guide.BloodMagic.entry.alchemy.speed=法陣:敏捷 +guide.BloodMagic.entry.alchemy.updraft=法陣:升騰 +guide.BloodMagic.entry.alchemy.bounce=法陣:彈跳 +guide.BloodMagic.entry.alchemy.turret=法陣:骷髏炮塔 +guide.BloodMagic.entry.alchemy.buff=增益法陣 +guide.BloodMagic.entry.alchemy.fastMiner=法陣:速掘 + + + + +# Alchemy Entry Texts +guide.BloodMagic.entry.alchemy.intro.info=我叫弗拉德·海泊恩,是一名血術士。我一直致力於研究煉金術的細節以及所有魔法中共同的原則——「等價交換」。簡單來說,你不能無中生有,雖然很多人一直在致力於尋找那個可以無視此原則的石頭。很顯然,石頭的尋找之旅並不順利,因為人們總是會在驚訝聲中發現石頭是假貨。當然,我不只是個煉金術師,我主要還是在跟儀式大師和締造者學習血之魔法,這二位在圈內業已是頗具聲望的人物了。/cut馬格斯和提比略這幾年來一直在記錄他們的成果,但是我一直不知道馬格斯是否真的記錄下了他的畢生所學——既不能證明,也不能證偽。\n\t我的這本書將記錄血魔法中的煉金術。從奧術粉塵,到複雜的煉金台桌,你將會在這本書中找到世間各種複雜的元素的線索。當然,為了讀懂這本書,你還需要閱讀其餘的幾本書,以對血魔法有清楚的瞭解。\n\t/cut就現在來說呢,我衷心希望面前的讀者閱讀愉快。這些書頁的內容,都是如假包換的真才實學。 +guide.BloodMagic.entry.alchemy.ash.info=奧術粉塵便是煉金法陣的基礎,而煉金法陣(為簡便,下簡稱法陣)——一種圓形法陣——則擁有多種強大的功能。合成奧術粉塵需要用到獄火熔爐和惡魔意志,關於這兩樣東西的細節可以參考本書《惡魔使者》一卷。\n\t/cut一份奧術粉塵可使用二十次。對著地面或者牆壁使用便可畫出一個圓形的法陣(如果是牆壁,你只能在一個方向上看到法陣)。然後,對法陣中央使用合適的催化劑即可改變其形狀,當然也會消耗催化劑(即,右擊使用)。如果法陣沒有變形,那麼你肯定有什麼地方搞錯了。\n\t在觀察到法陣變形後,你便可以放入次要物品了。合適的次要物品會啟動法陣,屆時你會看到法陣開始旋轉,並開始/cut產生各種變化,具體變化隨法陣不同而不同。\n\t所有非合成的法陣用途都可以在本書中查閱到,即便合成被他人強行更改過也可以。對於需要的物品,它們都已經過排序,按照本書給出的順序放置即可。 +guide.BloodMagic.entry.alchemy.speed.info=法陣:敏捷可以製造若干氣旋,並用法力加熱。此後,一旦有生物走入其中,它們就會被風的力量推向前方。此外,它還可以免除所有因此產生的掉落傷害。只需要做些運動就好了。\n\t漩渦推進的方向是陣列上箭頭的方向。\n\t另外,相比於直接走入陣列中,從高處掉入陣列的效果會更好。這要歸功於你掉下來時周圍空氣產生的流動。 +guide.BloodMagic.entry.alchemy.updraft.info=這個陣列使用和法陣:敏捷一樣的原理,不過這次的方向是朝上了。自然地,使用陣列時務必小心:再下來就不是易事了! +guide.BloodMagic.entry.alchemy.bounce.info=陣列會將接近中心的熱量集中到下面,進而軟化地面,並最終轉化為一種由碳和氫組成的橡膠狀物質。這種物質會將生物彈至空中,同時也能避免掉落傷害。潛行即可避免這種神奇材料的影響,當然這不會影響摔落保護的功能。 +guide.BloodMagic.entry.alchemy.turret.info=利用那些仍然控制著怪物的惡魔意志,你可以控制一個骷髏的心智。只要有骷髏進入了這個陣列的覆蓋範圍,這骷髏就會化身哨兵,並向所有敵對生物開火。不過這個法陣仍在實驗當中,它有時候會不管用。 +guide.BloodMagic.entry.alchemy.buff.info=經過嚴密的研究,你發現法陣擁有強大的應用潛力。迄今,你已成功製造了數種陣列,從加速移動,到初級的傳送,應有盡有。但唯有一種陣列,你至今仍然沒有著手去研究,那便是提供強大的正面增益的陣列。\n\t增益陣列實際上是指一系列可以提供範圍增益效果的陣列。這些陣列產生的增益效果通常都有很大的固定覆蓋範圍,不受外力影響。然而,因/cut為法陣不會牽扯到靈魂網絡,陣列需要別的方式來傳播這種效果,通常是直接用血。換言之,當有玩家展開陣列時,玩家就會立刻受到傷害(損失生命),藉由此啟動陣列。\n\t因為使用了直接獻祭,前期使用這種陣列會比使用其他獲取增益的手段更經濟一些。距離,如果某個印記可消耗100LP並換取10秒的效果,陣列可以以1點生命的代價換來30秒同樣的效果(1點生命對於一級/cut祭壇來說是100LP)。儘管到了後期,這種陣列就不會再有效率上的優勢,但因為它們的位置是固定的,相比於印記,它們通常會給予更強大的效果,所以它們到了後期仍有它們的價值。 +guide.BloodMagic.entry.alchemy.fastMiner.info=遇到大範圍的雕刻任務,有時候還是自己動手更划算一些。對於這種情況,這個陣列便是你的不二選擇。這個陣列可為10格內的玩家提供急迫 III的效果,消耗則是每30秒1點生命值(半顆心)。因為是普通的急迫效果,所以它也可以提高你的攻擊速度,不過要記住,別的玩家同樣會被陣列覆蓋到! From 5ea7177bdbc7e0d3f55acbb289e377493491402b Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Mon, 3 Apr 2017 17:57:40 -0700 Subject: [PATCH 62/82] Re-implement Soul Fray on death (#1118) This should be all that's needed (cherry picked from commit bffd191) --- .../bloodmagic/potion/PotionEventHandlers.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/main/java/WayofTime/bloodmagic/potion/PotionEventHandlers.java b/src/main/java/WayofTime/bloodmagic/potion/PotionEventHandlers.java index 4bfb118f..603f8887 100644 --- a/src/main/java/WayofTime/bloodmagic/potion/PotionEventHandlers.java +++ b/src/main/java/WayofTime/bloodmagic/potion/PotionEventHandlers.java @@ -1,15 +1,18 @@ package WayofTime.bloodmagic.potion; +import WayofTime.bloodmagic.api.event.SacrificeKnifeUsedEvent; import WayofTime.bloodmagic.registry.ModPotions; import net.minecraft.entity.Entity; import net.minecraft.entity.IProjectile; import net.minecraft.entity.projectile.EntityArrow; import net.minecraft.entity.projectile.EntityThrowable; +import net.minecraft.potion.PotionEffect; import net.minecraft.util.math.AxisAlignedBB; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.living.EnderTeleportEvent; import net.minecraftforge.event.entity.living.LivingAttackEvent; import net.minecraftforge.event.entity.living.LivingEvent; +import net.minecraftforge.event.entity.player.PlayerEvent; import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; @@ -111,6 +114,20 @@ public class PotionEventHandlers } } + @SubscribeEvent + public void onPlayerRespawn(PlayerEvent.Clone event) + { + if (event.isWasDeath()) + event.getEntityPlayer().addPotionEffect(new PotionEffect(ModPotions.soulFray, 400)); + } + + @SubscribeEvent + public void onSacrificeKnifeUsed(SacrificeKnifeUsedEvent event) + { + if (event.player.isPotionActive(ModPotions.soulFray)) + event.lpAdded = (int) (event.lpAdded * 0.1D); + } + @SubscribeEvent(priority = EventPriority.HIGHEST) public void onPlayerDamageEvent(LivingAttackEvent event) { From 3be9bdf4bc76af48a37612b6e9d34e3f31fd7218 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Mon, 3 Apr 2017 17:03:46 -0700 Subject: [PATCH 63/82] Allow commands to be used in command blocks (#1117) (cherry picked from commit 805576a) --- .../WayofTime/bloodmagic/command/CommandBloodMagic.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/WayofTime/bloodmagic/command/CommandBloodMagic.java b/src/main/java/WayofTime/bloodmagic/command/CommandBloodMagic.java index 625166fa..dd92000e 100644 --- a/src/main/java/WayofTime/bloodmagic/command/CommandBloodMagic.java +++ b/src/main/java/WayofTime/bloodmagic/command/CommandBloodMagic.java @@ -29,6 +29,12 @@ public class CommandBloodMagic extends CommandTreeBase return "/bloodmagic help"; } + @Override + public int getRequiredPermissionLevel() + { + return 2; + } + public static void displayHelpString(ICommandSender commandSender, String display, Object... info) { commandSender.sendMessage(new TextComponentString(TextHelper.localizeEffect(display, info))); From 078ab16b43d0c9d84e7b43ad901516edec01771d Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Mon, 3 Apr 2017 18:02:56 -0700 Subject: [PATCH 64/82] Update changelog + version --- changelog.txt | 12 ++++++++++++ gradle.properties | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/changelog.txt b/changelog.txt index bdd790e0..12b8f2a3 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,15 @@ +------------------------------------------------------ +Version 2.1.9 +------------------------------------------------------ + +- Blood Magic commands (/bloodmagic) can now be used in Command Blocks + - https://github.com/WayofTime/BloodMagic/issues/1117 +- Re-implemented the Soul Fray debuff on death + - No more exploiting sacrifice by killing yourself over and over (again) + - https://github.com/WayofTime/BloodMagic/issues/1118 +- Updated Traditional Chinese localization + - https://github.com/WayofTime/BloodMagic/pull/1116 + ------------------------------------------------------ Version 2.1.8 ------------------------------------------------------ diff --git a/gradle.properties b/gradle.properties index 8ccfe375..9b194ffb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_name=BloodMagic package_group=com.wayoftime.bloodmagic -mod_version=2.1.8 +mod_version=2.1.9 mc_version=1.10.2 forge_version=12.18.3.2221 curse_id=224791 From 324d49e3ac9fee3464c60c01c7d50291694b5e92 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Sun, 30 Apr 2017 17:20:17 -0700 Subject: [PATCH 65/82] Sanity check pos passed by client Prevents malicious clients from loading arbitrary chunks. Thanks to pau101 for spotting it. (cherry picked from commit 7c19e2e) --- .../bloodmagic/network/ItemRouterAmountPacketProcessor.java | 3 +++ .../bloodmagic/network/ItemRouterButtonPacketProcessor.java | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/main/java/WayofTime/bloodmagic/network/ItemRouterAmountPacketProcessor.java b/src/main/java/WayofTime/bloodmagic/network/ItemRouterAmountPacketProcessor.java index debc75e3..d6cc57b8 100644 --- a/src/main/java/WayofTime/bloodmagic/network/ItemRouterAmountPacketProcessor.java +++ b/src/main/java/WayofTime/bloodmagic/network/ItemRouterAmountPacketProcessor.java @@ -67,6 +67,9 @@ public class ItemRouterAmountPacketProcessor implements IMessage, IMessageHandle World world = DimensionManager.getWorld(dimension); if (world != null) { + if (!world.isBlockLoaded(pos)) + return; + TileEntity tile = world.getTileEntity(pos); if (tile instanceof TileFilteredRoutingNode) { diff --git a/src/main/java/WayofTime/bloodmagic/network/ItemRouterButtonPacketProcessor.java b/src/main/java/WayofTime/bloodmagic/network/ItemRouterButtonPacketProcessor.java index d3b3dcf8..905af75a 100644 --- a/src/main/java/WayofTime/bloodmagic/network/ItemRouterButtonPacketProcessor.java +++ b/src/main/java/WayofTime/bloodmagic/network/ItemRouterButtonPacketProcessor.java @@ -63,6 +63,9 @@ public class ItemRouterButtonPacketProcessor implements IMessage, IMessageHandle World world = DimensionManager.getWorld(dimension); if (world != null) { + if (!world.isBlockLoaded(pos)) + return; + TileEntity tile = world.getTileEntity(pos); if (tile instanceof TileFilteredRoutingNode) { From 717279db4ba90b3d8588aa07cb1cc4548f2aedaa Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Mon, 8 May 2017 19:36:48 -0700 Subject: [PATCH 66/82] Bound tools now properly mark themselves as tools Because *somebody* forgot to do that. --- src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java index 300c8722..3394e695 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java @@ -62,6 +62,7 @@ public class ItemBoundTool extends ItemTool implements IBindable, IActivatable super(damage, 1, ModItems.BOUND_TOOL_MATERIAL, effectiveBlocks); setUnlocalizedName(Constants.Mod.MODID + ".bound." + name); setCreativeTab(BloodMagic.tabBloodMagic); + setHarvestLevel(name, 4); this.name = name; this.tooltipBase = "tooltip.BloodMagic.bound." + name + "."; From 4cce468ede2e7c3a8d30410f73982715069a0ac9 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Mon, 8 May 2017 19:39:31 -0700 Subject: [PATCH 67/82] Update changelog + version (cherry picked from commit 66e3066) --- changelog.txt | 7 +++++++ gradle.properties | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/changelog.txt b/changelog.txt index 12b8f2a3..183bfbf2 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,10 @@ +------------------------------------------------------ +Version 2.1.10 +------------------------------------------------------ + +- Fixed malicious clients being able to load arbitrary chunks on the server +- Fixed Bound tools not setting their tool class and harvest level + ------------------------------------------------------ Version 2.1.9 ------------------------------------------------------ diff --git a/gradle.properties b/gradle.properties index 9b194ffb..0dde825d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_name=BloodMagic package_group=com.wayoftime.bloodmagic -mod_version=2.1.9 +mod_version=2.1.10 mc_version=1.10.2 forge_version=12.18.3.2221 curse_id=224791 From 375e3b0ee2c9621f21a456d6d22ff1c375f5d6f4 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Sun, 21 May 2017 13:08:29 -0700 Subject: [PATCH 68/82] Add support for ExU and AA crops to plantable handler (#1107) Theoretically. Don't actually know if their stuff is written properly. (cherry picked from commit abef1ba) --- .../harvest/HarvestHandlerPlantable.java | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerPlantable.java b/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerPlantable.java index a1e98351..a5152b27 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerPlantable.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerPlantable.java @@ -7,9 +7,12 @@ import net.minecraft.block.Block; import net.minecraft.entity.item.EntityItem; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.common.IPlantable; +import net.minecraftforge.fml.common.Loader; +import net.minecraftforge.fml.common.registry.ForgeRegistries; import java.util.List; @@ -28,6 +31,13 @@ public class HarvestHandlerPlantable implements IHarvestHandler HarvestRegistry.registerStandardCrop(Blocks.POTATOES, 7); HarvestRegistry.registerStandardCrop(Blocks.BEETROOTS, 3); HarvestRegistry.registerStandardCrop(Blocks.NETHER_WART, 3); + + addThirdPartyCrop("actuallyadditions", "blockFlax", 7); + addThirdPartyCrop("actuallyadditions", "blockCanola", 7); + addThirdPartyCrop("actuallyadditions", "blockRice", 7); + + addThirdPartyCrop("extrautils2", "redorchid", 6); + addThirdPartyCrop("extrautils2", "enderlily", 7); } @Override @@ -51,11 +61,7 @@ public class HarvestHandlerPlantable implements IHarvestHandler if (stack.getItem() instanceof IPlantable) { - if (stack.stackSize > 1) - stack.stackSize--; - else - drops.remove(stack); - + stack.stackSize--; foundSeed = true; break; } @@ -67,6 +73,9 @@ public class HarvestHandlerPlantable implements IHarvestHandler world.playEvent(2001, pos, Block.getStateId(blockStack.getState())); for (ItemStack stack : drops) { + if (stack == null || stack.stackSize <= 0) + continue; + if (!world.isRemote) { EntityItem toDrop = new EntityItem(world, pos.getX(), pos.getY() + 0.5, pos.getZ(), stack); @@ -79,4 +88,14 @@ public class HarvestHandlerPlantable implements IHarvestHandler return false; } + + private static void addThirdPartyCrop(String modid, String regName, int matureMeta) + { + if (!Loader.isModLoaded(modid)) + return; + + Block block = ForgeRegistries.BLOCKS.getValue(new ResourceLocation(modid, regName)); + if (block != null && block != Blocks.AIR) + HarvestRegistry.registerStandardCrop(block, matureMeta); + } } From 066cf5909c16da5441e4b9a827d7e12e3e0a94ec Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Sun, 21 May 2017 12:56:51 -0700 Subject: [PATCH 69/82] Fix permission level for commands (#1117) (cherry picked from commit c7f6445) --- .../WayofTime/bloodmagic/command/sub/SubCommandBind.java | 6 ++++++ .../WayofTime/bloodmagic/command/sub/SubCommandNetwork.java | 6 ++++++ .../WayofTime/bloodmagic/command/sub/SubCommandOrb.java | 6 ++++++ 3 files changed, 18 insertions(+) diff --git a/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandBind.java b/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandBind.java index ae6489d9..0798f3fe 100644 --- a/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandBind.java +++ b/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandBind.java @@ -26,6 +26,12 @@ public class SubCommandBind extends CommandBase return TextHelper.localizeEffect("commands.bind.usage"); } + @Override + public int getRequiredPermissionLevel() + { + return 2; + } + @Override public void execute(MinecraftServer server, ICommandSender commandSender, String[] args) throws CommandException { diff --git a/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandNetwork.java b/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandNetwork.java index f54f501d..f874d954 100644 --- a/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandNetwork.java +++ b/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandNetwork.java @@ -25,6 +25,12 @@ public class SubCommandNetwork extends CommandBase return TextHelper.localizeEffect("commands.network.usage"); } + @Override + public int getRequiredPermissionLevel() + { + return 2; + } + @Override public void execute(MinecraftServer server, ICommandSender commandSender, String[] args) throws CommandException { diff --git a/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandOrb.java b/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandOrb.java index d982059b..58c5396c 100644 --- a/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandOrb.java +++ b/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandOrb.java @@ -26,6 +26,12 @@ public class SubCommandOrb extends CommandBase return TextHelper.localizeEffect("commands.orb.usage"); } + @Override + public int getRequiredPermissionLevel() + { + return 2; + } + @Override public void execute(MinecraftServer server, ICommandSender commandSender, String[] args) throws CommandException { From 4b14eac1db5589dd3dca400c6f45185b36a351c5 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Sun, 21 May 2017 12:29:52 -0700 Subject: [PATCH 70/82] Large Bloodstone Bricks should get 4 from crafting (#1125) (cherry picked from commit 5b9bb07) --- src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java b/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java index 7d599158..f5b30fd6 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java @@ -122,7 +122,7 @@ public class ModRecipes GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.PACK_SACRIFICE), "aba", "cdc", "aea", 'a', "blockGlass", 'b', Items.BUCKET, 'c', "ingotIron", 'd', Items.LEATHER_CHESTPLATE, 'e', ModItems.SLATE)); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.RITUAL_DIVINER), "dfd", "ase", "dwd", 'f', EnumRuneType.FIRE.getScribeStack(), 'a', EnumRuneType.AIR.getScribeStack(), 'w', EnumRuneType.WATER.getScribeStack(), 'e', EnumRuneType.EARTH.getScribeStack(), 'd', "gemDiamond", 's', "stickWood")); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.RITUAL_DIVINER, 1, 1), " S ", "tdt", " S ", 'S', new ItemStack(ModItems.SLATE, 1, 3), 't', EnumRuneType.DUSK.getScribeStack(), 'd', new ItemStack(ModItems.RITUAL_DIVINER))); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.BLOOD_STONE, 1, 1), "aa", "aa", 'a', new ItemStack(ModBlocks.BLOOD_STONE))); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.BLOOD_STONE, 4, 1), "aa", "aa", 'a', new ItemStack(ModBlocks.BLOOD_STONE))); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModBlocks.BLOOD_STONE, 16), "stone", new ItemStack(ModItems.BLOOD_SHARD))); GameRegistry.addShapelessRecipe(new ItemStack(ModItems.ACTIVATION_CRYSTAL, 1, 1), new ItemStack(Items.NETHER_STAR), OrbRegistry.getOrbStack(ModItems.ORB_ARCHMAGE)); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.SOUL_SNARE, 4, 0), "sis", "iri", "sis", 's', "string", 'i', "ingotIron", 'r', "dustRedstone")); From 016ba64c54dcaec10144ceb17be4f9d7bc52c317 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Sun, 21 May 2017 12:25:35 -0700 Subject: [PATCH 71/82] Fix diamond meteor giving blocks + dynamically calculate weight (#1126) (cherry picked from commit a2ceee3) --- .../java/WayofTime/bloodmagic/meteor/Meteor.java | 8 ++++++-- .../bloodmagic/meteor/MeteorConfigHandler.java | 12 ++++++------ .../WayofTime/bloodmagic/meteor/MeteorRegistry.java | 4 ++-- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/main/java/WayofTime/bloodmagic/meteor/Meteor.java b/src/main/java/WayofTime/bloodmagic/meteor/Meteor.java index 0a28f0b3..cb0e2aa0 100644 --- a/src/main/java/WayofTime/bloodmagic/meteor/Meteor.java +++ b/src/main/java/WayofTime/bloodmagic/meteor/Meteor.java @@ -25,13 +25,17 @@ public class Meteor @Setter public int version; - public Meteor(ItemStack catalystStack, List components, float explosionStrength, int radius, int maxWeight) + public Meteor(ItemStack catalystStack, List components, float explosionStrength, int radius) { this.catalystStack = catalystStack; this.components = components; this.explosionStrength = explosionStrength; this.radius = radius; - this.maxWeight = maxWeight; + + int weight = 0; + for (MeteorComponent component : components) + weight += component.getWeight(); + this.maxWeight = weight; } public void generateMeteor(World world, BlockPos pos, IBlockState fillerBlock, double radiusModifier, double explosionModifier, double fillerChance) diff --git a/src/main/java/WayofTime/bloodmagic/meteor/MeteorConfigHandler.java b/src/main/java/WayofTime/bloodmagic/meteor/MeteorConfigHandler.java index dbe77473..ab2bd130 100644 --- a/src/main/java/WayofTime/bloodmagic/meteor/MeteorConfigHandler.java +++ b/src/main/java/WayofTime/bloodmagic/meteor/MeteorConfigHandler.java @@ -120,8 +120,9 @@ public class MeteorConfigHandler ironMeteorList.add(new MeteorComponent(30, "oreGold")); ironMeteorList.add(new MeteorComponent(60, "oreLapis")); ironMeteorList.add(new MeteorComponent(100, "oreRedstone")); - Meteor ironMeteor = new Meteor(new ItemStack(Blocks.IRON_BLOCK), ironMeteorList, 15, 5, 1000); + Meteor ironMeteor = new Meteor(new ItemStack(Blocks.IRON_BLOCK), ironMeteorList, 15, 5); ironMeteor.setVersion(2); + // Gold List goldMeteorList = Lists.newArrayList(); goldMeteorList.add(new MeteorComponent(200, "oreIron")); @@ -132,10 +133,10 @@ public class MeteorConfigHandler goldMeteorList.add(new MeteorComponent(30, "oreDiamond")); goldMeteorList.add(new MeteorComponent(20, "oreEmerald")); goldMeteorList.add(new MeteorComponent(20, "oreCoal")); - - Meteor goldMeteor = new Meteor(new ItemStack(Blocks.GOLD_BLOCK), goldMeteorList, 18, 6, 1000); + Meteor goldMeteor = new Meteor(new ItemStack(Blocks.GOLD_BLOCK), goldMeteorList, 18, 6); goldMeteor.setVersion(3); + // Diamond List diamondMeteorList = Lists.newArrayList(); diamondMeteorList.add(new MeteorComponent(50, "oreIron")); diamondMeteorList.add(new MeteorComponent(100, "oreGold")); @@ -143,9 +144,8 @@ public class MeteorConfigHandler diamondMeteorList.add(new MeteorComponent(250, "oreDiamond")); diamondMeteorList.add(new MeteorComponent(180, "oreEmerald")); diamondMeteorList.add(new MeteorComponent(50, "oreRedstone")); - diamondMeteorList.add(new MeteorComponent(400, "minecraft:diamond_block")); - - Meteor diamondMeteor = new Meteor(new ItemStack(Blocks.DIAMOND_BLOCK), diamondMeteorList, 10, 3, 1000); + diamondMeteorList.add(new MeteorComponent(400, "oreDiamond")); + Meteor diamondMeteor = new Meteor(new ItemStack(Blocks.DIAMOND_BLOCK), diamondMeteorList, 10, 3); diamondMeteor.setVersion(3); holders.add(Pair.of("IronMeteor", ironMeteor)); diff --git a/src/main/java/WayofTime/bloodmagic/meteor/MeteorRegistry.java b/src/main/java/WayofTime/bloodmagic/meteor/MeteorRegistry.java index f85cbcc4..9e7fd9aa 100644 --- a/src/main/java/WayofTime/bloodmagic/meteor/MeteorRegistry.java +++ b/src/main/java/WayofTime/bloodmagic/meteor/MeteorRegistry.java @@ -23,9 +23,9 @@ public class MeteorRegistry } } - public static void registerMeteor(ItemStack stack, List componentList, float explosionStrength, int radius, int maxWeight) + public static void registerMeteor(ItemStack stack, List componentList, float explosionStrength, int radius) { - Meteor holder = new Meteor(stack, componentList, explosionStrength, radius, maxWeight); + Meteor holder = new Meteor(stack, componentList, explosionStrength, radius); registerMeteor(stack, holder); } From 9a7db207a20edef7c8ba6d91574ab057bc7c4e1b Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Tue, 23 May 2017 18:41:24 -0700 Subject: [PATCH 72/82] Fixed NPE in Fluid Filter (#1139) --- .../WayofTime/bloodmagic/routing/RoutingFluidFilter.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/WayofTime/bloodmagic/routing/RoutingFluidFilter.java b/src/main/java/WayofTime/bloodmagic/routing/RoutingFluidFilter.java index 0486e29d..3a230d1f 100644 --- a/src/main/java/WayofTime/bloodmagic/routing/RoutingFluidFilter.java +++ b/src/main/java/WayofTime/bloodmagic/routing/RoutingFluidFilter.java @@ -13,6 +13,8 @@ import net.minecraftforge.fluids.FluidUtil; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fluids.capability.IFluidTankProperties; +import javax.annotation.Nullable; + public class RoutingFluidFilter implements IFluidFilter { protected List requestList; @@ -85,9 +87,13 @@ public class RoutingFluidFilter implements IFluidFilter } } + @Nullable public static FluidStack getFluidStackFromItemStack(ItemStack inputStack) { FluidStack fluidStack = FluidUtil.getFluidContained(inputStack); + if (fluidStack == null) + return null; + fluidStack.amount = inputStack.stackSize; return fluidStack; } From 1a407276de49fad07216885686fc2a2ed83f1f61 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Tue, 23 May 2017 18:53:32 -0700 Subject: [PATCH 73/82] Fixed capacity on tank being reset when tile was reloaded (#1138) (cherry picked from commit e9ce88f) --- src/main/java/WayofTime/bloodmagic/tile/TileBloodTank.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileBloodTank.java b/src/main/java/WayofTime/bloodmagic/tile/TileBloodTank.java index 3f0001c3..0df38b4a 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileBloodTank.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileBloodTank.java @@ -34,6 +34,7 @@ public class TileBloodTank extends TileBase super.deserialize(tagCompound); tank.readFromNBT(tagCompound.getCompoundTag(Constants.NBT.TANK)); capacity = tagCompound.getInteger(Constants.NBT.ALTAR_CAPACITY); + tank.setCapacity(capacity); } @Override From 44c132498f5a972b0fbadd3c3311c460b175afd8 Mon Sep 17 00:00:00 2001 From: NoX-programer Date: Wed, 24 May 2017 20:01:09 +0700 Subject: [PATCH 74/82] Update ru_RU.lang (#1146) --- .../assets/bloodmagic/lang/ru_RU.lang | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/main/resources/assets/bloodmagic/lang/ru_RU.lang b/src/main/resources/assets/bloodmagic/lang/ru_RU.lang index 9348eb90..b630f045 100644 --- a/src/main/resources/assets/bloodmagic/lang/ru_RU.lang +++ b/src/main/resources/assets/bloodmagic/lang/ru_RU.lang @@ -221,10 +221,10 @@ tooltip.BloodMagic.sigil.compression.desc=&oКучи алмазов tooltip.BloodMagic.sigil.divination.desc=&oВзгляд в душу tooltip.BloodMagic.sigil.divination.otherNetwork=Заглянем в душу %s tooltip.BloodMagic.sigil.divination.currentAltarTier=Уровень: %d -tooltip.BloodMagic.sigil.divination.currentEssence=Эссенции: %,d LP -tooltip.BloodMagic.sigil.divination.currentAltarCapacity=Ёмкость: %,d LP -tooltip.BloodMagic.sigil.divination.currentTranquility=Спокойствие: %,d -tooltip.BloodMagic.sigil.divination.currentBonus=Бонус: +%,d%% +tooltip.BloodMagic.sigil.divination.currentEssence=Эссенции: %d LP +tooltip.BloodMagic.sigil.divination.currentAltarCapacity=Ёмкость: %d LP +tooltip.BloodMagic.sigil.divination.currentTranquility=Спокойствие: %d +tooltip.BloodMagic.sigil.divination.currentBonus=Бонус: +%d%% tooltip.BloodMagic.sigil.water.desc=&oНужна вода? tooltip.BloodMagic.sigil.lava.desc=&oГОРЯЧЕЕ! НЕ ЕСТЬ! tooltip.BloodMagic.sigil.void.desc=&oЛучше чем Swiffer! @@ -235,15 +235,15 @@ tooltip.BloodMagic.sigil.haste.desc=&oПосле 42 чашек кофе... tooltip.BloodMagic.sigil.fastMiner.desc=&oВсе глубже и глубже... tooltip.BloodMagic.sigil.elementalAffinity.desc=&oПадающая огненная рыба! tooltip.BloodMagic.sigil.seer.desc=&oКогда просто видеть недостаточно -tooltip.BloodMagic.sigil.seer.currentAltarProgress=Прогресс: %,d LP/ %s LP +tooltip.BloodMagic.sigil.seer.currentAltarProgress=Прогресс: %d LP/ %s LP tooltip.BloodMagic.sigil.seer.currentAltarProgress.percent=Прогресс: %s -tooltip.BloodMagic.sigil.seer.currentAltarConsumptionRate=Расход: %,d LP +tooltip.BloodMagic.sigil.seer.currentAltarConsumptionRate=Расход: %d LP tooltip.BloodMagic.sigil.seer.currentAltarTier=Уровень: %d -tooltip.BloodMagic.sigil.seer.currentEssence=Эссенции: %,d LP -tooltip.BloodMagic.sigil.seer.currentAltarCapacity=Ёмкость: %,d LP -tooltip.BloodMagic.sigil.seer.currentCharge=Заряд: %,d -tooltip.BloodMagic.sigil.seer.currentTranquility=Спокойствие: %,d -tooltip.BloodMagic.sigil.seer.currentBonus=Бонус: +%,d%% +tooltip.BloodMagic.sigil.seer.currentEssence=Эссенции: %d LP +tooltip.BloodMagic.sigil.seer.currentAltarCapacity=Ёмкость: %d LP +tooltip.BloodMagic.sigil.seer.currentCharge=Заряд: %d +tooltip.BloodMagic.sigil.seer.currentTranquility=Спокойствие: %d +tooltip.BloodMagic.sigil.seer.currentBonus=Бонус: +%d%% tooltip.BloodMagic.sigil.phantomBridge.desc=&oПрогулки в воздухе... tooltip.BloodMagic.sigil.whirlwind.desc=&oЛучше не одевать юбку tooltip.BloodMagic.sigil.enderSeverance.desc=&oНеприятности для странников Края! @@ -262,7 +262,7 @@ tooltip.BloodMagic.inscriber.desc=Надписи на стене... tooltip.BloodMagic.pack.selfSacrifice.desc=This pack really chafes... tooltip.BloodMagic.pack.sacrifice.desc=Description -tooltip.BloodMagic.pack.stored=Накоплено: %,d LP +tooltip.BloodMagic.pack.stored=Накоплено: %d LP tooltip.BloodMagic.activationCrystal.weak=Активирует простые ритуалы tooltip.BloodMagic.activationCrystal.awakened=Активирует сложные ритуалы @@ -282,7 +282,7 @@ tooltip.BloodMagic.diviner.currentDirection=Направление: %s tooltip.BloodMagic.arcaneAshes=Пепел для начертания алхимических знаков -tooltip.BloodMagic.telepositionFocus.coords=Координаты: (%,d, %,d, %,d) +tooltip.BloodMagic.telepositionFocus.coords=Координаты: (%d, %d, %d) tooltip.BloodMagic.telepositionFocus.dimension=ID Измерения: %d tooltip.BloodMagic.telepositionFocus.weak=Может перемещать блоки tooltip.BloodMagic.telepositionFocus.enhanced=Может перемещать блоки @@ -320,9 +320,9 @@ tooltip.BloodMagic.itemFilter.ignoreNBT=Позволяет игнорирова tooltip.BloodMagic.itemFilter.modItems=Позволяет отобрать предметы из одного мода tooltip.BloodMagic.itemFilter.oreDict=Фильтр использующий Ore Dictionary -tooltip.BloodMagic.fluid.type=Содержит -tooltip.BloodMagic.fluid.amount=Кол-во -tooltip.BloodMagic.fluid.capacity=Ёмкость +tooltip.BloodMagic.fluid.type=Жидкость: %s +tooltip.BloodMagic.fluid.amount=Кол-во: %d / %d мВ +tooltip.BloodMagic.fluid.capacity=Ёмкость: %d мВ # Ritual ritual.BloodMagic.testRitual=Тестовый ритуал @@ -375,10 +375,10 @@ jei.BloodMagic.recipe.altar=Кровавый алтарь jei.BloodMagic.recipe.binding=Алхимическая матрица (Связывание) jei.BloodMagic.recipe.alchemyArrayCrafting=Алхимическая матрица jei.BloodMagic.recipe.soulForge=Адская кузница -jei.BloodMagic.recipe.requiredLP=LP: %,d +jei.BloodMagic.recipe.requiredLP=LP: %d jei.BloodMagic.recipe.requiredTier=Уровень: %d -jei.BloodMagic.recipe.consumptionRate=Расход: %,d LP/t -jei.BloodMagic.recipe.drainRate=Потери: %,d LP/t +jei.BloodMagic.recipe.consumptionRate=Расход: %d LP/t +jei.BloodMagic.recipe.drainRate=Потери: %d LP/t jei.BloodMagic.recipe.minimumSouls=Минимум: %1$,.2f энергии jei.BloodMagic.recipe.soulsDrained=Затраты: %1$,.2f энергии @@ -401,4 +401,4 @@ tc.research_category.BLOODMAGIC=Sanguine Arcana # Thaumcraft Research bloodmagic.research_name.BLOODMAGIC=Blood Magic bloodmagic.research_text.BLOODMAGIC=Sanguine Arcana -bloodmagic.research_page.BLOODMAGIC.1=The realm of the Blood Magics has always appeared to be a more solitary and "individual" art with blood mages being notoriously reclusive and a bit insane at times. However, the powers of self-sacrifice and life essence have uses even beyond a normal blood mage's sight, in fact, it is quite apparent that it may have some uses in thaumaturgy after all! \ No newline at end of file +bloodmagic.research_page.BLOODMAGIC.1=The realm of the Blood Magics has always appeared to be a more solitary and "individual" art with blood mages being notoriously reclusive and a bit insane at times. However, the powers of self-sacrifice and life essence have uses even beyond a normal blood mage's sight, in fact, it is quite apparent that it may have some uses in thaumaturgy after all! From 11c869a753a59d7e346e725d07f3c2cb2f718819 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Thu, 1 Jun 2017 22:17:46 -0700 Subject: [PATCH 75/82] Fix client not registering capability (#1150) (cherry picked from commit 273dca3) --- src/main/java/WayofTime/bloodmagic/proxy/ClientProxy.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/WayofTime/bloodmagic/proxy/ClientProxy.java b/src/main/java/WayofTime/bloodmagic/proxy/ClientProxy.java index a160d70a..60cac2cc 100644 --- a/src/main/java/WayofTime/bloodmagic/proxy/ClientProxy.java +++ b/src/main/java/WayofTime/bloodmagic/proxy/ClientProxy.java @@ -138,6 +138,7 @@ public class ClientProxy extends CommonProxy @Override public void init() { + super.init(); Minecraft.getMinecraft().getItemColors().registerItemColorHandler(new IItemColor() { @Override From 2ce43cfd7b79b33bf24f7980bf2401d7aafc0583 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Thu, 1 Jun 2017 22:16:24 -0700 Subject: [PATCH 76/82] API-facing methods for removing recipes (#1152) (cherry picked from commit f7b8dc0) --- .../bloodmagic/api/recipe/AlchemyTableRecipe.java | 5 +++++ .../bloodmagic/api/recipe/TartaricForgeRecipe.java | 4 ++++ .../api/registry/AlchemyArrayRecipeRegistry.java | 10 ++-------- .../api/registry/AlchemyTableRecipeRegistry.java | 5 +++++ .../bloodmagic/api/registry/AltarRecipeRegistry.java | 5 +++++ .../api/registry/TartaricForgeRecipeRegistry.java | 5 +++++ 6 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/main/java/WayofTime/bloodmagic/api/recipe/AlchemyTableRecipe.java b/src/main/java/WayofTime/bloodmagic/api/recipe/AlchemyTableRecipe.java index 457d180f..679aa63c 100644 --- a/src/main/java/WayofTime/bloodmagic/api/recipe/AlchemyTableRecipe.java +++ b/src/main/java/WayofTime/bloodmagic/api/recipe/AlchemyTableRecipe.java @@ -4,7 +4,10 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import com.google.common.collect.ImmutableList; +import lombok.EqualsAndHashCode; import lombok.Getter; +import lombok.ToString; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -12,6 +15,8 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.oredict.OreDictionary; +@EqualsAndHashCode +@ToString public class AlchemyTableRecipe { protected ItemStack output = null; diff --git a/src/main/java/WayofTime/bloodmagic/api/recipe/TartaricForgeRecipe.java b/src/main/java/WayofTime/bloodmagic/api/recipe/TartaricForgeRecipe.java index 073ea5c5..1585bb5f 100644 --- a/src/main/java/WayofTime/bloodmagic/api/recipe/TartaricForgeRecipe.java +++ b/src/main/java/WayofTime/bloodmagic/api/recipe/TartaricForgeRecipe.java @@ -1,6 +1,8 @@ package WayofTime.bloodmagic.api.recipe; +import lombok.EqualsAndHashCode; import lombok.Getter; +import lombok.ToString; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -12,6 +14,8 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; +@EqualsAndHashCode +@ToString public class TartaricForgeRecipe { protected ItemStack output = null; diff --git a/src/main/java/WayofTime/bloodmagic/api/registry/AlchemyArrayRecipeRegistry.java b/src/main/java/WayofTime/bloodmagic/api/registry/AlchemyArrayRecipeRegistry.java index 349d315d..a90b6139 100644 --- a/src/main/java/WayofTime/bloodmagic/api/registry/AlchemyArrayRecipeRegistry.java +++ b/src/main/java/WayofTime/bloodmagic/api/registry/AlchemyArrayRecipeRegistry.java @@ -74,13 +74,7 @@ public class AlchemyArrayRecipeRegistry } } - if (circleRenderer == null) - { - recipes.put(input, new AlchemyArrayRecipe(input, catalystStack, arrayEffect, defaultRenderer)); - } else - { - recipes.put(input, new AlchemyArrayRecipe(input, catalystStack, arrayEffect, circleRenderer)); - } + recipes.put(input, new AlchemyArrayRecipe(input, catalystStack, arrayEffect, circleRenderer == null ? defaultRenderer : circleRenderer)); } public static AlchemyArrayEffect getAlchemyArrayEffect(String key) @@ -116,7 +110,7 @@ public class AlchemyArrayRecipeRegistry } /** - * @param Output + * @param stack * of the recipe * @return an array of two ItemStacks - first index is the input stack, * second is the catalyst stack. Returns {null, null} if no recipe diff --git a/src/main/java/WayofTime/bloodmagic/api/registry/AlchemyTableRecipeRegistry.java b/src/main/java/WayofTime/bloodmagic/api/registry/AlchemyTableRecipeRegistry.java index f97025ad..cbc13263 100644 --- a/src/main/java/WayofTime/bloodmagic/api/registry/AlchemyTableRecipeRegistry.java +++ b/src/main/java/WayofTime/bloodmagic/api/registry/AlchemyTableRecipeRegistry.java @@ -22,6 +22,11 @@ public class AlchemyTableRecipeRegistry registerRecipe(new AlchemyTableRecipe(outputStack, lpDrained, ticksRequired, tierRequired, objects)); } + public static void removeRecipe(AlchemyTableRecipe recipe) + { + recipeList.remove(recipe); + } + public static AlchemyTableRecipe getMatchingRecipe(List itemList, World world, BlockPos pos) { for (AlchemyTableRecipe recipe : recipeList) diff --git a/src/main/java/WayofTime/bloodmagic/api/registry/AltarRecipeRegistry.java b/src/main/java/WayofTime/bloodmagic/api/registry/AltarRecipeRegistry.java index c2ebc323..3f71204b 100644 --- a/src/main/java/WayofTime/bloodmagic/api/registry/AltarRecipeRegistry.java +++ b/src/main/java/WayofTime/bloodmagic/api/registry/AltarRecipeRegistry.java @@ -42,6 +42,11 @@ public class AltarRecipeRegistry registerRecipe(new AltarRecipe(orbStack, orbStack, tier, maxForOrb, consumeRate, drainRate, true)); } + public static void removeRecipe(AltarRecipe altarRecipe) + { + recipes.remove(altarRecipe.getInput()); + } + /** * Gets the recipe that the provided input is registered to. * diff --git a/src/main/java/WayofTime/bloodmagic/api/registry/TartaricForgeRecipeRegistry.java b/src/main/java/WayofTime/bloodmagic/api/registry/TartaricForgeRecipeRegistry.java index 35c6edfa..24ad8e39 100644 --- a/src/main/java/WayofTime/bloodmagic/api/registry/TartaricForgeRecipeRegistry.java +++ b/src/main/java/WayofTime/bloodmagic/api/registry/TartaricForgeRecipeRegistry.java @@ -22,6 +22,11 @@ public class TartaricForgeRecipeRegistry registerRecipe(new TartaricForgeRecipe(outputStack, minimulSouls, drain, objects)); } + public static void removeRecipe(TartaricForgeRecipe recipe) + { + recipeList.remove(recipe); + } + public static TartaricForgeRecipe getMatchingRecipe(List itemList, World world, BlockPos pos) { for (TartaricForgeRecipe recipe : recipeList) From 7a126f44749d75586efcfa73ca39418831de885b Mon Sep 17 00:00:00 2001 From: Yulife Date: Sat, 10 Jun 2017 21:21:08 +0200 Subject: [PATCH 77/82] Sigil Changes --- .../textures/items/SigilOfHolding.png | Bin 1605 -> 668 bytes .../textures/items/SigilOverlay.png | Bin 18111 -> 3173 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/bloodmagic/textures/items/SigilOfHolding.png b/src/main/resources/assets/bloodmagic/textures/items/SigilOfHolding.png index 55056c4b0b3148fdd129bb2457086e8aca4eb05b..4c94310317854280b1bd50190fd9294ea4df6617 100644 GIT binary patch delta 643 zcmV-}0(||&44eg!B!3BTNLh0L01FcU01FcV0GgZ_0006`Nkl*xvnW*DA5re`>9S@1;RE!QnKcmZtF1zZVL=Xhsc2g;7hEg8V1a&0yl!H22f-`&e zxc9jC_jQxvq+QjzTMO31yWX`H{9}mINqt?NDk}*R-HM&me1AS4rNxEB6G;jS@_0Qs zEY1Zqgu|*JKacI$9{qjYNY4debZmlwJ2!D%mxYB0e!s!cyU~+A4WO~1L0u{<=Fx-u zw6``hGCEGmb}%iA#)c4Y28Y?*+oQ9i1=F+$)zqkCfN?A%?WCEQn&s%|=(nN}j&1S$ z#VY`&KhH5aHGhlaI27dPlc7KXmTdzt^JShVk00{%*-KVdH|XhV#&H~4Tf%g4w4vmmbr_ptt zzTQs8#wW3D8!07HN-E0BS&T%)i3b2e2!w#;kcsITviv%_t`korGOo`!JCc5s!wr%1ENleq^$Ns_DEdb0%BEnNj1+x6)<>jKJ$4+b?grK6loQ>!< zuIrMM9pKP*&i@5~aBZyuke-JtC7LG43HXo-bi*KFrue$NEdC1k6XtmyLetQMz>|{2 dr6s}tj9;)K1M|FyDb`+k0@2xQKfR+8rkxdMKiMyT5}KZuhudxPvSQ zOFbkXWhx|u5T-(+AY+BrO&TJBAlW1#6&0CjLgjmgq&?)UKOFyPXLf(D@8|RR{=Sbb zHW`-$2h9xPa5%w<3EE_K4E4Rw2C(0`w?G36cSd z7v#2qSPo}=E@8GX7Q@R*jIs+*pN+t6cd%#^iXm2MSxlvl~lecLb>8Z}|E zRoq8TSqvsfLpcE?6-fD*P=r7-g#eLC6bKRxiG+w4Muf0P!AB6KM5aVyps|O`syT6+ zGFhu1(_&XDZWhBhlrZdaxdbk;fO2NSh(e)&g(6ra;u?l2f06O;5ZB`7miRDtcOluNMw8z6^Z#`DeI9?jsVOGxMO(y z|Ar1`oq~OJ@}Ii#Z?VPbn?CLWcJa860LeCwlkJk31*vm6oN?=?W@X!Ool+IJheeIMxe?HW8u*Fs54eC|TtE=u?LjCZXv2xq;^S_oqsHmUO z8FzTmzV@nGGK~UmZHvaXr1aPTllQopan-&*Yp7j=v9@ z%Zm($GEa2&uV|fcZ|II=UQg2Hvq8pl8`AsA2YO$MXp9UDODW$rbxP?6ZM9(``i1S? zi@@*elXl61t2(;&?B!jGD)}yB>c%qlR~6WVgQW-bk(K4cpJ(QIwrnZP@Q%E3vP&&) zOn=zpSu$K)To#$JX5s#Zvj$VRm0Ih?mR=4{7d)T&df=Sk&WmXgxgy2v>3CN&@8*}G z7qq)T0TB}UV^Z{%t=?{f$EqfMAi7(Gbj;QwB59!*o3LK>xIFr*GJ9)Gc>Uwq5=^`LdiiLn+!5)wxpu}Jl zQBip_vQ~8E<-M1e-ydgvYoERMJ!kKI*17~vAmcQ7uoQ$&mudEnVrUCi&%W-40ak@%snFB znkD3j81WZzQ5KhzE#g}u)=U+qaYg)A9Gk{rW&(hJB8lw+4l7B-rXnWs!$RCdyc7T& zDe)_g|B3~i9D(>!Zs{4hd~RZrfUe8Zqnp{{O0GU=+k;r7-zyx?6f$29uWy zz~Y@hOGaECN~9iXLAsD$ zClpY8|Q+RgF4=YDe{;ZlXp}GpJ8!GFl03fVM;X zpd-Lq)(kHo*Vn{-N(st5e(s|N7(kn8VtW9<%N0SBQ?c^r%Me<|vTM3GU zv4oEVTVlOLjYPY|ki-i~yrh<-i{vWFJjqJQlad3H(^7aTZ7DY?rqnvA8mUuK!&0-- z6lpW*K@3{{8f zLrtcZP`{)0Q)gslWG!XGWpiX}WY5Ts&=8t7&4-psE2EvD-J!jgQfv(`8kfN|tp+n)3B1%zTF<3EM@qpqb#pxx~CH6~LONy7A zSaM$pR?=4rQCg#PNU2YMX;xW9*-JS?d9U(CNC15-G!b?ucG(RXVjF`yw!wib!z=;^XfY4%he0iTh$+F5HuJX2^tj|-5N8Rs+s|s z`I^m|_qFg^46P)sJzBk5bJ{xE5!zd{JG3Wt@^qSY9_o^Rb)9rq>(=Yu(!=O6 z^iuTp>)p_Y^{w=i^lS773}6Fm1Fpe-gF!>Ip{*g$u-szvGhed;vo5pW&GpS$<~8QGEXWp~7V9lKEnZq0 zSaK{6Sl+dwSOr*rZL#XM`efGt8hef*7TYE4FA`SKIZrr)}Ta zS=$NhPT2isZ)Bfhf7E_*sm@Z)(uSpD4(bj}hdPH5N4jI2<3Yy}Cp9OgQ@zs@XANhz zbEETwi=Ioe%Q2T1uBNVh*EZKVH#@hrZs*+*cQ5y1_kIt58IR>2)gF&M)jbnEn>}Z| zti0BEo%cq2`+4v59`;f8Vfi%q%=p^)uJ!HlBl(5;Rr@{h*Z1f9cLl%!z5%-e9xl^b z##`1A2m*ZqcLhEQ(g|7}^kXn4I4HO#_-Tk)NPb9fC?zyD^l0dtFxRlMum{U^mkXD7 zhf9XXgg1qM&qcULlt+w2nnbRRydI?(#f|EW#zu!nH%8B{@K~{X#dwTWOi|38l{zbP zR$g7DxGHtknOMnKX6(s0bX-K-(YO!HKxRF2Hr^+GU;GTqjkSmMobAl6U{7%zIOUv) z1c!w3gvmsQ#9fI~Nlrz=6$;cwT88(J6|n-WB%w`m$h~4pmp)GHhtv0VYX+AHW4#TBo2 z$L_vbX<1pjhpz}3Y2Bx^Z`;1P{p|fi2b>SI)GF7O z)V@E+J$SdytFFCXyT0-e=1|t5rw!o^z27pvZE93(ENT3Bn0I*ONXU_%CYz?Fqe@51 zn&D<)^VG4JV>iBY|E{yesHLuz)>?8L92Xvc_I=# zP6$aLXUfhJ&K90sIG1;B_I$?q=?jS$ z#=2v>A6$&Qc&jJ4r~i`Qr7M>`FJJ6+={@ z`mOuh2W$p9Z`j`G8eBSfcF1Yy!cF&oo0o6-+`4{y+3mqQ%kSJBju{@g%f35#FZJHb z`&swrA8dGtepviS>QUumrN{L@>;2q1Vm)$Z)P1z?N$8UYW2~{~zhwUMVZ87u`Dx{Z z>O|9|`Q+&->FRy-Sjp7DHsy69KwU-!MxeeuI@&cF4|M9z%A0Dy!50Qvv`0D$NK0Cg|`0P0`>06Lfe02gqax=}olAs2rE zl}SWFR5;6}ld+2$Q4q#|yKH512!dUzcw7{~IKqKor661p5Q2q&Ku8e_8(Fqkv>3Gx7+D&OcIO5!oZ(CejtgF z#G7u{2u`O{%XHQ0 z{OJ-!e7?EKO!MOWoUgaHF}5xq+QzF+hbW4$9S6s@i4F(8TwfbG)??TCH;CI)nFbkq Q^8f$<07*qoM6N<$g4YofQUCw| literal 18111 zcmeI3do)z*|Hro!a!>c9GcJ{6?hG@H!OXaYgprYMV`k5oTxK#;gUX>2sYoifIJzpL zi&8?NqEti|g;F7@L%)+cD&f0_igq=twSM2q`$ix>L~ z!~&7OK!|Xn(GbEA0hb>L0zhbEh9{5V**V3k_sKh|b8O@uXMx9L6@&+Md*r0VIVSq! zwHLFk~hXNjy^uD+~ zaIS&UaiS-qpjNp|MSY(m-rYP>{Wx{jgr}RUu2w#4L)k>B8VRA}F5u{k`VAF;4-sVY ze1kIOOMpV?T{RV;%r(6XGc#sT>lHP1nL^|ig)(uXrL#)pB)}#-o_Z9pu~&%9NSWga zWQ_$@-DLZ<0*jHrs=0r@xC=yPd`Mld0Qm0FpRACT2p}ecv2?(H0dS&rNt_+P!~m1H z&R2=RLnMH4^5!}Mr_KXqHQH)t02Orr;~pD54;Z^1SasddFcjF53QV$p>rMV=e!g~x z2}COO47tdNXcy(Hf?T8Q?TwmcT;nu#{v-lx3@gnBRS}jt9T#P$^|a>}0AwXjhGyH- zA6lcCUsFSfFVtL#e05oA(7?~Hb)daAS7-wO&%_aR1E%PL8IcQ=B7+7F&h8%Tzd|i* zZSQvO87-T0Kvrj?caKoY#_qtbqDPO~+u9y3yh`vyMB=Kyv4Lnk2-yv%@5Xp7gy#@eQ(2Y=x>H_O36#$@TMVXwk)qPh!&9qEuX8E}0a<$K^ z2wSK|S1YL6R8>yo%#c;{PHdtYZ@qm=&tw()o{gSanY;hiB%vm%!s~*jl~C&wOC_`1 zxFl-)SljC=6IuF=u?l{1Ov8AUsj1N)^vfN`>TEYc+=!jzZs43~?uhk>V<5a7_1;>A zj3LG>v%i?Q;5vZY^m%KE19nf;8F#CD>gQ-h$1G-Su|KGGha<+OB}~amzY}tHhSd(j zfsQ-5{#uO*6j~Lg?Bz6N{MA4Vs`3i;w593zB=*hI1}D^WD`%Wqaze3q+k1BHX~|ff zD7&)pgs~DTf;G$5k?F!*^w9AbVy2PVgvRj};}y5KSIjj?I_7+K&cz8IuTJyBVPlw% zriKr65+SXS{UhUqv7Tj?Hc2B`Y@wjr{2Ck*u${X^mw|N;|#;38;zWRGs?t0 zril61quVmtuC(FXblddb`l@F5*{nJI!SlJXNA>E3)7!P%&Dxc~6r8Qsp)`-j#||(i zm?tcy<{c>XIO!g9Y@*rPG~(^eQ=FWS`-$~Rpwocw$70WZ8o<2=^8gIH}+Q}4`qtowhpI*hlSYThLbfjvf3cQ#mg(e#& zCswQOUATA7UR@J3<9N=|oF_SIUOiqn841T%cy7$M_riO&9v^>iU#?e9#^TqWx}Ln_ z3y#I)@Qw)>)`uf}`nM_hTyeSLMmy}Db$VrMNhLy!J-r~*R6jr?ck9|H^Q&`C-+r`V zok?*@zh3cntDNHph&22{ymx^|&mOL|a%;+(5BtT7#&;NJC-+3eJ(=`o-t&37N6lP{ zu;8+QoPEjrn7NL*?zs-HO9}a1*%?Pm?TUT+qBL!*7S3HZ*MXN%GcKdU^O5J{Y}M>3 zu2!V?`KX+LBf1BQ>5|LA+1)9bmsUh(x(KqLgq3!Dnz<3(&*%^Ol>Od8ovBoyZlu(t zUNen+&3ui3tcR{@`p2EN{E7|j2x~7Z`Pr7lqB`=S`}RBSwRZ3;m$e$T22}=C9-5;x zM}Lm9>nqppG!NIJqw|g~a9Q9|b^F%sgSQ`~nx|V~8*m-z9qA3}E$3G)4P9zlc&zXO z=yaxS=~18V!jj8^%p=WQy`_2)qO&2BNJ~gh(rWg1 zTW`GfZeJ&w$E?+^eTZ)@oOpBIRepwN`dtU!R9=y2b5HE{ZO)r+qLL}7blu9w*Gte*UK06+!08 z=oZ?ahJ&2J@WDDDJ94%HPjOq6ZIthrz7OFW^e@L-lbXPP&phg~-H}yfJJ~j2Q{JZb z@;rV2>woXc)9>v_sY$HiYep}Qc=_OtGV29v`;`dwxzRDv-dnBXg|W;Tb=YKcNnJBd z)I$G6-$#Fv&cnJ9Pa+qZn^1C4tI3TP7tJnOSE9H+x9&4Dm`;JtGl?jZd_r*GrIycK zJu%NSo~yO4pPGWczFZh~pr+zoboP|vC>>MMJ{yAu@7m>OlB>5>uBN{zWeXQ67w*lYxpCk?L}MW9^X~sqT%v5os>BxZ5<*A zXGJQ-Zr+`^YYjC=-!-X__loy|yYA)*F#62EwczdN(X;j{-v}t!bz+3Q_HRAcD{Im z%=FdVmy`S=Su_5y3hVa7Yg zCkCOr{_#0h!-wFyZr$}I|C;@Mzsa|xx1Vz3Qj?d0m+O7*eX!4|ub|gDe_KxHhkboP z%kvfmt?8;#tXJ$;Hq&tYX{A$KQ0YqypbR^2pV2H_g6kQ6w<@m zI(x^r^v=>CHLlyS{=_royML_HSOb&rh|p+JJ>ZXtF;7gE^3RP)!Pkj?^sZ> zpk~?I3*xtDn%XCNU+_*lNm?27O8kmEkaX9rs(62KT7J>8fTHg3(sS#%y`8$57B!FG zm4^K@W$?lMOrq7}(w=ZZ@3r3dEmIyxgv{-)xmo;3GPgUg#I0oIJDV=sN3_Q=_pN;g znjgMt{&RJiB&(;c*`Ze{dUNeS;`;**((Dk~~yUAhs9$F6v{q_3-7 z(k#(?bErkjt!)G1Pvb%VkEh>z-pTGunx2$2I94&G=QA6RYytq%dp?6HX1cnN*n%Jw zizDy@QK3OX=t2|#$kw4k7CQhGBm6)fKiJCPP4Q&|1fOGN;BD@TaTU@)f4*aQ20>vyuXi#9Vh!kpNFr-U@zDt|Y28f|9;s7fHTj_uZrt4w^ zO%MVi%u(h@HU@`9SP)TIb8`y|oGAi_!J45lSTq)o#1ctnW+V&-@#SGaQH8#dLpWTL z2i^Y5aFAtX;4c;nNocf0B0)*;C_xAhjU^I^XbcXG!y%y_NKsg@m=%f)78wqUeAS_Y zB6bL0DCP@-5mH^2pJ1)n%D_N6(6`5zc?Ai-4HPW;!VaQ{4rK|^SQG~Riy&85*o19)%YAeIauyu+w@BgI zkia3p95xyZ1cRV4MNk~}r*jbVxg(47-4vvrUk(R`@_!K~^$dp%rNZzEk)iw}(Lz9$ zSP;Sx2m&d?SvK?N5F>Uzoiw4KqL~dSfUvc2NDTLEEXgnE%8_)(h~Hu;IQx*KQ5R1b)ZpVKMdp+ z!iVY-D{xdF>0CI_U~CIZ3!|43?Gt!%{=Nek~#raK#c<2x!ZL zGURu5=CJDbVQ_geT3V|E`TqwCA!4oj-z~%M?W+G5%P^9~Y=2fT59CnLUlaIi!|$!! z@Opl~v%c=uA9o^oq_TXi1h!CRlWthi_Zcy?VW}+M_pQ>y{*pgm%Lg56iy_$BVlkE$ z=2)zq8I^8HwWHZvn&a?hRC5~s=Lt95`n^6G{d-3@Y7#U-pdiFmzyT@HI3v*`%_9&; zML~ZGE*}0*kRtMMpdy^?Xap>gKtSS9*wHeh`i;`zut{7&NDxa*;RmsJAX*sABcn$e zNA;ARsYy`Dgtjkhs8m7fKeWO7Go__3aP3fk3mgV|ps~{TFQKE|@K7Jwp`+dK(2+>5 zV7{0FoxFw)6xKW{N_sg#8sh8;UHO6(Xln2#c<;shP%w~5=R+qvk+g7Q314F1j-Lkl z{3>vi<4fRha*et^9ZKTiR_N*%y6{GSyYl`azrUR>{+nM$X7t}wg=xtLfdP?i%5ll& z1M|vp!GOp%<+xa$K_cz`Sx?Fd(u`IWF0JU|u;c7!cW}9G7f9Fs~dJ z42Wz~j!QNlm{*Pq21K?g$0eH&%qzzQ10vg$=9S}u0g-LWamnTb^U86-fXFuG zxMcHzdF8lZKxCV8T(bGVymDMHAhJz4F4=rwUO6rp5ZR_2mux;TuN)T)h-_1iOEw>v zSB?t?M7Al%C7Tb-E5`)`BHNVXlFbL^mE(c|k!{Lx$>sy|%5lMf$TsD;Wb=V}<+xx# zWSeqaviZQga$GPVvQ3$|R7dV*1%sg*SS8S%s&R8@kDgf<>dx*S(wqaAa3d0{n;spqF}a4Ba0 zv_Zt`3j;axyYfpa8nhD;2A4KR@2y2lc`z?|*J@PFV7cIZrqODVdn zuB^zvXA&ssYfA43yO#@UR!wYA&}p%r*se_I_Jj$J!5QmA5U%o_j{F_ zs(Ur`ijb8Xi%m*hS|e5hegUZ`mzZRHeiT?8Uf@1BrXCZ3Y@D{^!9z>#>1CwFUgC^e aMZoLsm7QMeU2)K)0Vlgf^nB{7P5%MBxa4~P From f18b60d062042ba8d382287168ad449d24157a8e Mon Sep 17 00:00:00 2001 From: Yulife Date: Sun, 11 Jun 2017 19:09:21 +0200 Subject: [PATCH 78/82] JSONifcy routing nodes I don't know how I should prepare the model but here's the full package. Master routing nodes uses one texture, normal routing node use a base texture plus a texture for their kind. --- .../block/routing/MasterRoutingNode.json | 163 ++++++++++++ .../models/block/routing/RoutingNode.json | 235 ++++++++++++++++++ .../textures/models/MasterRoutingNode.png | Bin 0 -> 1734 bytes .../textures/models/RoutingNodeBase.png | Bin 0 -> 685 bytes .../textures/models/RoutingNodeInput.png | Bin 0 -> 589 bytes .../textures/models/RoutingNodeNormal.png | Bin 0 -> 524 bytes .../textures/models/RoutingNodeOutput.png | Bin 0 -> 572 bytes 7 files changed, 398 insertions(+) create mode 100644 src/main/resources/assets/bloodmagic/models/block/routing/MasterRoutingNode.json create mode 100644 src/main/resources/assets/bloodmagic/models/block/routing/RoutingNode.json create mode 100644 src/main/resources/assets/bloodmagic/textures/models/MasterRoutingNode.png create mode 100644 src/main/resources/assets/bloodmagic/textures/models/RoutingNodeBase.png create mode 100644 src/main/resources/assets/bloodmagic/textures/models/RoutingNodeInput.png create mode 100644 src/main/resources/assets/bloodmagic/textures/models/RoutingNodeNormal.png create mode 100644 src/main/resources/assets/bloodmagic/textures/models/RoutingNodeOutput.png diff --git a/src/main/resources/assets/bloodmagic/models/block/routing/MasterRoutingNode.json b/src/main/resources/assets/bloodmagic/models/block/routing/MasterRoutingNode.json new file mode 100644 index 00000000..6aba1e66 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/routing/MasterRoutingNode.json @@ -0,0 +1,163 @@ +{ + "textures": {}, + "elements": [ + { + "name": "base", + "from": [4, 0, 4], + "to": [12, 1, 12], + "shade": true, + "faces": { + "north": { + "uv": [8, 0, 16, 1], + "texture": "#0", + "rotation": 180 + }, + "east": { + "uv": [8, 0, 16, 1], + "texture": "#0", + "rotation": 180 + }, + "south": { + "uv": [8, 0, 16, 1], + "texture": "#0", + "rotation": 180 + }, + "west": { + "uv": [8, 0, 16, 1], + "texture": "#0", + "rotation": 180 + }, + "up": { + "uv": [0, 0, 8, 8], + "texture": "#0", + "rotation": 180 + }, + "down": { + "uv": [8, 0, 16, 8], + "texture": "#0", + "rotation": 180 + } + } + }, + { + "name": "glass", + "from": [6, 6, 6], + "to": [10, 10, 10], + "shade": true, + "faces": { + "north": {"uv": [13.5, 8, 16, 10.5], "texture": "#0"}, + "east": {"uv": [13.5, 8, 16, 10.5], "texture": "#0"}, + "south": {"uv": [13.5, 8, 16, 10.5], "texture": "#0"}, + "west": {"uv": [13.5, 8, 16, 10.5], "texture": "#0"}, + "up": {"uv": [13.5, 8, 16, 10.5], "texture": "#0"}, + "down": {"uv": [13.5, 8, 16, 10.5], "texture": "#0"} + } + }, + { + "name": "pillar3", + "from": [9.5, 0.5, 7.5], + "to": [10.5, 6.5, 8.5], + "shade": true, + "faces": { + "north": {"uv": [1.5, 10, 2.5, 16], "texture": "#0"}, + "east": {"uv": [0, 10, 1, 16], "texture": "#0"}, + "south": {"uv": [1.5, 10, 2.5, 16], "texture": "#0"}, + "west": {"uv": [1.5, 10, 2.5, 16], "texture": "#0"}, + "up": {"uv": [9.5, 3.5, 10.5, 4.5], "texture": "#0"}, + "down": { + "uv": [1.5, 10, 2.5, 16], + "texture": "#0", + "cullface": "down" + } + }, + "rotation": { + "origin": [10, 3.5, 8], + "axis": "z", + "angle": 22.5 + } + }, + { + "name": "pillar4", + "from": [5.5, 0.5, 7.5], + "to": [6.5, 6.5, 8.5], + "shade": true, + "faces": { + "north": {"uv": [1.5, 10, 2.5, 16], "texture": "#0"}, + "east": {"uv": [1.5, 10, 2.5, 16], "texture": "#0"}, + "south": {"uv": [1.5, 10, 2.5, 16], "texture": "#0"}, + "west": {"uv": [0, 10, 1, 16], "texture": "#0"}, + "up": {"uv": [9.5, 3.5, 10.5, 4.5], "texture": "#0"}, + "down": { + "uv": [1.5, 10, 2.5, 16], + "texture": "#0", + "cullface": "down" + } + }, + "rotation": { + "origin": [6, 3.5, 8], + "axis": "z", + "angle": -22.5 + } + }, + { + "name": "pillar1", + "from": [7.5, 0.5, 5.5], + "to": [8.5, 6.5, 6.5], + "shade": true, + "faces": { + "north": {"uv": [0, 10, 1, 16], "texture": "#0"}, + "east": {"uv": [1.5, 10, 2.5, 16], "texture": "#0"}, + "south": {"uv": [1.5, 10, 2.5, 16], "texture": "#0"}, + "west": {"uv": [1.5, 10, 2.5, 16], "texture": "#0"}, + "up": {"uv": [9.5, 3.5, 10.5, 4.5], "texture": "#0"}, + "down": { + "uv": [1.5, 10, 2.5, 16], + "texture": "#0", + "cullface": "down" + } + }, + "rotation": { + "origin": [8, 3.5, 6], + "axis": "x", + "angle": 22.5 + } + }, + { + "name": "pillar2", + "from": [7.5, 0.5, 9.5], + "to": [8.5, 6.5, 10.5], + "shade": true, + "faces": { + "north": {"uv": [1.5, 10, 2.5, 16], "texture": "#0"}, + "east": {"uv": [1.5, 10, 2.5, 16], "texture": "#0"}, + "south": {"uv": [0, 10, 1, 16], "texture": "#0"}, + "west": {"uv": [1.5, 10, 2.5, 16], "texture": "#0"}, + "up": {"uv": [9.5, 3.5, 10.5, 4.5], "texture": "#0"}, + "down": { + "uv": [1.5, 10, 2.5, 16], + "texture": "#0", + "cullface": "down" + } + }, + "rotation": { + "origin": [8, 3.5, 10], + "axis": "x", + "angle": -22.5 + } + }, + { + "name": "core", + "from": [7, 7, 7], + "to": [9, 9, 9], + "shade": true, + "faces": { + "north": {"uv": [14.5, 11, 16, 12.5], "texture": "#0"}, + "east": {"uv": [14.5, 11, 16, 12.5], "texture": "#0"}, + "south": {"uv": [14.5, 11, 16, 12.5], "texture": "#0"}, + "west": {"uv": [14.5, 11, 16, 12.5], "texture": "#0"}, + "up": {"uv": [14.5, 11, 16, 12.5], "texture": "#0"}, + "down": {"uv": [14.5, 11, 16, 12.5], "texture": "#0"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/block/routing/RoutingNode.json b/src/main/resources/assets/bloodmagic/models/block/routing/RoutingNode.json new file mode 100644 index 00000000..b0861770 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/routing/RoutingNode.json @@ -0,0 +1,235 @@ +{ + "textures": {}, + "elements": [ + { + "name": "base", + "from": [5, 0, 5], + "to": [11, 1, 11], + "shade": true, + "faces": { + "north": { + "uv": [0, 0, 12, 2], + "texture": "#0", + "rotation": 180 + }, + "east": { + "uv": [0, 0, 12, 2], + "texture": "#0", + "rotation": 180 + }, + "south": { + "uv": [0, 0, 12, 2], + "texture": "#0", + "rotation": 180 + }, + "west": { + "uv": [0, 0, 12, 2], + "texture": "#0", + "rotation": 180 + }, + "up": {"uv": [0, 0, 12, 12], "texture": "#1"}, + "down": {"uv": [0, 0, 12, 12], "texture": "#0"} + } + }, + { + "name": "edge1", + "from": [7, 0, 4], + "to": [9, 1, 5], + "shade": true, + "faces": { + "north": {"uv": [1, 14, 5, 16], "texture": "#0"}, + "east": {"uv": [10, 14, 12, 16], "texture": "#0"}, + "south": { + "uv": [0, 0, 2, 1], + "texture": "#0", + "cullface": "south" + }, + "west": {"uv": [10, 14, 12, 16], "texture": "#0"}, + "up": { + "uv": [9, 14, 13, 16], + "texture": "#0", + "rotation": 180 + }, + "down": {"uv": [9, 14, 13, 16], "texture": "#0"} + } + }, + { + "name": "edge2", + "from": [7, 0, 11], + "to": [9, 1, 12], + "shade": true, + "faces": { + "north": { + "uv": [0, 0, 2, 1], + "texture": "#0", + "cullface": "north" + }, + "east": {"uv": [10, 14, 12, 16], "texture": "#0"}, + "south": {"uv": [1, 14, 5, 16], "texture": "#0"}, + "west": {"uv": [10, 14, 12, 16], "texture": "#0"}, + "up": {"uv": [9, 14, 13, 16], "texture": "#0"}, + "down": { + "uv": [9, 14, 13, 16], + "texture": "#0", + "rotation": 180 + } + } + }, + { + "name": "edge3", + "from": [11, 0, 7], + "to": [12, 1, 9], + "shade": true, + "faces": { + "north": {"uv": [10, 14, 12, 16], "texture": "#0"}, + "east": {"uv": [1, 14, 5, 16], "texture": "#0"}, + "south": {"uv": [10, 14, 12, 16], "texture": "#0"}, + "west": { + "uv": [0, 0, 2, 1], + "texture": "#0", + "cullface": "west" + }, + "up": { + "uv": [9, 14, 13, 16], + "texture": "#0", + "rotation": 270 + }, + "down": { + "uv": [9, 14, 13, 16], + "texture": "#0", + "rotation": 270 + } + } + }, + { + "name": "edge4", + "from": [4, 0, 7], + "to": [5, 1, 9], + "shade": true, + "faces": { + "north": {"uv": [10, 14, 12, 16], "texture": "#0"}, + "east": { + "uv": [0, 0, 2, 1], + "texture": "#0", + "cullface": "east" + }, + "south": {"uv": [10, 14, 12, 16], "texture": "#0"}, + "west": {"uv": [1, 14, 5, 16], "texture": "#0"}, + "up": { + "uv": [9, 14, 13, 16], + "texture": "#0", + "rotation": 90 + }, + "down": { + "uv": [9, 14, 13, 16], + "texture": "#0", + "rotation": 90 + } + } + }, + { + "name": "glass", + "from": [6, 6, 6], + "to": [10, 10, 10], + "shade": true, + "faces": { + "north": {"uv": [12, 0, 16, 4], "texture": "#0"}, + "east": {"uv": [12, 0, 16, 4], "texture": "#0"}, + "south": {"uv": [12, 0, 16, 4], "texture": "#0"}, + "west": {"uv": [12, 0, 16, 4], "texture": "#0"}, + "up": {"uv": [12, 0, 16, 4], "texture": "#0"}, + "down": {"uv": [12, 0, 16, 4], "texture": "#0"} + } + }, + { + "name": "pillar3", + "from": [9.5, 0.5, 7.5], + "to": [10.5, 6.5, 8.5], + "shade": true, + "faces": { + "north": {"uv": [14, 4, 16, 16], "texture": "#0"}, + "east": {"uv": [14, 4, 16, 16], "texture": "#0"}, + "south": {"uv": [14, 4, 16, 16], "texture": "#0"}, + "west": {"uv": [14, 4, 16, 16], "texture": "#0"}, + "up": {"uv": [14, 4, 16, 16], "texture": "#0"}, + "down": {"uv": [14, 4, 16, 16], "texture": "#0"} + }, + "rotation": { + "origin": [10, 3.5, 8], + "axis": "z", + "angle": 22.5 + } + }, + { + "name": "pillar4", + "from": [5.5, 0.5, 7.5], + "to": [6.5, 6.5, 8.5], + "shade": true, + "faces": { + "north": {"uv": [14, 4, 16, 16], "texture": "#0"}, + "east": {"uv": [14, 4, 16, 16], "texture": "#0"}, + "south": {"uv": [14, 4, 16, 16], "texture": "#0"}, + "west": {"uv": [14, 4, 16, 16], "texture": "#0"}, + "up": {"uv": [14, 4, 16, 16], "texture": "#0"}, + "down": {"uv": [14, 4, 16, 16], "texture": "#0"} + }, + "rotation": { + "origin": [6, 3.5, 8], + "axis": "z", + "angle": -22.5 + } + }, + { + "name": "pillar1", + "from": [7.5, 0.5, 5.5], + "to": [8.5, 6.5, 6.5], + "shade": true, + "faces": { + "north": {"uv": [14, 4, 16, 16], "texture": "#0"}, + "east": {"uv": [14, 4, 16, 16], "texture": "#0"}, + "south": {"uv": [14, 4, 16, 16], "texture": "#0"}, + "west": {"uv": [14, 4, 16, 16], "texture": "#0"}, + "up": {"uv": [14, 4, 16, 16], "texture": "#0"}, + "down": {"uv": [14, 4, 16, 16], "texture": "#0"} + }, + "rotation": { + "origin": [8, 3.5, 6], + "axis": "x", + "angle": 22.5 + } + }, + { + "name": "pillar2", + "from": [7.5, 0.5, 9.5], + "to": [8.5, 6.5, 10.5], + "shade": true, + "faces": { + "north": {"uv": [14, 4, 16, 16], "texture": "#0"}, + "east": {"uv": [14, 4, 16, 16], "texture": "#0"}, + "south": {"uv": [14, 4, 16, 16], "texture": "#0"}, + "west": {"uv": [14, 4, 16, 16], "texture": "#0"}, + "up": {"uv": [14, 4, 16, 16], "texture": "#0"}, + "down": {"uv": [14, 4, 16, 16], "texture": "#0"} + }, + "rotation": { + "origin": [8, 3.5, 10], + "axis": "x", + "angle": -22.5 + } + }, + { + "name": "core", + "from": [7, 7, 7], + "to": [9, 9, 9], + "shade": true, + "faces": { + "north": {"uv": [14, 0, 16, 2], "texture": "#1"}, + "east": {"uv": [14, 0, 16, 2], "texture": "#1"}, + "south": {"uv": [14, 0, 16, 2], "texture": "#1"}, + "west": {"uv": [14, 0, 16, 2], "texture": "#1"}, + "up": {"uv": [14, 0, 16, 2], "texture": "#1"}, + "down": {"uv": [14, 0, 16, 2], "texture": "#1"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/textures/models/MasterRoutingNode.png b/src/main/resources/assets/bloodmagic/textures/models/MasterRoutingNode.png new file mode 100644 index 0000000000000000000000000000000000000000..f41245d48191f8a999179dd2686059c3b57b5bf8 GIT binary patch literal 1734 zcmV;%208hOP)sYvmtwFf z^ypL#rN@}2fnuvpA#PK8a7&v*L&0EZFoe1-#rTkegGk*&PrU_N1)H8696L7M*jmXe z?XI*tv%52IUJtu$>&Q~%=$)3g@ALS*_x*i;?>FM)$&(sDN(pGl7v;?~P5Ifi(;TlY@}uuxpxy2;Jsn`%Sv=1}YmI4|G@DO&@??YA z*~47=)2~@+EOY71-$>IG-}ecE0^M$RU%Y9WbUItK+ij$jlH;{S&b)XIDGfkVE|*zY zSRjfbN~LKEg#yQpeI3wryIo#BeU9U`#mVU^l`_rdlYR56tEkTn-Q%ls8S&U~6j&!!W4V|3kG} zWo>O80Nb`142I)uha^b=s8%bJxr6c&z;Uv)S}ihGhJF-bSrz~p%c2+*5khe2P>m!> z$mesIrZqm@D3uSw?`gwIr9u>iY;SkJkPY|4ODP4poKGCbRI3%V*0`=ity(2xS!6O6 zww<9+m_kZP5EM9cXoga0dRz$)$O|F3dgC&VW3#rlHo6ue=yW>7af~5H78?u(z$lZ~ z*PFb3{jJGb%d(!E?{>Q*7YHF)X)JT?<~vxHH7OR|UYEgeKp2HYQG{*V2q7>GgKIah zu+msY2!Rk1r4-fb%)WWhXw8T}b?THBLOl0Vs+7VojByYL;5pz}I)9#H-<#*`$qSra zT4Jry;Jq6+p1JnV*Kb}d6sy=-n@>KzLu+#lbFa-;`*#7D$$oj)HHK;OsPzbdtm90) z{;c6oO_MJaDHN;d6tdau-T|yMmN{NqT+N2xT$Mze{z zbpE^^YbeexE$Oj_PX+eMcV8o)&#|%5qSM*p{{07NJ*x3S2O1kbN8b=nETPtvMhSN5PEYy zn;TRrRod+~olbk#0DkzDHz!FhU;oXk+`fAE|McFOJiT6z zFzii!r>REklr$a7HLm~pd>+#@7!C(xn|}TNIpr8rI&*L7J~SRj}4IdbF( zwOWnY*~1v7iBc(3Q&W>B2@4}SmeJzenj^|x4GZ{m3_l}d?hHcJo`sFcebnwi0KT|CdDSPalw z<2W`~Z(QDA04t5<$;ZQPE*Lc|S1=3%DGhAfCW@kwC5HpLy)JPav$nQ|Wm#Oi`3@_M c<$VS4UzAc4pnXk|wEzGB07*qoM6N<$g0Tuj;s5{u literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/bloodmagic/textures/models/RoutingNodeBase.png b/src/main/resources/assets/bloodmagic/textures/models/RoutingNodeBase.png new file mode 100644 index 0000000000000000000000000000000000000000..c9a235ad1faadbef776eac6eb4790dc000c50143 GIT binary patch literal 685 zcmV;e0#f~nP)lTB|EXB35>_ha4}zvIMC08gYyManJ`E2JWj0{$zk z`U5Iu+n+|09bHkn3aL~Orb!G0PwW}b_uMY3T8&`Ev%lx+oO7?5PNxE(wFZQyX*oPR zWImshrYRzV)*7Wi1fKtN{L6SZ;qTdBEWXUKecv-24%yimlVurOTU#_uO&ohBlY58= zK@cF)b9Q#laCC?5@h;AVL{Ws+S~Hp4_IM_ga0XbsMVyn6LJ_wWC}$B&|(OPpcdq=rmgZYs^ z-<+Y2j*cXbJy8@9h9Slnlu{H$LEARCz##}-*O8`6PESu2z|Y6W^2h7f=p>n7twkwK z7=}3KNRk8q?>$vr(KHQF6tTa*&wmu_HP#rka{*cl-g~yUM}$GZ)zu|o=%}iiIF9MM zp1$via0qe{)MfM9^K=k>@#S znzFaI$J@8>aL$n~Qf_XR0Q7y2_a0E2;eq$GU5B;Suv{)N#xR?`CrJ|WJV$GT)`qI8 zvDVUc-L37L3;+g$h{a-o3mj!pP*pV`lx4~8&MsM&Gaiosxh3MgM}wkiT8yzQS4$S@ z4RIVZ8jS&%efWTgaCv!k%R)35(6%l1EakLl` TNq(Z$00000NkvXXu0mjfIRH54 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/bloodmagic/textures/models/RoutingNodeInput.png b/src/main/resources/assets/bloodmagic/textures/models/RoutingNodeInput.png new file mode 100644 index 0000000000000000000000000000000000000000..dd0321613212838e83b4772810894f92e3699107 GIT binary patch literal 589 zcmV-T0nDWuLaq@6Gm)vjpM zHlmG-pq0?3T1W;GK_LYq5iNqYts-ipyZQuCVA?Fyv0(0u<2cvrIj2>VH1!R7KET7n z?|oIFP;dYu0yvW7kbFK*xm+fSBAj!G2ugu-u)4ac0KV!0yNg#P{4-1&)V90OK@)@uK-lBSa5fipYx-<&C=c5IOkfq;803&bKxO{sncA!aGsTw z6?L>kO;1ldtpj}Dr&_I1tJSd9kWQy*He<5cEImCT#u%cg*4p3~GBD7O=Xoe4SZhe7 zgea=AySt0l0oGcQB*FK6hKGmw6Y1zUhKM5w0+doT8V!_!N+n{iUPnY>jKx}u*1ApL zZEkKeI5>dT8e=S(j1NFxUmwO8jIjhkhA67Cv-7>Zz!<}WrDe`tyN-y^+1X7lmm>%Q zwC*I85-!f%VD|A7K(!ZmUW%)iFOkh=nSHd#%Y}IwjRqnq;y7kzZk`wS=P<_bHv}M) z@u^fQbcZ3${e9y20B|&$P0pT~qF&!4437h@O`wX!q7zZAyC=yZy}iA3b#+lHmHzq4 b|M|^Nf1=RqM>^CE00000NkvXXu0mjfB7P4U literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/bloodmagic/textures/models/RoutingNodeNormal.png b/src/main/resources/assets/bloodmagic/textures/models/RoutingNodeNormal.png new file mode 100644 index 0000000000000000000000000000000000000000..b15520c718ec8e2effd2efe056de6a5a0bdfc4a8 GIT binary patch literal 524 zcmV+n0`vWeP)u^ycOUCn987#&9^Gsw#TD9&OtYf@d^3LRE3j(KI!8cT@g!eSOW_+Z)bW%V>1O zZ1#lr8O8u8XJ=Yg94taf@6JtbGcK~~QJiV4M7{hwK#u&)+f>l*vtszE1L-&yvJEbF1Fh$u;75fQxi zG)=n;IG3 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/bloodmagic/textures/models/RoutingNodeOutput.png b/src/main/resources/assets/bloodmagic/textures/models/RoutingNodeOutput.png new file mode 100644 index 0000000000000000000000000000000000000000..e3e6a8ab9590889510442ddfcf83eb6a8ac67b3d GIT binary patch literal 572 zcmV-C0>k}@P)QQU~X=X?d@&iIL3RAh@cdB54BoN0c6R#|NQke#Y8r168e7{ryWhOK&t^; zuCl`Iwc&TFaAr)5LL%h!BRysZ=UxtuZE~P!ODRJi4X<)$bq( z3VeF{l3wpL#%RJYq}%NxQXtDRL=?SV&ezp1z+XB5So#pLG~Z$QdWm#@pDgPEo-|E) z^>B*27gL`9m Date: Wed, 21 Jun 2017 19:14:25 -0700 Subject: [PATCH 79/82] Fix ItemStackWrapper ignoring stack's NBT (#1155) who even made this class i mean come on this is such a stupid thing to do like omgwtf what a moron (cherry picked from commit 8c12b48) --- .../java/WayofTime/bloodmagic/api/ItemStackWrapper.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/WayofTime/bloodmagic/api/ItemStackWrapper.java b/src/main/java/WayofTime/bloodmagic/api/ItemStackWrapper.java index b19b4eb2..2cdf5792 100644 --- a/src/main/java/WayofTime/bloodmagic/api/ItemStackWrapper.java +++ b/src/main/java/WayofTime/bloodmagic/api/ItemStackWrapper.java @@ -8,6 +8,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import javax.annotation.Nullable; import java.util.ArrayList; import java.util.List; @@ -51,14 +52,15 @@ public class ItemStackWrapper this(blockStack.getBlock(), 1, blockStack.getMeta()); } + @Nullable public static ItemStackWrapper getHolder(ItemStack stack) { if (stack == null) - { return null; - } - return new ItemStackWrapper(stack.getItem(), stack.stackSize, stack.getItemDamage()); + ItemStackWrapper wrapper = new ItemStackWrapper(stack.getItem(), stack.stackSize, stack.getItemDamage()); + wrapper.setNbtTag(stack.getTagCompound()); + return wrapper; } public ItemStack toStack() From 70253f403034d0e2d831a04a9daf5a5b6ad92551 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Wed, 21 Jun 2017 19:11:08 -0700 Subject: [PATCH 80/82] Fix HarvestHandlerStem not working (#1165) (cherry picked from commit 16d4609) --- .../WayofTime/bloodmagic/ritual/harvest/HarvestHandlerStem.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerStem.java b/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerStem.java index 1d98a5f1..86ebcffe 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerStem.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerStem.java @@ -39,7 +39,7 @@ public class HarvestHandlerStem implements IHarvestHandler BlockPos cropPos = pos; if (HarvestRegistry.getStemCrops().containsKey(blockStack)) { - EnumFacing cropDir = blockStack.getState().getValue(BlockStem.FACING); + EnumFacing cropDir = blockStack.getBlock().getActualState(blockStack.getState(), world, pos).getValue(BlockStem.FACING); if (cropDir != EnumFacing.UP) { From 51f597321d5c6a3b91953ff73e5e183f20cbedf2 Mon Sep 17 00:00:00 2001 From: Graham Hughes Date: Wed, 21 Jun 2017 18:46:42 -0700 Subject: [PATCH 81/82] Add crop support for Pam's Harvestcraft and Roots herbs (#1164) * Add harvest ritual support for Pam's crops. * Add roots crops. * Per @TehNut, use BM instance logger. * Call getMaxAge rather than hardcode 3. (cherry picked from commit 061850e) --- .../harvest/HarvestHandlerPlantable.java | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerPlantable.java b/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerPlantable.java index a5152b27..141c8b56 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerPlantable.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerPlantable.java @@ -1,9 +1,15 @@ package WayofTime.bloodmagic.ritual.harvest; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.InvocationTargetException; + +import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.BlockStack; import WayofTime.bloodmagic.api.iface.IHarvestHandler; import WayofTime.bloodmagic.api.registry.HarvestRegistry; import net.minecraft.block.Block; +import net.minecraft.block.BlockCrops; import net.minecraft.entity.item.EntityItem; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; @@ -13,6 +19,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.IPlantable; import net.minecraftforge.fml.common.Loader; import net.minecraftforge.fml.common.registry.ForgeRegistries; +import net.minecraftforge.fml.relauncher.ReflectionHelper; import java.util.List; @@ -38,6 +45,15 @@ public class HarvestHandlerPlantable implements IHarvestHandler addThirdPartyCrop("extrautils2", "redorchid", 6); addThirdPartyCrop("extrautils2", "enderlily", 7); + + addThirdPartyCrop("roots", "moonglow", 7); + addThirdPartyCrop("roots", "terra_moss", 7); + addThirdPartyCrop("roots", "pereskia", 7); + addThirdPartyCrop("roots", "wildroot", 7); + addThirdPartyCrop("roots", "aubergine", 7); + addThirdPartyCrop("roots", "spirit_herb", 7); + + addPamCrops(); } @Override @@ -98,4 +114,37 @@ public class HarvestHandlerPlantable implements IHarvestHandler if (block != null && block != Blocks.AIR) HarvestRegistry.registerStandardCrop(block, matureMeta); } + + private static void addPamCrops() + { + if (!Loader.isModLoaded("harvestcraft")) + return; + + try { + ClassLoader loader = HarvestHandlerPlantable.class.getClassLoader(); + String className = "com.pam.harvestcraft.blocks.CropRegistry"; + Class registry = ReflectionHelper.getClass(loader, className); + Field names = ReflectionHelper.findField(registry, "cropNames"); + Method getCrop = registry.getMethod("getCrop", String.class); + for (String name : (String[])names.get(null)) { + BlockCrops crop = (BlockCrops) getCrop.invoke(null, name); + HarvestRegistry.registerStandardCrop(crop, crop.getMaxAge()); + } + } catch (NoSuchMethodException e) { + BloodMagic.instance.getLogger().error("HarvestCraft integration cancelled; unable to find crop name mapper"); + return; + } catch (IllegalAccessException e) { + BloodMagic.instance.getLogger().error("HarvestCraft integration cancelled; crop name lookup broke"); + return; + } catch (InvocationTargetException e) { + BloodMagic.instance.getLogger().error("HarvestCraft integration cancelled; crop name lookup broke"); + return; + } catch (ReflectionHelper.UnableToFindClassException e) { + BloodMagic.instance.getLogger().error("HarvestCraft integration cancelled; unable to find crop registry"); + return; + } catch (ReflectionHelper.UnableToFindFieldException e) { + BloodMagic.instance.getLogger().error("HarvestCraft integration cancelled; unable to find crop names in registry"); + return; + } + } } From 730b26b5ac152e0585ceb7322e877783df84f21b Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Wed, 21 Jun 2017 20:10:32 -0700 Subject: [PATCH 82/82] Update changelog + version --- build.gradle | 2 +- changelog.txt | 21 +++++++++++++++++++++ gradle.properties | 2 +- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 4ab8cbfd..696b964c 100644 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ buildscript { plugins { id "net.minecraftforge.gradle.forge" version "2.0.2" - id 'com.matthewprenger.cursegradle' version '1.0.7' + id 'com.matthewprenger.cursegradle' version '1.0.9' id 'io.franzbecker.gradle-lombok' version '1.6' } diff --git a/changelog.txt b/changelog.txt index 183bfbf2..47acaf64 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,24 @@ +------------------------------------------------------ +Version 2.1.11 +------------------------------------------------------ + +- Added support for some modded crops (Untested. Theoretically they work) + - Harvestcraft + - Actually Additions + - Extra Utilities +- Fixed permission level for sub-commands +- Large Bloodstone Bricks should receive 4 from a craft +- Fixed Diamond Meteor giving blocks of diamond +- Dynamically calculate Meteor Weight +- Fixed NPE in fluid filter +- Fixed Blood Tank capacity being reset when the chunk reloaded +- Updated russian translation +- Fixed Rune Type capability not registering on physical client +- Updated Sigil of Holding texture so set color is more visible +- Fixed blocks destroyed by bound tools not storing any NBT data +- Fixed Harvest ritual not working on Melons and Pumpkins +- [API] Methods for removing recipes + ------------------------------------------------------ Version 2.1.10 ------------------------------------------------------ diff --git a/gradle.properties b/gradle.properties index 0dde825d..0549672c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_name=BloodMagic package_group=com.wayoftime.bloodmagic -mod_version=2.1.10 +mod_version=2.1.11 mc_version=1.10.2 forge_version=12.18.3.2221 curse_id=224791